It("forwards to the correct target", func() { validateConnectivity(localAddress) validateConnectivity(localAddress2) }) Context("when the secure client is closed", func() { BeforeEach(func() { fakeListenerFactory.ListenReturns(fakeLocalListener, nil) fakeLocalListener.AcceptReturns(nil, errors.New("not accepting connections")) }) It("closes the listeners ", func() { Eventually(fakeListenerFactory.ListenCallCount).Should(Equal(2)) Eventually(fakeLocalListener.AcceptCallCount).Should(Equal(2)) originalCloseCount := fakeLocalListener.CloseCallCount() err := secureShell.Close() Expect(err).NotTo(HaveOccurred()) Expect(fakeLocalListener.CloseCallCount()).Should(Equal(originalCloseCount + 2)) }) }) }) Context("when listen fails", func() { BeforeEach(func() { fakeListenerFactory.ListenReturns(nil, errors.New("failure is an option")) }) It("returns the error", func() { Expect(localForwardError).To(MatchError("failure is an option")) })
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 BeforeEach(func() { timeCh = make(chan time.Time, 3) fakeListener.AcceptStub = func() (net.Conn, error) { timeCh := timeCh select { case timeCh <- time.Now(): return nil, test_helpers.NewTestNetError(false, true) default: