Expect(cells[0].Guid).To(Equal("C")) }) It("it emits metrics for the failure", func() { zones := auctionrunner.FetchStateAndBuildZones(logger, workPool, clients, metricEmitter) Expect(zones).To(HaveLen(2)) Expect(metricEmitter.FailedCellStateRequestCallCount()).To(Equal(1)) }) }) Context("when clients are slow to respond", func() { BeforeEach(func() { repA.StateReturns(BuildCellState("the-zone", 10, 10, 100, false, linuxOnlyRootFSProviders, nil), errors.New("timeout")) repA.StateClientTimeoutReturns(5 * time.Second) repA.SetStateClientStub = func(client *http.Client) { repA.StateClientTimeoutReturns(client.Timeout) } repB.StateReturns(BuildCellState("the-zone", 10, 10, 100, false, linuxOnlyRootFSProviders, nil), errors.New("timeout")) repB.StateClientTimeoutReturns(2 * time.Second) repB.SetStateClientStub = func(client *http.Client) { repB.StateClientTimeoutReturns(client.Timeout) } repC.StateReturns(BuildCellState("the-zone", 10, 10, 100, false, linuxOnlyRootFSProviders, nil), errors.New("timeout")) repC.StateClientTimeoutReturns(4 * time.Second) repC.SetStateClientStub = func(client *http.Client) { repC.StateClientTimeoutReturns(client.Timeout) } }) It("retries with a backing off delay", func() { zones := auctionrunner.FetchStateAndBuildZones(logger, workPool, clients, metricEmitter)