fix: address coordinate review findings

Issue: #224
User-Visible: no
This commit is contained in:
Sergey Matyunin
2026-08-22 15:32:55 +03:00
parent 51fde854e3
commit 4dbdb446f8
10 changed files with 107 additions and 32 deletions
+53
View File
@@ -0,0 +1,53 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import { enqueueSerializedWrite } from '../test-build/serialized-write-queue.js';
function deferred() {
let resolve;
const promise = new Promise((done) => { resolve = done; });
return { promise, resolve };
}
test('a queued config write reads edits made while the previous write is in flight (#224)', async () => {
const firstStarted = deferred();
const releaseFirst = deferred();
let localConfig = 'first';
const observed = [];
let chain = Promise.resolve();
const enqueue = () => {
chain = enqueueSerializedWrite(chain, async () => {
observed.push(localConfig);
if (observed.length === 1) {
firstStarted.resolve();
await releaseFirst.promise;
}
});
return chain;
};
const first = enqueue();
await firstStarted.promise;
localConfig = 'second';
const second = enqueue();
localConfig = 'latest edit during await';
assert.deepEqual(observed, ['first'], 'the second write waits its turn');
releaseFirst.resolve();
await Promise.all([first, second]);
assert.deepEqual(observed, ['first', 'latest edit during await']);
});
test('a failed write does not poison the next queued edit (#224)', async () => {
const seen = [];
const failed = enqueueSerializedWrite(Promise.resolve(), async () => {
seen.push('failed');
throw new Error('offline');
});
const recovered = enqueueSerializedWrite(failed, async () => { seen.push('recovered'); });
await assert.rejects(failed, /offline/);
await recovered;
assert.deepEqual(seen, ['failed', 'recovered']);
});