test(qa-deadline): never attach a reader to the full-pipe fixture's stdout

The full-pipe receipt test attached a 'data' listener (flowing mode) and then
paused; on CI the reader could drain the 2 MB write before the pause, so the
receipt write never blocked and the helper exited 0 in ~126 ms. The stdout pipe
now stays unread until the assertion, which is what the test means to model.
This commit is contained in:
garrytan committed 2026-09-30 18:57:26 +00:00
1 parent 07b21ea133
commit 4643cb8550
1 file changed
+3 -4
+3 -4
View File
@@ -52,10 +52,10 @@ function receipt(output: string) {
return value; return value;
} }
function background(args: string[], preload?: string) { function background(args: string[], preload?: string, options: { unreadStdout?: boolean } = {}) {
const child = spawn(process.execPath, [...(preload ? ['--preload', preload] : []), CLI, ...args], { stdio: ['ignore', 'pipe', 'pipe'] }); const child = spawn(process.execPath, [...(preload ? ['--preload', preload] : []), CLI, ...args], { stdio: ['ignore', 'pipe', 'pipe'] });
let stdout = '', stderr = ''; let stdout = '', stderr = '';
child.stdout!.on('data', chunk => { stdout += chunk; }); if (!options.unreadStdout) child.stdout!.on('data', chunk => { stdout += chunk; });
child.stderr!.on('data', chunk => { stderr += chunk; }); child.stderr!.on('data', chunk => { stderr += chunk; });
const result = new Promise<{ code: number | null; signal: NodeJS.Signals | null; stdout: string; stderr: string }>((resolve, reject) => { const result = new Promise<{ code: number | null; signal: NodeJS.Signals | null; stdout: string; stderr: string }>((resolve, reject) => {
child.once('error', reject); child.once('error', reject);
@@ -345,8 +345,7 @@ import { write } from 'node:fs';
write(1, Buffer.alloc(2 * 1024 * 1024, 32), () => {}); write(1, Buffer.alloc(2 * 1024 * 1024, 32), () => {});
await Bun.sleep(100); await Bun.sleep(100);
`); `);
const runner = background(['start', f.receipt, '30'], preload); const runner = background(['start', f.receipt, '30'], preload, { unreadStdout: true });
runner.child.stdout!.pause();
let timer: ReturnType<typeof setTimeout> | undefined; let timer: ReturnType<typeof setTimeout> | undefined;
try { try {
const code = await Promise.race([ const code = await Promise.race([