github.com/jfrazelle/docker@v1.1.2-0.20210712172922-bf78e25fe508/libnetwork/drivers/bridge/setup_ipv4_test.go (about)

     1  // +build linux
     2  
     3  package bridge
     4  
     5  import (
     6  	"net"
     7  	"testing"
     8  
     9  	"github.com/docker/docker/libnetwork/testutils"
    10  	"github.com/vishvananda/netlink"
    11  )
    12  
    13  func setupTestInterface(t *testing.T, nh *netlink.Handle) (*networkConfiguration, *bridgeInterface) {
    14  	config := &networkConfiguration{
    15  		BridgeName: DefaultBridgeName}
    16  	br := &bridgeInterface{nlh: nh}
    17  
    18  	if err := setupDevice(config, br); err != nil {
    19  		t.Fatalf("Bridge creation failed: %v", err)
    20  	}
    21  	return config, br
    22  }
    23  
    24  func TestSetupBridgeIPv4Fixed(t *testing.T) {
    25  	defer testutils.SetupTestOSContext(t)()
    26  
    27  	ip, netw, err := net.ParseCIDR("192.168.1.1/24")
    28  	if err != nil {
    29  		t.Fatalf("Failed to parse bridge IPv4: %v", err)
    30  	}
    31  
    32  	nh, err := netlink.NewHandle()
    33  	if err != nil {
    34  		t.Fatal(err)
    35  	}
    36  	defer nh.Delete()
    37  
    38  	config, br := setupTestInterface(t, nh)
    39  	config.AddressIPv4 = &net.IPNet{IP: ip, Mask: netw.Mask}
    40  	if err := setupBridgeIPv4(config, br); err != nil {
    41  		t.Fatalf("Failed to setup bridge IPv4: %v", err)
    42  	}
    43  
    44  	addrsv4, err := nh.AddrList(br.Link, netlink.FAMILY_V4)
    45  	if err != nil {
    46  		t.Fatalf("Failed to list device IPv4 addresses: %v", err)
    47  	}
    48  
    49  	var found bool
    50  	for _, addr := range addrsv4 {
    51  		if config.AddressIPv4.String() == addr.IPNet.String() {
    52  			found = true
    53  			break
    54  		}
    55  	}
    56  
    57  	if !found {
    58  		t.Fatalf("Bridge device does not have requested IPv4 address %v", config.AddressIPv4)
    59  	}
    60  }
    61  
    62  func TestSetupGatewayIPv4(t *testing.T) {
    63  	defer testutils.SetupTestOSContext(t)()
    64  
    65  	nh, err := netlink.NewHandle()
    66  	if err != nil {
    67  		t.Fatal(err)
    68  	}
    69  	defer nh.Delete()
    70  
    71  	ip, nw, _ := net.ParseCIDR("192.168.0.24/16")
    72  	nw.IP = ip
    73  	gw := net.ParseIP("192.168.2.254")
    74  
    75  	config := &networkConfiguration{
    76  		BridgeName:         DefaultBridgeName,
    77  		DefaultGatewayIPv4: gw}
    78  
    79  	br := &bridgeInterface{bridgeIPv4: nw, nlh: nh}
    80  
    81  	if err := setupGatewayIPv4(config, br); err != nil {
    82  		t.Fatalf("Set Default Gateway failed: %v", err)
    83  	}
    84  
    85  	if !gw.Equal(br.gatewayIPv4) {
    86  		t.Fatalf("Set Default Gateway failed. Expected %v, Found %v", gw, br.gatewayIPv4)
    87  	}
    88  }