68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import {
|
|
publishedHttpReadinessCandidates,
|
|
waitForHttpReadiness,
|
|
} from "../../src/server/services/deployment-readiness.service";
|
|
|
|
const server = { id: "server-1" } as never;
|
|
|
|
test("published HTTP candidates normalize Docker host bindings", () => {
|
|
assert.deepEqual(
|
|
publishedHttpReadinessCandidates(
|
|
"8085:80,0.0.0.0:8085:80,[::]:8085:80,5353:53/udp",
|
|
),
|
|
["http://127.0.0.1:8085/"],
|
|
);
|
|
});
|
|
|
|
test("HTTP readiness accepts a reachable candidate endpoint", async () => {
|
|
let command = "";
|
|
const result = await waitForHttpReadiness(
|
|
{
|
|
server,
|
|
upstream: "http://127.0.0.1:49152",
|
|
hostHeader: "app.example.test",
|
|
timeoutMs: 1_000,
|
|
},
|
|
{
|
|
execStrict: async (_server, value) => {
|
|
command = value;
|
|
return "";
|
|
},
|
|
wait: async () => undefined,
|
|
},
|
|
);
|
|
|
|
assert.equal(result.ready, true);
|
|
assert.equal(result.attempts, 1);
|
|
assert.match(command, /Host: app\.example\.test/);
|
|
assert.match(command, /2\*\|3\*/);
|
|
assert.doesNotMatch(command, /4\*/);
|
|
});
|
|
|
|
test("HTTP readiness rejects non-IP and non-HTTP probe targets", async () => {
|
|
await assert.rejects(() =>
|
|
waitForHttpReadiness(
|
|
{ server, upstream: "https://example.com" },
|
|
{
|
|
execStrict: async () => "",
|
|
wait: async () => undefined,
|
|
},
|
|
),
|
|
);
|
|
await assert.rejects(() =>
|
|
waitForHttpReadiness(
|
|
{
|
|
server,
|
|
upstream: "http://127.0.0.1:49152",
|
|
hostHeader: "invalid host",
|
|
},
|
|
{
|
|
execStrict: async () => "",
|
|
wait: async () => undefined,
|
|
},
|
|
),
|
|
);
|
|
});
|