Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Eastwood <contact@ericeastwood.com>2020-08-28 00:26:23 +0300
committerVladimir Shushlin <v.shushlin@gmail.com>2020-09-15 11:35:23 +0300
commit7914c901b00cd3568ef4435ff79aa1bbea8aa4b6 (patch)
tree995d157f186878c2ed804e40269b78f149e81b93 /acceptance_test.go
parent0abe5dd1422e2fb86cda77ca9151df157cbcfd8b (diff)
Add support for redirects24-add-redirects
Fix https://gitlab.com/gitlab-org/gitlab-pages/-/issues/24
Diffstat (limited to 'acceptance_test.go')
-rw-r--r--acceptance_test.go106
1 files changed, 106 insertions, 0 deletions
diff --git a/acceptance_test.go b/acceptance_test.go
index c4383c65..f8c2a546 100644
--- a/acceptance_test.go
+++ b/acceptance_test.go
@@ -485,6 +485,112 @@ func TestPrometheusMetricsCanBeScraped(t *testing.T) {
// require.Contains(t, string(body), `gitlab_pages_httprange_zip_reader_requests_duration{status_code="200"}`)
}
+func TestDisabledRedirects(t *testing.T) {
+ skipUnlessEnabled(t)
+
+ teardown := RunPagesProcessWithEnvs(t, true, *pagesBinary, listeners, "", []string{"FF_ENABLE_REDIRECTS=false"})
+ defer teardown()
+
+ // Test that redirects status page is forbidden
+ rsp, err := GetPageFromListener(t, httpListener, "group.redirects.gitlab-example.com", "/project-redirects/_redirects")
+ require.NoError(t, err)
+ defer rsp.Body.Close()
+
+ require.Equal(t, http.StatusForbidden, rsp.StatusCode)
+
+ // Test that redirects are disabled
+ rsp, err = GetRedirectPage(t, httpListener, "group.redirects.gitlab-example.com", "/project-redirects/redirect-portal.html")
+ require.NoError(t, err)
+ defer rsp.Body.Close()
+
+ require.Equal(t, http.StatusNotFound, rsp.StatusCode)
+}
+
+func TestRedirectStatusPage(t *testing.T) {
+ skipUnlessEnabled(t)
+
+ teardown := RunPagesProcessWithEnvs(t, true, *pagesBinary, listeners, "", []string{"FF_ENABLE_REDIRECTS=true"})
+ defer teardown()
+
+ rsp, err := GetPageFromListener(t, httpListener, "group.redirects.gitlab-example.com", "/project-redirects/_redirects")
+ require.NoError(t, err)
+
+ body, err := ioutil.ReadAll(rsp.Body)
+ require.NoError(t, err)
+ defer rsp.Body.Close()
+
+ require.Contains(t, string(body), "11 rules")
+ require.Equal(t, http.StatusOK, rsp.StatusCode)
+}
+
+func TestRedirect(t *testing.T) {
+ skipUnlessEnabled(t)
+
+ teardown := RunPagesProcessWithEnvs(t, true, *pagesBinary, listeners, "", []string{"FF_ENABLE_REDIRECTS=true"})
+ defer teardown()
+
+ // Test that serving a file still works with redirects enabled
+ rsp, err := GetRedirectPage(t, httpListener, "group.redirects.gitlab-example.com", "/project-redirects/index.html")
+ require.NoError(t, err)
+ defer rsp.Body.Close()
+
+ require.Equal(t, http.StatusOK, rsp.StatusCode)
+
+ tests := []struct {
+ host string
+ path string
+ expectedStatus int
+ expectedLocation string
+ }{
+ // Project domain
+ {
+ host: "group.redirects.gitlab-example.com",
+ path: "/project-redirects/redirect-portal.html",
+ expectedStatus: http.StatusFound,
+ expectedLocation: "/project-redirects/magic-land.html",
+ },
+ // Make sure invalid rule does not redirect
+ {
+ host: "group.redirects.gitlab-example.com",
+ path: "/project-redirects/goto-domain.html",
+ expectedStatus: http.StatusNotFound,
+ expectedLocation: "",
+ },
+ // Actual file on disk should override any redirects that match
+ {
+ host: "group.redirects.gitlab-example.com",
+ path: "/project-redirects/file-override.html",
+ expectedStatus: http.StatusOK,
+ expectedLocation: "",
+ },
+ // Group-level domain
+ {
+ host: "group.redirects.gitlab-example.com",
+ path: "/redirect-portal.html",
+ expectedStatus: http.StatusFound,
+ expectedLocation: "/magic-land.html",
+ },
+ // Custom domain
+ {
+ host: "redirects.custom-domain.com",
+ path: "/redirect-portal.html",
+ expectedStatus: http.StatusFound,
+ expectedLocation: "/magic-land.html",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(fmt.Sprintf("%s%s -> %s (%d)", tt.host, tt.path, tt.expectedLocation, tt.expectedStatus), func(t *testing.T) {
+ rsp, err := GetRedirectPage(t, httpListener, tt.host, tt.path)
+ require.NoError(t, err)
+ defer rsp.Body.Close()
+
+ require.Equal(t, tt.expectedLocation, rsp.Header.Get("Location"))
+ require.Equal(t, tt.expectedStatus, rsp.StatusCode)
+ })
+ }
+}
+
func TestStatusPage(t *testing.T) {
skipUnlessEnabled(t)
teardown := RunPagesProcess(t, *pagesBinary, listeners, "", "-pages-status=/@statuscheck")