originalNetNS ns.NetNS targetNetNS ns.NetNS ) BeforeEach(func() { var err error originalNetNS, err = ns.NewNS() Expect(err).NotTo(HaveOccurred()) targetNetNS, err = ns.NewNS() Expect(err).NotTo(HaveOccurred()) }) AfterEach(func() { Expect(targetNetNS.Close()).To(Succeed()) Expect(originalNetNS.Close()).To(Succeed()) }) It("executes the callback within the target network namespace", func() { expectedInode, err := getInodeNS(targetNetNS) Expect(err).NotTo(HaveOccurred()) err = targetNetNS.Do(func(ns.NetNS) error { defer GinkgoRecover() actualInode, err := getInodeCurNetNS() Expect(err).NotTo(HaveOccurred()) Expect(actualInode).To(Equal(expectedInode)) return nil })
hostVeth, containerVeth, err = ip.SetupVeth(fmt.Sprintf(ifaceFormatString, ifaceCounter), mtu, hostNetNS) if err != nil { return err } Expect(err).NotTo(HaveOccurred()) hostVethName = hostVeth.Attrs().Name containerVethName = containerVeth.Attrs().Name return nil }) }) AfterEach(func() { Expect(containerNetNS.Close()).To(Succeed()) Expect(hostNetNS.Close()).To(Succeed()) ifaceCounter++ rand.Reader = originalRandReader }) It("SetupVeth must put the veth endpoints into the separate namespaces", func() { _ = containerNetNS.Do(func(ns.NetNS) error { defer GinkgoRecover() containerVethFromName, err := netlink.LinkByName(containerVethName) Expect(err).NotTo(HaveOccurred()) Expect(containerVethFromName.Attrs().Index).To(Equal(containerVeth.Attrs().Index)) return nil })
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("ptp Operations", func() { var originalNS ns.NetNS BeforeEach(func() { // Create a new NetNS so we don't modify the host var err error originalNS, err = ns.NewNS() Expect(err).NotTo(HaveOccurred()) }) AfterEach(func() { Expect(originalNS.Close()).To(Succeed()) }) It("configures and deconfigures a ptp link with ADD/DEL", func() { const IFNAME = "ptp0" conf := `{ "name": "mynet", "type": "ptp", "ipMasq": true, "mtu": 5000, "ipam": { "type": "host-local", "subnet": "10.1.2.0/24" } }`
var err error networkNS, err = ns.NewNS() Expect(err).NotTo(HaveOccurred()) environ = []string{ fmt.Sprintf("CNI_CONTAINERID=%s", containerID), fmt.Sprintf("CNI_NETNS=%s", networkNS.Path()), fmt.Sprintf("CNI_IFNAME=%s", "this is ignored"), fmt.Sprintf("CNI_ARGS=%s", "none"), fmt.Sprintf("CNI_PATH=%s", "/some/test/path"), } command.Stdin = strings.NewReader("this doesn't matter") }) AfterEach(func() { Expect(networkNS.Close()).To(Succeed()) }) Context("when given a network namespace", func() { It("sets the lo device to UP", func() { command.Env = append(environ, fmt.Sprintf("CNI_COMMAND=%s", "ADD")) session, err := gexec.Start(command, GinkgoWriter, GinkgoWriter) Expect(err).NotTo(HaveOccurred()) Eventually(session).Should(gbytes.Say(`{.*}`)) Eventually(session).Should(gexec.Exit(0)) var lo *net.Interface err = networkNS.Do(func(ns.NetNS) error { var err error