github.com/xmidt-org/webpa-common@v1.11.9/convey/conveyhttp/header_test.go (about) 1 package conveyhttp 2 3 import ( 4 "encoding/base64" 5 "net/http" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 "github.com/xmidt-org/webpa-common/convey" 11 ) 12 13 func testHeaderTranslatorFromHeader(t *testing.T, actualHeaderName, expectedHeaderName string, actualTranslator, expectedTranslator convey.Translator) { 14 var ( 15 assert = assert.New(t) 16 require = require.New(t) 17 header = make(http.Header) 18 headerTranslator = NewHeaderTranslator(actualHeaderName, actualTranslator) 19 ) 20 21 c, err := headerTranslator.FromHeader(header) 22 assert.Empty(c) 23 assert.Error(err) 24 25 value, err := convey.WriteString(expectedTranslator, convey.C{"foo": "bar"}) 26 require.NotEmpty(value) 27 require.NoError(err) 28 29 header.Set(expectedHeaderName, value) 30 c, err = headerTranslator.FromHeader(header) 31 assert.Equal(convey.C{"foo": "bar"}, c) 32 assert.NoError(err) 33 34 header.Add(expectedHeaderName, "something invalid") 35 c, err = headerTranslator.FromHeader(header) 36 assert.Equal(convey.C{"foo": "bar"}, c) 37 assert.NoError(err) 38 } 39 40 func testHeaderTranslatorToHeader(t *testing.T, actualHeaderName, expectedHeaderName string, actualTranslator, expectedTranslator convey.Translator) { 41 var ( 42 assert = assert.New(t) 43 require = require.New(t) 44 header = make(http.Header) 45 headerTranslator = NewHeaderTranslator(actualHeaderName, actualTranslator) 46 ) 47 48 require.NoError(headerTranslator.ToHeader(header, convey.C{"foo": "bar"})) 49 50 value := header.Get(expectedHeaderName) 51 require.NotEmpty(value) 52 53 c, err := convey.ReadString(expectedTranslator, value) 54 assert.Equal(convey.C{"foo": "bar"}, c) 55 assert.NoError(err) 56 } 57 58 func TestHeaderTranslator(t *testing.T) { 59 t.Run("FromHeader", func(t *testing.T) { 60 testHeaderTranslatorFromHeader( 61 t, 62 "", 63 DefaultHeaderName, 64 nil, 65 convey.NewTranslator(nil), 66 ) 67 68 testHeaderTranslatorFromHeader( 69 t, 70 "Some-Header", 71 "Some-Header", 72 nil, 73 convey.NewTranslator(nil), 74 ) 75 76 testHeaderTranslatorFromHeader( 77 t, 78 "", 79 DefaultHeaderName, 80 convey.NewTranslator(base64.RawURLEncoding), 81 convey.NewTranslator(base64.RawURLEncoding), 82 ) 83 84 testHeaderTranslatorFromHeader( 85 t, 86 "Another-Header", 87 "Another-Header", 88 convey.NewTranslator(base64.URLEncoding), 89 convey.NewTranslator(base64.URLEncoding), 90 ) 91 }) 92 93 t.Run("ToHeader", func(t *testing.T) { 94 testHeaderTranslatorToHeader( 95 t, 96 "", 97 DefaultHeaderName, 98 nil, 99 convey.NewTranslator(nil), 100 ) 101 102 testHeaderTranslatorToHeader( 103 t, 104 "Some-Header", 105 "Some-Header", 106 nil, 107 convey.NewTranslator(nil), 108 ) 109 110 testHeaderTranslatorToHeader( 111 t, 112 "", 113 DefaultHeaderName, 114 convey.NewTranslator(base64.RawURLEncoding), 115 convey.NewTranslator(base64.RawURLEncoding), 116 ) 117 118 testHeaderTranslatorToHeader( 119 t, 120 "Another-Header", 121 "Another-Header", 122 convey.NewTranslator(base64.URLEncoding), 123 convey.NewTranslator(base64.URLEncoding), 124 ) 125 }) 126 }