Backport #18451 One of the repeated intermittent failures we see in testing is a failure due to branches not being ready to merge. Prior to the immediate queue implementation we would attempt to flush all the queues and this would prevent the issue. However, the immediate queue is not flushable so the flushall is not successful at preventing this. This PR proposes an alternative solution - wait some time and try again up to 5 times. If this fails then there is a genuine issue and we should fail. Related #17719 Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
parent
69b7776af5
commit
a97c8a8966
1 changed files with 14 additions and 10 deletions
|
@ -8,6 +8,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -262,23 +263,26 @@ func doAPIMergePullRequest(ctx APITestContext, owner, repo string, index int64)
|
||||||
return func(t *testing.T) {
|
return func(t *testing.T) {
|
||||||
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/pulls/%d/merge?token=%s",
|
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/pulls/%d/merge?token=%s",
|
||||||
owner, repo, index, ctx.Token)
|
owner, repo, index, ctx.Token)
|
||||||
req := NewRequestWithJSON(t, http.MethodPost, urlStr, &forms.MergePullRequestForm{
|
|
||||||
MergeMessageField: "doAPIMergePullRequest Merge",
|
|
||||||
Do: string(repo_model.MergeStyleMerge),
|
|
||||||
})
|
|
||||||
|
|
||||||
resp := ctx.Session.MakeRequest(t, req, NoExpectedStatus)
|
var req *http.Request
|
||||||
|
var resp *httptest.ResponseRecorder
|
||||||
|
|
||||||
if resp.Code == http.StatusMethodNotAllowed {
|
for i := 0; i < 6; i++ {
|
||||||
err := api.APIError{}
|
|
||||||
DecodeJSON(t, resp, &err)
|
|
||||||
assert.EqualValues(t, "Please try again later", err.Message)
|
|
||||||
queue.GetManager().FlushAll(context.Background(), 5*time.Second)
|
|
||||||
req = NewRequestWithJSON(t, http.MethodPost, urlStr, &forms.MergePullRequestForm{
|
req = NewRequestWithJSON(t, http.MethodPost, urlStr, &forms.MergePullRequestForm{
|
||||||
MergeMessageField: "doAPIMergePullRequest Merge",
|
MergeMessageField: "doAPIMergePullRequest Merge",
|
||||||
Do: string(repo_model.MergeStyleMerge),
|
Do: string(repo_model.MergeStyleMerge),
|
||||||
})
|
})
|
||||||
|
|
||||||
resp = ctx.Session.MakeRequest(t, req, NoExpectedStatus)
|
resp = ctx.Session.MakeRequest(t, req, NoExpectedStatus)
|
||||||
|
|
||||||
|
if resp.Code != http.StatusMethodNotAllowed {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
err := api.APIError{}
|
||||||
|
DecodeJSON(t, resp, &err)
|
||||||
|
assert.EqualValues(t, "Please try again later", err.Message)
|
||||||
|
queue.GetManager().FlushAll(context.Background(), 5*time.Second)
|
||||||
|
<-time.After(1 * time.Second)
|
||||||
}
|
}
|
||||||
|
|
||||||
expected := ctx.ExpectedCode
|
expected := ctx.ExpectedCode
|
||||||
|
|
Reference in a new issue