mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 02:48:50 +00:00
95 lines
3.4 KiB
TypeScript
95 lines
3.4 KiB
TypeScript
import { expect, it } from "bun:test";
|
|
import { expectMaxObjectTypeCount, isWindows, tls } from "harness";
|
|
import { randomUUID } from "node:crypto";
|
|
import { once } from "node:events";
|
|
import net from "node:net";
|
|
import { connect, createServer } from "node:tls";
|
|
|
|
it.if(isWindows)("should work with named pipes and tls", async () => {
|
|
await expectMaxObjectTypeCount(expect, "TLSSocket", 0);
|
|
async function test(pipe_name: string) {
|
|
const { promise: messageReceived, resolve: resolveMessageReceived } = Promise.withResolvers();
|
|
const { promise: clientReceived, resolve: resolveClientReceived } = Promise.withResolvers();
|
|
let client: ReturnType<typeof connect> | null = null;
|
|
let server: ReturnType<typeof createServer> | null = null;
|
|
try {
|
|
server = createServer(tls, socket => {
|
|
socket.on("data", data => {
|
|
const message = data.toString();
|
|
socket.write("Goodbye World!");
|
|
resolveMessageReceived(message);
|
|
});
|
|
});
|
|
|
|
server.listen(pipe_name);
|
|
await once(server, "listening");
|
|
|
|
client = connect({ path: pipe_name, ca: tls.cert }).on("data", data => {
|
|
const message = data.toString();
|
|
resolveClientReceived(message);
|
|
});
|
|
|
|
client?.write("Hello World!");
|
|
const message = await messageReceived;
|
|
expect(message).toBe("Hello World!");
|
|
const client_message = await clientReceived;
|
|
expect(client_message).toBe("Goodbye World!");
|
|
} finally {
|
|
client?.destroy();
|
|
server?.close();
|
|
}
|
|
}
|
|
|
|
const batch: Promise<void>[] = [];
|
|
|
|
for (let i = 0; i < 200; i++) {
|
|
batch.push(test(`\\\\.\\pipe\\test\\${randomUUID()}`));
|
|
batch.push(test(`\\\\?\\pipe\\test\\${randomUUID()}`));
|
|
if (i % 50 === 0) {
|
|
await Promise.all(batch);
|
|
batch.length = 0;
|
|
}
|
|
}
|
|
await Promise.all(batch);
|
|
await expectMaxObjectTypeCount(expect, "TLSSocket", 2);
|
|
});
|
|
|
|
it.if(isWindows)("should be able to upgrade a named pipe connection to TLS", async () => {
|
|
await expectMaxObjectTypeCount(expect, "TLSSocket", 2);
|
|
const { promise: messageReceived, resolve: resolveMessageReceived } = Promise.withResolvers();
|
|
const { promise: clientReceived, resolve: resolveClientReceived } = Promise.withResolvers();
|
|
let client: ReturnType<typeof net.connect> | ReturnType<typeof connect> | null = null;
|
|
let server: ReturnType<typeof createServer> | null = null;
|
|
async function test(pipe_name: string) {
|
|
try {
|
|
server = createServer(tls, socket => {
|
|
socket.on("data", data => {
|
|
const message = data.toString();
|
|
socket.write("Goodbye World!");
|
|
resolveMessageReceived(message);
|
|
});
|
|
});
|
|
|
|
server.listen(pipe_name);
|
|
await once(server, "listening");
|
|
|
|
const nonTLSClient = net.connect(pipe_name);
|
|
client = connect({ socket: nonTLSClient, ca: tls.cert }).on("data", data => {
|
|
const message = data.toString();
|
|
resolveClientReceived(message);
|
|
});
|
|
await once(client, "secureConnect");
|
|
client?.write("Hello World!");
|
|
const message = await messageReceived;
|
|
expect(message).toBe("Hello World!");
|
|
const client_message = await clientReceived;
|
|
expect(client_message).toBe("Goodbye World!");
|
|
} finally {
|
|
client?.destroy();
|
|
server?.close();
|
|
}
|
|
}
|
|
await test(`\\\\.\\pipe\\test\\${randomUUID()}`);
|
|
await expectMaxObjectTypeCount(expect, "TLSSocket", 3);
|
|
});
|