Describe("RecentLogs", func() { var ( httpTestServer *httptest.Server incomingMessages []*events.LogMessage err error ) BeforeEach(func() { httpTestServer = httptest.NewServer(handlers.NewHttpHandler(messagesToSend, loggertesthelper.Logger())) endpoint = "ws://" + httpTestServer.Listener.Addr().String() }) JustBeforeEach(func() { close(messagesToSend) incomingMessages, err = connection.RecentLogs("fakeAppGuid", "authToken") }) AfterEach(func() { httpTestServer.Close() }) Context("with recent logs", func() { BeforeEach(func() { messagesToSend <- marshalMessage(createMessage("test-message-0", 0)) messagesToSend <- marshalMessage(createMessage("test-message-1", 0)) }) It("returns those logs from the server", func() { Expect(err).NotTo(HaveOccurred()) Expect(incomingMessages).To(HaveLen(2))
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)) Expect(err.Error()).To(ContainSubstring("i/o timeout")) }) }) Describe("RecentLogs", func() { It("times out due to an unresponsive server", func() { defer close(fakeHandler) errs := make(chan error, 10) cnsmr = consumer.New(strings.Replace(testServer.URL, "http", "ws", 1), nil, nil) go func() { _, err := cnsmr.RecentLogs("some-guid", "some-token") errs <- err }() var err error Eventually(errs, 2*testTimeout).Should(Receive(&err)) Expect(err).To(HaveOccurred()) }) }) })
} }) Describe("RecentLogs", func() { var ( receivedLogMessages []*events.LogMessage recentError error ) BeforeEach(func() { appGuid = "appGuid" }) JustBeforeEach(func() { close(messagesToSend) receivedLogMessages, recentError = cnsmr.RecentLogs(appGuid, authToken) }) Context("with an invalid URL", func() { BeforeEach(func() { trafficControllerURL = "invalid-url" }) It("returns an error", func() { Expect(recentError).ToNot(BeNil()) }) }) Context("when the connection can be established", func() { BeforeEach(func() { testServer = httptest.NewServer(handlers.NewHttpHandler(messagesToSend, loggertesthelper.Logger()))
}) server := httptest.NewServer(testHandler) tcURL = "ws://" + server.Listener.Addr().String() refresher = newMockTokenRefresher() refresher.RefreshAuthTokenOutput.Token <- "some-example-token" refresher.RefreshAuthTokenOutput.AuthError <- nil cnsmr = consumer.New(tcURL, nil, nil) cnsmr.RefreshTokenFrom(refresher) }) Describe("RecentLogs", func() { It("uses the token refresher to obtain a new token", func() { cnsmr.RecentLogs("some-fake-app-guid", "") Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) }) It("loads a token if the provided token fails with 401", func() { statuses <- http.StatusUnauthorized cnsmr.RecentLogs("some-fake-app-guid", "") Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) }) }) Describe("ContainerMetrics", func() { It("uses the token refresher to obtain a new token", func() { cnsmr.ContainerMetrics("some-fake-app-guid", "") Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) })
noaaConsumer = consumer.New(tcURL, &tls.Config{}, nil) }) AfterEach(func() { noaaConsumer.Close() }) It("logs stream access", func() { noaaConsumer.Stream(APP_ID, AUTH_TOKEN) expected := fmt.Sprintf("CEF:0|cloud_foundry|loggregator_trafficcontroller|1.0|GET /apps/%s/stream|GET /apps/%[1]s/stream|0|", APP_ID) Eventually(testContents).Should(ContainSubstring(expected)) }) It("logs recent access", func() { noaaConsumer.RecentLogs(APP_ID, AUTH_TOKEN) expected := fmt.Sprintf("CEF:0|cloud_foundry|loggregator_trafficcontroller|1.0|GET /apps/%s/recentlogs|GET /apps/%[1]s/recentlogs|0|", APP_ID) Eventually(testContents).Should(ContainSubstring(expected)) }) It("logs container metrics access", func() { noaaConsumer.ContainerMetrics(APP_ID, AUTH_TOKEN) expected := fmt.Sprintf("CEF:0|cloud_foundry|loggregator_trafficcontroller|1.0|GET /apps/%s/containermetrics|GET /apps/%[1]s/containermetrics|0|", APP_ID) Eventually(testContents).Should(ContainSubstring(expected)) }) It("logs firehose access", func() { noaaConsumer.Firehose("foo", AUTH_TOKEN)