}) Context("when looking up the worker is successful", func() { var fakeWorker *fakes.FakeWorker BeforeEach(func() { fakeWorker = new(fakes.FakeWorker) fakeProvider.GetWorkerReturns(fakeWorker, true, nil) }) It("calls to lookup the container on the worker", func() { pool.LookupContainer(logger, "some-handle") Expect(fakeWorker.LookupContainerCallCount()).To(Equal(1)) _, handleArg := fakeWorker.LookupContainerArgsForCall(0) Expect(handleArg).To(Equal("some-handle")) }) Context("when looking up the container contains an error", func() { It("returns the error", func() { fakeWorker.LookupContainerReturns(nil, false, errors.New("disaster")) container, found, err := pool.LookupContainer(logger, "some-handle") Expect(err).To(HaveOccurred()) Expect(container).To(BeNil()) Expect(found).To(BeFalse()) }) }) Context("when the container cannot be found on the worker", func() {
Context("when a worker can locate the container", func() { BeforeEach(func() { workerA.LookupContainerReturns(fakeContainer, nil) workerB.LookupContainerReturns(nil, ErrContainerNotFound) }) It("returns the container", func() { Ω(foundContainer).Should(Equal(fakeContainer)) }) It("looks up by the given identifier", func() { Ω(workerA.LookupContainerCallCount()).Should(Equal(1)) Ω(workerB.LookupContainerCallCount()).Should(Equal(1)) Ω(workerA.LookupContainerArgsForCall(0)).Should(Equal(id)) Ω(workerB.LookupContainerArgsForCall(0)).Should(Equal(id)) }) }) Context("when no workers can locate the container", func() { BeforeEach(func() { workerA.LookupContainerReturns(nil, ErrContainerNotFound) workerB.LookupContainerReturns(nil, ErrContainerNotFound) }) It("returns ErrContainerNotFound", func() { Ω(lookupErr).Should(Equal(ErrContainerNotFound)) }) })