github.com/pwn-term/docker@v0.0.0-20210616085119-6e977cce2565/libnetwork/drivers/bridge/setup_ipv4_test.go (about)

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