123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package httpheaders
- import (
- "fmt"
- "net/http"
- "testing"
- "github.com/stretchr/testify/require"
- )
- func TestCopy(t *testing.T) {
- from := http.Header{
- "X-Test-1": {"value1", "value2"},
- "X-Test-2": {"value3"},
- "X-Test-3": {"value4"},
- "X-Test-4": nil,
- }
- to := http.Header{
- "X-Test-1": {"oldvalue"},
- "X-Test-4": {"value5"},
- "X-Test-5": {"value6"},
- }
- Copy(from, to, []string{"X-Test-1", "x-test-3", "X-Non-Existent"})
- require.Equal(t, []string{"value1", "value2"}, to.Values("X-Test-1"))
- require.Equal(t, []string{"value4"}, to.Values("X-Test-3"))
- require.Equal(t, []string{"value5"}, to.Values("X-Test-4"))
- require.Equal(t, []string{"value6"}, to.Values("X-Test-5"))
- require.Empty(t, to.Values("X-Test-2"))
- }
- func TestCopyAll(t *testing.T) {
- from := http.Header{
- "X-Test-1": {"value1", "value2"},
- "X-Test-2": {"value3"},
- "X-Test-3": nil,
- }
- to := http.Header{
- "X-Test-1": {"oldvalue"},
- "X-Test-3": {"value4"},
- "X-Test-4": {"value5"},
- }
- testCases := []struct {
- overwrite bool
- expected http.Header
- }{
- {
- overwrite: false,
- expected: http.Header{
- "X-Test-1": {"oldvalue"},
- "X-Test-2": {"value3"},
- "X-Test-3": {"value4"},
- "X-Test-4": {"value5"},
- },
- },
- {
- overwrite: true,
- expected: http.Header{
- "X-Test-1": {"value1", "value2"},
- "X-Test-2": {"value3"},
- "X-Test-3": {"value4"},
- "X-Test-4": {"value5"},
- },
- },
- }
- for _, tc := range testCases {
- t.Run(fmt.Sprintf("overwrite=%v", tc.overwrite), func(t *testing.T) {
- toCopy := to.Clone() // Clone to avoid modifying the original 'to' header
- CopyAll(from, toCopy, tc.overwrite)
- require.Equal(t, tc.expected, toCopy)
- })
- }
- }
- func TestCopyFromRequest(t *testing.T) {
- req, err := http.NewRequest("GET", "http://example.com", nil)
- require.NoError(t, err)
- req.Host = "example.com"
- req.Header = http.Header{
- "X-Test-1": {"value1", "value2"},
- "X-Test-2": {"value3"},
- "X-Test-3": nil,
- }
- header := http.Header{
- "X-Test-1": {"oldvalue"},
- "X-Test-3": {"value4"},
- "X-Test-4": {"value5"},
- }
- CopyFromRequest(req, header, []string{"X-Test-1", "x-test-2", "host", "X-Non-Existent"})
- require.Equal(t, []string{"value1", "value2"}, header.Values("X-Test-1"))
- require.Equal(t, []string{"value3"}, header.Values("X-Test-2"))
- require.Equal(t, []string{"value4"}, header.Values("X-Test-3"))
- require.Equal(t, []string{"value5"}, header.Values("X-Test-4"))
- require.Equal(t, []string{"example.com"}, header.Values("Host"))
- }
- func TestCopyToRequest(t *testing.T) {
- req, err := http.NewRequest("GET", "http://example.com", nil)
- require.NoError(t, err)
- req.Header = http.Header{
- "X-Test-1": {"oldvalue"},
- "X-Test-3": {"value4"},
- "X-Test-4": {"value5"},
- }
- header := http.Header{
- "X-Test-1": {"value1", "value2"},
- "X-Test-2": {"value3"},
- "X-Test-3": nil,
- "Host": {"newhost.com"},
- }
- CopyToRequest(header, req)
- require.Equal(t, []string{"value1", "value2"}, req.Header.Values("X-Test-1"))
- require.Equal(t, []string{"value3"}, req.Header.Values("X-Test-2"))
- require.Equal(t, []string{"value4"}, req.Header.Values("X-Test-3"))
- require.Equal(t, []string{"value5"}, req.Header.Values("X-Test-4"))
- require.Equal(t, "newhost.com", req.Host)
- }
|