pkg/ip link_test: ensure SetHWAddrByIP has an effect
authorStefan Junker <mail@stefanjunker.de>
Wed, 29 Jun 2016 19:13:37 +0000 (12:13 -0700)
committerStefan Junker <mail@stefanjunker.de>
Fri, 22 Jul 2016 22:34:54 +0000 (15:34 -0700)
ip/link_test.go

index cdf861a..5c139d9 100644 (file)
@@ -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
+               })
+       })
 })