Skip to content

Commit 029e961

Browse files
committed
test: preserve owner cleanup failures
1 parent a7d35ba commit 029e961

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

tests/zcode-client.test.mjs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1806,12 +1806,14 @@ test('owner release aborts its unlocked winner read after a reset compensation m
18061806
await Promise.race([operation, new Promise((_, rejectPromise) => { timer = setTimeout(() => rejectPromise(new Error(`owner release cleanup timed out: ${describeResidual()}`)), scaleTestTimeout(500)); })]);
18071807
} finally { clearTimeout(timer); }
18081808
};
1809+
try { await waitForCleanup(releaseOutcome ?? Promise.resolve(), () => `caller residual=${releaseOutcome ? (releaseOutcomeSettled ? 'settled' : 'pending') : 'not-started'}`); } catch (error) { cleanupErrors.push(error); }
18091810
try {
1810-
try { await waitForCleanup(releaseOutcome ?? Promise.resolve(), () => `caller residual=${releaseOutcome ? (releaseOutcomeSettled ? 'settled' : 'pending') : 'not-started'}`); } catch (error) { cleanupErrors.push(error); }
18111811
for (let turn = 0; turn < 100 && broker.releaseTasks.size; turn += 1) await new Promise((resolvePromise) => setImmediate(resolvePromise));
1812-
try { await waitForCleanup(Promise.allSettled([...broker.releaseTasks]), () => `task residual=${broker.releaseTasks.size}`); } catch (error) { cleanupErrors.push(error); }
1813-
if (cleanupErrors.length) throw new AggregateError(cleanupErrors, `owner release cleanup failed: caller residual=${releaseOutcome ? (releaseOutcomeSettled ? 'settled' : 'pending') : 'not-started'}; task residual=${broker.releaseTasks.size}`);
1814-
} finally { await rm(directory, { recursive: true, force: true }); }
1812+
await waitForCleanup(Promise.allSettled([...broker.releaseTasks]), () => `task residual=${broker.releaseTasks.size}`);
1813+
} catch (error) { cleanupErrors.push(error); }
1814+
try { await rm(directory, { recursive: true, force: true }); } catch (error) { cleanupErrors.push(error); }
1815+
if (cleanupErrors.length === 1) throw cleanupErrors[0];
1816+
if (cleanupErrors.length > 1) throw new AggregateError(cleanupErrors, `owner release cleanup failed: caller residual=${releaseOutcome ? (releaseOutcomeSettled ? 'settled' : 'pending') : 'not-started'}; task residual=${broker.releaseTasks.size}`);
18151817
});
18161818
const releasing = broker.releaseOwner(socket, ownerId, [], Date.now() + scaleTestTimeout(1_000)); releaseOutcome = releasing.then((value) => ({ kind: 'fulfilled', value }), (error) => ({ kind: 'rejected', error })); void releaseOutcome.then(() => { releaseOutcomeSettled = true; });
18171819
const boundary = await Promise.race([secondWriteEntered.then(() => 'second-write'), releaseOutcome.then(() => 'release-settled')]); assert.equal(boundary, 'second-write'); assert.equal(writes, 2);

0 commit comments

Comments
 (0)