nil, 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(tokenFetcher.FetchTokenCallCount()).To(Equal(1)) Expect(tokenFetcher.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(tokenFetcher.FetchTokenCallCount()).To(Equal(2)) Expect(tokenFetcher.FetchTokenArgsForCall(0)).To(BeTrue()) Expect(tokenFetcher.FetchTokenArgsForCall(1)).To(BeFalse()) Expect(client.RoutesCallCount()).To(Equal(2)) Expect(err).To(HaveOccurred()) Expect(err.Error()).To(Equal("unauthorized"))
fake_token_fetcher "github.com/cloudfoundry-incubator/uaa-token-fetcher/fakes" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe(".Register", func() { var ( client *fake_routing_api.FakeClient tokenFetcher *fake_token_fetcher.FakeTokenFetcher ) BeforeEach(func() { client = &fake_routing_api.FakeClient{} tokenFetcher = &fake_token_fetcher.FakeTokenFetcher{} tokenFetcher.FetchTokenReturns(&token_fetcher.Token{AccessToken: "token"}, nil) }) It("registers routes", func() { routes := []db.Route{{}} commands.Register(client, tokenFetcher, routes) Expect(client.UpsertRoutesCallCount()).To(Equal(1)) Expect(client.UpsertRoutesArgsForCall(0)).To(Equal(routes)) }) It("fetches a token", func() { routes := []db.Route{{}} commands.Register(client, tokenFetcher, routes) Expect(tokenFetcher.FetchTokenCallCount()).To(Equal(1)) }) })
Context("when fetching the auth token fails", func() { It("logs the failure and tries again", func() { received := make(chan struct{}) tokenFetcher.FetchTokenStub = func() (*token_fetcher.Token, error) { received <- struct{}{} return nil, errors.New("failed to get the token") } fetcher.StartEventCycle() Eventually(received).Should(Receive()) Eventually(received).Should(Receive()) Expect(sink.Records()).ToNot(BeNil()) Expect(sink.Records()[0].Message).To(Equal("failed to get the token")) Expect(tokenFetcher.FetchTokenCallCount()).To(Equal(2)) }) }) Context("and the event source successfully subscribes", func() { It("responds to events", func() { eventSource := fake_routing_api.FakeEventSource{} client.SubscribeToEventsReturns(&eventSource, nil) received := make(chan struct{}) eventSource.NextStub = func() (routing_api.Event, error) { received <- struct{}{} event := routing_api.Event{ Action: "Delete", Route: db.Route{