mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 02:48:50 +00:00
152 lines
3.5 KiB
TypeScript
152 lines
3.5 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import privateKey from "../../third_party/jsonwebtoken/priv.pem" with { type: "text" };
|
|
import publicKey from "../../third_party/jsonwebtoken/pub.pem" with { type: "text" };
|
|
|
|
describe("Bun.serve SSL validations", () => {
|
|
const fixtures = [
|
|
{
|
|
label: "invalid key",
|
|
tls: {
|
|
key: privateKey.slice(100),
|
|
cert: publicKey,
|
|
},
|
|
},
|
|
{
|
|
label: "invalid key #2",
|
|
tls: {
|
|
key: privateKey.slice(0, -20),
|
|
cert: publicKey,
|
|
},
|
|
},
|
|
{
|
|
label: "invalid cert",
|
|
tls: {
|
|
key: privateKey,
|
|
cert: publicKey.slice(0, -40),
|
|
},
|
|
},
|
|
{
|
|
label: "invalid cert #2",
|
|
tls: [
|
|
{
|
|
key: privateKey,
|
|
cert: publicKey,
|
|
serverName: "error-mc-erroryface.com",
|
|
},
|
|
{
|
|
key: privateKey,
|
|
cert: publicKey.slice(0, -40),
|
|
serverName: "error-mc-erroryface.co.uk",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: "invalid serverName: missing serverName",
|
|
tls: [
|
|
{
|
|
key: privateKey,
|
|
cert: publicKey,
|
|
serverName: "hello.com",
|
|
},
|
|
{
|
|
key: privateKey,
|
|
cert: publicKey,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: "invalid serverName: empty serverName",
|
|
tls: [
|
|
{
|
|
key: privateKey,
|
|
cert: publicKey,
|
|
serverName: "hello.com",
|
|
},
|
|
{
|
|
key: privateKey,
|
|
cert: publicKey,
|
|
serverName: "",
|
|
},
|
|
],
|
|
},
|
|
];
|
|
for (const development of [true, false]) {
|
|
for (const fixture of fixtures) {
|
|
test(`${fixture.label} ${development ? "development" : "production"}`, () => {
|
|
expect(() => {
|
|
Bun.serve({
|
|
port: 0,
|
|
tls: fixture.tls,
|
|
fetch: () => new Response("Hello, world!"),
|
|
development,
|
|
});
|
|
}).toThrow();
|
|
});
|
|
}
|
|
}
|
|
|
|
const validFixtures = [
|
|
{
|
|
label: "valid",
|
|
tls: {
|
|
key: privateKey,
|
|
cert: publicKey,
|
|
},
|
|
},
|
|
{
|
|
label: "valid 2",
|
|
tls: [
|
|
{
|
|
key: privateKey,
|
|
cert: publicKey,
|
|
serverName: "localhost",
|
|
},
|
|
{
|
|
key: privateKey,
|
|
cert: publicKey,
|
|
serverName: "localhost2.com",
|
|
},
|
|
],
|
|
},
|
|
];
|
|
for (const development of [true, false]) {
|
|
for (const fixture of validFixtures) {
|
|
test(`${fixture.label} ${development ? "development" : "production"}`, async () => {
|
|
using server = Bun.serve({
|
|
port: 0,
|
|
tls: fixture.tls,
|
|
fetch: () => new Response("Hello, world!"),
|
|
development,
|
|
});
|
|
expect(server.url).toBeDefined();
|
|
expect().pass();
|
|
let serverNames = Array.isArray(fixture.tls) ? fixture.tls.map(({ serverName }) => serverName) : ["localhost"];
|
|
|
|
for (const serverName of serverNames) {
|
|
const res = await fetch(server.url, {
|
|
headers: {
|
|
Host: serverName,
|
|
},
|
|
tls: {
|
|
rejectUnauthorized: false,
|
|
},
|
|
keepAlive: false,
|
|
});
|
|
expect(res.status).toBe(200);
|
|
expect(await res.text()).toBe("Hello, world!");
|
|
}
|
|
|
|
const res = await fetch(server.url, {
|
|
headers: {
|
|
Host: "badhost.com",
|
|
},
|
|
tls: {
|
|
rejectUnauthorized: false,
|
|
},
|
|
keepAlive: false,
|
|
});
|
|
});
|
|
}
|
|
}
|
|
});
|