import test from "node:test"; import assert from "node:assert/strict"; import { EventEmitter } from "node:events"; import { createRequire } from "node:module"; const require = createRequire(import.meta.url); const { SshService, parseCapabilityOutput } = require("../src/main/ssh-service.cjs"); test("SSH capability parsing keeps Git optional and reports deployment prerequisites separately", () => { const b64 = (value) => Buffer.from(value).toString("base64"); const parsed = parseCapabilityOutput(`noise\n__FORGEFLOW_SERVER_TEST__\nplatform=${b64("Linux Unraid")}\ndocker=true\ndockerReady=true\ncompose=true\ncomposeVersion=${b64("Docker Compose version v2.40.0")}\ngit=false\ntar=true\nchecksum=true\nbaseWritable=true\n`); assert.equal(parsed.dockerReady, true); assert.equal(parsed.compose, true); assert.equal(parsed.git, false); assert.equal(parsed.tar, true); assert.equal(parsed.checksum, true); assert.equal(parsed.baseWritable, true); }); test("SSH execution rejects truncated output instead of using an incomplete inventory", async () => { const service = new SshService({ store: {}, diagnostics: null }); const stream = new EventEmitter(); stream.stderr = new EventEmitter(); const client = { exec(_command, callback) { callback(null, stream); queueMicrotask(() => { stream.emit("data", Buffer.from("x".repeat(64))); stream.emit("close", 0, null); }); }, }; await assert.rejects( service.execClient(client, "inventory", { maxOutput: 16, timeout: 1_000 }), (error) => error?.code === "SSH_OUTPUT_TRUNCATED" && /incomplete result/.test(error.message), ); });