Skip to content

Commit ccbe7fe

Browse files
committed
Fix: test client / agent startup race condition
1 parent 7484b26 commit ccbe7fe

1 file changed

Lines changed: 46 additions & 7 deletions

File tree

tests/e2e/test-runner.go

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ func main() {
2222
must(waitForHTTP(cfg.schedulerMetricsURL+"/health", client, cfg.maxRetries, cfg.retryInterval))
2323
must(waitForHTTP(cfg.schedulerMetricsURL+"/metrics", client, cfg.maxRetries, cfg.retryInterval))
2424
must(waitForHTTP(cfg.agentMetricsURL+"/health", client, cfg.maxRetries, cfg.retryInterval))
25+
must(waitForRegisteredNode(cfg))
2526

2627
logStep("apply workload")
2728
must(applyWorkloadWithRetry(cfg))
@@ -41,11 +42,8 @@ func main() {
4142

4243
listOut, err := runSmokeCapture(cfg.schedulerGRPCAddr, "-op", "list-workloads")
4344
must(err)
44-
var listResp listWorkloadsResponse
45-
must(unmarshalSmokeJSON(listOut, &listResp))
46-
if !containsWorkload(listResp.Workloads, cfg.testWorkloadID) {
47-
failf("workload %s missing from list-workloads", cfg.testWorkloadID)
48-
}
45+
_ = listOut
46+
must(waitForWorkloadInList(cfg))
4947

5048
summaryOut, err := runSmokeCapture(cfg.schedulerGRPCAddr, "-op", "cluster-summary")
5149
if err != nil {
@@ -131,7 +129,7 @@ func loadConfig() config {
131129

132130
func applyWorkloadWithRetry(cfg config) error {
133131
return poll(cfg.maxRetries, cfg.retryInterval, func() (bool, error) {
134-
err := runSmoke(cfg.schedulerGRPCAddr,
132+
out, err := runSmokeCapture(cfg.schedulerGRPCAddr,
135133
"-op", "apply-container",
136134
"-workload-id", cfg.testWorkloadID,
137135
"-container-image", "busybox:latest",
@@ -147,7 +145,48 @@ func applyWorkloadWithRetry(cfg config) error {
147145
}
148146
return false, err
149147
}
150-
return true, nil
148+
lower := strings.ToLower(out)
149+
if strings.Contains(lower, "success=true") {
150+
return true, nil
151+
}
152+
if strings.Contains(lower, "no suitable node") || strings.Contains(lower, "cannot place workload") {
153+
return false, nil
154+
}
155+
return false, fmt.Errorf("apply-container did not report success: %s", out)
156+
})
157+
}
158+
159+
func waitForRegisteredNode(cfg config) error {
160+
logStep("wait for compute-agent node registration")
161+
return poll(cfg.maxRetries, cfg.retryInterval, func() (bool, error) {
162+
out, err := runSmokeCapture(cfg.schedulerGRPCAddr, "-op", "cluster-summary")
163+
if err != nil {
164+
return false, nil
165+
}
166+
var summary struct {
167+
TotalNodes int32 `json:"totalNodes"`
168+
}
169+
if err := unmarshalSmokeJSON(out, &summary); err != nil {
170+
return false, nil
171+
}
172+
return summary.TotalNodes >= 1, nil
173+
})
174+
}
175+
176+
func waitForWorkloadInList(cfg config) error {
177+
return poll(cfg.maxRetries, cfg.retryInterval, func() (bool, error) {
178+
out, err := runSmokeCapture(cfg.schedulerGRPCAddr, "-op", "list-workloads")
179+
if err != nil {
180+
return false, nil
181+
}
182+
var listResp listWorkloadsResponse
183+
if err := unmarshalSmokeJSON(out, &listResp); err != nil {
184+
return false, nil
185+
}
186+
if containsWorkload(listResp.Workloads, cfg.testWorkloadID) {
187+
return true, nil
188+
}
189+
return false, nil
151190
})
152191
}
153192

0 commit comments

Comments
 (0)