Remove production waits from deterministic tests

This commit is contained in:
2026-08-13 03:32:32 +00:00
parent 78fc461a75
commit 166c4ce53b
4 changed files with 23 additions and 18 deletions

View File

@@ -24,6 +24,7 @@ type Client struct {
TokenEnv string
Timeout time.Duration
newUploadClient uploadClientFactory
pollWait func(context.Context, time.Duration) error
}
type UploadRequest struct {
@@ -126,6 +127,7 @@ func newClient(cfg config.DistributorNotifyConfig, factory uploadClientFactory)
TokenEnv: cfg.TokenEnv,
Timeout: cfg.Timeout,
newUploadClient: factory,
pollWait: waitForPoll,
}
}
@@ -207,7 +209,11 @@ func (c *Client) Upload(ctx context.Context, req UploadRequest) (UploadResult, e
Status: 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)
if status.RunID != "" || status.Status != "" {
uploadResult.RunStatus = &RunStatus{
@@ -234,19 +240,15 @@ func (c *Client) Upload(ctx context.Context, req UploadRequest) (UploadResult, e
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)
if err != nil || terminalRunStatus(status.Status) || !poll {
return status, err
}
for {
timer := time.NewTimer(statusPollInterval)
select {
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:
if err := wait(ctx, statusPollInterval); err != nil {
return status, fmt.Errorf("distributor run %q did not reach terminal status before timeout: %w", runID, err)
}
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 {
return status == "succeeded" || status == "failed"
}

View File

@@ -242,6 +242,7 @@ func TestUploadPollsUntilTerminalStatus(t *testing.T) {
},
}
client := newClient(cfg, factory.newClient)
client.pollWait = func(context.Context, time.Duration) error { return nil }
result, err := client.Upload(context.Background(), validUploadRequest())
if err != nil {

View File

@@ -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) {
tests := []struct {
name string

View File

@@ -50,7 +50,7 @@ func TestRunWrapsAdapterConstructionError(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()
cfg := config.Defaults()