Files
pikasTech-HWLAB/scripts/deploy-contract-plan.test.mjs

87 lines
2.3 KiB
JavaScript

import assert from "node:assert/strict";
import { execFile } from "node:child_process";
import { chmod, mkdtemp, writeFile } from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import test from "node:test";
import { fileURLToPath } from "node:url";
import { promisify } from "node:util";
import { parseFrpTomlText } from "./src/deploy-contract-plan.mjs";
const execFileAsync = promisify(execFile);
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
test("parses FRP TOML tables without Python tomllib", () => {
const parsed = parseFrpTomlText(`
serverAddr = "74.48.78.17"
serverPort = 7000
loginFailExit = true
[[proxies]]
name = "hwlab-dev-cloud-web"
type = "tcp"
localIP = "hwlab-cloud-web.hwlab-dev.svc.cluster.local"
localPort = 8080
remotePort = 16666
[[proxies]]
name = "hwlab-dev-edge-proxy"
type = "tcp"
localIP = "hwlab-edge-proxy.hwlab-dev.svc.cluster.local"
localPort = 6667
remotePort = 16667
`, "fixture/frpc.dev.toml");
assert.deepEqual(parsed, {
serverAddr: "74.48.78.17",
serverPort: 7000,
loginFailExit: true,
proxies: [
{
name: "hwlab-dev-cloud-web",
type: "tcp",
localIP: "hwlab-cloud-web.hwlab-dev.svc.cluster.local",
localPort: 8080,
remotePort: 16666
},
{
name: "hwlab-dev-edge-proxy",
type: "tcp",
localIP: "hwlab-edge-proxy.hwlab-dev.svc.cluster.local",
localPort: 6667,
remotePort: 16667
}
]
});
});
test("deploy contract check does not require python3 tomllib", async () => {
const shimDir = await mkdtemp(path.join(os.tmpdir(), "hwlab-python-shim-"));
const pythonShim = path.join(shimDir, "python3");
await writeFile(
pythonShim,
[
"#!/usr/bin/env bash",
"echo 'ModuleNotFoundError: No module named tomllib' >&2",
"exit 1",
""
].join("\n")
);
await chmod(pythonShim, 0o755);
const result = await execFileAsync(process.execPath, ["scripts/deploy-contract-plan.mjs", "--check"], {
cwd: repoRoot,
env: {
...process.env,
PATH: `${shimDir}${path.delimiter}${process.env.PATH ?? ""}`
},
maxBuffer: 1024 * 1024
});
const plan = JSON.parse(result.stdout);
assert.equal(plan.status, "pass");
assert.equal(plan.summary.frpProxies, 2);
assert.deepEqual(plan.diagnostics, []);
});