Describe("GetAll", func() { Context("when reading LRPs from BBS succeeds", func() { BeforeEach(func() { fakeBBS.ActualLRPGroupsStub = func(filter models.ActualLRPFilter) ([]*models.ActualLRPGroup, error) { groups := []*models.ActualLRPGroup{} if filter.Domain == "" { groups = append(groups, &models.ActualLRPGroup{Instance: &actualLRP1}) } groups = append(groups, &models.ActualLRPGroup{Instance: &actualLRP2, Evacuating: &evacuatingLRP2}) return groups, nil } }) It("calls the BBS to retrieve the actual LRP groups", func() { handler.GetAll(responseRecorder, newTestRequest("")) Expect(fakeBBS.ActualLRPGroupsCallCount()).To(Equal(1)) }) It("responds with 200 Status OK", func() { handler.GetAll(responseRecorder, newTestRequest("")) Expect(responseRecorder.Code).To(Equal(http.StatusOK)) }) Context("when a domain query param is provided", func() { It("returns a list of desired lrp responses for the domain", func() { request, err := http.NewRequest("", "http://example.com?domain=domain-1", nil) Expect(err).NotTo(HaveOccurred()) handler.GetAll(responseRecorder, request) response := []receptor.ActualLRPResponse{} err = json.Unmarshal(responseRecorder.Body.Bytes(), &response)
return nil, errors.New("bam") } return []*models.ActualLRPGroup{}, nil } }) It("should not call sync until the error resolves", func() { Eventually(bbsClient.ActualLRPGroupsCallCount).Should(Equal(1)) Consistently(table.SwapCallCount).Should(Equal(0)) atomic.StoreInt32(&returnError, 0) syncEvents.Sync <- struct{}{} Eventually(table.SwapCallCount).Should(Equal(1)) Expect(bbsClient.ActualLRPGroupsCallCount()).To(Equal(2)) }) }) Context("when fetching desireds fails", func() { var returnError int32 BeforeEach(func() { returnError = 1 bbsClient.DesiredLRPSchedulingInfosStub = func(filter models.DesiredLRPFilter) ([]*models.DesiredLRPSchedulingInfo, error) { if atomic.LoadInt32(&returnError) == 1 { return nil, errors.New("bam") } return []*models.DesiredLRPSchedulingInfo{}, nil