Skip to content

Commit e9d8da4

Browse files
committed
test: cover remaining root patch branches
1 parent 8ab5487 commit e9d8da4

File tree

2 files changed

+88
-1
lines changed

2 files changed

+88
-1
lines changed

cmd/root.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ var resolveHostFunc = func(resolver *sshConn.SSHConfigResolver, spec sshConn.Hos
4040
return resolver.ResolveHost(spec, fallbackUser)
4141
}
4242

43+
var spawnShellFunc = shell.Spawn
44+
4345
// RootCmd represents the base command when called without any subcommands
4446
var RootCmd = &cobra.Command{
4547
Use: "pretty",
@@ -166,7 +168,7 @@ usage:
166168
}
167169
hostList.AddHost(host)
168170
}
169-
shell.Spawn(hostList)
171+
spawnShellFunc(hostList)
170172
return nil
171173
},
172174
}

cmd/root_test.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)