}) }) }) Context("and the client sends a ListRequest", func() { BeforeEach(func() { c1 := new(fakes.FakeContainer) c1.HandleReturns("some-handle") c2 := new(fakes.FakeContainer) c2.HandleReturns("another-handle") c3 := new(fakes.FakeContainer) c3.HandleReturns("super-handle") serverBackend.ContainersReturns([]garden.Container{c1, c2, c3}, nil) }) It("returns the containers from the backend", func() { containers, err := apiClient.Containers(nil) Ω(err).ShouldNot(HaveOccurred()) Ω(containers).Should(HaveLen(3)) handles := make([]string, 3) for i, c := range containers { handles[i] = c.Handle() } Ω(handles).Should(ContainElement("some-handle")) Ω(handles).Should(ContainElement("another-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", }) Expect(err).NotTo(HaveOccurred()) Expect(found).To(BeTrue()) Expect(container.Handle()).To(Equal("some-handle")) err = container.Destroy() Expect(err).NotTo(HaveOccurred())
Ω(fakeBackend.StartCallCount()).Should(Equal(1)) }) It("destroys containers that have been idle for their grace time", func() { var err error tmpdir, err = ioutil.TempDir(os.TempDir(), "api-server-test") Ω(err).ShouldNot(HaveOccurred()) socketPath := path.Join(tmpdir, "api.sock") fakeBackend := new(fakes.FakeBackend) doomedContainer := new(fakes.FakeContainer) fakeBackend.ContainersReturns([]garden.Container{doomedContainer}, nil) fakeBackend.GraceTimeReturns(100 * time.Millisecond) apiServer := server.New("unix", socketPath, 0, fakeBackend, logger) before := time.Now() err = apiServer.Start() Ω(err).ShouldNot(HaveOccurred()) Ω(fakeBackend.DestroyCallCount()).Should(Equal(0)) Eventually(fakeBackend.DestroyCallCount).Should(Equal(1)) Ω(time.Since(before)).Should(BeNumerically(">", 100*time.Millisecond)) })