( t *testing.T, routes string, params Params, input *url.URL, expectedStatus int, expectedHeader http.Header, )
| 53 | } |
| 54 | |
| 55 | func testLoopback( |
| 56 | t *testing.T, |
| 57 | routes string, |
| 58 | params Params, |
| 59 | input *url.URL, |
| 60 | expectedStatus int, |
| 61 | expectedHeader http.Header, |
| 62 | ) { |
| 63 | var backend *httptest.Server |
| 64 | backend = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 65 | if params.Flags.PreserveOriginal() { |
| 66 | if r.Header.Get("X-Test-Preserved") != "test-value" { |
| 67 | t.Error("failed to preserve original request") |
| 68 | return |
| 69 | } |
| 70 | |
| 71 | w.Header().Set("X-Test", "test-value") |
| 72 | } |
| 73 | |
| 74 | if params.Flags.PreserveHost() && r.Host != "www.example.org" { |
| 75 | t.Error("failed to preserve host") |
| 76 | } else if !params.Flags.PreserveHost() { |
| 77 | u, err := url.Parse(backend.URL) |
| 78 | if err != nil { |
| 79 | t.Error(err) |
| 80 | return |
| 81 | } |
| 82 | |
| 83 | if r.Host != u.Host { |
| 84 | t.Error("failed to set host") |
| 85 | return |
| 86 | } |
| 87 | } |
| 88 | |
| 89 | w.Header().Set("X-Backend-Done", "true") |
| 90 | })) |
| 91 | defer backend.Close() |
| 92 | |
| 93 | routes = strings.ReplaceAll(routes, "$backend", backend.URL) |
| 94 | |
| 95 | fr := builtin.MakeRegistry() |
| 96 | fr.Register(&preserveOriginalSpec{}) |
| 97 | fr.Register(&returnPathParam{}) |
| 98 | fr.Register(&setState{}) |
| 99 | fr.Register(&returnState{}) |
| 100 | fr.Register(builtin.NewLoopbackIfStatus()) |
| 101 | |
| 102 | p, err := newTestProxyWithFiltersAndParams(fr, routes, params, nil) |
| 103 | if err != nil { |
| 104 | t.Error(err) |
| 105 | return |
| 106 | } |
| 107 | |
| 108 | defer p.close() |
| 109 | |
| 110 | var u *url.URL |
| 111 | if input == nil { |
| 112 | u, err = url.ParseRequestURI("https://www.example.org/test/path") |
no test coverage detected
searching dependent graphs…