@@ -237,3 +237,88 @@ func TestExecuteReturnsErrorWhenResolveJumpFails(t *testing.T) {
237237 t .Fatalf ("unexpected error: %v" , err )
238238 }
239239}
240+
241+ func TestExecuteReturnsNilOnSuccessfulSetup (t * testing.T ) {
242+ prevHostGroup := hostGroup
243+ prevHostsFile := hostsFile
244+ prevLoad := loadSSHConfigFunc
245+ prevSpawn := spawnShellFunc
246+ t .Cleanup (func () {
247+ hostGroup = prevHostGroup
248+ hostsFile = prevHostsFile
249+ loadSSHConfigFunc = prevLoad
250+ spawnShellFunc = prevSpawn
251+ RootCmd .SetArgs (nil )
252+ })
253+
254+ loadSSHConfigFunc = func (paths sshConn.SSHConfigPaths ) (* sshConn.SSHConfigResolver , error ) {
255+ return & sshConn.SSHConfigResolver {}, nil
256+ }
257+ spawnCalled := false
258+ spawnShellFunc = func (hostList * sshConn.HostList ) {
259+ spawnCalled = true
260+ }
261+
262+ hostGroup = ""
263+ hostsFile = ""
264+ RootCmd .SetArgs ([]string {"host1" })
265+
266+ err := Execute ()
267+ if err != nil {
268+ t .Fatalf ("unexpected error: %v" , err )
269+ }
270+ if ! spawnCalled {
271+ t .Fatalf ("expected spawn to be called" )
272+ }
273+ }
274+
275+ func TestExecuteAppliesGlobalUserToHostAndJumpSpecs (t * testing.T ) {
276+ prevHostGroup := hostGroup
277+ prevHostsFile := hostsFile
278+ prevLoad := loadSSHConfigFunc
279+ prevResolve := resolveHostFunc
280+ prevSpawn := spawnShellFunc
281+ prevUsername := viper .Get ("username" )
282+ t .Cleanup (func () {
283+ hostGroup = prevHostGroup
284+ hostsFile = prevHostsFile
285+ loadSSHConfigFunc = prevLoad
286+ resolveHostFunc = prevResolve
287+ spawnShellFunc = prevSpawn
288+ viper .Set ("username" , prevUsername )
289+ RootCmd .SetArgs (nil )
290+ })
291+
292+ loadSSHConfigFunc = func (paths sshConn.SSHConfigPaths ) (* sshConn.SSHConfigResolver , error ) {
293+ return & sshConn.SSHConfigResolver {}, nil
294+ }
295+ spawnShellFunc = func (hostList * sshConn.HostList ) {}
296+ viper .Set ("username" , "deploy" )
297+
298+ call := 0
299+ resolveHostFunc = func (resolver * sshConn.SSHConfigResolver , spec sshConn.HostSpec , fallbackUser string ) (sshConn.ResolvedHost , error ) {
300+ call ++
301+ if call == 1 {
302+ if ! spec .UserSet || spec .User != "deploy" {
303+ t .Fatalf ("expected global user on host resolve, got user=%q userSet=%v" , spec .User , spec .UserSet )
304+ }
305+ return sshConn.ResolvedHost {Alias : spec .Alias , Host : spec .Host , Port : 22 , User : spec .User , ProxyJump : []string {"jump1" }}, nil
306+ }
307+ if ! spec .UserSet || spec .User != "deploy" {
308+ t .Fatalf ("expected global user on jump resolve, got user=%q userSet=%v" , spec .User , spec .UserSet )
309+ }
310+ return sshConn.ResolvedHost {Alias : spec .Alias , Host : spec .Host , Port : 22 , User : spec .User }, nil
311+ }
312+
313+ hostGroup = ""
314+ hostsFile = ""
315+ RootCmd .SetArgs ([]string {"host1" })
316+
317+ err := Execute ()
318+ if err != nil {
319+ t .Fatalf ("unexpected error: %v" , err )
320+ }
321+ if call != 2 {
322+ t .Fatalf ("expected 2 resolve calls, got %d" , call )
323+ }
324+ }
0 commit comments