diff options
Diffstat (limited to 'workhorse/internal/badgateway/roundtripper_test.go')
-rw-r--r-- | workhorse/internal/badgateway/roundtripper_test.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/workhorse/internal/badgateway/roundtripper_test.go b/workhorse/internal/badgateway/roundtripper_test.go new file mode 100644 index 00000000000..fc7132f9bd7 --- /dev/null +++ b/workhorse/internal/badgateway/roundtripper_test.go @@ -0,0 +1,56 @@ +package badgateway + +import ( + "errors" + "io/ioutil" + "net/http" + "testing" + + "github.com/stretchr/testify/require" +) + +type roundtrip502 struct{} + +func (roundtrip502) RoundTrip(*http.Request) (*http.Response, error) { + return nil, errors.New("something went wrong") +} + +func TestErrorPage502(t *testing.T) { + tests := []struct { + name string + devMode bool + contentType string + responseSnippet string + }{ + { + name: "production mode", + contentType: "text/plain", + responseSnippet: "GitLab is not responding", + }, + { + name: "development mode", + devMode: true, + contentType: "text/html", + responseSnippet: "This page will automatically reload", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + req, err := http.NewRequest("GET", "/", nil) + require.NoError(t, err, "build request") + + rt := NewRoundTripper(tc.devMode, roundtrip502{}) + response, err := rt.RoundTrip(req) + require.NoError(t, err, "perform roundtrip") + defer response.Body.Close() + + body, err := ioutil.ReadAll(response.Body) + require.NoError(t, err) + + require.Equal(t, tc.contentType, response.Header.Get("content-type"), "content type") + require.Equal(t, 502, response.StatusCode, "response status") + require.Contains(t, string(body), tc.responseSnippet) + }) + } +} |