}) JustBeforeEach(func() { sshProxy = proxy.New(logger.Session("proxy"), proxySSHConfig) proxyServer = server.NewServer(logger, "127.0.0.1:0", sshProxy) proxyServer.SetListener(proxyListener) go proxyServer.Serve() sshDaemon = daemon.New(logger.Session("sshd"), daemonSSHConfig, daemonGlobalRequestHandlers, daemonNewChannelHandlers) sshdServer = server.NewServer(logger, "127.0.0.1:0", sshDaemon) sshdServer.SetListener(sshdListener) go sshdServer.Serve() }) AfterEach(func() { proxyServer.Shutdown() sshdServer.Shutdown() }) Context("when a new connection arrives", func() { var clientConfig *ssh.ClientConfig BeforeEach(func() { clientConfig = &ssh.ClientConfig{ User: "******", Auth: []ssh.AuthMethod{ ssh.Password("diego-user:diego-password"), }, } })
newChannelHandlers := map[string]handlers.NewChannelHandler{ "direct-tcpip": handler, } serverNetConn, clientNetConn := test_helpers.Pipe() sshd = daemon.New(logger, serverSSHConfig, nil, newChannelHandlers) go sshd.HandleConnection(serverNetConn) client = test_helpers.NewClient(clientNetConn, nil) }) AfterEach(func() { client.Close() echoServer.Shutdown() }) Context("when a session is opened", func() { var conn net.Conn JustBeforeEach(func() { var dialErr error conn, dialErr = client.Dial("tcp", echoAddress) Expect(dialErr).NotTo(HaveOccurred()) }) AfterEach(func() { conn.Close() })
}) }) Describe("Shutdown", func() { var fakeListener *fake_net.FakeListener BeforeEach(func() { fakeListener = &fake_net.FakeListener{} srv = server.NewServer(logger, address, handler) srv.SetListener(fakeListener) }) Context("when the server is shutdown", func() { BeforeEach(func() { srv.Shutdown() }) It("closes the listener", func() { Expect(fakeListener.CloseCallCount()).To(Equal(1)) }) It("marks the server as stopping", func() { Expect(srv.IsStopping()).To(BeTrue()) }) It("does not log an accept failure", func() { Eventually(func() error { _, err := net.Dial("tcp", address) return err }).Should(HaveOccurred())