diff --git a/test/health.test.ts b/test/health.test.ts new file mode 100644 index 00000000..4eae9c60 --- /dev/null +++ b/test/health.test.ts @@ -0,0 +1,40 @@ +import * as httpserver from "./httpserver" +import * as integration from "./integration" + +describe("health", () => { + let codeServer: httpserver.HttpServer | undefined + + afterEach(async () => { + if (codeServer) { + await codeServer.close() + codeServer = undefined + } + }) + + it("/healthz", async () => { + ;[, , codeServer] = await integration.setup(["--auth=none"], "") + const resp = await codeServer.fetch("/healthz") + expect(resp.status).toBe(200) + const json = await resp.json() + expect(json).toStrictEqual({ lastHeartbeat: 0, status: "expired" }) + }) + + it("/healthz (websocket)", async () => { + ;[, , codeServer] = await integration.setup(["--auth=none"], "") + const ws = codeServer.ws("/healthz") + const message = await new Promise((resolve, reject) => { + ws.on("error", console.error) + ws.on("message", (message) => { + try { + const j = JSON.parse(message.toString()) + resolve(j) + } catch (error) { + reject(error) + } + }) + ws.on("open", () => ws.send(JSON.stringify({ event: "health" }))) + }) + ws.terminate() + expect(message).toStrictEqual({ event: "health", status: "expired", lastHeartbeat: 0 }) + }) +})