// Copyright (c) 2018 Intel Corporation // // SPDX-License-Identifier: Apache-2.0 // package virtcontainers import ( "net" "os" "testing" "github.com/containernetworking/plugins/pkg/ns" "github.com/stretchr/testify/assert" "github.com/vishvananda/netlink" "github.com/vishvananda/netns" ) func TestPhysicalEndpoint_HotAttach(t *testing.T) { assert := assert.New(t) v := &PhysicalEndpoint{ IfaceName: "eth0", HardAddr: net.HardwareAddr{0x02, 0x00, 0xca, 0xfe, 0x00, 0x04}.String(), } h := &mockHypervisor{} err := v.HotAttach(h) assert.Error(err) } func TestPhysicalEndpoint_HotDetach(t *testing.T) { assert := assert.New(t) v := &PhysicalEndpoint{ IfaceName: "eth0", HardAddr: net.HardwareAddr{0x02, 0x00, 0xca, 0xfe, 0x00, 0x04}.String(), } h := &mockHypervisor{} err := v.HotDetach(h, true, "") assert.Error(err) } func TestIsPhysicalIface(t *testing.T) { if os.Geteuid() != 0 { t.Skip(testDisabledAsNonRoot) } testNetIface := "testIface0" testMTU := 1500 testMACAddr := "00:00:00:00:00:01" hwAddr, err := net.ParseMAC(testMACAddr) if err != nil { t.Fatal(err) } link := &netlink.Bridge{ LinkAttrs: netlink.LinkAttrs{ Name: testNetIface, MTU: testMTU, HardwareAddr: hwAddr, TxQLen: -1, }, } n, err := ns.NewNS() if err != nil { t.Fatal(err) } defer n.Close() netnsHandle, err := netns.GetFromPath(n.Path()) if err != nil { t.Fatal(err) } defer netnsHandle.Close() netlinkHandle, err := netlink.NewHandleAt(netnsHandle) if err != nil { t.Fatal(err) } defer netlinkHandle.Delete() if err := netlinkHandle.LinkAdd(link); err != nil { t.Fatal(err) } var isPhysical bool err = doNetNS(n.Path(), func(_ ns.NetNS) error { var err error isPhysical, err = isPhysicalIface(testNetIface) return err }) if err != nil { t.Fatal(err) } if isPhysical == true { t.Fatalf("Got %+v\nExpecting %+v", isPhysical, false) } }