defaultEnv = map[string]string{} defaultEnv["TEST"] = "FOO" sessionChannelHandler = handlers.NewSessionChannelHandler(runner, shellLocator, defaultEnv, time.Second) newChannelHandlers = map[string]handlers.NewChannelHandler{ "session": sessionChannelHandler, } serverNetConn, clientNetConn := test_helpers.Pipe() sshd = daemon.New(logger, serverSSHConfig, nil, newChannelHandlers) connectionFinished = make(chan struct{}) go func() { sshd.HandleConnection(serverNetConn) close(connectionFinished) }() client = test_helpers.NewClient(clientNetConn, nil) }) AfterEach(func() { if client != nil { err := client.Close() Expect(err).NotTo(HaveOccurred()) } Eventually(connectionFinished).Should(BeClosed()) }) Context("when a session is opened", func() {
serverSSHConfig.AddHostKey(TestHostKey) }) Describe("HandleConnection", func() { var fakeConn *fake_net.FakeConn Context("when the function returns", func() { BeforeEach(func() { fakeConn = &fake_net.FakeConn{} fakeConn.ReadReturns(0, errors.New("oops")) sshd = daemon.New(logger, serverSSHConfig, nil, nil) }) It("closes the connection", func() { sshd.HandleConnection(fakeConn) Expect(fakeConn.CloseCallCount()).To(BeNumerically(">=", 1)) }) }) Context("when an ssh client connects", func() { var ( serverNetConn net.Conn clientNetConn net.Conn clientConn ssh.Conn clientChannels <-chan ssh.NewChannel clientRequests <-chan *ssh.Request clientConnErr error client *ssh.Client