fix(e2e): reject invalid parallels smoke ports

This commit is contained in:
Vincent Koc
2026-06-18 20:15:29 +02:00
parent 9eb6e6d326
commit 70e39da00f
5 changed files with 41 additions and 6 deletions
+8
View File
@@ -15,6 +15,14 @@ export function parsePositiveInt(value: string, label: string): number {
return parsed;
}
export function parseTcpPort(value: string, label: string): number {
const parsed = parsePositiveInt(value, label);
if (parsed > 65_535) {
die(`invalid ${label}: ${value}`);
}
return parsed;
}
export function readPositiveIntEnv(name: string, fallback: number): number {
const raw = process.env[name];
if (raw == null || raw.trim() === "") {
+2 -2
View File
@@ -11,7 +11,7 @@ import {
makeTempDir,
parseBoolEnv,
parseMode,
parsePositiveInt,
parseTcpPort,
parseProvider,
readPositiveIntEnv,
modelProviderConfigBatchJson,
@@ -202,7 +202,7 @@ export function parseArgs(argv: string[]): LinuxOptions {
i++;
break;
case "--host-port":
options.hostPort = parsePositiveInt(ensureValue(args, i, arg), arg);
options.hostPort = parseTcpPort(ensureValue(args, i, arg), arg);
options.hostPortExplicit = true;
i++;
break;
+2 -2
View File
@@ -18,7 +18,7 @@ import {
modelProviderConfigBatchJson,
posixCodexPlatformPackageRepairFunction,
posixProviderOnlyPluginIsolationScript,
parsePositiveInt,
parseTcpPort,
readPositiveIntEnv,
resolveParallelsModelTimeoutSeconds,
resolveHostIp,
@@ -202,7 +202,7 @@ export function parseArgs(argv: string[]): MacosOptions {
i++;
break;
case "--host-port":
options.hostPort = parsePositiveInt(ensureValue(args, i, arg), arg);
options.hostPort = parseTcpPort(ensureValue(args, i, arg), arg);
options.hostPortExplicit = true;
i++;
break;
+2 -2
View File
@@ -9,7 +9,7 @@ import {
currentRunningSnapshotInfo,
makeTempDir,
parseMode,
parsePositiveInt,
parseTcpPort,
parseProvider,
readPositiveIntEnv,
resolveLatestVersion,
@@ -157,7 +157,7 @@ export function parseArgs(argv: string[]): WindowsOptions {
options.hostIp = value;
},
"--host-port": (value) => {
options.hostPort = parsePositiveInt(value, "--host-port");
options.hostPort = parseTcpPort(value, "--host-port");
options.hostPortExplicit = true;
},
"--install-url": (value) => {
@@ -172,6 +172,9 @@ describe("Parallels smoke model selection", () => {
let invalidHostPortResult: ReturnType<typeof spawnNodeEvalSync>;
let invalidLinuxHostPortResult: ReturnType<typeof spawnNodeEvalSync>;
let invalidWindowsHostPortResult: ReturnType<typeof spawnNodeEvalSync>;
let invalidMacosHostPortRangeResult: ReturnType<typeof spawnNodeEvalSync>;
let invalidLinuxHostPortRangeResult: ReturnType<typeof spawnNodeEvalSync>;
let invalidWindowsHostPortRangeResult: ReturnType<typeof spawnNodeEvalSync>;
let invalidLinuxAgentTimeoutResult: ReturnType<typeof spawnNodeEvalSync>;
let invalidWindowsAgentTimeoutResult: ReturnType<typeof spawnNodeEvalSync>;
let invalidWindowsUpdateTimeoutResult: ReturnType<typeof spawnNodeEvalSync>;
@@ -218,6 +221,18 @@ describe("Parallels smoke model selection", () => {
`process.argv = ["node", "${TS_PATHS.windows}", "--host-port", "0x4800"]; await import("./${TS_PATHS.windows}");`,
{ env: process.env, imports: ["tsx"] },
);
invalidMacosHostPortRangeResult = spawnNodeEvalSync(
`process.argv = ["node", "${TS_PATHS.macos}", "--host-port", "65536"]; await import("./${TS_PATHS.macos}");`,
{ env: process.env, imports: ["tsx"] },
);
invalidLinuxHostPortRangeResult = spawnNodeEvalSync(
`process.argv = ["node", "${TS_PATHS.linux}", "--host-port", "65536"]; await import("./${TS_PATHS.linux}");`,
{ env: process.env, imports: ["tsx"] },
);
invalidWindowsHostPortRangeResult = spawnNodeEvalSync(
`process.argv = ["node", "${TS_PATHS.windows}", "--host-port", "65536"]; await import("./${TS_PATHS.windows}");`,
{ env: process.env, imports: ["tsx"] },
);
invalidLinuxAgentTimeoutResult = spawnNodeEvalSync(
`process.env.OPENCLAW_PARALLELS_LINUX_AGENT_TIMEOUT_S = "1e3"; process.argv = ["node", "${TS_PATHS.linux}"]; await import("./${TS_PATHS.linux}");`,
{ env: process.env, imports: ["tsx"] },
@@ -254,6 +269,9 @@ describe("Parallels smoke model selection", () => {
expect(parseMacosSmokeArgs(["--mode", "fresh", "--", "--mode", "upgrade"]).mode).toBe("fresh");
expect(parseMacosSmokeArgs([]).vmNameExplicit).toBe(false);
expect(parseMacosSmokeArgs(["--vm", "macOS"]).vmNameExplicit).toBe(true);
expect(parseMacosSmokeArgs(["--host-port", "65535"]).hostPort).toBe(65535);
expect(parseLinuxSmokeArgs(["--host-port", "65535"]).hostPort).toBe(65535);
expect(parseWindowsSmokeArgs(["--host-port", "65535"]).hostPort).toBe(65535);
expect(parseNpmUpdateSmokeArgs(["--", "--package-spec", "openclaw@2026.5.1"]).packageSpec).toBe(
"openclaw@2026.5.1",
);
@@ -1496,6 +1514,15 @@ setInterval(() => {}, 1000);
expect(invalidWindowsHostPortResult.status).toBe(1);
expect(invalidWindowsHostPortResult.stderr).toContain("invalid --host-port: 0x4800");
expect(invalidMacosHostPortRangeResult.status).toBe(1);
expect(invalidMacosHostPortRangeResult.stderr).toContain("invalid --host-port: 65536");
expect(invalidLinuxHostPortRangeResult.status).toBe(1);
expect(invalidLinuxHostPortRangeResult.stderr).toContain("invalid --host-port: 65536");
expect(invalidWindowsHostPortRangeResult.status).toBe(1);
expect(invalidWindowsHostPortRangeResult.stderr).toContain("invalid --host-port: 65536");
expect(invalidLinuxAgentTimeoutResult.status).toBe(1);
expect(invalidLinuxAgentTimeoutResult.stderr).toContain(
"invalid OPENCLAW_PARALLELS_LINUX_AGENT_TIMEOUT_S: 1e3",