wip: added test that fails in the absence of a backoff.
This commit is contained in:
parent
28c2308458
commit
664e09fdbc
2 changed files with 51 additions and 0 deletions
|
|
@ -204,3 +204,29 @@ func TestGetTrustDomain(t *testing.T) {
|
|||
})
|
||||
|
||||
}
|
||||
|
||||
func TestGetAttestationsRetries(t *testing.T) {
|
||||
fetcher := mockDataGenerator{
|
||||
NumAttestations: 5,
|
||||
}
|
||||
l := io.NewTestHandler()
|
||||
|
||||
c := &LiveClient{
|
||||
api: mockAPIClient{
|
||||
OnRESTWithNext: fetcher.FlakyOnRESTSuccessWithNextPageHandler(),
|
||||
},
|
||||
logger: l,
|
||||
}
|
||||
|
||||
attestations, err := c.GetByRepoAndDigest(testRepo, testDigest, DefaultLimit)
|
||||
require.NoError(t, err)
|
||||
|
||||
// assert the error path was executed; because this is a paged
|
||||
// request, it should have errored twice
|
||||
fetcher.AssertNumberOfCalls(t, "FlakyOnRESTSuccessWithNextPage:error", 2)
|
||||
|
||||
// but we still successfully got the right data
|
||||
require.Equal(t, 10, len(attestations))
|
||||
bundle := (attestations)[0].Bundle
|
||||
require.Equal(t, bundle.GetMediaType(), "application/vnd.dev.sigstore.bundle.v0.3+json")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,10 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
cliAPI "github.com/cli/cli/v2/api"
|
||||
ghAPI "github.com/cli/go-gh/v2/pkg/api"
|
||||
"github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
type mockAPIClient struct {
|
||||
|
|
@ -22,6 +26,7 @@ func (m mockAPIClient) REST(hostname, method, p string, body io.Reader, data int
|
|||
}
|
||||
|
||||
type mockDataGenerator struct {
|
||||
mock.Mock
|
||||
NumAttestations int
|
||||
}
|
||||
|
||||
|
|
@ -40,6 +45,26 @@ func (m mockDataGenerator) OnRESTSuccessWithNextPage(hostname, method, p string,
|
|||
return m.OnRESTWithNextSuccessHelper(hostname, method, p, body, data, false)
|
||||
}
|
||||
|
||||
// Returns a func that just calls OnRESTSuccessWithNextPage but half the time
|
||||
// it returns a 500 error.
|
||||
func (m *mockDataGenerator) FlakyOnRESTSuccessWithNextPageHandler() func(hostname, method, p string, body io.Reader, data interface{}) (string, error) {
|
||||
// set up the flake counter
|
||||
m.On("FlakyOnRESTSuccessWithNextPage:error").Return()
|
||||
|
||||
count := 0
|
||||
return func(hostname, method, p string, body io.Reader, data interface{}) (string, error) {
|
||||
if count%2 == 0 {
|
||||
m.MethodCalled("FlakyOnRESTSuccessWithNextPage:error")
|
||||
|
||||
count = count + 1
|
||||
return "", cliAPI.HTTPError{HTTPError: &ghAPI.HTTPError{StatusCode: 500}}
|
||||
} else {
|
||||
count = count + 1
|
||||
return m.OnRESTSuccessWithNextPage(hostname, method, p, body, data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (m mockDataGenerator) OnRESTWithNextSuccessHelper(hostname, method, p string, body io.Reader, data interface{}, hasNext bool) (string, error) {
|
||||
atts := make([]*Attestation, m.NumAttestations)
|
||||
for j := 0; j < m.NumAttestations; j++ {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue