ExpiresIn: 5, } client = &fake_routing_api.FakeClient{} eventChannel = make(chan routing_api.Event) errorChannel = make(chan error) eventSource := fake_routing_api.FakeEventSource{} client.SubscribeToEventsWithMaxRetriesReturns(&eventSource, nil) localEventChannel := eventChannel localErrorChannel := errorChannel eventSource.NextStub = func() (routing_api.Event, error) { select { case e := <-localErrorChannel: return routing_api.Event{}, e case event := <-localEventChannel: return event, nil } } clock = fakeclock.NewFakeClock(time.Now()) fetcher = NewRouteFetcher(logger, uaaClient, registry, cfg, client, retryInterval, clock) }) AfterEach(func() { close(errorChannel) close(eventChannel) }) Describe("FetchRoutes", func() {
Eventually(tokenFetcher.FetchTokenCallCount).Should(BeNumerically(">=", 2)) }) }) Context("and the event source successfully subscribes", func() { It("responds to events", func() { eventSource := fake_routing_api.FakeEventSource{} client.SubscribeToEventsReturns(&eventSource, nil) eventSource.NextStub = func() (routing_api.Event, error) { event := routing_api.Event{ Action: "Delete", Route: db.Route{ Route: "z.a.k", Port: 63, IP: "42.42.42.42", TTL: 1, LogGuid: "Tomato", RouteServiceUrl: "route-service-url", }} return event, nil } tokenFetcher.FetchTokenReturns(token, nil) fetcher.StartEventCycle() Eventually(registry.UnregisterCallCount).Should(BeNumerically(">=", 1)) Eventually(client.SubscribeToEventsCallCount).Should(Equal(1)) }) It("responds to errors, and retries subscribing", func() {