From f68cea27bc0be36faaa1560b39ccf9f869c51ce7 Mon Sep 17 00:00:00 2001 From: Stefan Junker Date: Wed, 29 Jun 2016 12:13:37 -0700 Subject: [PATCH] pkg/ip link_test: ensure SetHWAddrByIP has an effect --- pkg/ip/link_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/pkg/ip/link_test.go b/pkg/ip/link_test.go index cdf861a6..5c139d98 100644 --- a/pkg/ip/link_test.go +++ b/pkg/ip/link_test.go @@ -28,10 +28,17 @@ import ( "github.com/vishvananda/netlink/nl" ) +func getHwAddr(linkname string) string { + veth, err := netlink.LinkByName(linkname) + Expect(err).NotTo(HaveOccurred()) + return fmt.Sprintf("%s", veth.Attrs().HardwareAddr) +} + var _ = Describe("Link", func() { const ( ifaceFormatString string = "i%d" mtu int = 1400 + ip4onehwaddr = "0a:58:01:01:01:01" ) var ( hostNetNS ns.NetNS @@ -39,6 +46,9 @@ var _ = Describe("Link", func() { ifaceCounter int = 0 hostVethName string containerVethName string + + ip4one = net.ParseIP("1.1.1.1") + ip4two = net.ParseIP("1.1.1.2") ) BeforeEach(func() { @@ -129,4 +139,41 @@ var _ = Describe("Link", func() { return nil }) }) + + It("SetHWAddrByIP must change the interface hwaddr and be predictable", func() { + + _ = containerNetNS.Do(func(ns.NetNS) error { + defer GinkgoRecover() + + var err error + hwaddrBefore := getHwAddr(containerVethName) + + err = ip.SetHWAddrByIP(containerVethName, ip4one, nil) + Expect(err).NotTo(HaveOccurred()) + hwaddrAfter1 := getHwAddr(containerVethName) + + Expect(hwaddrBefore).NotTo(Equal(hwaddrAfter1)) + Expect(hwaddrAfter1).To(Equal(ip4onehwaddr)) + + return nil + }) + }) + + It("SetHWAddrByIP must be injective", func() { + + _ = containerNetNS.Do(func(ns.NetNS) error { + defer GinkgoRecover() + + err := ip.SetHWAddrByIP(containerVethName, ip4one, nil) + Expect(err).NotTo(HaveOccurred()) + hwaddrAfter1 := getHwAddr(containerVethName) + + err = ip.SetHWAddrByIP(containerVethName, ip4two, nil) + Expect(err).NotTo(HaveOccurred()) + hwaddrAfter2 := getHwAddr(containerVethName) + + Expect(hwaddrAfter1).NotTo(Equal(hwaddrAfter2)) + return nil + }) + }) })