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  }