mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 02:48:50 +00:00
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { spawn } from "bun";
|
|
import { expect, test } from "bun:test";
|
|
import { bunEnv, bunExe, dumpStats, expectMaxObjectTypeCount, gcTick, getMaxFD } from "harness";
|
|
|
|
test("spawn can read from stdout multiple chunks", async () => {
|
|
gcTick(true);
|
|
var maxFD: number = -1;
|
|
let concurrency = 7;
|
|
const count = 100;
|
|
const interval = setInterval(dumpStats, 1000).unref();
|
|
for (let i = 0; i < count; ) {
|
|
const promises = new Array(concurrency);
|
|
for (let j = 0; j < concurrency; j++) {
|
|
promises[j] = (async function () {
|
|
const proc = spawn({
|
|
cmd: [bunExe(), import.meta.dir + "/spawn-streaming-stdout-repro.js"],
|
|
stdin: "ignore",
|
|
stdout: "pipe",
|
|
stderr: "ignore",
|
|
env: bunEnv,
|
|
});
|
|
var chunks = [];
|
|
let counter = 0;
|
|
try {
|
|
for await (var chunk of proc.stdout) {
|
|
chunks.push(chunk);
|
|
counter++;
|
|
if (counter > 3) break;
|
|
}
|
|
} catch (e: any) {
|
|
console.log(e.stack);
|
|
throw e;
|
|
}
|
|
expect(counter).toBe(4);
|
|
proc.kill();
|
|
expect(Buffer.concat(chunks).toString()).toStartWith("Wrote to stdout\n".repeat(4));
|
|
await proc.exited;
|
|
})();
|
|
}
|
|
await Promise.all(promises);
|
|
i += concurrency;
|
|
if (maxFD === -1) {
|
|
maxFD = getMaxFD();
|
|
}
|
|
}
|
|
const newMaxFD = getMaxFD();
|
|
expect(newMaxFD).toBe(maxFD);
|
|
clearInterval(interval);
|
|
await expectMaxObjectTypeCount(expect, "ReadableStream", 10);
|
|
await expectMaxObjectTypeCount(expect, "ReadableStreamDefaultReader", 10);
|
|
await expectMaxObjectTypeCount(expect, "ReadableByteStreamController", 10);
|
|
await expectMaxObjectTypeCount(expect, "Subprocess", 5);
|
|
dumpStats();
|
|
}, 60_0000);
|