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

Function TestReverseProxy

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

Source from the content-addressed store, hash-verified

19)
20
21func TestReverseProxy(t *testing.T) {
22 const backendResponse = "I am the backend"
23 const backendStatus = 404
24 backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
25 if len(r.TransferEncoding) > 0 {
26 t.Errorf("backend got unexpected TransferEncoding: %v", r.TransferEncoding)
27 }
28 if r.Header.Get("X-Forwarded-For") == "" {
29 t.Errorf("didn't get X-Forwarded-For header")
30 }
31 if c := r.Header.Get("Connection"); c != "" {
32 t.Errorf("handler got Connection header value %q", c)
33 }
34 if c := r.Header.Get("Upgrade"); c != "" {
35 t.Errorf("handler got Upgrade header value %q", c)
36 }
37 if g, e := r.Host, "some-name"; g == e {
38 t.Errorf("backend got original Host header %q, expected over-written", g)
39 }
40 if acceptEncoding := r.Header.Get("Accept-Encoding"); acceptEncoding != "identity" {
41 t.Errorf(
42 "backend got unexpected or no Accept-Encoding header: %q, expected \"identity\"",
43 acceptEncoding,
44 )
45 }
46 w.Header().Set("X-Foo", "bar")
47 http.SetCookie(w, &http.Cookie{Name: "flavor", Value: "chocolateChip"})
48 w.WriteHeader(backendStatus)
49 w.Write([]byte(backendResponse))
50 }))
51 defer backend.Close()
52 backendURL, err := url.Parse(backend.URL)
53 if err != nil {
54 t.Fatal(err)
55 }
56 proxyHandler := NewSingleHostReverseProxy(backendURL, inject.CopyInject{})
57 frontend := httptest.NewServer(proxyHandler)
58 defer frontend.Close()
59
60 getReq, _ := http.NewRequest("GET", frontend.URL, nil)
61 getReq.Host = "some-name"
62 getReq.Header.Set("Connection", "close")
63 getReq.Header.Set("Upgrade", "foo")
64 getReq.Close = true
65 res, err := http.DefaultClient.Do(getReq)
66 if err != nil {
67 t.Fatalf("Get: %v", err)
68 }
69 if g, e := res.StatusCode, backendStatus; g != e {
70 t.Errorf("got res.StatusCode %d; expected %d", g, e)
71 }
72 if g, e := res.Header.Get("X-Foo"), "bar"; g != e {
73 t.Errorf("got X-Foo %q; expected %q", g, e)
74 }
75 if g, e := len(res.Header["Set-Cookie"]), 1; g != e {
76 t.Fatalf("got %d SetCookies, want %d", g, e)
77 }
78 if cookie := res.Cookies()[0]; cookie.Name != "flavor" {

Callers

nothing calls this directly

Calls 5

HeaderMethod · 0.80
WriteHeaderMethod · 0.80
WriteMethod · 0.45
CloseMethod · 0.45

Tested by

no test coverage detected