fix: serialize local-agent heartbeats
This commit is contained in:
39
tests/local-agent-serialized-runner.test.mjs
Normal file
39
tests/local-agent-serialized-runner.test.mjs
Normal file
@@ -0,0 +1,39 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
import { createSerializedRunner } from "../local-agent/serialized-runner.mjs";
|
||||
|
||||
test("createSerializedRunner coalesces overlapping calls into the same promise", async () => {
|
||||
let runs = 0;
|
||||
let release;
|
||||
const gate = new Promise((resolve) => {
|
||||
release = resolve;
|
||||
});
|
||||
|
||||
const runner = createSerializedRunner(async () => {
|
||||
runs += 1;
|
||||
await gate;
|
||||
return { runs };
|
||||
});
|
||||
|
||||
const first = runner();
|
||||
const second = runner();
|
||||
assert.equal(first, second);
|
||||
assert.equal(runs, 1);
|
||||
|
||||
release();
|
||||
const result = await first;
|
||||
assert.deepEqual(result, { runs: 1 });
|
||||
});
|
||||
|
||||
test("createSerializedRunner allows the next call after the current run finishes", async () => {
|
||||
let runs = 0;
|
||||
const runner = createSerializedRunner(async () => {
|
||||
runs += 1;
|
||||
return runs;
|
||||
});
|
||||
|
||||
assert.equal(await runner(), 1);
|
||||
assert.equal(await runner(), 2);
|
||||
assert.equal(runs, 2);
|
||||
});
|
||||
Reference in New Issue
Block a user