func (cmd *SSH) Execute(fc flags.FlagContext) error { app := cmd.appReq.GetApplication() info, err := cmd.getSSHEndpointInfo() if err != nil { return errors.New(T("Error getting SSH info:") + err.Error()) } sshAuthCode, err := cmd.sshCodeGetter.Get() if err != nil { return errors.New(T("Error getting one time auth code: ") + err.Error()) } //init secureShell if it is not already set by SetDependency() with fakes if cmd.secureShell == nil { cmd.secureShell = sshCmd.NewSecureShell( sshCmd.DefaultSecureDialer(), sshTerminal.DefaultHelper(), sshCmd.DefaultListenerFactory(), 30*time.Second, app, info.SSHEndpointFingerprint, info.SSHEndpoint, sshAuthCode, ) } err = cmd.secureShell.Connect(cmd.opts) if err != nil { return errors.New(T("Error opening SSH connection: ") + err.Error()) } defer cmd.secureShell.Close() err = cmd.secureShell.LocalPortForward() if err != nil { return errors.New(T("Error forwarding port: ") + err.Error()) } if cmd.opts.SkipRemoteExecution { err = cmd.secureShell.Wait() } else { err = cmd.secureShell.InteractiveSession() } if err != nil { if exitError, ok := err.(*ssh.ExitError); ok { exitStatus := exitError.ExitStatus() if sig := exitError.Signal(); sig != "" { cmd.ui.Say(T("Process terminated by signal: {{.Signal}}. Exited with {{.ExitCode}}", map[string]interface{}{ "Signal": sig, "ExitCode": exitStatus, })) } os.Exit(exitStatus) } else { return errors.New(T("Error: ") + err.Error()) } } return nil }
package terminal_test import ( "code.cloudfoundry.org/cli/cf/ssh/terminal" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Helper", func() { var helper terminal.TerminalHelper BeforeEach(func() { helper = terminal.DefaultHelper() }) Describe("DefaultTerminalHelper", func() { It("returns a terminal helper", func() { Expect(helper).NotTo(BeNil()) }) }) })