diff --git a/src/infra/scp-host.test.ts b/src/infra/scp-host.test.ts index 178c738adfb..78498b997ce 100644 --- a/src/infra/scp-host.test.ts +++ b/src/infra/scp-host.test.ts @@ -2,18 +2,34 @@ import { describe, expect, it } from "vitest"; import { isSafeScpRemoteHost, normalizeScpRemoteHost } from "./scp-host.js"; describe("scp remote host", () => { - it("accepts host and user@host forms", () => { - expect(normalizeScpRemoteHost("gateway-host")).toBe("gateway-host"); - expect(normalizeScpRemoteHost("bot@gateway-host")).toBe("bot@gateway-host"); - expect(normalizeScpRemoteHost("bot@192.168.64.3")).toBe("bot@192.168.64.3"); - expect(normalizeScpRemoteHost("bot@[fe80::1]")).toBe("bot@[fe80::1]"); + it.each([ + { value: "gateway-host", expected: "gateway-host" }, + { value: " bot@gateway-host ", expected: "bot@gateway-host" }, + { value: "bot@192.168.64.3", expected: "bot@192.168.64.3" }, + { value: "bot@[fe80::1]", expected: "bot@[fe80::1]" }, + ])("normalizes safe hosts for %j", ({ value, expected }) => { + expect(normalizeScpRemoteHost(value)).toBe(expected); }); - it("rejects unsafe host tokens", () => { - expect(isSafeScpRemoteHost("-oProxyCommand=whoami")).toBe(false); - expect(isSafeScpRemoteHost("bot@gateway-host -oStrictHostKeyChecking=no")).toBe(false); - expect(isSafeScpRemoteHost("bot@host:22")).toBe(false); - expect(isSafeScpRemoteHost("bot@/tmp/host")).toBe(false); - expect(isSafeScpRemoteHost("bot@@host")).toBe(false); + it.each([ + null, + undefined, + "", + " ", + "-oProxyCommand=whoami", + "bot@gateway-host -oStrictHostKeyChecking=no", + "bot@host:22", + "bot@/tmp/host", + "bot@@host", + "@host", + "bot@", + "bot@host\\name", + "bot@-gateway-host", + "bot@fe80::1", + "bot@[fe80::1%en0]", + "bot name@gateway-host", + ])("rejects unsafe host tokens: %j", (value) => { + expect(normalizeScpRemoteHost(value)).toBeUndefined(); + expect(isSafeScpRemoteHost(value)).toBe(false); }); });