Files
NetMesh/components/port-forwarding/hostKeyVerification.test.ts

116 lines
3.1 KiB
TypeScript
Raw Permalink Normal View History

import test from "node:test";
import assert from "node:assert/strict";
import {
createKnownHostFromPortForwardHostKeyInfo,
enqueuePortForwardHostKeyVerification,
isPortForwardHostKeySessionId,
removePortForwardHostKeyVerification,
toPendingPortForwardHostKeyVerification,
} from "./hostKeyVerification.ts";
test("isPortForwardHostKeySessionId only accepts port-forward tunnel sessions", () => {
assert.equal(isPortForwardHostKeySessionId("pf-rule-1-123456"), true);
assert.equal(isPortForwardHostKeySessionId("session-1"), false);
assert.equal(isPortForwardHostKeySessionId(undefined), false);
});
test("createKnownHostFromPortForwardHostKeyInfo saves the verified host key", () => {
assert.deepEqual(
createKnownHostFromPortForwardHostKeyInfo(
{
hostname: "jump.internal",
port: 2200,
keyType: "ssh-ed25519",
fingerprint: "abc123",
publicKey: "ssh-ed25519 AAAA",
},
1000,
"fixed",
),
{
id: "kh-1000-fixed",
hostname: "jump.internal",
port: 2200,
keyType: "ssh-ed25519",
publicKey: "ssh-ed25519 AAAA",
fingerprint: "abc123",
discoveredAt: 1000,
},
);
});
test("toPendingPortForwardHostKeyVerification ignores non-port-forward requests", () => {
assert.equal(
toPendingPortForwardHostKeyVerification({
requestId: "req-terminal",
sessionId: "terminal-session",
hostname: "terminal.example.com",
port: 22,
keyType: "ssh-ed25519",
fingerprint: "terminal-fingerprint",
}),
null,
);
});
test("toPendingPortForwardHostKeyVerification accepts port-forward requests", () => {
assert.deepEqual(
toPendingPortForwardHostKeyVerification({
requestId: "req-port-forward",
sessionId: "pf-rule-1-123456",
hostname: "jump.internal",
port: 2200,
keyType: "ssh-ed25519",
fingerprint: "abc123",
publicKey: "ssh-ed25519 AAAA",
status: "unknown",
}),
{
requestId: "req-port-forward",
hostKeyInfo: {
hostname: "jump.internal",
port: 2200,
keyType: "ssh-ed25519",
fingerprint: "abc123",
publicKey: "ssh-ed25519 AAAA",
status: "unknown",
knownHostId: undefined,
knownFingerprint: undefined,
},
},
);
});
test("port-forward host-key confirmations are queued instead of overwritten", () => {
const first = {
requestId: "req-1",
hostKeyInfo: {
hostname: "jump-1.internal",
port: 22,
keyType: "ssh-ed25519",
fingerprint: "first",
},
};
const second = {
requestId: "req-2",
hostKeyInfo: {
hostname: "jump-2.internal",
port: 22,
keyType: "ssh-ed25519",
fingerprint: "second",
},
};
const queued = enqueuePortForwardHostKeyVerification(
enqueuePortForwardHostKeyVerification([], first),
second,
);
assert.deepEqual(queued.map((pending) => pending.requestId), ["req-1", "req-2"]);
assert.deepEqual(
removePortForwardHostKeyVerification(queued, "req-1").map((pending) => pending.requestId),
["req-2"],
);
});