package infra import ( "testing" ) func TestSSHConnDestination(t *testing.T) { tests := []struct { name string conn SSHConn want string }{ {"con user", SSHConn{Host: "example.com", User: "deploy"}, "deploy@example.com"}, {"sin user", SSHConn{Host: "example.com"}, "example.com"}, {"con IP", SSHConn{Host: "10.0.0.1", User: "root"}, "root@10.0.0.1"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got := tt.conn.destination() if got != tt.want { t.Errorf("destination() = %q, want %q", got, tt.want) } }) } } func TestSSHConnSSHArgs(t *testing.T) { t.Run("puerto default", func(t *testing.T) { conn := SSHConn{Host: "example.com", User: "deploy"} args := conn.sshArgs() assertContains(t, args, "-p", "22") }) t.Run("puerto custom", func(t *testing.T) { conn := SSHConn{Host: "example.com", Port: 2222} args := conn.sshArgs() assertContains(t, args, "-p", "2222") }) t.Run("con key path", func(t *testing.T) { conn := SSHConn{Host: "example.com", KeyPath: "/home/user/.ssh/id_ed25519"} args := conn.sshArgs() assertContains(t, args, "-i", "/home/user/.ssh/id_ed25519") }) t.Run("sin key path no incluye -i", func(t *testing.T) { conn := SSHConn{Host: "example.com"} args := conn.sshArgs() for _, a := range args { if a == "-i" { t.Error("sshArgs() no debe incluir -i si KeyPath esta vacio") } } }) } func TestSSHConnSCPArgs(t *testing.T) { t.Run("usa -P mayuscula para puerto", func(t *testing.T) { conn := SSHConn{Host: "example.com", Port: 2222} args := conn.scpArgs() assertContains(t, args, "-P", "2222") }) } func assertContains(t *testing.T, args []string, flag, value string) { t.Helper() for i, a := range args { if a == flag && i+1 < len(args) && args[i+1] == value { return } } t.Errorf("args %v no contiene %s %s", args, flag, value) }