From 11885daaa0397d02d7acd559234b098dfd239d49 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Thu, 16 Jan 2020 16:15:44 +0100 Subject: [PATCH] tests: configure github remaining limit + read token (#9800) * ci: configure remaining github limmit * prepend with github since package is common to all migrations * add RefreshRate * Update github.go * add missing space * go fmt * Read env variable GITHUB_READ_TOKEN for token * Update .drone.yml --- .drone.yml | 2 ++ modules/migrations/github.go | 17 ++++++++++++++--- modules/migrations/github_test.go | 7 ++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 11dea174b..3e02a47c4 100644 --- a/.drone.yml +++ b/.drone.yml @@ -122,6 +122,8 @@ steps: environment: GOPROXY: off TAGS: bindata sqlite sqlite_unlock_notify + GITHUB_READ_TOKEN: + from_secret: github_read_token when: branch: - master diff --git a/modules/migrations/github.go b/modules/migrations/github.go index 17e49d90d..a99b05e11 100644 --- a/modules/migrations/github.go +++ b/modules/migrations/github.go @@ -24,6 +24,8 @@ import ( var ( _ base.Downloader = &GithubDownloaderV3{} _ base.DownloaderFactory = &GithubDownloaderV3Factory{} + // GithubLimitRateRemaining limit to wait for new rate to apply + GithubLimitRateRemaining = 0 ) func init() { @@ -115,7 +117,7 @@ func (g *GithubDownloaderV3) SetContext(ctx context.Context) { } func (g *GithubDownloaderV3) sleep() { - for g.rate != nil && g.rate.Remaining <= 0 { + for g.rate != nil && g.rate.Remaining <= GithubLimitRateRemaining { timer := time.NewTimer(time.Until(g.rate.Reset.Time)) select { case <-g.ctx.Done(): @@ -124,13 +126,22 @@ func (g *GithubDownloaderV3) sleep() { case <-timer.C: } - rates, _, err := g.client.RateLimits(g.ctx) + err := g.RefreshRate() if err != nil { log.Error("g.client.RateLimits: %s", err) } + } +} - g.rate = rates.GetCore() +// RefreshRate update the current rate (doesn't count in rate limit) +func (g *GithubDownloaderV3) RefreshRate() error { + rates, _, err := g.client.RateLimits(g.ctx) + if err != nil { + return err } + + g.rate = rates.GetCore() + return nil } // GetRepoInfo returns a repository information diff --git a/modules/migrations/github_test.go b/modules/migrations/github_test.go index 10943e401..9023e2ac4 100644 --- a/modules/migrations/github_test.go +++ b/modules/migrations/github_test.go @@ -6,6 +6,7 @@ package migrations import ( + "os" "testing" "time" @@ -62,7 +63,11 @@ func assertLabelEqual(t *testing.T, name, color, description string, label *base } func TestGitHubDownloadRepo(t *testing.T) { - downloader := NewGithubDownloaderV3("", "", "go-gitea", "test_repo") + GithubLimitRateRemaining = 3 //Wait at 3 remaining since we could have 3 CI in // + downloader := NewGithubDownloaderV3(os.Getenv("GITHUB_READ_TOKEN"), "", "go-gitea", "test_repo") + err := downloader.RefreshRate() + assert.NoError(t, err) + repo, err := downloader.GetRepoInfo() assert.NoError(t, err) assert.EqualValues(t, &base.Repository{