import * as FS from "node:fs";import * as OS from "node:os";import * as Path from "node:path"; import { afterEach, describe, expect, it } from "vitest"; import { SshPasswordPromptError } from "@t3tools/ssh/errors"; import { discoverDesktopSshHosts, isSshPasswordPromptCancellation } from "./sshEnvironment.ts"; const tempDirectories: string[] = []; afterEach(() => { for (const directory of tempDirectories.splice(0)) { FS.rmSync(directory, { recursive: true, force: true }); }}); function makeTempHomeDir(): string { const directory = FS.mkdtempSync(Path.join(OS.tmpdir(), "t3-ssh-env-test-")); tempDirectories.push(directory); return directory;} describe("sshEnvironment", () => { it("treats password prompt timeouts as cancellable authentication prompts", () => { expect( isSshPasswordPromptCancellation( new SshPasswordPromptError({ message: "SSH authentication timed out for devbox.", }), ), ).toBe(true); }); it("wires desktop host discovery through the ssh package runtime", async () => { const homeDir = makeTempHomeDir(); const sshDir = Path.join(homeDir, ".ssh"); FS.mkdirSync(Path.join(sshDir, "config.d"), { recursive: true }); FS.writeFileSync( Path.join(sshDir, "config"), ["Host devbox", " HostName devbox.example.com", "Include config.d/*.conf", ""].join("\n"), "utf8", ); FS.writeFileSync( Path.join(sshDir, "config.d", "team.conf"), [ "Host staging", " HostName staging.example.com", "Host *", " ServerAliveInterval 30", "", ].join("\n"), "utf8", ); FS.writeFileSync( Path.join(sshDir, "known_hosts"), [ "known.example.com ssh-ed25519 AAAA", "|1|hashed|entry ssh-ed25519 AAAA", "[bastion.example.com]:2222 ssh-ed25519 AAAA", "", ].join("\n"), "utf8", ); await expect(discoverDesktopSshHosts({ homeDir })).resolves.toEqual([ { alias: "bastion.example.com", hostname: "bastion.example.com", username: null, port: null, source: "known-hosts", }, { alias: "devbox", hostname: "devbox", username: null, port: null, source: "ssh-config", }, { alias: "known.example.com", hostname: "known.example.com", username: null, port: null, source: "known-hosts", }, { alias: "staging", hostname: "staging", username: null, port: null, source: "ssh-config", }, ]); });});
import * as FS from "node:fs";
import * as OS from "node:os";
import * as Path from "node:path";
import { afterEach, describe, expect, it } from "vitest";
import { SshPasswordPromptError } from "@t3tools/ssh/errors";
import { discoverDesktopSshHosts, isSshPasswordPromptCancellation } from "./sshEnvironment.ts";
const tempDirectories: string[] = [];
afterEach(() => {
for (const directory of tempDirectories.splice(0)) {
FS.rmSync(directory, { recursive: true, force: true });
}
});
function makeTempHomeDir(): string {
const directory = FS.mkdtempSync(Path.join(OS.tmpdir(), "t3-ssh-env-test-"));
tempDirectories.push(directory);
return directory;
}
describe("sshEnvironment", () => {
it("treats password prompt timeouts as cancellable authentication prompts", () => {
expect(
isSshPasswordPromptCancellation(
new SshPasswordPromptError({
message: "SSH authentication timed out for devbox.",
}),
),
).toBe(true);
});
it("wires desktop host discovery through the ssh package runtime", async () => {
const homeDir = makeTempHomeDir();
const sshDir = Path.join(homeDir, ".ssh");
FS.mkdirSync(Path.join(sshDir, "config.d"), { recursive: true });
FS.writeFileSync(
Path.join(sshDir, "config"),
["Host devbox", " HostName devbox.example.com", "Include config.d/*.conf", ""].join("\n"),
"utf8",
);
FS.writeFileSync(
Path.join(sshDir, "config.d", "team.conf"),
[
"Host staging",
" HostName staging.example.com",
"Host *",
" ServerAliveInterval 30",
"",
].join("\n"),
"utf8",
);
FS.writeFileSync(
Path.join(sshDir, "known_hosts"),
[
"known.example.com ssh-ed25519 AAAA",
"|1|hashed|entry ssh-ed25519 AAAA",
"[bastion.example.com]:2222 ssh-ed25519 AAAA",
"",
].join("\n"),
"utf8",
);
await expect(discoverDesktopSshHosts({ homeDir })).resolves.toEqual([
{
alias: "bastion.example.com",
hostname: "bastion.example.com",
username: null,
port: null,
source: "known-hosts",
},
{
alias: "devbox",
hostname: "devbox",
username: null,
port: null,
source: "ssh-config",
},
{
alias: "known.example.com",
hostname: "known.example.com",
username: null,
port: null,
source: "known-hosts",
},
{
alias: "staging",
hostname: "staging",
username: null,
port: null,
source: "ssh-config",
},
]);
});
});