MCPcopy
hub / github.com/grafana/dskit / TestHttpOverProxyProtocol

Function TestHttpOverProxyProtocol

server/server_test.go:925–992  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

923}
924
925func TestHttpOverProxyProtocol(t *testing.T) {
926 prometheus.DefaultRegisterer = prometheus.NewRegistry()
927
928 var cfg Config
929 cfg.RegisterFlags(flag.NewFlagSet("", flag.ExitOnError))
930 cfg.ProxyProtocolEnabled = true
931 setAutoAssignedPorts(DefaultNetwork, &cfg)
932
933 server, err := New(cfg)
934 require.NoError(t, err)
935 defer server.Shutdown()
936
937 server.HTTP.HandleFunc("/test-proxy-proto", func(w http.ResponseWriter, r *http.Request) {
938 ip, _, err := net.SplitHostPort(r.RemoteAddr)
939 require.NoError(t, err)
940 _, err = w.Write([]byte(ip))
941 require.NoError(t, err)
942 })
943
944 go func() {
945 require.NoError(t, server.Run())
946 }()
947
948 t.Run("good PROXY header", func(t *testing.T) {
949 fakeSourceIP := "1.2.3.4"
950 proxyHeader := fmt.Sprintf("PROXY TCP4 %s 192.168.0.1 51234 80\r\n", fakeSourceIP)
951 client := &http.Client{
952 Transport: &http.Transport{
953 DialContext: proxyDialer(proxyHeader),
954 },
955 }
956
957 res, err := client.Get(httpTarget(server, "/test-proxy-proto"))
958 require.NoError(t, err)
959 defer res.Body.Close()
960 require.Equal(t, res.StatusCode, http.StatusOK)
961
962 body, err := io.ReadAll(res.Body)
963 require.NoError(t, err)
964 require.Equal(t, []byte(fakeSourceIP), body)
965 })
966
967 t.Run("malformed PROXY header", func(t *testing.T) {
968 proxyHeader := "badPROXY TCP4 1.2.3.4 192.168.0.1 51234 80\r\n"
969 client := &http.Client{
970 Transport: &http.Transport{
971 DialContext: proxyDialer(proxyHeader),
972 },
973 }
974
975 res, err := client.Get(httpTarget(server, "/test-proxy-proto"))
976 require.NoError(t, err)
977 defer res.Body.Close()
978 require.Equal(t, http.StatusBadRequest, res.StatusCode)
979 })
980
981 t.Run("no PROXY header", func(t *testing.T) {
982 client := &http.Client{}

Callers

nothing calls this directly

Calls 11

RegisterFlagsMethod · 0.95
GetMethod · 0.95
setAutoAssignedPortsFunction · 0.85
proxyDialerFunction · 0.85
httpTargetFunction · 0.85
RunMethod · 0.80
NewFunction · 0.70
CloseMethod · 0.65
ShutdownMethod · 0.45
WriteMethod · 0.45
EqualMethod · 0.45

Tested by

no test coverage detected