It("uses cache when fetching token from UAA", func() { client.RoutesReturns(response, nil) err := fetcher.FetchRoutes() Expect(err).ToNot(HaveOccurred()) Expect(uaaClient.FetchTokenCallCount()).To(Equal(1)) Expect(uaaClient.FetchTokenArgsForCall(0)).To(Equal(false)) }) Context("when a cached token is invalid", func() { BeforeEach(func() { count := 0 client.RoutesStub = func() ([]models.Route, error) { if count == 0 { count++ return nil, errors.New("unauthorized") } else { return response, nil } } }) It("uses cache when fetching token from UAA", func() { client = &fake_routing_api.FakeClient{} err := fetcher.FetchRoutes() Expect(err).ToNot(HaveOccurred()) Expect(uaaClient.FetchTokenCallCount()).To(Equal(2)) Expect(uaaClient.FetchTokenArgsForCall(0)).To(Equal(false)) Expect(uaaClient.FetchTokenArgsForCall(1)).To(Equal(true)) }) })
Describe(".StartFetchCycle", func() { BeforeEach(func() { cfg.PruneStaleDropletsInterval = 10 * time.Millisecond fetcher = NewRouteFetcher(logger, tokenFetcher, registry, cfg, client, retryInterval) tokenFetcher.FetchTokenReturns(token, nil) client.RoutesReturns(response, nil) }) It("periodically fetches routes", func() { received := make(chan struct{}) client.RoutesStub = func() ([]db.Route, error) { received <- struct{}{} return []db.Route{}, nil } fetcher.StartFetchCycle() Eventually(received).Should(Receive()) Eventually(received).Should(Receive()) }) It("logs the error", func() { tokenFetcher.FetchTokenReturns(nil, errors.New("Unauthorized")) fetcher.StartFetchCycle() Eventually(func() int { return len(sink.Records()) }).Should(BeNumerically(">=", 1))