}) Context("when the client connection closes", func() { It("the handler returns", func() { Consistently(completed).ShouldNot(Receive()) conn.Close() Eventually(completed).Should(Receive()) }) }) Context("when the target connection closes", func() { It("the handler returns", func() { Consistently(completed).ShouldNot(Receive()) Expect(echoHandler.HandleConnectionCallCount()).To(Equal(1)) echoConn := echoHandler.HandleConnectionArgsForCall(0) echoConn.Close() Eventually(completed).Should(Receive()) }) }) }) }) Context("when the direct-tcpip extra data fails to unmarshal", func() { It("rejects the open channel request", func() { _, _, err := client.OpenChannel("direct-tcpip", ssh.Marshal(struct{ Bogus int }{Bogus: 1234})) Expect(err).To(Equal(&ssh.OpenChannelError{ Reason: ssh.ConnectionFailed, Message: "Failed to parse open channel message", }))
} }) JustBeforeEach(func() { srv = server.NewServer(logger, address, handler) srv.SetListener(fakeListener) srv.Serve() }) It("accepts inbound connections", func() { Expect(fakeListener.AcceptCallCount()).To(Equal(2)) }) It("passes the connection to the connection handler", func() { Eventually(handler.HandleConnectionCallCount).Should(Equal(1)) Expect(handler.HandleConnectionArgsForCall(0)).To(Equal(fakeConn)) }) Context("when accept returns a permanent error", func() { BeforeEach(func() { fakeListener.AcceptReturns(nil, errors.New("oops")) }) It("closes the listener", func() { Expect(fakeListener.CloseCallCount()).To(Equal(1)) }) }) Context("when accept returns a temporary error", func() { var timeCh chan time.Time