From f1b46f98d343dc5b12928aaa79c39f0c7db8e3af Mon Sep 17 00:00:00 2001 From: Jaime Martinez Date: Thu, 6 Aug 2020 11:23:49 +1000 Subject: [PATCH] Revert "Merge branch 'revert-b3bf3ac4' into 'master'" This reverts commit 84c3866ba69e2ca0ca7d512b09ae66458f5c1c5c, reversing changes made to 185e0a0e5c621f350335495291c535e5c05df89b. --- internal/source/domains.go | 17 ++++++----- internal/source/domains_test.go | 42 +++++++++++++-------------- internal/source/gitlab/gitlab.go | 8 +++++ internal/source/gitlab/gitlab_poll.go | 1 + internal/source/source.go | 1 + internal/source/source_mock.go | 6 ++++ 6 files changed, 46 insertions(+), 29 deletions(-) diff --git a/internal/source/domains.go b/internal/source/domains.go index 77e1aa1d4..ca2a8b6e2 100644 --- a/internal/source/domains.go +++ b/internal/source/domains.go @@ -44,19 +44,22 @@ func NewDomains(config Config) (*Domains, error) { // TODO: choose domain source config via config.DomainConfigSource() // https://gitlab.com/gitlab-org/gitlab/-/issues/217912 + domains := &Domains{ + disk: disk.New(), + } + if len(config.InternalGitLabServerURL()) == 0 || len(config.GitlabAPISecret()) == 0 { - return &Domains{disk: disk.New()}, nil + return domains, nil } - gitlab, err := gitlab.New(config) + glClient, err := gitlab.New(config) if err != nil { return nil, err } - return &Domains{ - gitlab: gitlab, - disk: disk.New(), - }, nil + domains.gitlab = glClient + + return domains, nil } // GetDomain retrieves a domain information from a source. We are using two @@ -85,7 +88,7 @@ func (d *Domains) IsReady() bool { } func (d *Domains) source(domain string) Source { - if d.gitlab == nil { + if d.gitlab == nil || !d.gitlab.IsReady() { return d.disk } diff --git a/internal/source/domains_test.go b/internal/source/domains_test.go index 24008b08e..2382e7566 100644 --- a/internal/source/domains_test.go +++ b/internal/source/domains_test.go @@ -65,24 +65,21 @@ func TestGetDomain(t *testing.T) { newSource.On("GetDomain", testDomain). Return(&domain.Domain{Name: testDomain}, nil). Once() + newSource.On("IsReady").Return(true).Once() defer newSource.AssertExpectations(t) - domains := &Domains{ - disk: disk.New(), - gitlab: newSource, - } + domains := newTestDomains(t, newSource) domains.GetDomain(testDomain) }) t.Run("when requesting a non-test domain", func(t *testing.T) { newSource := NewMockSource() + newSource.On("IsReady").Return(true).Once() + defer newSource.AssertExpectations(t) - domains := &Domains{ - disk: disk.New(), - gitlab: newSource, - } + domains := newTestDomains(t, newSource) domain, err := domains.GetDomain("domain.test.io") @@ -94,10 +91,7 @@ func TestGetDomain(t *testing.T) { newSource := NewMockSource() defer newSource.AssertExpectations(t) - domains := &Domains{ - disk: disk.New(), - gitlab: newSource, - } + domains := newTestDomains(t, newSource) domain, err := domains.GetDomain("pages-broken-poc.gitlab.io") @@ -122,12 +116,11 @@ func TestGetDomain(t *testing.T) { newSource.On("GetDomain", testDomain). Return(&domain.Domain{Name: testDomain}, nil). Once() + newSource.On("IsReady").Return(true).Once() + defer newSource.AssertExpectations(t) - domains := &Domains{ - disk: disk.New(), - gitlab: newSource, - } + domains := newTestDomains(t, newSource) domains.GetDomain(testDomain) }) @@ -156,8 +149,6 @@ func TestGetDomainWithIncrementalrolloutOfGitLabSource(t *testing.T) { // Generates FNV 2643293380, 2643293380 % 100 = 80 domain80 := "test-domain-b.com" - diskSource := disk.New() - gitlabSourceConfig.Domains.Rollout.Percentage = 80 type testDomain struct { @@ -201,12 +192,10 @@ func TestGetDomainWithIncrementalrolloutOfGitLabSource(t *testing.T) { Once() } } + gitlabSource.On("IsReady").Return(true) defer gitlabSource.AssertExpectations(t) - domains := &Domains{ - disk: diskSource, - gitlab: gitlabSource, - } + domains := newTestDomains(t, gitlabSource) gitlabSourceConfig.Domains.Rollout.Stickiness = tc.stickiness @@ -217,3 +206,12 @@ func TestGetDomainWithIncrementalrolloutOfGitLabSource(t *testing.T) { }) } } + +func newTestDomains(t *testing.T, gitlabSource *MockSource) *Domains { + t.Helper() + + return &Domains{ + disk: disk.New(), + gitlab: gitlabSource, + } +} diff --git a/internal/source/gitlab/gitlab.go b/internal/source/gitlab/gitlab.go index 5bacb603c..2635d864c 100644 --- a/internal/source/gitlab/gitlab.go +++ b/internal/source/gitlab/gitlab.go @@ -104,3 +104,11 @@ func (g *Gitlab) Resolve(r *http.Request) (*serving.Request, error) { return &serving.Request{Serving: defaultServing()}, errors.New("could not match lookup path") } + +// IsReady returns the value of Gitlab `isReady` which is updated by `Poll`. +func (g *Gitlab) IsReady() bool { + g.mu.RLock() + defer g.mu.RUnlock() + + return g.isReady +} diff --git a/internal/source/gitlab/gitlab_poll.go b/internal/source/gitlab/gitlab_poll.go index 706448222..9fce7250c 100644 --- a/internal/source/gitlab/gitlab_poll.go +++ b/internal/source/gitlab/gitlab_poll.go @@ -15,6 +15,7 @@ const ( // poll tries to call the /internal/pages/status API endpoint once plus // `retries` every `interval`. +// It updates the `isReady` value when successful. // TODO: Remove in https://gitlab.com/gitlab-org/gitlab/-/issues/218357 func (g *Gitlab) poll(retries int, interval time.Duration) { var err error diff --git a/internal/source/source.go b/internal/source/source.go index 4b43b8f4b..5540066c7 100644 --- a/internal/source/source.go +++ b/internal/source/source.go @@ -5,4 +5,5 @@ import "gitlab.com/gitlab-org/gitlab-pages/internal/domain" // Source represents an abstract interface of a domains configuration source. type Source interface { GetDomain(string) (*domain.Domain, error) + IsReady() bool } diff --git a/internal/source/source_mock.go b/internal/source/source_mock.go index ee24d804e..7c693eb13 100644 --- a/internal/source/source_mock.go +++ b/internal/source/source_mock.go @@ -18,6 +18,12 @@ func (m *MockSource) GetDomain(name string) (*domain.Domain, error) { return args.Get(0).(*domain.Domain), args.Error(1) } +func (m *MockSource) IsReady() bool { + args := m.Called() + + return args.Get(0).(bool) +} + // NewMockSource returns a new Source mock for testing func NewMockSource() *MockSource { return &MockSource{} -- GitLab