mirror of
https://github.com/Corfirean/coa-server-manager.git
synced 2026-11-11 11:51:03 +00:00
33 lines
1.4 KiB
JavaScript
33 lines
1.4 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import { updateCheckQueue } from "../src/lib/updateCheckQueue.ts";
|
|
|
|
test("duplicate checks share one result and foreground waits for background on the same server", async () => {
|
|
const check = updateCheckQueue();
|
|
let release;
|
|
let calls = 0;
|
|
const background = check("server", "background", () => { calls++; return new Promise(resolve => { release = resolve; }); });
|
|
assert.equal(check("server", "background", () => { throw Error("duplicate"); }), background);
|
|
const foreground = check("server", "foreground", async () => { calls++; return "full preview"; });
|
|
await Promise.resolve();
|
|
await Promise.resolve();
|
|
assert.equal(calls, 1);
|
|
release("background preview");
|
|
assert.equal(await background, "background preview");
|
|
assert.equal(await foreground, "full preview");
|
|
assert.equal(calls, 2);
|
|
});
|
|
|
|
test("one server's failure releases its queue and does not block other servers", async () => {
|
|
const check = updateCheckQueue();
|
|
let fail;
|
|
const first = check("one", "a", () => new Promise((_, reject) => { fail = reject; }));
|
|
const failed = assert.rejects(first, /offline/);
|
|
const next = check("one", "b", async () => "retry");
|
|
assert.equal(await check("two", "a", async () => "independent"), "independent");
|
|
fail(Error("offline"));
|
|
await failed;
|
|
assert.equal(await next, "retry");
|
|
assert.equal(await check("one", "a", async () => "recovered"), "recovered");
|
|
});
|