Remove production waits from deterministic tests
This commit is contained in:
@@ -24,6 +24,7 @@ type Client struct {
|
|||||||
TokenEnv string
|
TokenEnv string
|
||||||
Timeout time.Duration
|
Timeout time.Duration
|
||||||
newUploadClient uploadClientFactory
|
newUploadClient uploadClientFactory
|
||||||
|
pollWait func(context.Context, time.Duration) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type UploadRequest struct {
|
type UploadRequest struct {
|
||||||
@@ -126,6 +127,7 @@ func newClient(cfg config.DistributorNotifyConfig, factory uploadClientFactory)
|
|||||||
TokenEnv: cfg.TokenEnv,
|
TokenEnv: cfg.TokenEnv,
|
||||||
Timeout: cfg.Timeout,
|
Timeout: cfg.Timeout,
|
||||||
newUploadClient: factory,
|
newUploadClient: factory,
|
||||||
|
pollWait: waitForPoll,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +209,11 @@ func (c *Client) Upload(ctx context.Context, req UploadRequest) (UploadResult, e
|
|||||||
Status: result.Status,
|
Status: result.Status,
|
||||||
UploadStatus: result.Status,
|
UploadStatus: result.Status,
|
||||||
}
|
}
|
||||||
status, statusErr := waitForRunStatus(runCtx, uploadClient, result.RunID, c.Timeout > 0)
|
pollWait := c.pollWait
|
||||||
|
if pollWait == nil {
|
||||||
|
pollWait = waitForPoll
|
||||||
|
}
|
||||||
|
status, statusErr := waitForRunStatus(runCtx, uploadClient, result.RunID, c.Timeout > 0, pollWait)
|
||||||
status = sanitizeRunStatus(status)
|
status = sanitizeRunStatus(status)
|
||||||
if status.RunID != "" || status.Status != "" {
|
if status.RunID != "" || status.Status != "" {
|
||||||
uploadResult.RunStatus = &RunStatus{
|
uploadResult.RunStatus = &RunStatus{
|
||||||
@@ -234,19 +240,15 @@ func (c *Client) Upload(ctx context.Context, req UploadRequest) (UploadResult, e
|
|||||||
return uploadResult, nil
|
return uploadResult, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func waitForRunStatus(ctx context.Context, client uploadClient, runID string, poll bool) (runStatus, error) {
|
func waitForRunStatus(ctx context.Context, client uploadClient, runID string, poll bool, wait func(context.Context, time.Duration) error) (runStatus, error) {
|
||||||
status, err := client.Status(ctx, runID)
|
status, err := client.Status(ctx, runID)
|
||||||
if err != nil || terminalRunStatus(status.Status) || !poll {
|
if err != nil || terminalRunStatus(status.Status) || !poll {
|
||||||
return status, err
|
return status, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
timer := time.NewTimer(statusPollInterval)
|
if err := wait(ctx, statusPollInterval); err != nil {
|
||||||
select {
|
return status, fmt.Errorf("distributor run %q did not reach terminal status before timeout: %w", runID, err)
|
||||||
case <-ctx.Done():
|
|
||||||
timer.Stop()
|
|
||||||
return status, fmt.Errorf("distributor run %q did not reach terminal status before timeout: %w", runID, ctx.Err())
|
|
||||||
case <-timer.C:
|
|
||||||
}
|
}
|
||||||
|
|
||||||
next, err := client.Status(ctx, runID)
|
next, err := client.Status(ctx, runID)
|
||||||
@@ -260,6 +262,17 @@ func waitForRunStatus(ctx context.Context, client uploadClient, runID string, po
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func waitForPoll(ctx context.Context, interval time.Duration) error {
|
||||||
|
timer := time.NewTimer(interval)
|
||||||
|
defer timer.Stop()
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return ctx.Err()
|
||||||
|
case <-timer.C:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func terminalRunStatus(status string) bool {
|
func terminalRunStatus(status string) bool {
|
||||||
return status == "succeeded" || status == "failed"
|
return status == "succeeded" || status == "failed"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,6 +242,7 @@ func TestUploadPollsUntilTerminalStatus(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
client := newClient(cfg, factory.newClient)
|
client := newClient(cfg, factory.newClient)
|
||||||
|
client.pollWait = func(context.Context, time.Duration) error { return nil }
|
||||||
|
|
||||||
result, err := client.Upload(context.Background(), validUploadRequest())
|
result, err := client.Upload(context.Background(), validUploadRequest())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -221,15 +221,6 @@ func TestSPCOutlookBackgroundDefinitionAssetRecordsProvenance(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSPCRiskDigestDefaultPolicyConstants(t *testing.T) {
|
|
||||||
if defaultSPCRiskDigestOutlookType != "categorical" {
|
|
||||||
t.Fatalf("defaultSPCRiskDigestOutlookType = %q, want categorical", defaultSPCRiskDigestOutlookType)
|
|
||||||
}
|
|
||||||
if defaultSPCRiskDigestMinimumSeverityRank != 3 {
|
|
||||||
t.Fatalf("defaultSPCRiskDigestMinimumSeverityRank = %d, want 3", defaultSPCRiskDigestMinimumSeverityRank)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSPCConvectiveOutlooksRiskDigestFilters(t *testing.T) {
|
func TestSPCConvectiveOutlooksRiskDigestFilters(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ func TestRunWrapsAdapterConstructionError(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestRunWrapsFetchError(t *testing.T) {
|
func TestRunWrapsFetchError(t *testing.T) {
|
||||||
server := collectionTestServer(t, map[string]int{"/observations": http.StatusBadGateway})
|
server := collectionTestServer(t, map[string]int{"/observations": http.StatusBadRequest})
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
cfg := config.Defaults()
|
cfg := config.Defaults()
|
||||||
|
|||||||
Reference in New Issue
Block a user