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