github.com/pwn-term/docker@v0.0.0-20210616085119-6e977cce2565/libnetwork/drivers/bridge/setup_device_test.go (about) 1 package bridge 2 3 import ( 4 "bytes" 5 "net" 6 "testing" 7 8 "github.com/docker/libnetwork/netutils" 9 "github.com/docker/libnetwork/testutils" 10 "github.com/vishvananda/netlink" 11 ) 12 13 func TestSetupNewBridge(t *testing.T) { 14 defer testutils.SetupTestOSContext(t)() 15 16 nh, err := netlink.NewHandle() 17 if err != nil { 18 t.Fatal(err) 19 } 20 defer nh.Delete() 21 22 config := &networkConfiguration{BridgeName: DefaultBridgeName} 23 br := &bridgeInterface{nlh: nh} 24 25 if err := setupDevice(config, br); err != nil { 26 t.Fatalf("Bridge creation failed: %v", err) 27 } 28 if br.Link == nil { 29 t.Fatal("bridgeInterface link is nil (expected valid link)") 30 } 31 if _, err := nh.LinkByName(DefaultBridgeName); err != nil { 32 t.Fatalf("Failed to retrieve bridge device: %v", err) 33 } 34 if br.Link.Attrs().Flags&net.FlagUp == net.FlagUp { 35 t.Fatal("bridgeInterface should be created down") 36 } 37 } 38 39 func TestSetupNewNonDefaultBridge(t *testing.T) { 40 defer testutils.SetupTestOSContext(t)() 41 42 nh, err := netlink.NewHandle() 43 if err != nil { 44 t.Fatal(err) 45 } 46 defer nh.Delete() 47 48 config := &networkConfiguration{BridgeName: "test0", DefaultBridge: true} 49 br := &bridgeInterface{nlh: nh} 50 51 err = setupDevice(config, br) 52 if err == nil { 53 t.Fatal("Expected bridge creation failure with \"non default name\", succeeded") 54 } 55 56 if _, ok := err.(NonDefaultBridgeExistError); !ok { 57 t.Fatalf("Did not fail with expected error. Actual error: %v", err) 58 } 59 } 60 61 func TestSetupDeviceUp(t *testing.T) { 62 defer testutils.SetupTestOSContext(t)() 63 64 nh, err := netlink.NewHandle() 65 if err != nil { 66 t.Fatal(err) 67 } 68 defer nh.Delete() 69 70 config := &networkConfiguration{BridgeName: DefaultBridgeName} 71 br := &bridgeInterface{nlh: nh} 72 73 if err := setupDevice(config, br); err != nil { 74 t.Fatalf("Bridge creation failed: %v", err) 75 } 76 if err := setupDeviceUp(config, br); err != nil { 77 t.Fatalf("Failed to up bridge device: %v", err) 78 } 79 80 lnk, _ := nh.LinkByName(DefaultBridgeName) 81 if lnk.Attrs().Flags&net.FlagUp != net.FlagUp { 82 t.Fatal("bridgeInterface should be up") 83 } 84 } 85 86 func TestGenerateRandomMAC(t *testing.T) { 87 defer testutils.SetupTestOSContext(t)() 88 89 mac1 := netutils.GenerateRandomMAC() 90 mac2 := netutils.GenerateRandomMAC() 91 if bytes.Compare(mac1, mac2) == 0 { 92 t.Fatalf("Generated twice the same MAC address %v", mac1) 93 } 94 }