handler = handlers.NewHttpHandler(messagesToSend, loggertesthelper.Logger())
			testServer = httptest.NewServer(handler)
			trafficControllerURL = "ws://" + testServer.Listener.Addr().String()
		})

		It("returns the ContainerMetric values from ContainerEnvelopes", func() {
			env := createContainerMetric(2, 2000)
			messagesToSend <- marshalMessage(env)
			close(messagesToSend)
			envelopes, _ := cnsmr.ContainerEnvelopes(appGuid, authToken)

			messagesToSend = make(chan []byte, 100)
			handler.Messages = messagesToSend
			messagesToSend <- marshalMessage(env)
			close(messagesToSend)
			metrics, err := cnsmr.ContainerMetrics(appGuid, authToken)
			Expect(metrics).To(HaveLen(1))
			Expect(err).ToNot(HaveOccurred())
			Expect(metrics).To(ConsistOf(envelopes[0].ContainerMetric))
		})
	})

	Describe("ContainerEnvelopes", func() {
		var (
			envelopes []*events.Envelope
			err       error
		)

		BeforeEach(func() {
			appGuid = "appGuid"
		})
		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())
			})

			It("loads a token if the provided token fails with 401", func() {
				statuses <- http.StatusUnauthorized
				cnsmr.ContainerMetrics("some-fake-app-guid", "")
				Eventually(refresher.RefreshAuthTokenCalled).Should(BeCalled())
			})
		})
	})

	It("does not use the token refresher if an auth token is valid", func() {
		refresher := newMockTokenRefresher()

		cnsmr := consumer.New("fakeTrafficControllerURL", nil, nil)
		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)

			expected := "CEF:0|cloud_foundry|loggregator_trafficcontroller|1.0|GET /firehose/foo|GET /firehose/foo|0|"
			Eventually(testContents).Should(ContainSubstring(expected))
		})
	})

	Context("with legacy endpoints", func() {
		var legacyConsumer loggregator_consumer.LoggregatorConsumer