mirror of
https://github.com/imgproxy/imgproxy.git
synced 2025-09-30 14:06:48 +02:00
131 lines
3.2 KiB
Go
131 lines
3.2 KiB
Go
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)
|
|
}
|