internal.Timeout = testTimeout fakeHandler = make(nullHandler, 1) testServer = httptest.NewServer(fakeHandler) }) AfterEach(func() { cnsmr.Close() }) Describe("TailingLogsWithoutReconnect", func() { It("times out due to handshake timeout", func() { defer close(fakeHandler) cnsmr = consumer.New(strings.Replace(testServer.URL, "http", "ws", 1), nil, nil) _, errCh := cnsmr.TailingLogsWithoutReconnect(appGuid, authToken) var err error Eventually(errCh, 2*testTimeout).Should(Receive(&err)) Expect(err.Error()).To(ContainSubstring("i/o timeout")) }) }) Describe("Stream", func() { It("times out due to handshake timeout", func() { defer close(fakeHandler) cnsmr = consumer.New(strings.Replace(testServer.URL, "http", "ws", 1), nil, nil) _, errCh := cnsmr.Stream(appGuid, authToken) var err error Eventually(errCh, 2*testTimeout).Should(Receive(&err))
}) Describe("SetOnConnectCallback", func() { BeforeEach(func() { testServer = httptest.NewServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())) trafficControllerURL = "ws://" + testServer.Listener.Addr().String() close(messagesToSend) }) It("sets a callback and calls it when connecting", func() { called := make(chan bool) cb := func() { called <- true } cnsmr.SetOnConnectCallback(cb) cnsmr.TailingLogsWithoutReconnect(appGuid, authToken) Eventually(called).Should(Receive()) }) Context("when the connection fails", func() { BeforeEach(func() { trafficControllerURL = "!!!bad-url" }) It("does not call the callback", func() { called := make(chan bool) cb := func() { called <- true } cnsmr.SetOnConnectCallback(cb) cnsmr.TailingLogsWithoutReconnect(appGuid, authToken)
Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) }) It("returns any error when fetching the token from the refresher", func() { errMsg := "Fetching authToken failed" refresher.RefreshAuthTokenOutput.Token <- "" refresher.RefreshAuthTokenOutput.AuthError <- errors.New(errMsg) _, errChan := cnsmr.TailingLogs("some-fake-app-guid", "") Eventually(errChan).Should(Receive(MatchError(errMsg))) }) }) Describe("TailingLogsWithoutReconnect", func() { It("loads a token if the provided token is empty", func() { cnsmr.TailingLogsWithoutReconnect("some-fake-app-guid", "") Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) }) It("loads a token if the provided token fails with 401", func() { testHandler.responseStatuses <- http.StatusUnauthorized cnsmr.TailingLogsWithoutReconnect("some-fake-app-guid", "") Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) }) }) Describe("StreamWithoutReconnect", func() { It("loads a token if the provided token is empty", func() { cnsmr.StreamWithoutReconnect("some-fake-app-guid", "") Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) })