Unify halt and fire cancellation by verified run identity with durable first-owner receipts and shared deadlines. Integrate the instance control with the current host, library and tester-socket paths. Focused nine-file evidence is 62 passing tests; broad suites, mutants and review remain pending.
32 lines
1.7 KiB
JavaScript
32 lines
1.7 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { createServer } from 'node:net';
|
|
import { mkdtempSync, rmSync } from 'node:fs';
|
|
import { tmpdir } from 'node:os';
|
|
import { join } from 'node:path';
|
|
import { Client } from '../src/client.mjs';
|
|
test('processing halt and resume extend only the socket timeout while ordinary status retains the explicit timeout', async t => {
|
|
const root = mkdtempSync(join(tmpdir(), 'processing-client-')), path = join(root, 'fixture.sock');
|
|
const seen = [], sockets = new Set();
|
|
const server = createServer(socket => {
|
|
sockets.add(socket); let buffer = '', timer;
|
|
socket.on('error', () => {});
|
|
socket.on('close', () => { sockets.delete(socket); clearTimeout(timer); });
|
|
socket.on('data', data => {
|
|
buffer += data;
|
|
if (!buffer.includes('\n')) return;
|
|
seen.push(JSON.parse(buffer));
|
|
timer = setTimeout(() => socket.end(JSON.stringify({ ok: true, result: { real: 'completion' } }) + '\n'), 80);
|
|
});
|
|
});
|
|
await new Promise(resolve => server.listen(path, resolve));
|
|
t.after(async () => { for (const socket of sockets) socket.destroy(); await new Promise(resolve => server.close(resolve)); rmSync(root, { recursive: true, force: true }); });
|
|
const client = new Client({ path, cap: 'a'.repeat(64), timeout: 15 });
|
|
for (const verb of ['processing.halt', 'processing.resume']) {
|
|
assert.deepEqual(await client.call(verb, {}), { real: 'completion' });
|
|
assert.equal(client.timeout, 15, 'the constructor setting stays unchanged');
|
|
}
|
|
await assert.rejects(client.call('processing.status'), { code: 'outcome-unknown' });
|
|
assert.deepEqual(seen, ['processing.halt', 'processing.resume', 'processing.status'].map(verb => ({ cap: 'a'.repeat(64), verb, args: {} })));
|
|
});
|