Apply job outcomes a gateway kept while the cloud was away
A job_event from a gateway moves a job that is still in flight (uploading, printing, paused) to printing, completed or failed, and is acknowledged whether or not it changed anything so the gateway stops sending it. A job the cloud has cancelled, completed or put back in the queue is left alone, and a gateway can only touch jobs of its own farm. If the database is unreachable it is not acknowledged, so it is sent again. scripts/e2e-vendors.sh gains a phase that takes the backend away for the whole of a fake print and checks the job completes on reconnect from the proxy's kept record.
This commit is contained in:
@@ -26,3 +26,26 @@ describe("late start failures", () => {
|
||||
expect(takeStart("bulk-1499")).toBe("job-1499");
|
||||
});
|
||||
});
|
||||
|
||||
import { jobStatusFromGatewayEvent } from "../src/dispatch/job_status";
|
||||
|
||||
describe("jobStatusFromGatewayEvent", () => {
|
||||
test("a finish is believed for any job still in flight, even one never seen printing", () => {
|
||||
for (const current of ["uploading", "printing", "paused"]) {
|
||||
expect(jobStatusFromGatewayEvent(current, "finished")).toBe("completed");
|
||||
expect(jobStatusFromGatewayEvent(current, "failed")).toBe("failed");
|
||||
}
|
||||
});
|
||||
test("started only promotes a job that was still uploading", () => {
|
||||
expect(jobStatusFromGatewayEvent("uploading", "started")).toBe("printing");
|
||||
expect(jobStatusFromGatewayEvent("printing", "started")).toBeUndefined();
|
||||
expect(jobStatusFromGatewayEvent("paused", "started")).toBeUndefined();
|
||||
});
|
||||
test("a job the cloud has already settled or taken back is left alone", () => {
|
||||
for (const current of ["queued", "completed", "failed", "cancelled"]) {
|
||||
for (const event of ["started", "finished", "failed"] as const) {
|
||||
expect(jobStatusFromGatewayEvent(current, event)).toBeUndefined();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user