CodeIssuesDiscussionsWikiPull RequestsProjectsCommitsActionsReleasesContributorsPulse● GatesSecuritySettingsDeploymentsPipelineInsightsAgents✨ Explain✨ Ask AI✨ Workspace✨ Spec✨ Tests▓ Debt Map✨ NL Search🏛 Archaeology
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | /**
* BLOCK N2 — systemd_notify(READY=1) helper tests.
*
* Covers the three guarantees the helper makes:
* 1. No-op when NOTIFY_SOCKET is unset (dev / non-systemd hosts).
* 2. When NOTIFY_SOCKET IS set, attempts to open a datagram socket and
* send "READY=1\n" to it.
* 3. Never throws — boot path must be safe even if the socket open fails.
*/
import { describe, expect, it } from "bun:test";
import { notifySystemdReady } from "../lib/systemd-notify";
describe("notifySystemdReady", () => {
it("is a no-op when NOTIFY_SOCKET is unset", async () => {
let opened = false;
const opener = async () => {
opened = true;
return {
send: () => undefined,
close: () => undefined,
};
};
await notifySystemdReady({ openDatagram: opener, env: {} });
expect(opened).toBe(false);
});
it("is a no-op when NOTIFY_SOCKET is empty string", async () => {
let opened = false;
const opener = async () => {
opened = true;
return {
send: () => undefined,
close: () => undefined,
};
};
await notifySystemdReady({
openDatagram: opener,
env: { NOTIFY_SOCKET: "" },
});
expect(opened).toBe(false);
});
it("opens a datagram socket and sends READY=1 when NOTIFY_SOCKET is set", async () => {
const path = "/run/systemd/notify-test";
const calls: Array<{
kind: string;
data?: string;
socketPath?: string;
}> = [];
const opener = async (socketPath: string) => {
calls.push({ kind: "open", socketPath });
return {
send(data: string | Uint8Array) {
const s = typeof data === "string" ? data : new TextDecoder().decode(data);
calls.push({ kind: "send", data: s });
},
close() {
calls.push({ kind: "close" });
},
};
};
await notifySystemdReady({
openDatagram: opener,
env: { NOTIFY_SOCKET: path },
});
expect(calls[0]).toEqual({ kind: "open", socketPath: path });
const sendCall = calls.find((c) => c.kind === "send");
expect(sendCall).toBeDefined();
expect(sendCall?.data).toBe("READY=1\n");
const closeCall = calls.find((c) => c.kind === "close");
expect(closeCall).toBeDefined();
});
it("never throws when the socket open fails", async () => {
const opener = async () => {
throw new Error("ENOENT: socket path missing");
};
// Test that this resolves without throwing.
await expect(
notifySystemdReady({
openDatagram: opener,
env: { NOTIFY_SOCKET: "/run/systemd/notify" },
})
).resolves.toBeUndefined();
});
it("never throws when send() fails", async () => {
const opener = async () => ({
send() {
throw new Error("EPIPE");
},
close() {
/* clean close */
},
});
await expect(
notifySystemdReady({
openDatagram: opener,
env: { NOTIFY_SOCKET: "/run/systemd/notify" },
})
).resolves.toBeUndefined();
});
it("never throws when close() fails", async () => {
const opener = async () => ({
send() {
/* ok */
},
close() {
throw new Error("EBADF");
},
});
await expect(
notifySystemdReady({
openDatagram: opener,
env: { NOTIFY_SOCKET: "/run/systemd/notify" },
})
).resolves.toBeUndefined();
});
it("defaults to process.env when env is not provided", async () => {
const original = process.env.NOTIFY_SOCKET;
delete process.env.NOTIFY_SOCKET;
try {
let opened = false;
const opener = async () => {
opened = true;
return {
send: () => undefined,
close: () => undefined,
};
};
await notifySystemdReady({ openDatagram: opener });
expect(opened).toBe(false);
} finally {
if (original !== undefined) process.env.NOTIFY_SOCKET = original;
}
});
});
|