}) It("does not change the container's state", func() { Expect(container.State()).To(Equal(linux_backend.StateBorn)) err := container.Stop(false) Expect(err).To(HaveOccurred()) Expect(container.State()).To(Equal(linux_backend.StateBorn)) }) }) Context("when the container has an oom notifier running", func() { JustBeforeEach(func() { err := container.LimitMemory(garden.MemoryLimits{ LimitInBytes: 42, }) Expect(err).ToNot(HaveOccurred()) }) It("stops it", func() { err := container.Stop(false) Expect(err).ToNot(HaveOccurred()) Expect(fakeOomWatcher.UnwatchCallCount()).To(Equal(1)) }) }) }) Describe("Cleaning up", func() {
receivedLimits, err := container.CurrentBandwidthLimits() Expect(err).ToNot(HaveOccurred()) Expect(receivedLimits).To(BeZero()) }) }) }) }) Describe("Limiting memory", func() { It("starts the oom notifier", func() { limits := garden.MemoryLimits{ LimitInBytes: 102400, } err := container.LimitMemory(limits) Expect(err).ToNot(HaveOccurred()) Expect(fakeOomWatcher.WatchCallCount()).To(Equal(1)) }) It("sets memory.limit_in_bytes and then memory.memsw.limit_in_bytes", func() { limits := garden.MemoryLimits{ LimitInBytes: 102400, } err := container.LimitMemory(limits) Expect(err).ToNot(HaveOccurred()) Expect(fakeCgroups.SetValues()).To(Equal( []fake_cgroups_manager.SetValue{
Expect(snapshot.Properties).To(Equal(garden.Properties(map[string]string{ "property-name": "property-value", }))) Expect(snapshot.EnvVars).To(Equal([]string{"env1=env1Value", "env2=env2Value"})) }) Context("with limits set", func() { JustBeforeEach(func() { fakeOomWatcher.WatchStub = func(onOom func()) error { onOom() return nil } err := container.LimitMemory(memoryLimits) Expect(err).ToNot(HaveOccurred()) Eventually(container.Events).Should(ContainElement("out of memory")) Eventually(container.State).Should(Equal(linux_backend.StateStopped)) err = container.LimitDisk(diskLimits) Expect(err).ToNot(HaveOccurred()) err = container.LimitBandwidth(bandwidthLimits) Expect(err).ToNot(HaveOccurred()) err = container.LimitCPU(cpuLimits) Expect(err).ToNot(HaveOccurred()) })