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