MCPcopy
hub / github.com/cortesi/devd / TestXForwardedFor

Function TestXForwardedFor

reverseproxy/reverseproxy_test.go:87–126  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

85}
86
87func TestXForwardedFor(t *testing.T) {
88 const prevForwardedFor = "client ip"
89 const backendResponse = "I am the backend"
90 const backendStatus = 404
91 backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
92 if r.Header.Get("X-Forwarded-For") == "" {
93 t.Errorf("didn't get X-Forwarded-For header")
94 }
95 if !strings.Contains(r.Header.Get("X-Forwarded-For"), prevForwardedFor) {
96 t.Errorf("X-Forwarded-For didn't contain prior data")
97 }
98 w.WriteHeader(backendStatus)
99 w.Write([]byte(backendResponse))
100 }))
101 defer backend.Close()
102 backendURL, err := url.Parse(backend.URL)
103 if err != nil {
104 t.Fatal(err)
105 }
106 proxyHandler := NewSingleHostReverseProxy(backendURL, inject.CopyInject{})
107 frontend := httptest.NewServer(proxyHandler)
108 defer frontend.Close()
109
110 getReq, _ := http.NewRequest("GET", frontend.URL, nil)
111 getReq.Host = "some-name"
112 getReq.Header.Set("Connection", "close")
113 getReq.Header.Set("X-Forwarded-For", prevForwardedFor)
114 getReq.Close = true
115 res, err := http.DefaultClient.Do(getReq)
116 if err != nil {
117 t.Fatalf("Get: %v", err)
118 }
119 if g, e := res.StatusCode, backendStatus; g != e {
120 t.Errorf("got res.StatusCode %d; expected %d", g, e)
121 }
122 bodyBytes, _ := ioutil.ReadAll(res.Body)
123 if g, e := string(bodyBytes), backendResponse; g != e {
124 t.Errorf("got body %q; expected %q", g, e)
125 }
126}
127
128var proxyQueryTests = []struct {
129 baseSuffix string // suffix to add to backend URL

Callers

nothing calls this directly

Calls 4

WriteHeaderMethod · 0.80
WriteMethod · 0.45
CloseMethod · 0.45

Tested by

no test coverage detected