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  }