mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 10:58:56 +00:00
* WIP missing keepalive * cleanup * is a Bun.sleep bug? * no bun sleep * fix exception * revert * fix setTimeout/Bun.sleep * add Bun.sleep keepalive test * fixes * one more bonus fix * fix early firing of timers * use localhost and pass the server.hostname * opsie
74 lines
1.9 KiB
JavaScript
Generated
74 lines
1.9 KiB
JavaScript
Generated
import { connect, listen } from "bun";
|
|
import { fillRepeating } from "harness";
|
|
|
|
const huge = Buffer.alloc(1024 * 1024 * 1024);
|
|
for (let i = 0; i < 1024; i++) {
|
|
huge[i] = (Math.random() * 255) | 0;
|
|
}
|
|
fillRepeating(huge, 0, 1024);
|
|
const received = new Bun.SHA256();
|
|
|
|
const { promise: clientPromise, resolve: clientResolve } = Promise.withResolvers();
|
|
const { promise: serverPromise, resolve: serverResolve } = Promise.withResolvers();
|
|
|
|
var server = listen({
|
|
port: 0,
|
|
hostname: "localhost",
|
|
data: { sent: 0 },
|
|
socket: {
|
|
open(socket) {
|
|
console.time("send 1 GB (server)");
|
|
socket.data.sent = socket.write(huge);
|
|
if (socket.data.sent === huge.length) {
|
|
console.timeEnd("send 1 GB (server)");
|
|
socket.shutdown();
|
|
serverResolve();
|
|
}
|
|
},
|
|
async drain(socket) {
|
|
socket.data.sent += socket.write(huge.subarray(socket.data.sent));
|
|
// console.error("Sent", socket.data.sent, "bytes");
|
|
|
|
if (socket.data.sent === huge.length) {
|
|
console.timeEnd("send 1 GB (server)");
|
|
socket.shutdown();
|
|
serverResolve();
|
|
}
|
|
},
|
|
},
|
|
});
|
|
|
|
const socket = await connect({
|
|
port: server.port,
|
|
hostname: server.hostname,
|
|
data: { received: 0 },
|
|
socket: {
|
|
open(socket) {
|
|
console.time("recv 1 GB (client)");
|
|
socket.data.received = 0;
|
|
},
|
|
|
|
data(socket, data) {
|
|
socket.data.received += data.length;
|
|
// console.error("Received", data.length, "bytes");
|
|
received.update(data);
|
|
|
|
if (socket.data.received === huge.length) {
|
|
console.timeEnd("recv 1 GB (client)");
|
|
socket.end();
|
|
clientResolve();
|
|
}
|
|
},
|
|
},
|
|
});
|
|
|
|
await Promise.all([clientPromise, serverPromise]);
|
|
server.stop(true);
|
|
socket.end();
|
|
|
|
if (received.digest("hex") !== Bun.SHA256.hash(huge, "hex")) {
|
|
throw new Error("Received data doesn't match sent data");
|
|
}
|
|
|
|
process.exit(0);
|