systemd-ts 261.1.0 → 261.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{index-BgzlfOC7.d.mts → index-gV6lNweL.d.mts} +4 -4
- package/dist/index-gV6lNweL.d.mts.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/test.d.mts +1 -2
- package/dist/test.d.mts.map +1 -1
- package/dist/test.mjs +4 -2
- package/dist/test.mjs.map +1 -1
- package/package.json +7 -7
- package/dist/index-BgzlfOC7.d.mts.map +0 -1
|
@@ -1090,7 +1090,7 @@ interface SystemdTimerOptions {
|
|
|
1090
1090
|
readonly timer: SystemdTimerSection;
|
|
1091
1091
|
readonly unit?: SystemdUnitSection;
|
|
1092
1092
|
}
|
|
1093
|
-
type NoExtraKeys<TActual, TShape> = TActual & { readonly [K in Exclude<keyof TActual, keyof TShape>]: never };
|
|
1093
|
+
type NoExtraKeys<TActual, TShape> = TActual & { readonly [K in Exclude<keyof TActual, keyof TShape>]: never; };
|
|
1094
1094
|
type ExactOptionalSection<TSection, TShape> = TSection extends undefined ? undefined : NoExtraKeys<TSection, TShape>;
|
|
1095
1095
|
type ExactSystemdServiceOptions<TOptions extends SystemdServiceOptions> = NoExtraKeys<Omit<TOptions, "install" | "service" | "unit"> & {
|
|
1096
1096
|
readonly install?: ExactOptionalSection<TOptions[`install`], SystemdInstallSection>;
|
|
@@ -1205,9 +1205,9 @@ interface MaterializedUnit<TUnit extends SystemdUnit = SystemdUnit> {
|
|
|
1205
1205
|
readonly path: string;
|
|
1206
1206
|
readonly unit: TUnit;
|
|
1207
1207
|
}
|
|
1208
|
-
type ServiceNamesIn<TUnits extends readonly SystemdUnit[]> = TUnits[number] extends infer TUnit ? TUnit extends AnySystemdService ? TUnit[`name`] : never : never;
|
|
1208
|
+
type ServiceNamesIn<TUnits extends readonly SystemdUnit[]> = TUnits[number] extends (infer TUnit) ? TUnit extends AnySystemdService ? TUnit[`name`] : never : never;
|
|
1209
1209
|
type TimerMatchesAnyService<TTimer extends AnySystemdTimer, TServiceNames extends string> = IsWideString<TimerTargetServiceName<TTimer[`options`]>> extends true ? true : IsWideString<TServiceNames> extends true ? true : [Extract<TServiceNames, TimerTargetServiceName<TTimer[`options`]>>] extends [never] ? false : true;
|
|
1210
|
-
type MismatchedTimers<TUnits extends readonly SystemdUnit[]> = TUnits[number] extends infer TUnit ? TUnit extends AnySystemdTimer ? TimerMatchesAnyService<TUnit, ServiceNamesIn<TUnits>> extends true ? never : TUnit : never : never;
|
|
1210
|
+
type MismatchedTimers<TUnits extends readonly SystemdUnit[]> = TUnits[number] extends (infer TUnit) ? TUnit extends AnySystemdTimer ? TimerMatchesAnyService<TUnit, ServiceNamesIn<TUnits>> extends true ? never : TUnit : never : never;
|
|
1211
1211
|
type HasServices<TUnits extends readonly SystemdUnit[]> = [ServiceNamesIn<TUnits>] extends [never] ? false : true;
|
|
1212
1212
|
type HasMismatchedServiceTimerPairs<TUnits extends readonly SystemdUnit[]> = HasServices<TUnits> extends true ? [MismatchedTimers<TUnits>] extends [never] ? false : true : false;
|
|
1213
1213
|
type ValidInstallUnits<TUnits extends readonly SystemdUnit[]> = HasMismatchedServiceTimerPairs<TUnits> extends true ? never : TUnits;
|
|
@@ -1632,4 +1632,4 @@ declare function defaultSystemd(): Systemd;
|
|
|
1632
1632
|
declare const Internal: typeof internal_d_exports;
|
|
1633
1633
|
//#endregion
|
|
1634
1634
|
export { SystemdServiceOptions as $, CommandExecutionOptions as A, SystemctlActiveState as B, UnitLogsReadError as C, UnitStartError as D, UnitMaterializationErrorReason as E, MaterializedUnit as F, SystemctlOptions as G, SystemctlIsEnabledOptions as H, NotifyOptions as I, SystemctlStateQueryOptions as J, SystemctlServiceStatus as K, ServiceBaseName as L, CommandOutput as M, ExecutableOptions as N, AnySystemdService as O, LogsOptions as P, SystemdOptions as Q, ServiceFilename as R, UnitEnableError as S, UnitMaterializationError as T, SystemctlIsSystemRunningOptions as U, SystemctlEnablementState as V, SystemctlListTimersOptions as W, SystemctlSystemRunningState as X, SystemctlStatusOptions as Y, SystemctlTimerListEntry as Z, NotifySendErrorReason as _, SystemdTsAttachOptions as a, TimerTargetUnit as at, SystemdCommandEnvironmentReason as b, SystemdTsDetachOptions as c, SystemdTimer as ct, Systemctl as d, defineExecutable as dt, SystemdTimerOptions as et, notify as f, Result as ft, NotifySendError as g, NoUnitsProvidedError as h, SystemdTs as i, TimerTargetServiceName as it, CommandExecutor as j, AnySystemdTimer as k, SystemdTsReattachOptions as l, SystemdService as lt, InvalidExecDirectiveError as m, Systemd as n, TimerBaseName as nt, SystemdTsAttachmentResult as o, UnitValue as ot, ExecutableInferenceError as p, SystemctlShowOptions as q, SystemdMaterialization as r, TimerFilename as rt, SystemdTsAttachmentSelector as s, ValidInstallUnits as st, Internal as t, SystemdUnit as tt, defaultSystemd as u, Executable as ut, SystemctlCommandError as v, UnitLogsReadErrorReason as w, SystemdTsError as x, SystemctlCommandErrorReason as y, StartStatus as z };
|
|
1635
|
-
//# sourceMappingURL=index-
|
|
1635
|
+
//# sourceMappingURL=index-gV6lNweL.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-gV6lNweL.d.mts","names":[],"sources":["../src/main/internal.ts","../src/main/executable.ts","../src/main/systemd-service.ts","../src/main/systemd-timer.ts","../src/main/types.ts","../src/main/errors.ts","../src/main/notify.ts","../src/main/systemctl.ts","../src/main/systemd.ts","../src/main/index.ts"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as SystemdServiceOptions, A as CommandExecutionOptions, B as SystemctlActiveState, C as UnitLogsReadError, D as UnitStartError, E as UnitMaterializationErrorReason, F as MaterializedUnit, G as SystemctlOptions, H as SystemctlIsEnabledOptions, I as NotifyOptions, J as SystemctlStateQueryOptions, K as SystemctlServiceStatus, L as ServiceBaseName, M as CommandOutput, N as ExecutableOptions, O as AnySystemdService, P as LogsOptions, Q as SystemdOptions, R as ServiceFilename, S as UnitEnableError, T as UnitMaterializationError, U as SystemctlIsSystemRunningOptions, V as SystemctlEnablementState, W as SystemctlListTimersOptions, X as SystemctlSystemRunningState, Y as SystemctlStatusOptions, Z as SystemctlTimerListEntry, _ as NotifySendErrorReason, a as SystemdTsAttachOptions, at as TimerTargetUnit, b as SystemdCommandEnvironmentReason, c as SystemdTsDetachOptions, ct as SystemdTimer, d as Systemctl, dt as defineExecutable, et as SystemdTimerOptions, f as notify, ft as Result, g as NotifySendError, h as NoUnitsProvidedError, i as SystemdTs, it as TimerTargetServiceName, j as CommandExecutor, k as AnySystemdTimer, l as SystemdTsReattachOptions, lt as SystemdService, m as InvalidExecDirectiveError, n as Systemd, nt as TimerBaseName, o as SystemdTsAttachmentResult, ot as UnitValue, p as ExecutableInferenceError, q as SystemctlShowOptions, r as SystemdMaterialization, rt as TimerFilename, s as SystemdTsAttachmentSelector, st as ValidInstallUnits, t as Internal, tt as SystemdUnit, u as defaultSystemd, ut as Executable, v as SystemctlCommandError, w as UnitLogsReadErrorReason, x as SystemdTsError, y as SystemctlCommandErrorReason, z as StartStatus } from "./index-
|
|
1
|
+
import { $ as SystemdServiceOptions, A as CommandExecutionOptions, B as SystemctlActiveState, C as UnitLogsReadError, D as UnitStartError, E as UnitMaterializationErrorReason, F as MaterializedUnit, G as SystemctlOptions, H as SystemctlIsEnabledOptions, I as NotifyOptions, J as SystemctlStateQueryOptions, K as SystemctlServiceStatus, L as ServiceBaseName, M as CommandOutput, N as ExecutableOptions, O as AnySystemdService, P as LogsOptions, Q as SystemdOptions, R as ServiceFilename, S as UnitEnableError, T as UnitMaterializationError, U as SystemctlIsSystemRunningOptions, V as SystemctlEnablementState, W as SystemctlListTimersOptions, X as SystemctlSystemRunningState, Y as SystemctlStatusOptions, Z as SystemctlTimerListEntry, _ as NotifySendErrorReason, a as SystemdTsAttachOptions, at as TimerTargetUnit, b as SystemdCommandEnvironmentReason, c as SystemdTsDetachOptions, ct as SystemdTimer, d as Systemctl, dt as defineExecutable, et as SystemdTimerOptions, f as notify, ft as Result, g as NotifySendError, h as NoUnitsProvidedError, i as SystemdTs, it as TimerTargetServiceName, j as CommandExecutor, k as AnySystemdTimer, l as SystemdTsReattachOptions, lt as SystemdService, m as InvalidExecDirectiveError, n as Systemd, nt as TimerBaseName, o as SystemdTsAttachmentResult, ot as UnitValue, p as ExecutableInferenceError, q as SystemctlShowOptions, r as SystemdMaterialization, rt as TimerFilename, s as SystemdTsAttachmentSelector, st as ValidInstallUnits, t as Internal, tt as SystemdUnit, u as defaultSystemd, ut as Executable, v as SystemctlCommandError, w as UnitLogsReadErrorReason, x as SystemdTsError, y as SystemctlCommandErrorReason, z as StartStatus } from "./index-gV6lNweL.mjs";
|
|
2
2
|
export { type AnySystemdService, type AnySystemdTimer, type CommandExecutionOptions, type CommandExecutor, type CommandOutput, Executable, ExecutableInferenceError, type ExecutableOptions, Internal, InvalidExecDirectiveError, type LogsOptions, type MaterializedUnit, NoUnitsProvidedError, type NotifyOptions, NotifySendError, type NotifySendErrorReason, type Result, type ServiceBaseName, type ServiceFilename, type StartStatus, Systemctl, type SystemctlActiveState, SystemctlCommandError, type SystemctlCommandErrorReason, type SystemctlEnablementState, type SystemctlIsEnabledOptions, type SystemctlIsSystemRunningOptions, type SystemctlListTimersOptions, type SystemctlOptions, type SystemctlServiceStatus, type SystemctlShowOptions, type SystemctlStateQueryOptions, type SystemctlStatusOptions, type SystemctlSystemRunningState, type SystemctlTimerListEntry, Systemd, type SystemdCommandEnvironmentReason, SystemdMaterialization, type SystemdOptions, SystemdService, type SystemdServiceOptions, SystemdTimer, type SystemdTimerOptions, SystemdTs, type SystemdTsAttachOptions, type SystemdTsAttachmentResult, type SystemdTsAttachmentSelector, type SystemdTsDetachOptions, SystemdTsError, type SystemdTsReattachOptions, type SystemdUnit, type TimerBaseName, type TimerFilename, type TimerTargetServiceName, type TimerTargetUnit, UnitEnableError, UnitLogsReadError, type UnitLogsReadErrorReason, UnitMaterializationError, type UnitMaterializationErrorReason, UnitStartError, type UnitValue, type ValidInstallUnits, defaultSystemd, defineExecutable, notify };
|
package/dist/test.d.mts
CHANGED
package/dist/test.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.mts","names":[],"sources":["../src/test/host.ts","../src/test/harness.ts","../src/test/sandbox.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"test.d.mts","names":[],"sources":["../src/test/host.ts","../src/test/harness.ts","../src/test/sandbox.ts"],"mappings":";;UAwBiB;WACN,SAAS;WACT;WACA;WACA;WACA;WACA;;KAGN;iBAYW,mBAAmB;iBAInB,kBAAkB,QAAQ;iBAK1B;iBAIM,gBAAgB,iBAAiB;iBAKjC,wBAAwB,iBAAiB;;;;;;;iBCjD/C,2BACd,aAAa,mBAAmB,kBAC/B;;;;cAqBU,sBAAsB;;;;cAKtB,8BAA8B;;;;;iBAO3B,kBAAkB;;;;;iBAclB,0BAA0B;;;UC3DzB;WACN;WACA;WACA;WACA;WACA;;iBASW,kBAAkB,oBAAoB,QAAQ;iBAyB9C,6BAA6B;iBAgCnC,yBAAyB"}
|
package/dist/test.mjs
CHANGED
|
@@ -539,11 +539,12 @@ const isolatedGuestCommandExecutor = createGuestCommandExecutor(runIsolatedGuest
|
|
|
539
539
|
* the warm guest-shell executor.
|
|
540
540
|
*/
|
|
541
541
|
function sandboxSystemd() {
|
|
542
|
+
const sandbox = useCurrentTestSandbox();
|
|
542
543
|
return new Systemd({
|
|
543
544
|
executor: guestCommandExecutor,
|
|
544
545
|
linkUnits: true,
|
|
545
546
|
scope: `user`,
|
|
546
|
-
unitDir:
|
|
547
|
+
unitDir: sandbox.linkedUnitDir
|
|
547
548
|
});
|
|
548
549
|
}
|
|
549
550
|
/**
|
|
@@ -551,11 +552,12 @@ function sandboxSystemd() {
|
|
|
551
552
|
* a fresh guest shell per command.
|
|
552
553
|
*/
|
|
553
554
|
function isolatedSandboxSystemd() {
|
|
555
|
+
const sandbox = useCurrentTestSandbox();
|
|
554
556
|
return new Systemd({
|
|
555
557
|
executor: isolatedGuestCommandExecutor,
|
|
556
558
|
linkUnits: true,
|
|
557
559
|
scope: `user`,
|
|
558
|
-
unitDir:
|
|
560
|
+
unitDir: sandbox.linkedUnitDir
|
|
559
561
|
});
|
|
560
562
|
}
|
|
561
563
|
function buildGuestCommand(command, args, options) {
|
package/dist/test.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.mjs","names":["delay","shellQuote","shellQuote"],"sources":["../src/test/host.ts","../src/test/sandbox.ts","../src/test/harness.ts"],"sourcesContent":["import { execFile, spawn, type ChildProcessWithoutNullStreams } from \"node:child_process\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\nconst commandMaxBufferBytes = 16 * 1024 * 1024;\nconst dockerBuildTimeoutMs = 5 * 60 * 1_000;\nconst dockerExecTimeoutMs = 60 * 1_000;\nconst guestCommandTimeoutMs = 10 * 1_000;\nconst repoRoot = fileURLToPath(new URL(`../../../../`, import.meta.url));\nconst dockerfilePath = fileURLToPath(new URL(`./systemd-container.Dockerfile`, import.meta.url));\nconst selectedBackendName = resolveBackendName(process.env[`SYSTEMD_TS_TEST_HOST_BACKEND`]);\nconst colimaHome = process.env[`COLIMA_HOME`] ?? `${repoRoot}.colima`;\nconst limaHome = process.env[`LIMA_HOME`] ?? `${colimaHome}/_lima`;\nconst colimaProfile = process.env[`COLIMA_PROFILE`] ?? `systemd-ts`;\nconst dockerStateRoot = process.env[`SYSTEMD_TS_TEST_HOST_ROOT`] ?? `${repoRoot}.docker`;\nconst dockerImage = process.env[`SYSTEMD_TS_TEST_DOCKER_IMAGE`] ?? `systemd-ts-test-host:local`;\nconst dockerUser = process.env[`SYSTEMD_TS_TEST_DOCKER_USER`] ?? `runner`;\nconst dockerConfiguredUserId = process.env[`SYSTEMD_TS_TEST_DOCKER_UID`];\nconst dockerContainer =\n process.env[`SYSTEMD_TS_TEST_DOCKER_CONTAINER`] ?? defaultDockerContainerName();\n\nexport interface TestHostInfo {\n readonly backend: TestHostBackendName;\n readonly colimaHome?: string;\n readonly colimaProfile?: string;\n readonly limaHome?: string;\n readonly repoRoot: string;\n readonly stateRoot: string;\n}\n\ntype TestHostBackendName = `colima` | `docker`;\n\ninterface TestHostBackend {\n readonly info: TestHostInfo;\n ensureHost(): Promise<void>;\n createGuestShellProcess(): ChildProcessWithoutNullStreams;\n runIsolatedCommand(script: string): Promise<string>;\n}\n\nlet ensuredHost: Promise<TestHostInfo> | undefined;\nlet guestShell: GuestShell | undefined;\n\nexport function getTestHostInfo(): TestHostInfo {\n return backend.info;\n}\n\nexport function ensureTestHost(): Promise<TestHostInfo> {\n ensuredHost ??= ensureTestHostInner();\n return ensuredHost;\n}\n\nexport function closeTestHost(): void {\n closeGuestShell(`warmup complete`);\n}\n\nexport async function runGuestCommand(script: string): Promise<string> {\n const shell = getGuestShell();\n return shell.run(script);\n}\n\nexport async function runIsolatedGuestCommand(script: string): Promise<string> {\n return backend.runIsolatedCommand(script);\n}\n\nasync function ensureTestHostInner(): Promise<TestHostInfo> {\n logTestHost(`Ensuring ${backend.info.backend} test host`);\n await backend.ensureHost();\n logTestHost(`Waiting for systemd --user readiness`);\n await waitForUserSystemd();\n logTestHost(`Test host ready`);\n return getTestHostInfo();\n}\n\nasync function waitForUserSystemd(): Promise<void> {\n for (let attempt = 0; attempt < 30; attempt += 1) {\n const state = await runGuestCommandWithTimeout(\n `printf 'pid1=%s\\n' \"$(ps -p 1 -o comm=)\"; systemctl --user is-system-running || true; printf 'xdg=%s\\n' \"$XDG_RUNTIME_DIR\"`,\n guestCommandTimeoutMs,\n );\n\n if (\n state.includes(`pid1=systemd`) &&\n state.includes(`xdg=/run/user/`) &&\n [`running`, `degraded`].some((status) => state.includes(status))\n ) {\n logTestHost(\n `systemd --user ready after ${attempt + 1} attempt${attempt === 0 ? `` : `s`}: ${summarizeSystemdState(state)}`,\n );\n return;\n }\n\n if (attempt === 0 || (attempt + 1) % 5 === 0) {\n logTestHost(\n `systemd --user not ready yet (${attempt + 1}/30): ${summarizeSystemdState(state)}`,\n );\n }\n\n await delay(1_000);\n }\n\n throw new Error(`Timed out waiting for systemd --user in the ${backend.info.backend} guest`);\n}\n\nfunction getGuestShell(): GuestShell {\n guestShell ??= new GuestShell(\n () => backend.createGuestShellProcess(),\n () => {\n if (guestShell !== undefined) {\n guestShell = undefined;\n }\n },\n );\n return guestShell;\n}\n\nfunction closeGuestShell(reason: string): void {\n if (guestShell === undefined) {\n return;\n }\n\n logTestHost(`Resetting guest shell: ${reason}`);\n guestShell.close();\n guestShell = undefined;\n}\n\nasync function runGuestCommandWithTimeout(script: string, timeoutMs: number): Promise<string> {\n const shell = getGuestShell();\n try {\n return await shell.run(script, timeoutMs);\n } catch (error) {\n if (error instanceof Error && error.message.includes(`timed out`)) {\n closeGuestShell(error.message);\n }\n\n throw error;\n }\n}\n\nfunction mergeOutput(stdout: string, stderr: string): string {\n return [stdout, stderr].filter((output) => output.length > 0).join(`\\n`);\n}\n\nfunction summarizeSystemdState(state: string): string {\n return state\n .split(`\\n`)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .join(`; `);\n}\n\nfunction inferBackendName(): TestHostBackendName {\n if (process.platform === `darwin`) {\n return `colima`;\n }\n\n if (process.platform === `linux`) {\n return `docker`;\n }\n\n throw new Error(\n `Unsupported test host platform: ${process.platform}. Set SYSTEMD_TS_TEST_HOST_BACKEND explicitly if you have a compatible backend.`,\n );\n}\n\nfunction resolveBackendName(value: string | undefined): TestHostBackendName {\n if (value === undefined) {\n return inferBackendName();\n }\n\n if (value === `colima` || value === `docker`) {\n return value;\n }\n\n throw new Error(\n `Unsupported SYSTEMD_TS_TEST_HOST_BACKEND value: ${value}. Expected \"colima\" or \"docker\".`,\n );\n}\n\nfunction defaultDockerContainerName(): string {\n const digest = createHash(`sha256`).update(repoRoot).digest(`hex`).slice(0, 12);\n return `systemd-ts-${digest}`;\n}\n\nfunction logTestHost(message: string): void {\n console.info(`[systemd-ts:test-host] ${message}`);\n}\n\nfunction createBackend(name: TestHostBackendName): TestHostBackend {\n switch (name) {\n case `colima`:\n return new ColimaBackend();\n case `docker`:\n return new DockerBackend();\n }\n}\n\nclass ColimaBackend implements TestHostBackend {\n public readonly info: TestHostInfo = {\n backend: `colima`,\n colimaHome,\n colimaProfile,\n limaHome,\n repoRoot,\n stateRoot: colimaHome,\n };\n\n public async ensureHost(): Promise<void> {\n if (await this.isRunning()) {\n return;\n }\n\n console.info(`Starting repo-local Colima host for integration tests...`);\n await this.execColima([\n `start`,\n `--cpu`,\n `2`,\n `--memory`,\n `4`,\n `--disk`,\n `30`,\n `--runtime`,\n `containerd`,\n ]);\n }\n\n public createGuestShellProcess(): ChildProcessWithoutNullStreams {\n return spawn(`colima`, [`ssh`, `--`, `bash`, `--noprofile`, `--norc`, `-s`], {\n env: this.hostEnv,\n stdio: [`pipe`, `pipe`, `pipe`],\n });\n }\n\n public async runIsolatedCommand(script: string): Promise<string> {\n return this.execColima([`ssh`, `--`, `bash`, `-lc`, script]);\n }\n\n private readonly hostEnv = {\n ...process.env,\n COLIMA_HOME: colimaHome,\n COLIMA_PROFILE: colimaProfile,\n LIMA_HOME: limaHome,\n };\n\n private async isRunning(): Promise<boolean> {\n try {\n const status = await this.execColima([`status`]);\n return status.includes(`is running`);\n } catch {\n return false;\n }\n }\n\n private async execColima(args: readonly string[]): Promise<string> {\n const result = await execFileAsync(`colima`, args, {\n env: this.hostEnv,\n maxBuffer: commandMaxBufferBytes,\n });\n return mergeOutput(result.stdout, result.stderr);\n }\n}\n\nclass DockerBackend implements TestHostBackend {\n public readonly info: TestHostInfo = {\n backend: `docker`,\n repoRoot,\n stateRoot: dockerStateRoot,\n };\n\n private runtimeInfo:\n | {\n readonly home: string;\n readonly runtimeDir: string;\n readonly userId: number;\n }\n | undefined;\n\n public async ensureHost(): Promise<void> {\n logTestHost(`Building Docker test host image ${dockerImage}`);\n await this.execDocker(\n [`build`, `--quiet`, `--tag`, dockerImage, `--file`, dockerfilePath, repoRoot],\n { timeout: dockerBuildTimeoutMs },\n );\n logTestHost(`Docker test host image ready`);\n\n if (!(await this.isContainerRunning())) {\n await this.removeExistingContainer();\n logTestHost(`Starting Docker test host container ${dockerContainer}`);\n await this.execDocker([\n `run`,\n `--detach`,\n `--name`,\n dockerContainer,\n `--hostname`,\n `systemd-ts-test-host`,\n `--privileged`,\n `--cgroupns=host`,\n `--tmpfs`,\n `/run`,\n `--tmpfs`,\n `/run/lock`,\n `--volume`,\n `/sys/fs/cgroup:/sys/fs/cgroup:rw`,\n `--volume`,\n `${repoRoot}:${repoRoot}`,\n `--volume`,\n `${dockerStateRoot}:${dockerStateRoot}`,\n `--workdir`,\n repoRoot,\n dockerImage,\n ]);\n logTestHost(`Docker test host container started`);\n } else {\n logTestHost(`Reusing running Docker test host container ${dockerContainer}`);\n }\n\n await this.ensureUserSession();\n }\n\n public createGuestShellProcess(): ChildProcessWithoutNullStreams {\n const runtimeInfo = this.requireRuntimeInfo();\n return spawn(\n `docker`,\n [\n `exec`,\n `--interactive`,\n `--user`,\n dockerUser,\n `--env`,\n `HOME=${runtimeInfo.home}`,\n `--env`,\n `XDG_RUNTIME_DIR=${runtimeInfo.runtimeDir}`,\n `--env`,\n `DBUS_SESSION_BUS_ADDRESS=unix:path=${runtimeInfo.runtimeDir}/bus`,\n dockerContainer,\n `bash`,\n `--noprofile`,\n `--norc`,\n `-s`,\n ],\n {\n stdio: [`pipe`, `pipe`, `pipe`],\n },\n );\n }\n\n public async runIsolatedCommand(script: string): Promise<string> {\n const runtimeInfo = this.requireRuntimeInfo();\n const result = await this.execDockerAsUser(runtimeInfo, [`bash`, `-lc`, script]);\n\n return mergeOutput(result.stdout, result.stderr);\n }\n\n private async isContainerRunning(): Promise<boolean> {\n try {\n const status = await this.execDocker([\n `inspect`,\n `--format`,\n `{{.State.Running}}`,\n dockerContainer,\n ]);\n return status.trim() === `true`;\n } catch {\n return false;\n }\n }\n\n private async removeExistingContainer(): Promise<void> {\n try {\n await this.execDocker([`rm`, `--force`, dockerContainer]);\n } catch {\n // Ignore missing containers so the first run can proceed.\n }\n }\n\n private async ensureUserSession(): Promise<void> {\n const runtimeInfo = await this.resolveRuntimeInfo();\n logTestHost(\n `Ensuring user session for ${dockerUser} (uid=${runtimeInfo.userId}, home=${runtimeInfo.home})`,\n );\n await this.execDocker(\n [\n `exec`,\n dockerContainer,\n `bash`,\n `-lc`,\n [\n `mkdir -p ${shellQuote(dockerStateRoot)}`,\n `chown ${runtimeInfo.userId}:${runtimeInfo.userId} ${shellQuote(dockerStateRoot)}`,\n `loginctl enable-linger ${shellQuote(dockerUser)}`,\n `systemctl start user@${runtimeInfo.userId}.service`,\n ].join(`\\n`),\n ],\n { timeout: dockerExecTimeoutMs },\n );\n await this.execDockerAsUser(runtimeInfo, [\n `bash`,\n `-lc`,\n `mkdir -p ${shellQuote(`${dockerStateRoot}/tests`)}`,\n ]);\n logTestHost(`User session started for ${dockerUser}`);\n }\n\n private async execDocker(\n args: readonly string[],\n options?: {\n readonly timeout?: number;\n },\n ): Promise<string> {\n const result = await execFileAsync(`docker`, args, {\n maxBuffer: commandMaxBufferBytes,\n timeout: options?.timeout,\n });\n return mergeOutput(result.stdout, result.stderr);\n }\n\n private execDockerAsUser(\n runtimeInfo: {\n readonly home: string;\n readonly runtimeDir: string;\n readonly userId: number;\n },\n command: readonly string[],\n ) {\n return execFileAsync(\n `docker`,\n [\n `exec`,\n `--user`,\n dockerUser,\n `--env`,\n `HOME=${runtimeInfo.home}`,\n `--env`,\n `XDG_RUNTIME_DIR=${runtimeInfo.runtimeDir}`,\n `--env`,\n `DBUS_SESSION_BUS_ADDRESS=unix:path=${runtimeInfo.runtimeDir}/bus`,\n dockerContainer,\n ...command,\n ],\n { maxBuffer: commandMaxBufferBytes },\n );\n }\n\n private requireRuntimeInfo(): {\n readonly home: string;\n readonly runtimeDir: string;\n readonly userId: number;\n } {\n if (this.runtimeInfo === undefined) {\n throw new Error(`Docker test host runtime info is unavailable before ensureHost() completes`);\n }\n\n return this.runtimeInfo;\n }\n\n private async resolveRuntimeInfo(): Promise<{\n readonly home: string;\n readonly runtimeDir: string;\n readonly userId: number;\n }> {\n if (this.runtimeInfo !== undefined) {\n return this.runtimeInfo;\n }\n\n const userId =\n dockerConfiguredUserId === undefined\n ? await this.lookupUserId()\n : Number(dockerConfiguredUserId);\n const home = await this.lookupUserHome();\n\n this.runtimeInfo = {\n home,\n runtimeDir: `/run/user/${userId}`,\n userId,\n };\n\n return this.runtimeInfo;\n }\n\n private async lookupUserHome(): Promise<string> {\n logTestHost(`Resolving home directory for Docker test user ${dockerUser}`);\n const output = await this.execDocker([\n `exec`,\n dockerContainer,\n `bash`,\n `-lc`,\n `getent passwd ${shellQuote(dockerUser)} | cut -d: -f6`,\n ]);\n\n const home = output.trim();\n if (home.length === 0) {\n throw new Error(`Could not resolve home directory for Docker test user ${dockerUser}`);\n }\n\n logTestHost(`Resolved home directory for ${dockerUser}: ${home}`);\n return home;\n }\n\n private async lookupUserId(): Promise<number> {\n logTestHost(`Resolving uid for Docker test user ${dockerUser}`);\n const output = await this.execDocker([\n `exec`,\n dockerContainer,\n `bash`,\n `-lc`,\n `id -u ${shellQuote(dockerUser)}`,\n ]);\n\n const parsed = Number(output.trim());\n if (!Number.isInteger(parsed)) {\n throw new Error(`Could not resolve uid for Docker test user ${dockerUser}`);\n }\n\n logTestHost(`Resolved uid for ${dockerUser}: ${parsed}`);\n return parsed;\n }\n}\n\nclass GuestShell {\n private readonly process: ChildProcessWithoutNullStreams;\n private readonly onExitCleanup: () => void;\n private closed = false;\n private buffer = ``;\n private current:\n | {\n marker: string;\n timeoutId: NodeJS.Timeout | undefined;\n reject: (error: Error) => void;\n resolve: (output: string) => void;\n }\n | undefined;\n private readonly queue: Array<{\n script: string;\n reject: (error: Error) => void;\n resolve: (output: string) => void;\n timeoutMs: number | undefined;\n }> = [];\n\n public constructor(\n createProcess: () => ChildProcessWithoutNullStreams,\n onExitCleanup: () => void,\n ) {\n this.process = createProcess();\n this.onExitCleanup = onExitCleanup;\n this.process.stdout.setEncoding(`utf8`);\n this.process.stderr.setEncoding(`utf8`);\n this.process.stdout.on(`data`, (chunk: string) => this.onData(chunk));\n this.process.stderr.on(`data`, (chunk: string) => this.onData(chunk));\n this.process.on(`exit`, (code, signal) => {\n const reason = new Error(\n `Persistent guest shell exited unexpectedly (code=${code ?? `null`}, signal=${signal ?? `null`})`,\n );\n this.failCurrent(reason);\n while (this.queue.length > 0) {\n this.queue.shift()?.reject(reason);\n }\n this.onExitCleanup();\n });\n\n process.once(`exit`, () => {\n this.process.kill();\n });\n }\n\n public run(script: string, timeoutMs?: number): Promise<string> {\n return new Promise((resolve, reject) => {\n this.queue.push({ script, resolve, reject, timeoutMs });\n this.drain();\n });\n }\n\n public close(): void {\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n this.process.kill();\n }\n\n private drain(): void {\n if (this.current !== undefined) {\n return;\n }\n\n const next = this.queue.shift();\n if (next === undefined) {\n return;\n }\n\n const marker = `__SYSTEMD_TS_END_${randomUUID()}__`;\n const timeoutId =\n next.timeoutMs === undefined\n ? undefined\n : setTimeout(() => {\n if (this.current?.marker !== marker) {\n return;\n }\n\n const reason = new Error(`Guest command timed out after ${next.timeoutMs}ms`);\n this.failCurrent(reason);\n this.close();\n }, next.timeoutMs);\n this.current = {\n marker,\n timeoutId,\n reject: next.reject,\n resolve: next.resolve,\n };\n\n this.buffer = ``;\n const command = `(\n${next.script}\n) 2>&1\nstatus=$?\nprintf '\\\\n${marker}:%s\\\\n' \"$status\"\n`;\n\n this.process.stdin.write(command);\n }\n\n private failCurrent(error: Error): void {\n const current = this.current;\n this.current = undefined;\n if (current?.timeoutId !== undefined) {\n clearTimeout(current.timeoutId);\n }\n current?.reject(error);\n }\n\n private onData(chunk: string): void {\n if (this.current === undefined) {\n return;\n }\n\n this.buffer += chunk;\n const markerIndex = this.buffer.indexOf(this.current.marker);\n if (markerIndex === -1) {\n return;\n }\n\n const output = this.buffer.slice(0, markerIndex).replace(/\\n$/, ``);\n const statusMatch = this.buffer\n .slice(markerIndex)\n .match(/^__SYSTEMD_TS_END_[^:]+__:(\\d+)\\r?\\n?/u);\n\n if (statusMatch === null) {\n return;\n }\n\n const status = Number(statusMatch[1]);\n const remainder = this.buffer.slice(markerIndex + statusMatch[0].length);\n const current = this.current;\n this.current = undefined;\n this.buffer = remainder;\n if (current.timeoutId !== undefined) {\n clearTimeout(current.timeoutId);\n }\n\n if (status === 0) {\n current.resolve(output);\n } else {\n current.reject(new Error(output.length > 0 ? output : `Guest command failed`));\n }\n\n this.drain();\n }\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(`'`, `'\\\\''`)}'`;\n}\n\nconst backend = createBackend(selectedBackendName);\n","import { randomUUID } from \"node:crypto\";\n\nimport { getTestHostInfo, runGuestCommand } from \"./host.ts\";\n\nexport interface TestSandbox {\n readonly id: string;\n readonly linkedUnitDir: string;\n readonly namePrefix: string;\n readonly rootDir: string;\n readonly workDir: string;\n}\n\nexport interface DestroyTestSandboxOptions {\n readonly noisy?: boolean;\n}\n\nlet currentSandbox: TestSandbox | undefined;\n\nexport async function createTestSandbox(testName?: string): Promise<TestSandbox> {\n const id = randomUUID().slice(0, 8);\n const slug = slugify(testName ?? `sandbox`);\n const namePrefix = `systemd-ts-${slug}-${id}`;\n const rootDir = `${getTestHostInfo().stateRoot}/tests/${namePrefix}`;\n const linkedUnitDir = `${rootDir}/linked-units`;\n const workDir = `${rootDir}/work`;\n\n await runGuestCommand(\n `set -euo pipefail\nrm -rf ${shellQuote(rootDir)}\nmkdir -p ${shellQuote(linkedUnitDir)} ${shellQuote(workDir)}`,\n );\n\n currentSandbox = {\n id,\n linkedUnitDir,\n namePrefix,\n rootDir,\n workDir,\n };\n\n return currentSandbox;\n}\n\nexport async function destroyCurrentTestSandbox(): Promise<void> {\n if (currentSandbox === undefined) {\n return;\n }\n\n const sandbox = currentSandbox;\n currentSandbox = undefined;\n\n const unitsOutput = await runGuestCommand(\n `systemctl --user list-unit-files --all --no-legend ${shellQuote(`${sandbox.namePrefix}*`)} 2>/dev/null | awk '{print $1}' || true`,\n );\n\n const units = unitsOutput\n .split(`\\n`)\n .map((unit) => unit.trim())\n .filter((unit) => unit.length > 0);\n\n if (units.length > 0) {\n await runGuestCommand(`systemctl --user stop ${units.map(shellQuote).join(` `)} || true`);\n\n await runGuestCommand(`systemctl --user disable ${units.map(shellQuote).join(` `)} || true`);\n\n await runGuestCommand(\n `systemctl --user reset-failed ${units.map(shellQuote).join(` `)} || true`,\n );\n }\n\n await runGuestCommand(`systemctl --user daemon-reload || true`);\n\n await runGuestCommand(`rm -rf ${shellQuote(sandbox.rootDir)}`);\n}\n\nexport function useCurrentTestSandbox(): TestSandbox {\n if (currentSandbox === undefined) {\n throw new Error(`No active test sandbox is available`);\n }\n\n return currentSandbox;\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(`'`, `'\\\\''`)}'`;\n}\n\nfunction slugify(value: string): string {\n return value\n .toLowerCase()\n .replaceAll(/[^a-z0-9]+/g, `-`)\n .replaceAll(/^-+|-+$/g, ``)\n .slice(0, 32);\n}\n","import {\n Systemd,\n type CommandExecutionOptions,\n type CommandExecutor,\n type CommandOutput,\n} from \"../main/index.ts\";\n\nimport { runGuestCommand, runIsolatedGuestCommand } from \"./host.ts\";\nimport { useCurrentTestSandbox } from \"./sandbox.ts\";\n\n/**\n * Creates a command executor that runs argv-style commands inside the current\n * test host guest shell.\n */\nexport function createGuestCommandExecutor(\n runCommand: (script: string) => Promise<string>,\n): CommandExecutor {\n return async (\n command: string,\n args: readonly string[],\n options: CommandExecutionOptions = {},\n ): Promise<CommandOutput> => {\n try {\n const stdout = await runCommand(buildGuestCommand(command, args, options));\n return {\n stderr: ``,\n stdout,\n };\n } catch (cause) {\n throw enrichGuestCommandError(cause);\n }\n };\n}\n\n/**\n * Executor that reuses the warm guest shell for fast sandbox-backed tests.\n */\nexport const guestCommandExecutor: CommandExecutor = createGuestCommandExecutor(runGuestCommand);\n\n/**\n * Executor that runs each guest command in a fresh isolated guest shell.\n */\nexport const isolatedGuestCommandExecutor: CommandExecutor =\n createGuestCommandExecutor(runIsolatedGuestCommand);\n\n/**\n * Creates a `Systemd` instance scoped to the active test sandbox and backed by\n * the warm guest-shell executor.\n */\nexport function sandboxSystemd(): Systemd {\n const sandbox = useCurrentTestSandbox();\n return new Systemd({\n executor: guestCommandExecutor,\n linkUnits: true,\n scope: `user`,\n unitDir: sandbox.linkedUnitDir,\n });\n}\n\n/**\n * Creates a `Systemd` instance scoped to the active test sandbox and backed by\n * a fresh guest shell per command.\n */\nexport function isolatedSandboxSystemd(): Systemd {\n const sandbox = useCurrentTestSandbox();\n return new Systemd({\n executor: isolatedGuestCommandExecutor,\n linkUnits: true,\n scope: `user`,\n unitDir: sandbox.linkedUnitDir,\n });\n}\n\nfunction buildGuestCommand(\n command: string,\n args: readonly string[],\n options: CommandExecutionOptions,\n): string {\n const envArgs =\n options.env === undefined\n ? []\n : Object.entries(options.env).flatMap(([key, value]) =>\n value === undefined ? [`-u`, key] : [`${key}=${value}`],\n );\n\n return [`env`, ...envArgs, command, ...args].map((part) => shellQuote(part)).join(` `);\n}\n\nfunction enrichGuestCommandError(cause: unknown): Error {\n if (cause instanceof Error) {\n return Object.assign(cause, {\n code: 1,\n stderr: ``,\n stdout: cause.message,\n });\n }\n\n return Object.assign(new Error(`Guest command failed`), {\n code: 1,\n stderr: ``,\n stdout: ``,\n });\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(`'`, `'\\\\''`)}'`;\n}\n"],"mappings":";;;;;;;AAMA,MAAM,gBAAgB,UAAU,QAAQ;AACxC,MAAM,wBAAwB,KAAK,OAAO;AAC1C,MAAM,uBAAuB,MAAS;AACtC,MAAM,sBAAsB,KAAK;AACjC,MAAM,wBAAwB,KAAK;AACnC,MAAM,WAAW,cAAc,IAAI,IAAI,gBAAgB,OAAO,KAAK,GAAG,CAAC;AACvE,MAAM,iBAAiB,cAAc,IAAI,IAAI,kCAAkC,OAAO,KAAK,GAAG,CAAC;AAC/F,MAAM,sBAAsB,mBAAmB,QAAQ,IAAI,+BAA+B;AAC1F,MAAM,aAAa,QAAQ,IAAI,kBAAkB,GAAG,SAAS;AAC7D,MAAM,WAAW,QAAQ,IAAI,gBAAgB,GAAG,WAAW;AAC3D,MAAM,gBAAgB,QAAQ,IAAI,qBAAqB;AACvD,MAAM,kBAAkB,QAAQ,IAAI,gCAAgC,GAAG,SAAS;AAChF,MAAM,cAAc,QAAQ,IAAI,mCAAmC;AACnE,MAAM,aAAa,QAAQ,IAAI,kCAAkC;AACjE,MAAM,yBAAyB,QAAQ,IAAI;AAC3C,MAAM,kBACJ,QAAQ,IAAI,uCAAuC,2BAA2B;AAoBhF,IAAI;AACJ,IAAI;AAEJ,SAAgB,kBAAgC;CAC9C,OAAO,QAAQ;AACjB;AAEA,SAAgB,iBAAwC;CACtD,gBAAgB,oBAAoB;CACpC,OAAO;AACT;AAEA,SAAgB,gBAAsB;CACpC,gBAAgB,iBAAiB;AACnC;AAEA,eAAsB,gBAAgB,QAAiC;CAErE,OADc,cACH,CAAC,CAAC,IAAI,MAAM;AACzB;AAEA,eAAsB,wBAAwB,QAAiC;CAC7E,OAAO,QAAQ,mBAAmB,MAAM;AAC1C;AAEA,eAAe,sBAA6C;CAC1D,YAAY,YAAY,QAAQ,KAAK,QAAQ,WAAW;CACxD,MAAM,QAAQ,WAAW;CACzB,YAAY,sCAAsC;CAClD,MAAM,mBAAmB;CACzB,YAAY,iBAAiB;CAC7B,OAAO,gBAAgB;AACzB;AAEA,eAAe,qBAAoC;CACjD,KAAK,IAAI,UAAU,GAAG,UAAU,IAAI,WAAW,GAAG;EAChD,MAAM,QAAQ,MAAM,2BAClB,8HACA,qBACF;EAEA,IACE,MAAM,SAAS,cAAc,KAC7B,MAAM,SAAS,gBAAgB,KAC/B,CAAC,WAAW,UAAU,CAAC,CAAC,MAAM,WAAW,MAAM,SAAS,MAAM,CAAC,GAC/D;GACA,YACE,8BAA8B,UAAU,EAAE,UAAU,YAAY,IAAI,KAAK,IAAI,IAAI,sBAAsB,KAAK,GAC9G;GACA;EACF;EAEA,IAAI,YAAY,MAAM,UAAU,KAAK,MAAM,GACzC,YACE,iCAAiC,UAAU,EAAE,QAAQ,sBAAsB,KAAK,GAClF;EAGF,MAAMA,aAAM,GAAK;CACnB;CAEA,MAAM,IAAI,MAAM,+CAA+C,QAAQ,KAAK,QAAQ,OAAO;AAC7F;AAEA,SAAS,gBAA4B;CACnC,eAAe,IAAI,iBACX,QAAQ,wBAAwB,SAChC;EACJ,IAAI,eAAe,KAAA,GACjB,aAAa,KAAA;CAEjB,CACF;CACA,OAAO;AACT;AAEA,SAAS,gBAAgB,QAAsB;CAC7C,IAAI,eAAe,KAAA,GACjB;CAGF,YAAY,0BAA0B,QAAQ;CAC9C,WAAW,MAAM;CACjB,aAAa,KAAA;AACf;AAEA,eAAe,2BAA2B,QAAgB,WAAoC;CAC5F,MAAM,QAAQ,cAAc;CAC5B,IAAI;EACF,OAAO,MAAM,MAAM,IAAI,QAAQ,SAAS;CAC1C,SAAS,OAAO;EACd,IAAI,iBAAiB,SAAS,MAAM,QAAQ,SAAS,WAAW,GAC9D,gBAAgB,MAAM,OAAO;EAG/B,MAAM;CACR;AACF;AAEA,SAAS,YAAY,QAAgB,QAAwB;CAC3D,OAAO,CAAC,QAAQ,MAAM,CAAC,CAAC,QAAQ,WAAW,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI;AACzE;AAEA,SAAS,sBAAsB,OAAuB;CACpD,OAAO,MACJ,MAAM,IAAI,CAAC,CACX,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAC1B,QAAQ,SAAS,KAAK,SAAS,CAAC,CAAC,CACjC,KAAK,IAAI;AACd;AAEA,SAAS,mBAAwC;CAC/C,IAAI,QAAQ,aAAa,UACvB,OAAO;CAGT,IAAI,QAAQ,aAAa,SACvB,OAAO;CAGT,MAAM,IAAI,MACR,mCAAmC,QAAQ,SAAS,gFACtD;AACF;AAEA,SAAS,mBAAmB,OAAgD;CAC1E,IAAI,UAAU,KAAA,GACZ,OAAO,iBAAiB;CAG1B,IAAI,UAAU,YAAY,UAAU,UAClC,OAAO;CAGT,MAAM,IAAI,MACR,mDAAmD,MAAM,iCAC3D;AACF;AAEA,SAAS,6BAAqC;CAE5C,OAAO,cADQ,WAAW,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAClD;AAC5B;AAEA,SAAS,YAAY,SAAuB;CAC1C,QAAQ,KAAK,0BAA0B,SAAS;AAClD;AAEA,SAAS,cAAc,MAA4C;CACjE,QAAQ,MAAR;EACE,KAAK,UACH,OAAO,IAAI,cAAc;EAC3B,KAAK,UACH,OAAO,IAAI,cAAc;CAC7B;AACF;AAEA,IAAM,gBAAN,MAA+C;CAC7C,OAAqC;EACnC,SAAS;EACT;EACA;EACA;EACA;EACA,WAAW;CACb;CAEA,MAAa,aAA4B;EACvC,IAAI,MAAM,KAAK,UAAU,GACvB;EAGF,QAAQ,KAAK,0DAA0D;EACvE,MAAM,KAAK,WAAW;GACpB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;CACH;CAEA,0BAAiE;EAC/D,OAAO,MAAM,UAAU;GAAC;GAAO;GAAM;GAAQ;GAAe;GAAU;EAAI,GAAG;GAC3E,KAAK,KAAK;GACV,OAAO;IAAC;IAAQ;IAAQ;GAAM;EAChC,CAAC;CACH;CAEA,MAAa,mBAAmB,QAAiC;EAC/D,OAAO,KAAK,WAAW;GAAC;GAAO;GAAM;GAAQ;GAAO;EAAM,CAAC;CAC7D;CAEA,UAA2B;EACzB,GAAG,QAAQ;EACX,aAAa;EACb,gBAAgB;EAChB,WAAW;CACb;CAEA,MAAc,YAA8B;EAC1C,IAAI;GAEF,QAAO,MADc,KAAK,WAAW,CAAC,QAAQ,CAAC,EAAA,CACjC,SAAS,YAAY;EACrC,QAAQ;GACN,OAAO;EACT;CACF;CAEA,MAAc,WAAW,MAA0C;EACjE,MAAM,SAAS,MAAM,cAAc,UAAU,MAAM;GACjD,KAAK,KAAK;GACV,WAAW;EACb,CAAC;EACD,OAAO,YAAY,OAAO,QAAQ,OAAO,MAAM;CACjD;AACF;AAEA,IAAM,gBAAN,MAA+C;CAC7C,OAAqC;EACnC,SAAS;EACT;EACA,WAAW;CACb;CAEA;CAQA,MAAa,aAA4B;EACvC,YAAY,mCAAmC,aAAa;EAC5D,MAAM,KAAK,WACT;GAAC;GAAS;GAAW;GAAS;GAAa;GAAU;GAAgB;EAAQ,GAC7E,EAAE,SAAS,qBAAqB,CAClC;EACA,YAAY,8BAA8B;EAE1C,IAAI,CAAE,MAAM,KAAK,mBAAmB,GAAI;GACtC,MAAM,KAAK,wBAAwB;GACnC,YAAY,uCAAuC,iBAAiB;GACpE,MAAM,KAAK,WAAW;IACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,GAAG,SAAS,GAAG;IACf;IACA,GAAG,gBAAgB,GAAG;IACtB;IACA;IACA;GACF,CAAC;GACD,YAAY,oCAAoC;EAClD,OACE,YAAY,8CAA8C,iBAAiB;EAG7E,MAAM,KAAK,kBAAkB;CAC/B;CAEA,0BAAiE;EAC/D,MAAM,cAAc,KAAK,mBAAmB;EAC5C,OAAO,MACL,UACA;GACE;GACA;GACA;GACA;GACA;GACA,QAAQ,YAAY;GACpB;GACA,mBAAmB,YAAY;GAC/B;GACA,sCAAsC,YAAY,WAAW;GAC7D;GACA;GACA;GACA;GACA;EACF,GACA,EACE,OAAO;GAAC;GAAQ;GAAQ;EAAM,EAChC,CACF;CACF;CAEA,MAAa,mBAAmB,QAAiC;EAC/D,MAAM,cAAc,KAAK,mBAAmB;EAC5C,MAAM,SAAS,MAAM,KAAK,iBAAiB,aAAa;GAAC;GAAQ;GAAO;EAAM,CAAC;EAE/E,OAAO,YAAY,OAAO,QAAQ,OAAO,MAAM;CACjD;CAEA,MAAc,qBAAuC;EACnD,IAAI;GAOF,QAAO,MANc,KAAK,WAAW;IACnC;IACA;IACA;IACA;GACF,CAAC,EAAA,CACa,KAAK,MAAM;EAC3B,QAAQ;GACN,OAAO;EACT;CACF;CAEA,MAAc,0BAAyC;EACrD,IAAI;GACF,MAAM,KAAK,WAAW;IAAC;IAAM;IAAW;GAAe,CAAC;EAC1D,QAAQ,CAER;CACF;CAEA,MAAc,oBAAmC;EAC/C,MAAM,cAAc,MAAM,KAAK,mBAAmB;EAClD,YACE,6BAA6B,WAAW,QAAQ,YAAY,OAAO,SAAS,YAAY,KAAK,EAC/F;EACA,MAAM,KAAK,WACT;GACE;GACA;GACA;GACA;GACA;IACE,YAAYC,aAAW,eAAe;IACtC,SAAS,YAAY,OAAO,GAAG,YAAY,OAAO,GAAGA,aAAW,eAAe;IAC/E,0BAA0BA,aAAW,UAAU;IAC/C,wBAAwB,YAAY,OAAO;GAC7C,CAAC,CAAC,KAAK,IAAI;EACb,GACA,EAAE,SAAS,oBAAoB,CACjC;EACA,MAAM,KAAK,iBAAiB,aAAa;GACvC;GACA;GACA,YAAYA,aAAW,GAAG,gBAAgB,OAAO;EACnD,CAAC;EACD,YAAY,4BAA4B,YAAY;CACtD;CAEA,MAAc,WACZ,MACA,SAGiB;EACjB,MAAM,SAAS,MAAM,cAAc,UAAU,MAAM;GACjD,WAAW;GACX,SAAS,SAAS;EACpB,CAAC;EACD,OAAO,YAAY,OAAO,QAAQ,OAAO,MAAM;CACjD;CAEA,iBACE,aAKA,SACA;EACA,OAAO,cACL,UACA;GACE;GACA;GACA;GACA;GACA,QAAQ,YAAY;GACpB;GACA,mBAAmB,YAAY;GAC/B;GACA,sCAAsC,YAAY,WAAW;GAC7D;GACA,GAAG;EACL,GACA,EAAE,WAAW,sBAAsB,CACrC;CACF;CAEA,qBAIE;EACA,IAAI,KAAK,gBAAgB,KAAA,GACvB,MAAM,IAAI,MAAM,4EAA4E;EAG9F,OAAO,KAAK;CACd;CAEA,MAAc,qBAIX;EACD,IAAI,KAAK,gBAAgB,KAAA,GACvB,OAAO,KAAK;EAGd,MAAM,SACJ,2BAA2B,KAAA,IACvB,MAAM,KAAK,aAAa,IACxB,OAAO,sBAAsB;EACnC,MAAM,OAAO,MAAM,KAAK,eAAe;EAEvC,KAAK,cAAc;GACjB;GACA,YAAY,aAAa;GACzB;EACF;EAEA,OAAO,KAAK;CACd;CAEA,MAAc,iBAAkC;EAC9C,YAAY,iDAAiD,YAAY;EASzE,MAAM,QAAO,MARQ,KAAK,WAAW;GACnC;GACA;GACA;GACA;GACA,iBAAiBA,aAAW,UAAU,EAAE;EAC1C,CAAC,EAAA,CAEmB,KAAK;EACzB,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,MAAM,yDAAyD,YAAY;EAGvF,YAAY,+BAA+B,WAAW,IAAI,MAAM;EAChE,OAAO;CACT;CAEA,MAAc,eAAgC;EAC5C,YAAY,sCAAsC,YAAY;EAC9D,MAAM,SAAS,MAAM,KAAK,WAAW;GACnC;GACA;GACA;GACA;GACA,SAASA,aAAW,UAAU;EAChC,CAAC;EAED,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC;EACnC,IAAI,CAAC,OAAO,UAAU,MAAM,GAC1B,MAAM,IAAI,MAAM,8CAA8C,YAAY;EAG5E,YAAY,oBAAoB,WAAW,IAAI,QAAQ;EACvD,OAAO;CACT;AACF;AAEA,IAAM,aAAN,MAAiB;CACf;CACA;CACA,SAAiB;CACjB,SAAiB;CACjB;CAQA,QAKK,CAAC;CAEN,YACE,eACA,eACA;EACA,KAAK,UAAU,cAAc;EAC7B,KAAK,gBAAgB;EACrB,KAAK,QAAQ,OAAO,YAAY,MAAM;EACtC,KAAK,QAAQ,OAAO,YAAY,MAAM;EACtC,KAAK,QAAQ,OAAO,GAAG,SAAS,UAAkB,KAAK,OAAO,KAAK,CAAC;EACpE,KAAK,QAAQ,OAAO,GAAG,SAAS,UAAkB,KAAK,OAAO,KAAK,CAAC;EACpE,KAAK,QAAQ,GAAG,SAAS,MAAM,WAAW;GACxC,MAAM,yBAAS,IAAI,MACjB,oDAAoD,QAAQ,OAAO,WAAW,UAAU,OAAO,EACjG;GACA,KAAK,YAAY,MAAM;GACvB,OAAO,KAAK,MAAM,SAAS,GACzB,KAAK,MAAM,MAAM,CAAC,EAAE,OAAO,MAAM;GAEnC,KAAK,cAAc;EACrB,CAAC;EAED,QAAQ,KAAK,cAAc;GACzB,KAAK,QAAQ,KAAK;EACpB,CAAC;CACH;CAEA,IAAW,QAAgB,WAAqC;EAC9D,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,KAAK,MAAM,KAAK;IAAE;IAAQ;IAAS;IAAQ;GAAU,CAAC;GACtD,KAAK,MAAM;EACb,CAAC;CACH;CAEA,QAAqB;EACnB,IAAI,KAAK,QACP;EAGF,KAAK,SAAS;EACd,KAAK,QAAQ,KAAK;CACpB;CAEA,QAAsB;EACpB,IAAI,KAAK,YAAY,KAAA,GACnB;EAGF,MAAM,OAAO,KAAK,MAAM,MAAM;EAC9B,IAAI,SAAS,KAAA,GACX;EAGF,MAAM,SAAS,oBAAoB,WAAW,EAAE;EAChD,MAAM,YACJ,KAAK,cAAc,KAAA,IACf,KAAA,IACA,iBAAiB;GACf,IAAI,KAAK,SAAS,WAAW,QAC3B;GAGF,MAAM,yBAAS,IAAI,MAAM,iCAAiC,KAAK,UAAU,GAAG;GAC5E,KAAK,YAAY,MAAM;GACvB,KAAK,MAAM;EACb,GAAG,KAAK,SAAS;EACvB,KAAK,UAAU;GACb;GACA;GACA,QAAQ,KAAK;GACb,SAAS,KAAK;EAChB;EAEA,KAAK,SAAS;EACd,MAAM,UAAU;EAClB,KAAK,OAAO;;;aAGD,OAAO;;EAGhB,KAAK,QAAQ,MAAM,MAAM,OAAO;CAClC;CAEA,YAAoB,OAAoB;EACtC,MAAM,UAAU,KAAK;EACrB,KAAK,UAAU,KAAA;EACf,IAAI,SAAS,cAAc,KAAA,GACzB,aAAa,QAAQ,SAAS;EAEhC,SAAS,OAAO,KAAK;CACvB;CAEA,OAAe,OAAqB;EAClC,IAAI,KAAK,YAAY,KAAA,GACnB;EAGF,KAAK,UAAU;EACf,MAAM,cAAc,KAAK,OAAO,QAAQ,KAAK,QAAQ,MAAM;EAC3D,IAAI,gBAAgB,IAClB;EAGF,MAAM,SAAS,KAAK,OAAO,MAAM,GAAG,WAAW,CAAC,CAAC,QAAQ,OAAO,EAAE;EAClE,MAAM,cAAc,KAAK,OACtB,MAAM,WAAW,CAAC,CAClB,MAAM,wCAAwC;EAEjD,IAAI,gBAAgB,MAClB;EAGF,MAAM,SAAS,OAAO,YAAY,EAAE;EACpC,MAAM,YAAY,KAAK,OAAO,MAAM,cAAc,YAAY,EAAE,CAAC,MAAM;EACvE,MAAM,UAAU,KAAK;EACrB,KAAK,UAAU,KAAA;EACf,KAAK,SAAS;EACd,IAAI,QAAQ,cAAc,KAAA,GACxB,aAAa,QAAQ,SAAS;EAGhC,IAAI,WAAW,GACb,QAAQ,QAAQ,MAAM;OAEtB,QAAQ,OAAO,IAAI,MAAM,OAAO,SAAS,IAAI,SAAS,sBAAsB,CAAC;EAG/E,KAAK,MAAM;CACb;AACF;AAEA,SAASA,aAAW,OAAuB;CACzC,OAAO,IAAI,MAAM,WAAW,KAAK,OAAO,EAAE;AAC5C;AAEA,MAAM,UAAU,cAAc,mBAAmB;;;ACnpBjD,IAAI;AAEJ,eAAsB,kBAAkB,UAAyC;CAC/E,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;CAElC,MAAM,aAAa,cADN,QAAQ,YAAY,SACG,EAAE,GAAG;CACzC,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,UAAU,SAAS;CACxD,MAAM,gBAAgB,GAAG,QAAQ;CACjC,MAAM,UAAU,GAAG,QAAQ;CAE3B,MAAM,gBACJ;SACKC,aAAW,OAAO,EAAE;WAClBA,aAAW,aAAa,EAAE,GAAGA,aAAW,OAAO,GACxD;CAEA,iBAAiB;EACf;EACA;EACA;EACA;EACA;CACF;CAEA,OAAO;AACT;AAEA,eAAsB,4BAA2C;CAC/D,IAAI,mBAAmB,KAAA,GACrB;CAGF,MAAM,UAAU;CAChB,iBAAiB,KAAA;CAMjB,MAAM,SAAQ,MAJY,gBACxB,sDAAsDA,aAAW,GAAG,QAAQ,WAAW,EAAE,EAAE,wCAC7F,EAAA,CAGG,MAAM,IAAI,CAAC,CACX,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAC1B,QAAQ,SAAS,KAAK,SAAS,CAAC;CAEnC,IAAI,MAAM,SAAS,GAAG;EACpB,MAAM,gBAAgB,yBAAyB,MAAM,IAAIA,YAAU,CAAC,CAAC,KAAK,GAAG,EAAE,SAAS;EAExF,MAAM,gBAAgB,4BAA4B,MAAM,IAAIA,YAAU,CAAC,CAAC,KAAK,GAAG,EAAE,SAAS;EAE3F,MAAM,gBACJ,iCAAiC,MAAM,IAAIA,YAAU,CAAC,CAAC,KAAK,GAAG,EAAE,SACnE;CACF;CAEA,MAAM,gBAAgB,wCAAwC;CAE9D,MAAM,gBAAgB,UAAUA,aAAW,QAAQ,OAAO,GAAG;AAC/D;AAEA,SAAgB,wBAAqC;CACnD,IAAI,mBAAmB,KAAA,GACrB,MAAM,IAAI,MAAM,qCAAqC;CAGvD,OAAO;AACT;AAEA,SAASA,aAAW,OAAuB;CACzC,OAAO,IAAI,MAAM,WAAW,KAAK,OAAO,EAAE;AAC5C;AAEA,SAAS,QAAQ,OAAuB;CACtC,OAAO,MACJ,YAAY,CAAC,CACb,WAAW,eAAe,GAAG,CAAC,CAC9B,WAAW,YAAY,EAAE,CAAC,CAC1B,MAAM,GAAG,EAAE;AAChB;;;;;;;AC/EA,SAAgB,2BACd,YACiB;CACjB,OAAO,OACL,SACA,MACA,UAAmC,CAAC,MACT;EAC3B,IAAI;GAEF,OAAO;IACL,QAAQ;IACR,QAAA,MAHmB,WAAW,kBAAkB,SAAS,MAAM,OAAO,CAAC;GAIzE;EACF,SAAS,OAAO;GACd,MAAM,wBAAwB,KAAK;EACrC;CACF;AACF;;;;AAKA,MAAa,uBAAwC,2BAA2B,eAAe;;;;AAK/F,MAAa,+BACX,2BAA2B,uBAAuB;;;;;AAMpD,SAAgB,iBAA0B;CAExC,OAAO,IAAI,QAAQ;EACjB,UAAU;EACV,WAAW;EACX,OAAO;EACP,SALc,sBAKC,CAAC,CAAC;CACnB,CAAC;AACH;;;;;AAMA,SAAgB,yBAAkC;CAEhD,OAAO,IAAI,QAAQ;EACjB,UAAU;EACV,WAAW;EACX,OAAO;EACP,SALc,sBAKC,CAAC,CAAC;CACnB,CAAC;AACH;AAEA,SAAS,kBACP,SACA,MACA,SACQ;CAQR,OAAO;EAAC;EAAO,GANb,QAAQ,QAAQ,KAAA,IACZ,CAAC,IACD,OAAO,QAAQ,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,WACzC,UAAU,KAAA,IAAY,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CACxD;EAEqB;EAAS,GAAG;CAAI,CAAC,CAAC,KAAK,SAAS,WAAW,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;AACvF;AAEA,SAAS,wBAAwB,OAAuB;CACtD,IAAI,iBAAiB,OACnB,OAAO,OAAO,OAAO,OAAO;EAC1B,MAAM;EACN,QAAQ;EACR,QAAQ,MAAM;CAChB,CAAC;CAGH,OAAO,OAAO,uBAAO,IAAI,MAAM,sBAAsB,GAAG;EACtD,MAAM;EACN,QAAQ;EACR,QAAQ;CACV,CAAC;AACH;AAEA,SAAS,WAAW,OAAuB;CACzC,OAAO,IAAI,MAAM,WAAW,KAAK,OAAO,EAAE;AAC5C"}
|
|
1
|
+
{"version":3,"file":"test.mjs","names":["delay","shellQuote","shellQuote"],"sources":["../src/test/host.ts","../src/test/sandbox.ts","../src/test/harness.ts"],"sourcesContent":["import { execFile, spawn, type ChildProcessWithoutNullStreams } from \"node:child_process\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\nconst commandMaxBufferBytes = 16 * 1024 * 1024;\nconst dockerBuildTimeoutMs = 5 * 60 * 1_000;\nconst dockerExecTimeoutMs = 60 * 1_000;\nconst guestCommandTimeoutMs = 10 * 1_000;\nconst repoRoot = fileURLToPath(new URL(`../../../../`, import.meta.url));\nconst dockerfilePath = fileURLToPath(new URL(`./systemd-container.Dockerfile`, import.meta.url));\nconst selectedBackendName = resolveBackendName(process.env[`SYSTEMD_TS_TEST_HOST_BACKEND`]);\nconst colimaHome = process.env[`COLIMA_HOME`] ?? `${repoRoot}.colima`;\nconst limaHome = process.env[`LIMA_HOME`] ?? `${colimaHome}/_lima`;\nconst colimaProfile = process.env[`COLIMA_PROFILE`] ?? `systemd-ts`;\nconst dockerStateRoot = process.env[`SYSTEMD_TS_TEST_HOST_ROOT`] ?? `${repoRoot}.docker`;\nconst dockerImage = process.env[`SYSTEMD_TS_TEST_DOCKER_IMAGE`] ?? `systemd-ts-test-host:local`;\nconst dockerUser = process.env[`SYSTEMD_TS_TEST_DOCKER_USER`] ?? `runner`;\nconst dockerConfiguredUserId = process.env[`SYSTEMD_TS_TEST_DOCKER_UID`];\nconst dockerContainer =\n process.env[`SYSTEMD_TS_TEST_DOCKER_CONTAINER`] ?? defaultDockerContainerName();\n\nexport interface TestHostInfo {\n readonly backend: TestHostBackendName;\n readonly colimaHome?: string;\n readonly colimaProfile?: string;\n readonly limaHome?: string;\n readonly repoRoot: string;\n readonly stateRoot: string;\n}\n\ntype TestHostBackendName = `colima` | `docker`;\n\ninterface TestHostBackend {\n readonly info: TestHostInfo;\n ensureHost(): Promise<void>;\n createGuestShellProcess(): ChildProcessWithoutNullStreams;\n runIsolatedCommand(script: string): Promise<string>;\n}\n\nlet ensuredHost: Promise<TestHostInfo> | undefined;\nlet guestShell: GuestShell | undefined;\n\nexport function getTestHostInfo(): TestHostInfo {\n return backend.info;\n}\n\nexport function ensureTestHost(): Promise<TestHostInfo> {\n ensuredHost ??= ensureTestHostInner();\n return ensuredHost;\n}\n\nexport function closeTestHost(): void {\n closeGuestShell(`warmup complete`);\n}\n\nexport async function runGuestCommand(script: string): Promise<string> {\n const shell = getGuestShell();\n return shell.run(script);\n}\n\nexport async function runIsolatedGuestCommand(script: string): Promise<string> {\n return backend.runIsolatedCommand(script);\n}\n\nasync function ensureTestHostInner(): Promise<TestHostInfo> {\n logTestHost(`Ensuring ${backend.info.backend} test host`);\n await backend.ensureHost();\n logTestHost(`Waiting for systemd --user readiness`);\n await waitForUserSystemd();\n logTestHost(`Test host ready`);\n return getTestHostInfo();\n}\n\nasync function waitForUserSystemd(): Promise<void> {\n for (let attempt = 0; attempt < 30; attempt += 1) {\n const state = await runGuestCommandWithTimeout(\n `printf 'pid1=%s\\n' \"$(ps -p 1 -o comm=)\"; systemctl --user is-system-running || true; printf 'xdg=%s\\n' \"$XDG_RUNTIME_DIR\"`,\n guestCommandTimeoutMs,\n );\n\n if (\n state.includes(`pid1=systemd`) &&\n state.includes(`xdg=/run/user/`) &&\n [`running`, `degraded`].some((status) => state.includes(status))\n ) {\n logTestHost(\n `systemd --user ready after ${attempt + 1} attempt${attempt === 0 ? `` : `s`}: ${summarizeSystemdState(state)}`,\n );\n return;\n }\n\n if (attempt === 0 || (attempt + 1) % 5 === 0) {\n logTestHost(\n `systemd --user not ready yet (${attempt + 1}/30): ${summarizeSystemdState(state)}`,\n );\n }\n\n await delay(1_000);\n }\n\n throw new Error(`Timed out waiting for systemd --user in the ${backend.info.backend} guest`);\n}\n\nfunction getGuestShell(): GuestShell {\n guestShell ??= new GuestShell(\n () => backend.createGuestShellProcess(),\n () => {\n if (guestShell !== undefined) {\n guestShell = undefined;\n }\n },\n );\n return guestShell;\n}\n\nfunction closeGuestShell(reason: string): void {\n if (guestShell === undefined) {\n return;\n }\n\n logTestHost(`Resetting guest shell: ${reason}`);\n guestShell.close();\n guestShell = undefined;\n}\n\nasync function runGuestCommandWithTimeout(script: string, timeoutMs: number): Promise<string> {\n const shell = getGuestShell();\n try {\n return await shell.run(script, timeoutMs);\n } catch (error) {\n if (error instanceof Error && error.message.includes(`timed out`)) {\n closeGuestShell(error.message);\n }\n\n throw error;\n }\n}\n\nfunction mergeOutput(stdout: string, stderr: string): string {\n return [stdout, stderr].filter((output) => output.length > 0).join(`\\n`);\n}\n\nfunction summarizeSystemdState(state: string): string {\n return state\n .split(`\\n`)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .join(`; `);\n}\n\nfunction inferBackendName(): TestHostBackendName {\n if (process.platform === `darwin`) {\n return `colima`;\n }\n\n if (process.platform === `linux`) {\n return `docker`;\n }\n\n throw new Error(\n `Unsupported test host platform: ${process.platform}. Set SYSTEMD_TS_TEST_HOST_BACKEND explicitly if you have a compatible backend.`,\n );\n}\n\nfunction resolveBackendName(value: string | undefined): TestHostBackendName {\n if (value === undefined) {\n return inferBackendName();\n }\n\n if (value === `colima` || value === `docker`) {\n return value;\n }\n\n throw new Error(\n `Unsupported SYSTEMD_TS_TEST_HOST_BACKEND value: ${value}. Expected \"colima\" or \"docker\".`,\n );\n}\n\nfunction defaultDockerContainerName(): string {\n const digest = createHash(`sha256`).update(repoRoot).digest(`hex`).slice(0, 12);\n return `systemd-ts-${digest}`;\n}\n\nfunction logTestHost(message: string): void {\n console.info(`[systemd-ts:test-host] ${message}`);\n}\n\nfunction createBackend(name: TestHostBackendName): TestHostBackend {\n switch (name) {\n case `colima`:\n return new ColimaBackend();\n case `docker`:\n return new DockerBackend();\n }\n}\n\nclass ColimaBackend implements TestHostBackend {\n public readonly info: TestHostInfo = {\n backend: `colima`,\n colimaHome,\n colimaProfile,\n limaHome,\n repoRoot,\n stateRoot: colimaHome,\n };\n\n public async ensureHost(): Promise<void> {\n if (await this.isRunning()) {\n return;\n }\n\n console.info(`Starting repo-local Colima host for integration tests...`);\n await this.execColima([\n `start`,\n `--cpu`,\n `2`,\n `--memory`,\n `4`,\n `--disk`,\n `30`,\n `--runtime`,\n `containerd`,\n ]);\n }\n\n public createGuestShellProcess(): ChildProcessWithoutNullStreams {\n return spawn(`colima`, [`ssh`, `--`, `bash`, `--noprofile`, `--norc`, `-s`], {\n env: this.hostEnv,\n stdio: [`pipe`, `pipe`, `pipe`],\n });\n }\n\n public async runIsolatedCommand(script: string): Promise<string> {\n return this.execColima([`ssh`, `--`, `bash`, `-lc`, script]);\n }\n\n private readonly hostEnv = {\n ...process.env,\n COLIMA_HOME: colimaHome,\n COLIMA_PROFILE: colimaProfile,\n LIMA_HOME: limaHome,\n };\n\n private async isRunning(): Promise<boolean> {\n try {\n const status = await this.execColima([`status`]);\n return status.includes(`is running`);\n } catch {\n return false;\n }\n }\n\n private async execColima(args: readonly string[]): Promise<string> {\n const result = await execFileAsync(`colima`, args, {\n env: this.hostEnv,\n maxBuffer: commandMaxBufferBytes,\n });\n return mergeOutput(result.stdout, result.stderr);\n }\n}\n\nclass DockerBackend implements TestHostBackend {\n public readonly info: TestHostInfo = {\n backend: `docker`,\n repoRoot,\n stateRoot: dockerStateRoot,\n };\n\n private runtimeInfo:\n | {\n readonly home: string;\n readonly runtimeDir: string;\n readonly userId: number;\n }\n | undefined;\n\n public async ensureHost(): Promise<void> {\n logTestHost(`Building Docker test host image ${dockerImage}`);\n await this.execDocker(\n [`build`, `--quiet`, `--tag`, dockerImage, `--file`, dockerfilePath, repoRoot],\n { timeout: dockerBuildTimeoutMs },\n );\n logTestHost(`Docker test host image ready`);\n\n if (!(await this.isContainerRunning())) {\n await this.removeExistingContainer();\n logTestHost(`Starting Docker test host container ${dockerContainer}`);\n await this.execDocker([\n `run`,\n `--detach`,\n `--name`,\n dockerContainer,\n `--hostname`,\n `systemd-ts-test-host`,\n `--privileged`,\n `--cgroupns=host`,\n `--tmpfs`,\n `/run`,\n `--tmpfs`,\n `/run/lock`,\n `--volume`,\n `/sys/fs/cgroup:/sys/fs/cgroup:rw`,\n `--volume`,\n `${repoRoot}:${repoRoot}`,\n `--volume`,\n `${dockerStateRoot}:${dockerStateRoot}`,\n `--workdir`,\n repoRoot,\n dockerImage,\n ]);\n logTestHost(`Docker test host container started`);\n } else {\n logTestHost(`Reusing running Docker test host container ${dockerContainer}`);\n }\n\n await this.ensureUserSession();\n }\n\n public createGuestShellProcess(): ChildProcessWithoutNullStreams {\n const runtimeInfo = this.requireRuntimeInfo();\n return spawn(\n `docker`,\n [\n `exec`,\n `--interactive`,\n `--user`,\n dockerUser,\n `--env`,\n `HOME=${runtimeInfo.home}`,\n `--env`,\n `XDG_RUNTIME_DIR=${runtimeInfo.runtimeDir}`,\n `--env`,\n `DBUS_SESSION_BUS_ADDRESS=unix:path=${runtimeInfo.runtimeDir}/bus`,\n dockerContainer,\n `bash`,\n `--noprofile`,\n `--norc`,\n `-s`,\n ],\n {\n stdio: [`pipe`, `pipe`, `pipe`],\n },\n );\n }\n\n public async runIsolatedCommand(script: string): Promise<string> {\n const runtimeInfo = this.requireRuntimeInfo();\n const result = await this.execDockerAsUser(runtimeInfo, [`bash`, `-lc`, script]);\n\n return mergeOutput(result.stdout, result.stderr);\n }\n\n private async isContainerRunning(): Promise<boolean> {\n try {\n const status = await this.execDocker([\n `inspect`,\n `--format`,\n `{{.State.Running}}`,\n dockerContainer,\n ]);\n return status.trim() === `true`;\n } catch {\n return false;\n }\n }\n\n private async removeExistingContainer(): Promise<void> {\n try {\n await this.execDocker([`rm`, `--force`, dockerContainer]);\n } catch {\n // Ignore missing containers so the first run can proceed.\n }\n }\n\n private async ensureUserSession(): Promise<void> {\n const runtimeInfo = await this.resolveRuntimeInfo();\n logTestHost(\n `Ensuring user session for ${dockerUser} (uid=${runtimeInfo.userId}, home=${runtimeInfo.home})`,\n );\n await this.execDocker(\n [\n `exec`,\n dockerContainer,\n `bash`,\n `-lc`,\n [\n `mkdir -p ${shellQuote(dockerStateRoot)}`,\n `chown ${runtimeInfo.userId}:${runtimeInfo.userId} ${shellQuote(dockerStateRoot)}`,\n `loginctl enable-linger ${shellQuote(dockerUser)}`,\n `systemctl start user@${runtimeInfo.userId}.service`,\n ].join(`\\n`),\n ],\n { timeout: dockerExecTimeoutMs },\n );\n await this.execDockerAsUser(runtimeInfo, [\n `bash`,\n `-lc`,\n `mkdir -p ${shellQuote(`${dockerStateRoot}/tests`)}`,\n ]);\n logTestHost(`User session started for ${dockerUser}`);\n }\n\n private async execDocker(\n args: readonly string[],\n options?: {\n readonly timeout?: number;\n },\n ): Promise<string> {\n const result = await execFileAsync(`docker`, args, {\n maxBuffer: commandMaxBufferBytes,\n timeout: options?.timeout,\n });\n return mergeOutput(result.stdout, result.stderr);\n }\n\n private execDockerAsUser(\n runtimeInfo: {\n readonly home: string;\n readonly runtimeDir: string;\n readonly userId: number;\n },\n command: readonly string[],\n ) {\n return execFileAsync(\n `docker`,\n [\n `exec`,\n `--user`,\n dockerUser,\n `--env`,\n `HOME=${runtimeInfo.home}`,\n `--env`,\n `XDG_RUNTIME_DIR=${runtimeInfo.runtimeDir}`,\n `--env`,\n `DBUS_SESSION_BUS_ADDRESS=unix:path=${runtimeInfo.runtimeDir}/bus`,\n dockerContainer,\n ...command,\n ],\n { maxBuffer: commandMaxBufferBytes },\n );\n }\n\n private requireRuntimeInfo(): {\n readonly home: string;\n readonly runtimeDir: string;\n readonly userId: number;\n } {\n if (this.runtimeInfo === undefined) {\n throw new Error(`Docker test host runtime info is unavailable before ensureHost() completes`);\n }\n\n return this.runtimeInfo;\n }\n\n private async resolveRuntimeInfo(): Promise<{\n readonly home: string;\n readonly runtimeDir: string;\n readonly userId: number;\n }> {\n if (this.runtimeInfo !== undefined) {\n return this.runtimeInfo;\n }\n\n const userId =\n dockerConfiguredUserId === undefined\n ? await this.lookupUserId()\n : Number(dockerConfiguredUserId);\n const home = await this.lookupUserHome();\n\n this.runtimeInfo = {\n home,\n runtimeDir: `/run/user/${userId}`,\n userId,\n };\n\n return this.runtimeInfo;\n }\n\n private async lookupUserHome(): Promise<string> {\n logTestHost(`Resolving home directory for Docker test user ${dockerUser}`);\n const output = await this.execDocker([\n `exec`,\n dockerContainer,\n `bash`,\n `-lc`,\n `getent passwd ${shellQuote(dockerUser)} | cut -d: -f6`,\n ]);\n\n const home = output.trim();\n if (home.length === 0) {\n throw new Error(`Could not resolve home directory for Docker test user ${dockerUser}`);\n }\n\n logTestHost(`Resolved home directory for ${dockerUser}: ${home}`);\n return home;\n }\n\n private async lookupUserId(): Promise<number> {\n logTestHost(`Resolving uid for Docker test user ${dockerUser}`);\n const output = await this.execDocker([\n `exec`,\n dockerContainer,\n `bash`,\n `-lc`,\n `id -u ${shellQuote(dockerUser)}`,\n ]);\n\n const parsed = Number(output.trim());\n if (!Number.isInteger(parsed)) {\n throw new Error(`Could not resolve uid for Docker test user ${dockerUser}`);\n }\n\n logTestHost(`Resolved uid for ${dockerUser}: ${parsed}`);\n return parsed;\n }\n}\n\nclass GuestShell {\n private readonly process: ChildProcessWithoutNullStreams;\n private readonly onExitCleanup: () => void;\n private closed = false;\n private buffer = ``;\n private current:\n | {\n marker: string;\n timeoutId: NodeJS.Timeout | undefined;\n reject: (error: Error) => void;\n resolve: (output: string) => void;\n }\n | undefined;\n private readonly queue: Array<{\n script: string;\n reject: (error: Error) => void;\n resolve: (output: string) => void;\n timeoutMs: number | undefined;\n }> = [];\n\n public constructor(\n createProcess: () => ChildProcessWithoutNullStreams,\n onExitCleanup: () => void,\n ) {\n this.process = createProcess();\n this.onExitCleanup = onExitCleanup;\n this.process.stdout.setEncoding(`utf8`);\n this.process.stderr.setEncoding(`utf8`);\n this.process.stdout.on(`data`, (chunk: string) => this.onData(chunk));\n this.process.stderr.on(`data`, (chunk: string) => this.onData(chunk));\n this.process.on(`exit`, (code, signal) => {\n const reason = new Error(\n `Persistent guest shell exited unexpectedly (code=${code ?? `null`}, signal=${signal ?? `null`})`,\n );\n this.failCurrent(reason);\n while (this.queue.length > 0) {\n this.queue.shift()?.reject(reason);\n }\n this.onExitCleanup();\n });\n\n process.once(`exit`, () => {\n this.process.kill();\n });\n }\n\n public run(script: string, timeoutMs?: number): Promise<string> {\n return new Promise((resolve, reject) => {\n this.queue.push({ script, resolve, reject, timeoutMs });\n this.drain();\n });\n }\n\n public close(): void {\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n this.process.kill();\n }\n\n private drain(): void {\n if (this.current !== undefined) {\n return;\n }\n\n const next = this.queue.shift();\n if (next === undefined) {\n return;\n }\n\n const marker = `__SYSTEMD_TS_END_${randomUUID()}__`;\n const timeoutId =\n next.timeoutMs === undefined\n ? undefined\n : setTimeout(() => {\n if (this.current?.marker !== marker) {\n return;\n }\n\n const reason = new Error(`Guest command timed out after ${next.timeoutMs}ms`);\n this.failCurrent(reason);\n this.close();\n }, next.timeoutMs);\n this.current = {\n marker,\n timeoutId,\n reject: next.reject,\n resolve: next.resolve,\n };\n\n this.buffer = ``;\n const command = `(\n${next.script}\n) 2>&1\nstatus=$?\nprintf '\\\\n${marker}:%s\\\\n' \"$status\"\n`;\n\n this.process.stdin.write(command);\n }\n\n private failCurrent(error: Error): void {\n const current = this.current;\n this.current = undefined;\n if (current?.timeoutId !== undefined) {\n clearTimeout(current.timeoutId);\n }\n current?.reject(error);\n }\n\n private onData(chunk: string): void {\n if (this.current === undefined) {\n return;\n }\n\n this.buffer += chunk;\n const markerIndex = this.buffer.indexOf(this.current.marker);\n if (markerIndex === -1) {\n return;\n }\n\n const output = this.buffer.slice(0, markerIndex).replace(/\\n$/, ``);\n const statusMatch = this.buffer\n .slice(markerIndex)\n .match(/^__SYSTEMD_TS_END_[^:]+__:(\\d+)\\r?\\n?/u);\n\n if (statusMatch === null) {\n return;\n }\n\n const status = Number(statusMatch[1]);\n const remainder = this.buffer.slice(markerIndex + statusMatch[0].length);\n const current = this.current;\n this.current = undefined;\n this.buffer = remainder;\n if (current.timeoutId !== undefined) {\n clearTimeout(current.timeoutId);\n }\n\n if (status === 0) {\n current.resolve(output);\n } else {\n current.reject(new Error(output.length > 0 ? output : `Guest command failed`));\n }\n\n this.drain();\n }\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(`'`, `'\\\\''`)}'`;\n}\n\nconst backend = createBackend(selectedBackendName);\n","import { randomUUID } from \"node:crypto\";\n\nimport { getTestHostInfo, runGuestCommand } from \"./host.ts\";\n\nexport interface TestSandbox {\n readonly id: string;\n readonly linkedUnitDir: string;\n readonly namePrefix: string;\n readonly rootDir: string;\n readonly workDir: string;\n}\n\nexport interface DestroyTestSandboxOptions {\n readonly noisy?: boolean;\n}\n\nlet currentSandbox: TestSandbox | undefined;\n\nexport async function createTestSandbox(testName?: string): Promise<TestSandbox> {\n const id = randomUUID().slice(0, 8);\n const slug = slugify(testName ?? `sandbox`);\n const namePrefix = `systemd-ts-${slug}-${id}`;\n const rootDir = `${getTestHostInfo().stateRoot}/tests/${namePrefix}`;\n const linkedUnitDir = `${rootDir}/linked-units`;\n const workDir = `${rootDir}/work`;\n\n await runGuestCommand(\n `set -euo pipefail\nrm -rf ${shellQuote(rootDir)}\nmkdir -p ${shellQuote(linkedUnitDir)} ${shellQuote(workDir)}`,\n );\n\n currentSandbox = {\n id,\n linkedUnitDir,\n namePrefix,\n rootDir,\n workDir,\n };\n\n return currentSandbox;\n}\n\nexport async function destroyCurrentTestSandbox(): Promise<void> {\n if (currentSandbox === undefined) {\n return;\n }\n\n const sandbox = currentSandbox;\n currentSandbox = undefined;\n\n const unitsOutput = await runGuestCommand(\n `systemctl --user list-unit-files --all --no-legend ${shellQuote(`${sandbox.namePrefix}*`)} 2>/dev/null | awk '{print $1}' || true`,\n );\n\n const units = unitsOutput\n .split(`\\n`)\n .map((unit) => unit.trim())\n .filter((unit) => unit.length > 0);\n\n if (units.length > 0) {\n await runGuestCommand(`systemctl --user stop ${units.map(shellQuote).join(` `)} || true`);\n\n await runGuestCommand(`systemctl --user disable ${units.map(shellQuote).join(` `)} || true`);\n\n await runGuestCommand(\n `systemctl --user reset-failed ${units.map(shellQuote).join(` `)} || true`,\n );\n }\n\n await runGuestCommand(`systemctl --user daemon-reload || true`);\n\n await runGuestCommand(`rm -rf ${shellQuote(sandbox.rootDir)}`);\n}\n\nexport function useCurrentTestSandbox(): TestSandbox {\n if (currentSandbox === undefined) {\n throw new Error(`No active test sandbox is available`);\n }\n\n return currentSandbox;\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(`'`, `'\\\\''`)}'`;\n}\n\nfunction slugify(value: string): string {\n return value\n .toLowerCase()\n .replaceAll(/[^a-z0-9]+/g, `-`)\n .replaceAll(/^-+|-+$/g, ``)\n .slice(0, 32);\n}\n","import {\n Systemd,\n type CommandExecutionOptions,\n type CommandExecutor,\n type CommandOutput,\n} from \"../main/index.ts\";\n\nimport { runGuestCommand, runIsolatedGuestCommand } from \"./host.ts\";\nimport { useCurrentTestSandbox } from \"./sandbox.ts\";\n\n/**\n * Creates a command executor that runs argv-style commands inside the current\n * test host guest shell.\n */\nexport function createGuestCommandExecutor(\n runCommand: (script: string) => Promise<string>,\n): CommandExecutor {\n return async (\n command: string,\n args: readonly string[],\n options: CommandExecutionOptions = {},\n ): Promise<CommandOutput> => {\n try {\n const stdout = await runCommand(buildGuestCommand(command, args, options));\n return {\n stderr: ``,\n stdout,\n };\n } catch (cause) {\n throw enrichGuestCommandError(cause);\n }\n };\n}\n\n/**\n * Executor that reuses the warm guest shell for fast sandbox-backed tests.\n */\nexport const guestCommandExecutor: CommandExecutor = createGuestCommandExecutor(runGuestCommand);\n\n/**\n * Executor that runs each guest command in a fresh isolated guest shell.\n */\nexport const isolatedGuestCommandExecutor: CommandExecutor =\n createGuestCommandExecutor(runIsolatedGuestCommand);\n\n/**\n * Creates a `Systemd` instance scoped to the active test sandbox and backed by\n * the warm guest-shell executor.\n */\nexport function sandboxSystemd(): Systemd {\n const sandbox = useCurrentTestSandbox();\n return new Systemd({\n executor: guestCommandExecutor,\n linkUnits: true,\n scope: `user`,\n unitDir: sandbox.linkedUnitDir,\n });\n}\n\n/**\n * Creates a `Systemd` instance scoped to the active test sandbox and backed by\n * a fresh guest shell per command.\n */\nexport function isolatedSandboxSystemd(): Systemd {\n const sandbox = useCurrentTestSandbox();\n return new Systemd({\n executor: isolatedGuestCommandExecutor,\n linkUnits: true,\n scope: `user`,\n unitDir: sandbox.linkedUnitDir,\n });\n}\n\nfunction buildGuestCommand(\n command: string,\n args: readonly string[],\n options: CommandExecutionOptions,\n): string {\n const envArgs =\n options.env === undefined\n ? []\n : Object.entries(options.env).flatMap(([key, value]) =>\n value === undefined ? [`-u`, key] : [`${key}=${value}`],\n );\n\n return [`env`, ...envArgs, command, ...args].map((part) => shellQuote(part)).join(` `);\n}\n\nfunction enrichGuestCommandError(cause: unknown): Error {\n if (cause instanceof Error) {\n return Object.assign(cause, {\n code: 1,\n stderr: ``,\n stdout: cause.message,\n });\n }\n\n return Object.assign(new Error(`Guest command failed`), {\n code: 1,\n stderr: ``,\n stdout: ``,\n });\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(`'`, `'\\\\''`)}'`;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "systemd-ts",
|
|
3
|
-
"version": "261.
|
|
3
|
+
"version": "261.2.0",
|
|
4
4
|
"description": "TypeScript builders and helpers for systemd services and timers.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"access": "public"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@types/node": "25.9.
|
|
26
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
27
|
-
"takua": "0.2.
|
|
28
|
-
"typescript": "
|
|
29
|
-
"vite-plus": "0.2.
|
|
30
|
-
"vitest": "4.1.
|
|
25
|
+
"@types/node": "25.9.5",
|
|
26
|
+
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
27
|
+
"takua": "0.2.2",
|
|
28
|
+
"typescript": "7.0.2",
|
|
29
|
+
"vite-plus": "0.2.6",
|
|
30
|
+
"vitest": "4.1.10"
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
33
|
"build": "vp pack",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BgzlfOC7.d.mts","names":[],"sources":["../src/main/internal.ts","../src/main/executable.ts","../src/main/systemd-service.ts","../src/main/systemd-timer.ts","../src/main/types.ts","../src/main/errors.ts","../src/main/notify.ts","../src/main/systemctl.ts","../src/main/systemd.ts","../src/main/index.ts"],"mappings":"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"}
|