BeforeEach(func() {
				tokenFetcher.FetchTokenReturns(nil, errors.New("Unauthorized"))
			})

			It("logs the error", func() {
				currentTokenFetchErrors := sender.GetCounter(TokenFetchErrors)

				Eventually(func() int {
					return len(sink.Records())
				}).Should(BeNumerically(">=", 1))

				Expect(sink.Records()).ToNot(BeNil())
				Expect(sink.Records()[0].Message).To(Equal("Unauthorized"))

				Eventually(tokenFetcher.FetchTokenCallCount).Should(BeNumerically(">=", 2))
				Expect(client.SubscribeToEventsCallCount()).Should(Equal(0))
				Expect(client.RoutesCallCount()).Should(Equal(0))

				Eventually(func() uint64 {
					return sender.GetCounter(TokenFetchErrors)
				}).Should(BeNumerically(">", currentTokenFetchErrors))
			})
		})

		Describe("Event cycle", func() {
			Context("and the event source successfully subscribes", func() {
				It("responds to events", func() {
					Eventually(client.SubscribeToEventsCallCount).Should(Equal(1))
					eventChannel <- routing_api.Event{
						Action: "Delete",
						Route: db.Route{
							Route:   "z.a.k",
							Port:    63,
							IP:      "42.42.42.42",
							TTL:     1,
							LogGuid: "Tomato",
						}}
					return event, nil
				}

				tokenFetcher.FetchTokenReturns(token, nil)
				fetcher.StartEventCycle()

				<-received

				Expect(registry.UnregisterCallCount()).To(Equal(1))
				Expect(client.SubscribeToEventsCallCount()).To(Equal(1))
			})

			It("responds to errors, and retries subscribing", func() {
				eventSource := fake_routing_api.FakeEventSource{}
				client.SubscribeToEventsReturns(&eventSource, nil)

				received := make(chan struct{})

				eventSource.NextStub = func() (routing_api.Event, error) {
					received <- struct{}{}
					return routing_api.Event{}, errors.New("beep boop im a robot")
				}

				tokenFetcher.FetchTokenReturns(token, nil)
				fetcher.StartEventCycle()