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()