echoHandler.HandleConnectionStub = func(conn net.Conn) { io.Copy(conn, conn) conn.Close() } realListener, err := net.Listen("tcp", "127.0.0.1:0") Expect(err).NotTo(HaveOccurred()) echoAddress = realListener.Addr().String() echoListener = &fake_net.FakeListener{} echoListener.AcceptStub = realListener.Accept echoListener.CloseStub = realListener.Close echoListener.AddrStub = realListener.Addr fakeLocalListener = &fake_net.FakeListener{} fakeLocalListener.AcceptReturns(nil, errors.New("Not Accepting Connections")) echoServer = server.NewServer(logger.Session("echo"), "", echoHandler) echoServer.SetListener(echoListener) go echoServer.Serve() opts = &options.SSHOptions{ AppName: "app-1", ForwardSpecs: []options.ForwardSpec{{ ListenAddress: localAddress, ConnectAddress: echoAddress, }}, } currentApp.State = "STARTED" currentApp.Diego = true
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 BeforeEach(func() { timeCh = make(chan time.Time, 3) fakeListener.AcceptStub = func() (net.Conn, error) { timeCh := timeCh