evOo-local/apps/desktop/src/local-stack-networking.test.ts
cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

53 lines
2.0 KiB
TypeScript

import { mkdtemp, rm, symlink, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import path from "node:path";
import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { allocateLoopbackPort, readStackWebUrl, STACK_WEB_URL_FILE } from "./local-stack.js";
import { DEFAULT_LOCAL_WEB_URL } from "./setup-config.js";
let dir: string;
beforeEach(async () => {
dir = await mkdtemp(path.join(tmpdir(), "stack-networking-"));
});
afterEach(async () => {
await rm(dir, { recursive: true, force: true });
});
describe("managed stack address", () => {
it("keeps the desktop default separate from development", () => {
expect(DEFAULT_LOCAL_WEB_URL).toBe("http://127.0.0.1:45173");
});
it("restores a previously selected loopback port", async () => {
await writeFile(path.join(dir, STACK_WEB_URL_FILE), "http://127.0.0.1:49152");
expect(await readStackWebUrl(dir, DEFAULT_LOCAL_WEB_URL)).toBe("http://127.0.0.1:49152");
});
it.each([
"http://example.com:49152",
"http://192.168.1.2:49152",
"http://127.0.0.1:65536",
"http://127.0.0.1:01024",
"http://127.0.0.1:80",
"http://127.0.0.1:49152/path",
"http://user:password@127.0.0.1:49152",
"http://127.0.0.1:49152\n",
"x".repeat(129),
])("rejects an invalid persisted origin: %s", async (url) => {
await writeFile(path.join(dir, STACK_WEB_URL_FILE), url);
expect(await readStackWebUrl(dir, DEFAULT_LOCAL_WEB_URL)).toBe(DEFAULT_LOCAL_WEB_URL);
});
it("does not follow a symlink to an address file", async () => {
await writeFile(path.join(dir, "other"), "http://127.0.0.1:49152");
await symlink(path.join(dir, "other"), path.join(dir, STACK_WEB_URL_FILE));
expect(await readStackWebUrl(dir, DEFAULT_LOCAL_WEB_URL)).toBe(DEFAULT_LOCAL_WEB_URL);
});
it("allocates an unprivileged local port", async () => {
const port = await allocateLoopbackPort();
expect(port).toBeGreaterThanOrEqual(1024);
expect(port).toBeLessThanOrEqual(65535);
});
});