crabbox/internal/cli/vnc_test.go
2026-05-07 12:45:27 +01:00

68 lines
2.2 KiB
Go

package cli
import (
"strings"
"testing"
)
func TestVNCTunnelCommandQuotesKeyPath(t *testing.T) {
got := vncTunnelCommand(SSHTarget{
Key: "/tmp/Application Support/crabbox/id_ed25519",
Port: "2222",
User: "crabbox",
Host: "203.0.113.10",
}, "5907")
if !strings.Contains(got, "'-i' '/tmp/Application Support/crabbox/id_ed25519'") {
t.Fatalf("tunnel key path should be shell-quoted: %q", got)
}
if !strings.Contains(got, "'-L' '5907:127.0.0.1:5900'") {
t.Fatalf("tunnel should forward VNC loopback: %q", got)
}
}
func TestVNCLoopbackCheckCommandSupportsWindows(t *testing.T) {
got := vncLoopbackCheckCommand(SSHTarget{TargetOS: targetWindows, WindowsMode: windowsModeNormal})
if !strings.Contains(got, "powershell.exe") {
t.Fatalf("windows VNC check should use PowerShell: %q", got)
}
if !strings.Contains(got, "EncodedCommand") {
t.Fatalf("windows VNC check should be encoded for OpenSSH: %q", got)
}
}
func TestVNCPasswordCommandSupportsManagedTargets(t *testing.T) {
windows := vncPasswordCommand(SSHTarget{TargetOS: targetWindows, WindowsMode: windowsModeNormal})
if !strings.Contains(windows, "EncodedCommand") {
t.Fatalf("windows password command should be encoded PowerShell: %q", windows)
}
if got := vncPasswordCommand(SSHTarget{TargetOS: targetMacOS}); got != "sudo cat '/var/db/crabbox/vnc.password'" {
t.Fatalf("mac password command=%q", got)
}
}
func TestWindowsBrowserProbeScriptIsRawPowerShell(t *testing.T) {
got := windowsBrowserProbeScript()
for _, want := range []string{
"Get-Command msedge.exe",
`${Env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe`,
`Write-Output ("BROWSER=" + $path)`,
} {
if !strings.Contains(got, want) {
t.Fatalf("windows browser probe missing %q:\n%s", want, got)
}
}
if strings.Contains(got, "EncodedCommand") {
t.Fatalf("browser probe should be raw PowerShell before SSH wrapping:\n%s", got)
}
}
func TestOpenURLCommandIncludesURL(t *testing.T) {
name, args := openURLCommand("vnc://localhost:5901")
if name == "" {
t.Skip("current OS has no URL opener")
}
if len(args) == 0 || args[len(args)-1] != "vnc://localhost:5901" {
t.Fatalf("openURLCommand args=%#v should include URL", args)
}
}