Context("when opening the container namespace fails", func() { BeforeEach(func() { namespaceOpener.OpenPathReturns(nil, errors.New("POTATO")) }) It("should return a meaningful error", func() { err := deletor.Delete("some-interface-name", "/path/to/container/namespace", "sandbox-name", "some-vxlan") Expect(err).To(MatchError("open container netns: POTATO")) }) }) It("should construct the correct command sequence", func() { err := deletor.Delete("some-interface-name", "/path/to/container/namespace", "sandbox-name", "some-vxlan") Expect(err).NotTo(HaveOccurred()) Expect(executor.ExecuteCallCount()).To(Equal(1)) Expect(executor.ExecuteArgsForCall(0)).To(Equal( commands.All( commands.InNamespace{ Namespace: containerNS, Command: commands.DeleteLink{ LinkName: "some-interface-name", }, }, commands.CleanupSandbox{ SandboxName: "sandbox-name", VxlanDeviceName: "some-vxlan", }, ), ))
Dst: net.IPNet{ IP: net.ParseIP("192.168.2.5"), Mask: net.CIDRMask(24, 32), }, GW: net.ParseIP("192.168.1.99"), }}, }, } sandboxNS = &fakes.Namespace{NameStub: func() string { return "sandbox ns sentinel" }} sandbox.NamespaceReturns(sandboxNS) sandboxRepo.GetReturns(sandbox, nil) ex.ExecuteStub = func(command executor.Command) error { switch ex.ExecuteCallCount() { case 3: nsCommand := command.(commands.InNamespace) getCommand := nsCommand.Command.(*commands.GetHardwareAddress) getCommand.Result = containerMAC } return nil } config = container.CreatorConfig{ NetworkID: "some-crazy-network-id", ContainerNsPath: "/some/container/ns/path", ContainerID: "123456789012345", InterfaceName: "container-link", VNI: 99, IPAMResult: ipamResult,