release: WRNexusJS 0.8.0
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { mkdtempSync, statSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { X509Certificate } from "node:crypto";
|
||||
import {
|
||||
createLocalServicesHandler,
|
||||
ensureLocalCertificate,
|
||||
startLocalServices,
|
||||
} from "../src/services.ts";
|
||||
|
||||
describe("local production service simulator", () => {
|
||||
test("simulates bounded mail, cache, storage, auth and health APIs", async () => {
|
||||
const handler = createLocalServicesHandler();
|
||||
expect((await handler(new Request("http://local/healthz"))).status).toBe(200);
|
||||
expect(
|
||||
(
|
||||
await handler(
|
||||
new Request("http://local/mail", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ to: "u@test", subject: "Welcome" }),
|
||||
}),
|
||||
)
|
||||
).status,
|
||||
).toBe(202);
|
||||
expect(await (await handler(new Request("http://local/mail"))).json()).toHaveLength(1);
|
||||
await handler(
|
||||
new Request("http://local/cache", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ key: "user", value: 1 }),
|
||||
}),
|
||||
);
|
||||
expect(await (await handler(new Request("http://local/cache"))).json()).toHaveProperty(
|
||||
"user.value",
|
||||
1,
|
||||
);
|
||||
expect(
|
||||
(
|
||||
await handler(
|
||||
new Request("http://local/storage?key=file.txt", { method: "POST", body: "hello" }),
|
||||
)
|
||||
).status,
|
||||
).toBe(201);
|
||||
expect(await (await handler(new Request("http://local/storage/file.txt"))).text()).toBe(
|
||||
"hello",
|
||||
);
|
||||
expect(
|
||||
(
|
||||
await handler(
|
||||
new Request("http://local/auth", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ email: "u@test" }),
|
||||
}),
|
||||
)
|
||||
).status,
|
||||
).toBe(201);
|
||||
});
|
||||
test("rejects unsafe storage keys and oversized declared JSON", async () => {
|
||||
const handler = createLocalServicesHandler();
|
||||
expect(
|
||||
(
|
||||
await handler(
|
||||
new Request("http://local/storage?key=../secret", { method: "POST", body: "bad" }),
|
||||
)
|
||||
).status,
|
||||
).toBe(400);
|
||||
const response = await handler(
|
||||
new Request("http://local/mail", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ value: "x".repeat(300_000) }),
|
||||
}),
|
||||
);
|
||||
expect(response.status).toBe(413);
|
||||
});
|
||||
test("generates and safely reuses a localhost HTTPS certificate", async () => {
|
||||
const root = mkdtempSync(join(tmpdir(), "wrnexus-services-cert-"));
|
||||
const first = await ensureLocalCertificate(root);
|
||||
const certificate = new X509Certificate(first.cert);
|
||||
expect(certificate.subjectAltName).toContain("DNS:localhost");
|
||||
expect(certificate.subjectAltName).toContain("IP Address:127.0.0.1");
|
||||
expect(statSync(first.keyFile).size).toBeGreaterThan(100);
|
||||
const second = await ensureLocalCertificate(root);
|
||||
expect(second.reused).toBe(true);
|
||||
expect(second.cert).toBe(first.cert);
|
||||
});
|
||||
test("serves the simulator over generated HTTPS", async () => {
|
||||
const root = mkdtempSync(join(tmpdir(), "wrnexus-services-tls-"));
|
||||
const server = await startLocalServices({ appRoot: root, port: 0, hostname: "127.0.0.1" });
|
||||
try {
|
||||
const response = await fetch(`https://127.0.0.1:${server.port}/healthz`, {
|
||||
tls: { rejectUnauthorized: false },
|
||||
});
|
||||
expect(response.status).toBe(200);
|
||||
expect(await response.json()).toHaveProperty("service", "wrnexus-local-services");
|
||||
} finally {
|
||||
server.stop(true);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user