github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/libnetwork/drivers/bridge/setup_ipv4_linux_test.go (about)

     1  package bridge
     2  
     3  import (
     4  	"net"
     5  	"testing"
     6  
     7  	"github.com/Prakhar-Agarwal-byte/moby/internal/testutils/netnsutils"
     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  	}
    15  	br := &bridgeInterface{nlh: nh}
    16  
    17  	if err := setupDevice(config, br); err != nil {
    18  		t.Fatalf("Bridge creation failed: %v", err)
    19  	}
    20  	return config, br
    21  }
    22  
    23  func TestSetupBridgeIPv4Fixed(t *testing.T) {
    24  	defer netnsutils.SetupTestOSContext(t)()
    25  
    26  	ip, netw, err := net.ParseCIDR("192.168.1.1/24")
    27  	if err != nil {
    28  		t.Fatalf("Failed to parse bridge IPv4: %v", err)
    29  	}
    30  
    31  	nh, err := netlink.NewHandle()
    32  	if err != nil {
    33  		t.Fatal(err)
    34  	}
    35  	defer nh.Close()
    36  
    37  	config, br := setupTestInterface(t, nh)
    38  	config.AddressIPv4 = &net.IPNet{IP: ip, Mask: netw.Mask}
    39  	if err := setupBridgeIPv4(config, br); err != nil {
    40  		t.Fatalf("Failed to setup bridge IPv4: %v", err)
    41  	}
    42  
    43  	addrsv4, err := nh.AddrList(br.Link, netlink.FAMILY_V4)
    44  	if err != nil {
    45  		t.Fatalf("Failed to list device IPv4 addresses: %v", err)
    46  	}
    47  
    48  	var found bool
    49  	for _, addr := range addrsv4 {
    50  		if config.AddressIPv4.String() == addr.IPNet.String() {
    51  			found = true
    52  			break
    53  		}
    54  	}
    55  
    56  	if !found {
    57  		t.Fatalf("Bridge device does not have requested IPv4 address %v", config.AddressIPv4)
    58  	}
    59  }
    60  
    61  func TestSetupGatewayIPv4(t *testing.T) {
    62  	defer netnsutils.SetupTestOSContext(t)()
    63  
    64  	nh, err := netlink.NewHandle()
    65  	if err != nil {
    66  		t.Fatal(err)
    67  	}
    68  	defer nh.Close()
    69  
    70  	ip, nw, _ := net.ParseCIDR("192.168.0.24/16")
    71  	nw.IP = ip
    72  	gw := net.ParseIP("192.168.2.254")
    73  
    74  	config := &networkConfiguration{
    75  		BridgeName:         DefaultBridgeName,
    76  		DefaultGatewayIPv4: gw,
    77  	}
    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  }