Files
OmniRoute/tests/unit/cloudflaredTunnel.test.mjs
2026-03-30 16:31:07 -04:00

145 lines
5.1 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import {
buildCloudflaredChildEnv,
extractCloudflaredErrorMessage,
extractTryCloudflareUrl,
getDefaultCloudflaredCertEnv,
getCloudflaredStartArgs,
getCloudflaredAssetSpec,
} from "../../src/lib/cloudflaredTunnel.ts";
test("extractTryCloudflareUrl parses trycloudflare URL from log output", () => {
const url = extractTryCloudflareUrl(
"INF +------------------------------------------------------------+\nINF | https://violet-sky-1234.trycloudflare.com |\nINF +------------------------------------------------------------+"
);
assert.equal(url, "https://violet-sky-1234.trycloudflare.com");
});
test("extractTryCloudflareUrl returns null when no tunnel URL is present", () => {
assert.equal(extractTryCloudflareUrl("cloudflared starting without assigned URL"), null);
});
test("extractCloudflaredErrorMessage keeps the actionable stderr line", () => {
const error = extractCloudflaredErrorMessage(
'2026-03-30T19:56:12Z INF Requesting new quick Tunnel on trycloudflare.com...\n2026-03-30T19:56:12Z ERR failed to request quick Tunnel: Post "https://api.trycloudflare.com/tunnel": tls: failed to verify certificate: x509: certificate signed by unknown authority'
);
assert.equal(
error,
'failed to request quick Tunnel: Post "https://api.trycloudflare.com/tunnel": tls: failed to verify certificate: x509: certificate signed by unknown authority'
);
});
test("getCloudflaredAssetSpec resolves linux amd64 binary", () => {
const spec = getCloudflaredAssetSpec("linux", "x64");
assert.deepEqual(spec, {
assetName: "cloudflared-linux-amd64",
binaryName: "cloudflared",
archive: "none",
downloadUrl:
"https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64",
});
});
test("getCloudflaredAssetSpec resolves darwin arm64 archive", () => {
const spec = getCloudflaredAssetSpec("darwin", "arm64");
assert.deepEqual(spec, {
assetName: "cloudflared-darwin-arm64.tgz",
binaryName: "cloudflared",
archive: "tgz",
downloadUrl:
"https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-darwin-arm64.tgz",
});
});
test("getCloudflaredAssetSpec returns null for unsupported platforms", () => {
assert.equal(getCloudflaredAssetSpec("freebsd", "x64"), null);
});
test("buildCloudflaredChildEnv keeps runtime essentials, isolates runtime dirs, and drops secrets", () => {
const env = buildCloudflaredChildEnv(
{
PATH: "/usr/bin",
HTTPS_PROXY: "http://proxy.internal:8080",
JWT_SECRET: "top-secret",
API_KEY_SECRET: "another-secret",
},
{
runtimeRoot: "/managed/runtime",
homeDir: "/managed/runtime/home",
configDir: "/managed/runtime/config",
cacheDir: "/managed/runtime/cache",
dataDir: "/managed/runtime/data",
tempDir: "/managed/runtime/tmp",
userProfileDir: "/managed/runtime/userprofile",
appDataDir: "/managed/runtime/userprofile/AppData/Roaming",
localAppDataDir: "/managed/runtime/userprofile/AppData/Local",
},
{}
);
assert.deepEqual(env, {
PATH: "/usr/bin",
HTTPS_PROXY: "http://proxy.internal:8080",
HOME: "/managed/runtime/home",
XDG_CONFIG_HOME: "/managed/runtime/config",
XDG_CACHE_HOME: "/managed/runtime/cache",
XDG_DATA_HOME: "/managed/runtime/data",
USERPROFILE: "/managed/runtime/userprofile",
APPDATA: "/managed/runtime/userprofile/AppData/Roaming",
LOCALAPPDATA: "/managed/runtime/userprofile/AppData/Local",
TMPDIR: "/managed/runtime/tmp",
TMP: "/managed/runtime/tmp",
TEMP: "/managed/runtime/tmp",
});
});
test("getDefaultCloudflaredCertEnv detects common CA bundle paths", () => {
const env = getDefaultCloudflaredCertEnv((candidate) =>
["/etc/ssl/certs/ca-certificates.crt", "/etc/ssl/certs"].includes(candidate)
);
assert.deepEqual(env, {
SSL_CERT_FILE: "/etc/ssl/certs/ca-certificates.crt",
SSL_CERT_DIR: "/etc/ssl/certs",
});
});
test("buildCloudflaredChildEnv injects discovered CA paths when the parent env omits them", () => {
const env = buildCloudflaredChildEnv(
{ PATH: "/usr/bin" },
{
runtimeRoot: "/managed/runtime",
homeDir: "/managed/runtime/home",
configDir: "/managed/runtime/config",
cacheDir: "/managed/runtime/cache",
dataDir: "/managed/runtime/data",
tempDir: "/managed/runtime/tmp",
userProfileDir: "/managed/runtime/userprofile",
appDataDir: "/managed/runtime/userprofile/AppData/Roaming",
localAppDataDir: "/managed/runtime/userprofile/AppData/Local",
},
{
SSL_CERT_FILE: "/etc/ssl/certs/ca-certificates.crt",
SSL_CERT_DIR: "/etc/ssl/certs",
}
);
assert.equal(env.SSL_CERT_FILE, "/etc/ssl/certs/ca-certificates.crt");
assert.equal(env.SSL_CERT_DIR, "/etc/ssl/certs");
});
test("getCloudflaredStartArgs relies on cloudflared protocol auto-negotiation", () => {
assert.deepEqual(getCloudflaredStartArgs("http://127.0.0.1:20128"), [
"tunnel",
"--url",
"http://127.0.0.1:20128",
"--no-autoupdate",
]);
});