} }) It("forwards to the resource", func() { process.Signal(os.Interrupt) Eventually(receivedSignals).Should(Receive(Equal(os.Interrupt))) Eventually(process.Wait()).Should(Receive()) }) }) Context("when performing the put fails", func() { Context("with an unknown error", func() { disaster := errors.New("nope") BeforeEach(func() { fakeVersionedSource.RunReturns(disaster) }) It("exits with the failure", func() { Eventually(process.Wait()).Should(Receive(Equal(disaster))) }) It("invokes the delegate's Failed callback without completing", func() { Eventually(process.Wait()).Should(Receive(Equal(disaster))) Expect(putDelegate.CompletedCallCount()).To(BeZero()) Expect(putDelegate.FailedCallCount()).To(Equal(1)) Expect(putDelegate.FailedArgsForCall(0)).To(Equal(disaster)) })
It("releases the resource, preserving its original TTL", func() { <-process.Wait() Expect(fakeResource.ReleaseCallCount()).To(BeZero()) step.Release() Expect(fakeResource.ReleaseCallCount()).To(Equal(1)) Expect(fakeResource.ReleaseArgsForCall(0)).To(BeZero()) }) }) }) Context("when the 'get' action fails", func() { BeforeEach(func() { fakeVersionedSource.RunReturns(resource.ErrResourceScriptFailed{ ExitStatus: 1, }) }) It("exits with no error", func() { Expect(<-process.Wait()).To(BeNil()) }) It("does not mark the cache as initialized", func() { <-process.Wait() Expect(fakeCache.InitializeCallCount()).To(Equal(0)) }) It("completes via the delegate", func() { <-process.Wait()