Files
bun.sh/test/js/bun/http/bun-serve-ssl.test.ts

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,
});
});
}
}
});