diff options
author | Jaime Martinez <jmartinez@gitlab.com> | 2020-08-06 04:23:49 +0300 |
---|---|---|
committer | Jaime Martinez <jmartinez@gitlab.com> | 2020-08-06 04:23:49 +0300 |
commit | f1b46f98d343dc5b12928aaa79c39f0c7db8e3af (patch) | |
tree | 53210f593dcf59f9975b4f48a8738e9ecb14de74 | |
parent | b2922c74ae775f4a56c784572c6672fa2c7332fa (diff) |
Revert "Merge branch 'revert-b3bf3ac4' into 'master'"revert-84c3866
This reverts commit 84c3866ba69e2ca0ca7d512b09ae66458f5c1c5c, reversing
changes made to 185e0a0e5c621f350335495291c535e5c05df89b.
-rw-r--r-- | internal/source/domains.go | 17 | ||||
-rw-r--r-- | internal/source/domains_test.go | 42 | ||||
-rw-r--r-- | internal/source/gitlab/gitlab.go | 8 | ||||
-rw-r--r-- | internal/source/gitlab/gitlab_poll.go | 1 | ||||
-rw-r--r-- | internal/source/source.go | 1 | ||||
-rw-r--r-- | 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 77e1aa1d..ca2a8b6e 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 24008b08..2382e756 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 5bacb603..2635d864 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 70644822..9fce7250 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 4b43b8f4..5540066c 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 ee24d804..7c693eb1 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{} |