mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-31 20:32:20 +03:00
145 lines
5.1 KiB
JavaScript
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",
|
|
]);
|
|
});
|