})

	Describe("TailingLogs", func() {
		var (
			logMessages <-chan *events.LogMessage
			errors      <-chan error
			retries     uint
		)

		BeforeEach(func() {
			retries = 5
			startFakeTrafficController()
		})

		JustBeforeEach(func() {
			logMessages, errors = cnsmr.TailingLogs(appGuid, authToken)
		})

		It("resets the attempt counter after a successful connection", func(done Done) {
			defer close(done)

			fakeHandler.InputChan <- marshalMessage(createMessage("message 1", 0))
			Eventually(logMessages).Should(Receive())

			fakeHandler.Close()
			expectedErrorCount := 4
			for i := 0; i < expectedErrorCount; i++ {
				Eventually(errors, time.Second).Should(Receive())
			}
			fakeHandler.Reset()
			testHandler = &errorRespondingHandler{
				subHandler:       handlers.NewWebsocketHandler(make(chan []byte), 100*time.Millisecond, loggertesthelper.Logger()),
				responseStatuses: make(chan int, 10),
			}
			server := httptest.NewServer(testHandler)
			tcURL = "ws://" + server.Listener.Addr().String()

			refresher = newMockTokenRefresher()
			cnsmr = consumer.New(tcURL, nil, nil)

			cnsmr.RefreshTokenFrom(refresher)
		})

		Describe("TailingLogs", func() {
			It("loads a token if the provided token is empty", func() {
				cnsmr.TailingLogs("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.TailingLogs("some-fake-app-guid", "")
				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", "")