package ssh import "testing" func TestParseOptionClusters(t *testing.T) { for _, args := range [][]string{ {"-vp", "2222", "server"}, {"-vp2222", "server"}, {"-vAl", "admin", "server"}, {"-vladmin", "server"}, {"-B", "eth0", "server"}, {"-P", "production", "server"}, } { t.Run(args[0], func(t *testing.T) { assertParsed(t, Parse(args), "server", "", len(args)-1) }) } } func TestExplicitSSHOptions(t *testing.T) { for _, tc := range []struct { name string args []string user, port bool }{ {"cluster port separated", []string{"-vp", "2222", "server"}, false, true}, {"cluster user attached", []string{"-vladmin", "server"}, true, false}, {"o separated", []string{"-o", "User=admin", "-o", "Port=2222", "server"}, true, true}, {"o attached and case insensitive", []string{"-ouSeR=admin", "-oport=2222", "server"}, true, true}, {"o whitespace", []string{"-o", " User = admin", "-o", "Port\t2222", "server"}, true, true}, {"cluster o", []string{"-voUser=admin", "server"}, true, false}, {"option value looks like flag", []string{"-i", "-lroot", "-F", "-p2222", "server"}, false, false}, {"remote flags", []string{"server", "-p2222", "-o", "User=admin"}, false, false}, {"after double dash", []string{"--", "-lroot", "-p2222"}, false, false}, {"missing value", []string{"-vp"}, false, false}, } { t.Run(tc.name, func(t *testing.T) { if got := HasUserFlag(tc.args); got != tc.user { t.Errorf("HasUserFlag(%v) = %v, want %v", tc.args, got, tc.user) } if got := HasPortFlag(tc.args); got != tc.port { t.Errorf("HasPortFlag(%v) = %v, want %v", tc.args, got, tc.port) } }) } }