workerC = new(fakes.FakeWorker) workerA.SatisfyingReturns(workerA, nil) workerB.SatisfyingReturns(workerB, nil) workerC.SatisfyingReturns(nil, errors.New("nope")) fakeProvider.WorkersReturns([]Worker{workerA, workerB, workerC}, nil) }) It("succeeds", func() { Expect(satisfyingErr).NotTo(HaveOccurred()) }) It("checks that the workers satisfy the given spec", func() { Expect(workerA.SatisfyingCallCount()).To(Equal(1)) actualSpec, actualResourceTypes := workerA.SatisfyingArgsForCall(0) Expect(actualSpec).To(Equal(spec)) Expect(actualResourceTypes).To(Equal(resourceTypes)) Expect(workerB.SatisfyingCallCount()).To(Equal(1)) actualSpec, actualResourceTypes = workerB.SatisfyingArgsForCall(0) Expect(actualSpec).To(Equal(spec)) Expect(actualResourceTypes).To(Equal(resourceTypes)) Expect(workerC.SatisfyingCallCount()).To(Equal(1)) actualSpec, actualResourceTypes = workerC.SatisfyingArgsForCall(0) Expect(actualSpec).To(Equal(spec)) Expect(actualResourceTypes).To(Equal(resourceTypes)) }) It("returns a random worker satisfying the spec", func() {
workerC = new(fakes.FakeWorker) workerA.SatisfyingReturns(workerA, nil) workerB.SatisfyingReturns(workerB, nil) workerC.SatisfyingReturns(nil, errors.New("nope")) fakeProvider.WorkersReturns([]Worker{workerA, workerB, workerC}, nil) }) It("succeeds", func() { Expect(satisfyingErr).NotTo(HaveOccurred()) }) It("checks that the workers satisfy the given spec", func() { Expect(workerA.SatisfyingCallCount()).To(Equal(1)) Expect(workerA.SatisfyingArgsForCall(0)).To(Equal(spec)) Expect(workerB.SatisfyingCallCount()).To(Equal(1)) Expect(workerB.SatisfyingArgsForCall(0)).To(Equal(spec)) Expect(workerC.SatisfyingCallCount()).To(Equal(1)) Expect(workerC.SatisfyingArgsForCall(0)).To(Equal(spec)) }) It("returns a random worker satisfying the spec", func() { chosenCount := map[Worker]int{workerA: 0, workerB: 0, workerC: 0} for i := 0; i < 100; i++ { satisfyingWorker, satisfyingErr = pool.Satisfying(spec) Expect(satisfyingErr).NotTo(HaveOccurred()) chosenCount[satisfyingWorker]++ }