diff options
-rw-r--r-- | .gitlab/ci/test.yml | 2 | ||||
-rw-r--r-- | Makefile.util.mk | 2 | ||||
-rw-r--r-- | test/acceptance/helpers_test.go | 26 | ||||
-rw-r--r-- | test/acceptance/serving_test.go | 16 |
4 files changed, 36 insertions, 10 deletions
diff --git a/.gitlab/ci/test.yml b/.gitlab/ci/test.yml index 4ca9a29e..d2ff96d9 100644 --- a/.gitlab/ci/test.yml +++ b/.gitlab/ci/test.yml @@ -52,7 +52,9 @@ race: extends: .tests-common script: - echo "Running race detector" + - make setup - make race + - make junit-report cover: extends: .tests-common diff --git a/Makefile.util.mk b/Makefile.util.mk index 951c0ba2..a2d7b838 100644 --- a/Makefile.util.mk +++ b/Makefile.util.mk @@ -12,7 +12,7 @@ test: .GOPATH/.ok gitlab-pages go test $(if $V,-v) ./... ${ARGS} 2>&1 | tee tests.out race: .GOPATH/.ok gitlab-pages - CGO_ENABLED=1 go test -race $(if $V,-v) $(allpackages) + CGO_ENABLED=1 go test -race $(if $V,-v) $(allpackages) 2>&1 | tee tests.out acceptance: .GOPATH/.ok gitlab-pages go test $(if $V,-v) ./test/acceptance ${ARGS} 2>&1 | tee tests.out diff --git a/test/acceptance/helpers_test.go b/test/acceptance/helpers_test.go index 1ece8148..d2c3c31e 100644 --- a/test/acceptance/helpers_test.go +++ b/test/acceptance/helpers_test.go @@ -353,6 +353,13 @@ func getPagesArgs(t *testing.T, listeners []ListenSpec, promPort string, extraAr args = append(args, "-pages-root", "../../shared/pages") } + // default resolver configuration to execute tests faster + if !contains(extraArgs, "-gitlab-retrieval-") { + args = append(args, "-gitlab-retrieval-timeout", "50ms", + "-gitlab-retrieval-interval", "10ms", + "-gitlab-retrieval-retries", "1") + } + if promPort != "" { args = append(args, "-metrics-address", promPort) } @@ -365,7 +372,7 @@ func getPagesArgs(t *testing.T, listeners []ListenSpec, promPort string, extraAr func contains(slice []string, s string) bool { for _, e := range slice { - if e == s { + if strings.Contains(e, s) { return true } } @@ -538,6 +545,7 @@ func waitForRoundtrips(t *testing.T, listeners []ListenSpec, timeout time.Durati } type stubOpts struct { + m sync.RWMutex apiCalled bool statusReadyCount int statusHandler http.HandlerFunc @@ -578,6 +586,20 @@ func NewGitlabDomainsSourceStub(t *testing.T, opts *stubOpts) *httptest.Server { return httptest.NewServer(mux) } +func (o *stubOpts) setAPICalled(v bool) { + o.m.Lock() + defer o.m.Unlock() + + o.apiCalled = v +} + +func (o *stubOpts) getAPICalled() bool { + o.m.RLock() + defer o.m.RUnlock() + + return o.apiCalled +} + func lookupFromFile(t *testing.T, domain string, w http.ResponseWriter) { fixture, err := os.Open("../../shared/lookups/" + domain + ".json") if os.IsNotExist(err) { @@ -605,7 +627,7 @@ func defaultAPIHandler(t *testing.T, opts *stubOpts) http.HandlerFunc { return } - opts.apiCalled = true + opts.setAPICalled(true) if opts.pagesStatusResponse != 0 { w.WriteHeader(opts.pagesStatusResponse) diff --git a/test/acceptance/serving_test.go b/test/acceptance/serving_test.go index 07dc0345..7824dda9 100644 --- a/test/acceptance/serving_test.go +++ b/test/acceptance/serving_test.go @@ -527,7 +527,7 @@ func TestDomainsSource(t *testing.T) { require.Equal(t, tt.want.content, string(body), "content mismatch") } - require.Equal(t, tt.want.apiCalled, opts.apiCalled, "api called mismatch") + require.Equal(t, tt.want.apiCalled, opts.getAPICalled(), "api called mismatch") }) } } @@ -553,17 +553,17 @@ func TestGitLabSourceBecomesUnauthorized(t *testing.T) { failedResponse, err := GetPageFromListener(t, httpListener, domain, "/") require.NoError(t, err) - require.True(t, opts.apiCalled, "API should be called") + require.True(t, opts.getAPICalled(), "API should be called") require.Equal(t, http.StatusBadGateway, failedResponse.StatusCode, "first response should fail with 502") // make request again - opts.apiCalled = false + opts.setAPICalled(false) response, err := GetPageFromListener(t, httpListener, domain, "/") require.NoError(t, err) defer response.Body.Close() - require.False(t, opts.apiCalled, "API should not be called after the first failure") + require.False(t, opts.getAPICalled(), "API should not be called after the first failure") require.Equal(t, http.StatusOK, response.StatusCode, "second response should succeed") body, err := ioutil.ReadAll(response.Body) @@ -624,7 +624,7 @@ func TestDomainResolverError(t *testing.T) { return } - opts.apiCalled = true + opts.setAPICalled(true) if test.panic { panic("server failed") } @@ -639,7 +639,8 @@ func TestDomainResolverError(t *testing.T) { pagesArgs := []string{"-gitlab-server", source.URL, "-api-secret-key", gitLabAPISecretKey, "-domain-config-source", "gitlab"} if test.timeout != 0 { - pagesArgs = append(pagesArgs, "-gitlab-client-http-timeout", test.timeout.String()) + pagesArgs = append(pagesArgs, "-gitlab-client-http-timeout", test.timeout.String(), + "-gitlab-retrieval-timeout", "200ms", "-gitlab-retrieval-interval", "200ms", "-gitlab-retrieval-retries", "1") } teardown := RunPagesProcessWithEnvs(t, true, *pagesBinary, listeners, "", []string{}, pagesArgs...) @@ -649,7 +650,8 @@ func TestDomainResolverError(t *testing.T) { require.NoError(t, err) defer response.Body.Close() - require.True(t, opts.apiCalled, "api must have been called") + require.True(t, opts.getAPICalled(), "api must have been called") + require.Equal(t, http.StatusBadGateway, response.StatusCode) body, err := ioutil.ReadAll(response.Body) |