mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
64 lines
1.5 KiB
TypeScript
Generated
64 lines
1.5 KiB
TypeScript
Generated
import express from "express";
|
|
import bodyParser from "body-parser";
|
|
|
|
import { setTimeout as sleep } from "node:timers/promises";
|
|
|
|
const CONCURRENCY = 100;
|
|
|
|
const app = express();
|
|
app.use(bodyParser.json());
|
|
|
|
app.post("/error", (req, res) => {
|
|
try {
|
|
// This specific pattern causes the segfault in Bun v1.2.6
|
|
const headers = { location: undefined };
|
|
headers.location.split("*/")["2"].split(")")["0"];
|
|
} catch (err) {
|
|
setTimeout(() => res.status(500).json({ error: err.message }), 1);
|
|
}
|
|
});
|
|
|
|
var server = app.listen(0, async () => {
|
|
const port = server.address().port;
|
|
console.log(`Server running on http://localhost:${port}`);
|
|
|
|
const active = new Set();
|
|
|
|
async function makeRequest(id) {
|
|
const controller = new AbortController();
|
|
|
|
const secondPromise = setTimeout(() => controller.abort(), Math.random() * 5 + 1);
|
|
|
|
try {
|
|
await fetch(`http://localhost:${port}/error`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: "{}",
|
|
signal: controller.signal,
|
|
}).catch(() => {});
|
|
} catch (e) {}
|
|
|
|
try {
|
|
await secondPromise;
|
|
} catch (e) {}
|
|
|
|
active.delete(id);
|
|
}
|
|
|
|
console.log(`Starting concurrent requests...`);
|
|
for (let i = 0; i < 10000; i++) {
|
|
while (active.size >= CONCURRENCY) {
|
|
await sleep(1);
|
|
}
|
|
|
|
active.add(i);
|
|
makeRequest(i);
|
|
if (i > 0 && i % 1000 === 0) {
|
|
console.count("Completed request x 1000");
|
|
}
|
|
}
|
|
|
|
console.log("Done");
|
|
server.close();
|
|
});
|