38 lines
1.6 KiB
JavaScript
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),
|
|
);
|
|
});
|