Files
stack/packages/bus/tests/p5-background.test.mjs

40 lines
2.4 KiB
JavaScript

// Row 333 P5 (#1831) background telemetry controls. They run with the bus package suite.
// Only fake loopback HTTP, explicit event barriers and virtual existing timers.
import test from 'node:test';
import assert from 'node:assert/strict';
import { createHash } from 'node:crypto';
import { mkdirSync, writeFileSync } from 'node:fs';
import { join } from 'node:path';
import { startTimeOf } from '../../seat/src/proc.mjs';
import { telemetryFixture } from './p5-telemetry-fixture.mjs';
async function nativeTurn(f) {
const model=await f.bus.modelPreflight({business:'demo',role:'coder'});
const keyId=createHash('sha256').update(model.key).digest('hex').slice(0,12),dir=join(f.root,'native-transcript');mkdirSync(dir);
const {cap}=f.bus.bindLaunch({business:'demo',role:'coder',run:'held-poll-native',harness:'pi',modelKeyId:keyId,transcript:dir,
pid:process.pid,startTime:startTimeOf(process.pid)});
f.bus.broker.request(cap,{verb:'role.claim'});
assert.deepEqual(await f.bus.mayLaunch({business:'demo',instance:'coder',provider:'fixture',model:'fake'}),{allow:true});
const human=f.human(),{id}=f.bus.broker.request(human,{verb:'message.send',args:{to:'coder',body:'native work while optional queue is held'}});
f.bus.broker.request(cap,{verb:'message.receive'});
await f.bus.broker.request(cap,{verb:'usage.begin',args:{turn:id}});
writeFileSync(join(dir,'native.jsonl'),JSON.stringify({type:'message',id:'native',message:{role:'assistant',usage:{input:2,output:1,cacheRead:0,cacheWrite:0}}})+'\n');
await f.bus.broker.request(cap,{verb:'usage.end',args:{turn:id}});
const view=f.bus.broker.request(human,{verb:'usage'});
assert.equal(view.total.input,2);assert.equal(view.byKey[0].modelKeyId,keyId);
assert.deepEqual(f.bus.broker.request(cap,{verb:'message.receive'}),[]);
}
test('configured telemetry stays undrained across startup, native work, ticks and close', async t => {
t.mock.timers.enable({ apis: ['Date', 'setInterval'], now: Date.now() });
const f = await telemetryFixture(t, { hold: true });
await f.start();
assert.equal(f.queueCalls(), 0);
assert.equal(f.state.queued.length, 1);
assert.equal(f.bus.broker.request(f.human(), { verb: 'usage' }).proxy.state, 'unavailable');
await nativeTurn(f);
t.mock.timers.tick(5000);
await new Promise(setImmediate);
assert.equal(f.queueCalls(), 0);
assert.equal(f.state.queued.length, 1);
await f.close();
});