}) }) }) Describe("Stream", func() { var ( envelopes <-chan *events.Envelope errors <-chan error ) BeforeEach(func() { startFakeTrafficController() }) JustBeforeEach(func() { envelopes, errors = cnsmr.Stream(appGuid, authToken) }) Context("connection errors", func() { BeforeEach(func() { fakeHandler.Fail = true }) It("attempts to connect five times", func() { fakeHandler.Close() for i := 0; i < 5; i++ { Eventually(errors).Should(Receive()) } }) })
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()) }) It("loads a token if the provided token fails with 401", func() { testHandler.responseStatuses <- http.StatusUnauthorized cnsmr.StreamWithoutReconnect("some-fake-app-guid", "") Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) }) }) Describe("Stream", func() { It("loads a token if the provided token is empty", func() { cnsmr.Stream("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.Stream("some-fake-app-guid", "") Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) }) }) Describe("FirehoseWithoutReconnect", func() { It("loads a token if the provided token is empty", func() { cnsmr.FirehoseWithoutReconnect("some-fake-app-guid", "") Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled()) })
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)) 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 }()
}) Context("with modern endpoints", func() { var noaaConsumer *consumer.Consumer JustBeforeEach(func() { tcURL := fmt.Sprintf("ws://%s:%d", localIPAddress, TRAFFIC_CONTROLLER_DROPSONDE_PORT) 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)