Files
ForgeFlow/tests/ssh-service.test.mjs
T
2026-07-27 23:15:35 +02:00

38 lines
1.6 KiB
JavaScript

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),
);
});