graceTime := time.Second fakeContainer = new(fakes.FakeContainer) fakeContainer.HandleReturns("doomed-handle") serverBackend.GraceTimeReturns(graceTime) serverBackend.CreateReturns(fakeContainer, nil) serverBackend.LookupReturns(fakeContainer, nil) before := time.Now() _, err := apiClient.Create(garden.ContainerSpec{}) Ω(err).ShouldNot(HaveOccurred()) Eventually(serverBackend.DestroyCallCount, 2*time.Second).Should(Equal(1)) Ω(serverBackend.DestroyArgsForCall(0)).Should(Equal("doomed-handle")) Ω(time.Since(before)).Should(BeNumerically("~", graceTime, 100*time.Millisecond)) }) }) Context("when a grace time is not given", func() { It("defaults it to the server's grace time", func() { _, err := apiClient.Create(garden.ContainerSpec{ Handle: "some-handle", }) Ω(err).ShouldNot(HaveOccurred()) spec := serverBackend.CreateArgsForCall(0) Ω(spec.GraceTime).Should(Equal(serverContainerGraceTime)) })
container, err := workers[0].CreateContainer(logger, id, spec) Expect(err).NotTo(HaveOccurred()) Expect(fakeDB.CreateContainerCallCount()).To(Equal(1)) createdInfo, _ := fakeDB.CreateContainerArgsForCall(0) Expect(createdInfo.WorkerName).To(Equal("some-worker-name")) Expect(container.Handle()).To(Equal("created-handle")) Expect(worker.CreateCallCount()).To(Equal(1)) err = container.Destroy() Expect(err).NotTo(HaveOccurred()) Expect(worker.DestroyCallCount()).To(Equal(1)) Expect(worker.DestroyArgsForCall(0)).To(Equal("created-handle")) }) }) Describe("a looked-up container", func() { It("calls through to garden", func() { fakeContainer := new(gfakes.FakeContainer) fakeContainer.HandleReturns("some-handle") worker.ContainersReturns([]garden.Container{fakeContainer}, nil) worker.LookupReturns(fakeContainer, nil) fakeDB.FindContainerByIdentifierReturns(db.Container{Handle: "some-handle"}, true, nil) container, found, err := workers[0].FindContainerForIdentifier(logger, Identifier{ Name: "some-name",
container, err := workers[0].CreateContainer(id, spec) Ω(err).ShouldNot(HaveOccurred()) Ω(container.Handle()).Should(Equal("created-handle")) Ω(workerA.CreateCallCount()).Should(Equal(1)) Ω(workerA.CreateArgsForCall(0).Properties).Should(Equal(garden.Properties{ "concourse:name": "some-name", })) err = container.Destroy() Ω(err).ShouldNot(HaveOccurred()) Ω(workerA.DestroyCallCount()).Should(Equal(1)) Ω(workerA.DestroyArgsForCall(0)).Should(Equal("created-handle")) }) }) Describe("a looked-up container", func() { It("calls through to garden", func() { fakeContainer := new(gfakes.FakeContainer) fakeContainer.HandleReturns("some-handle") workerA.ContainersReturns([]garden.Container{fakeContainer}, nil) container, err := workers[0].LookupContainer(Identifier{Name: "some-name"}) Ω(err).ShouldNot(HaveOccurred()) Ω(container.Handle()).Should(Equal("some-handle"))