Skip to content

Commit a462bfe

Browse files
authored
test(execution): handle cancellation race (#124)
1 parent c49a7cb commit a462bfe

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

‎tests/e2e/execution.spec.ts‎

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ describe("ExecutionAPI: native routes", () => {
118118
expect(execution.execution_id).not.toEqual(null);
119119
});
120120

121-
it("returns expected results on cancelled query execution", async () => {
121+
it("returns expected results when cancellation races query completion", async () => {
122122
// Execute a query and immediately cancel it
123123
const execution = await client.executeQuery(multiRowQuery);
124124
const cancelledExecutionId = execution.execution_id;
@@ -127,16 +127,20 @@ describe("ExecutionAPI: native routes", () => {
127127
const wasCancelled = await client.cancelExecution(cancelledExecutionId);
128128
expect(wasCancelled).toEqual(true);
129129

130-
// Get the results and verify it shows as cancelled
130+
// The query can complete before the cancellation is processed, especially when
131+
// its result is cached. Both outcomes are valid once the cancel request succeeds.
131132
const result = await client.getExecutionResults(cancelledExecutionId);
132133
expect(result.execution_id).toEqual(cancelledExecutionId);
133134
expect(result.query_id).toEqual(multiRowQuery);
134-
expect(result.state).toEqual(ExecutionState.CANCELLED);
135+
expect([ExecutionState.CANCELLED, ExecutionState.COMPLETED]).toContain(result.state);
135136
// Verify timestamps exist (but don't check exact values since they're dynamic)
136137
expect(result.submitted_at).toBeDefined();
137-
expect(result.cancelled_at).toBeDefined();
138-
// execution_ended_at is only set if the execution had started running when the
139-
// cancel landed, so it's timing-dependent here and intentionally not asserted.
138+
if (result.state === ExecutionState.CANCELLED) {
139+
expect(result.cancelled_at).toBeDefined();
140+
} else {
141+
expect(result.execution_ended_at).toBeDefined();
142+
expect(result.result).toBeDefined();
143+
}
140144
});
141145

142146
it("gets Results (with various optinal parameters)", async () => {

0 commit comments

Comments
 (0)