expectedRoute.TTL, expectedRoute.RouteServiceUrl, ))) } }) Context("when the routing api returns an error", func() { Context("error is not unauthorized error", func() { It("returns an error", func() { client.RoutesReturns(nil, errors.New("Oops!")) err := fetcher.FetchRoutes() Expect(err).To(HaveOccurred()) Expect(err.Error()).To(Equal("Oops!")) Expect(uaaClient.FetchTokenCallCount()).To(Equal(1)) Expect(uaaClient.FetchTokenArgsForCall(0)).To(BeTrue()) }) }) Context("error is unauthorized error", func() { It("returns an error", func() { client.RoutesReturns(nil, errors.New("unauthorized")) err := fetcher.FetchRoutes() Expect(uaaClient.FetchTokenCallCount()).To(Equal(2)) Expect(uaaClient.FetchTokenArgsForCall(0)).To(BeTrue()) Expect(uaaClient.FetchTokenArgsForCall(1)).To(BeFalse()) Expect(client.RoutesCallCount()).To(Equal(2)) Expect(err).To(HaveOccurred()) Expect(err.Error()).To(Equal("unauthorized")) })
expectedRoute.LogGuid, nil, *expectedRoute.TTL, expectedRoute.RouteServiceUrl, expectedRoute.ModificationTag, ))) } }) 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 } } })