github.com/rawahars/moby@v24.0.4+incompatible/libnetwork/drivers/bridge/setup_verify_test.go (about)

     1  //go:build linux
     2  // +build linux
     3  
     4  package bridge
     5  
     6  import (
     7  	"net"
     8  	"testing"
     9  
    10  	"github.com/docker/docker/libnetwork/testutils"
    11  	"github.com/vishvananda/netlink"
    12  )
    13  
    14  func setupVerifyTest(t *testing.T) *bridgeInterface {
    15  	nh, err := netlink.NewHandle()
    16  	if err != nil {
    17  		t.Fatal(err)
    18  	}
    19  	inf := &bridgeInterface{nlh: nh}
    20  
    21  	br := netlink.Bridge{}
    22  	br.LinkAttrs.Name = "default0"
    23  	if err := nh.LinkAdd(&br); err == nil {
    24  		inf.Link = &br
    25  	} else {
    26  		t.Fatalf("Failed to create bridge interface: %v", err)
    27  	}
    28  
    29  	return inf
    30  }
    31  
    32  func TestSetupVerify(t *testing.T) {
    33  	defer testutils.SetupTestOSContext(t)()
    34  
    35  	addrv4 := net.IPv4(192, 168, 1, 1)
    36  	inf := setupVerifyTest(t)
    37  	config := &networkConfiguration{}
    38  	config.AddressIPv4 = &net.IPNet{IP: addrv4, Mask: addrv4.DefaultMask()}
    39  
    40  	if err := netlink.AddrAdd(inf.Link, &netlink.Addr{IPNet: config.AddressIPv4}); err != nil {
    41  		t.Fatalf("Failed to assign IPv4 %s to interface: %v", config.AddressIPv4, err)
    42  	}
    43  
    44  	if err := setupVerifyAndReconcile(config, inf); err != nil {
    45  		t.Fatalf("Address verification failed: %v", err)
    46  	}
    47  }
    48  
    49  func TestSetupVerifyBad(t *testing.T) {
    50  	defer testutils.SetupTestOSContext(t)()
    51  
    52  	addrv4 := net.IPv4(192, 168, 1, 1)
    53  	inf := setupVerifyTest(t)
    54  	config := &networkConfiguration{}
    55  	config.AddressIPv4 = &net.IPNet{IP: addrv4, Mask: addrv4.DefaultMask()}
    56  
    57  	ipnet := &net.IPNet{IP: net.IPv4(192, 168, 1, 2), Mask: addrv4.DefaultMask()}
    58  	if err := netlink.AddrAdd(inf.Link, &netlink.Addr{IPNet: ipnet}); err != nil {
    59  		t.Fatalf("Failed to assign IPv4 %s to interface: %v", ipnet, err)
    60  	}
    61  
    62  	if err := setupVerifyAndReconcile(config, inf); err == nil {
    63  		t.Fatal("Address verification was expected to fail")
    64  	}
    65  }
    66  
    67  func TestSetupVerifyMissing(t *testing.T) {
    68  	defer testutils.SetupTestOSContext(t)()
    69  
    70  	addrv4 := net.IPv4(192, 168, 1, 1)
    71  	inf := setupVerifyTest(t)
    72  	config := &networkConfiguration{}
    73  	config.AddressIPv4 = &net.IPNet{IP: addrv4, Mask: addrv4.DefaultMask()}
    74  
    75  	if err := setupVerifyAndReconcile(config, inf); err == nil {
    76  		t.Fatal("Address verification was expected to fail")
    77  	}
    78  }
    79  
    80  func TestSetupVerifyIPv6(t *testing.T) {
    81  	defer testutils.SetupTestOSContext(t)()
    82  
    83  	addrv4 := net.IPv4(192, 168, 1, 1)
    84  	inf := setupVerifyTest(t)
    85  	config := &networkConfiguration{}
    86  	config.AddressIPv4 = &net.IPNet{IP: addrv4, Mask: addrv4.DefaultMask()}
    87  	config.EnableIPv6 = true
    88  
    89  	if err := netlink.AddrAdd(inf.Link, &netlink.Addr{IPNet: bridgeIPv6}); err != nil {
    90  		t.Fatalf("Failed to assign IPv6 %s to interface: %v", bridgeIPv6, err)
    91  	}
    92  	if err := netlink.AddrAdd(inf.Link, &netlink.Addr{IPNet: config.AddressIPv4}); err != nil {
    93  		t.Fatalf("Failed to assign IPv4 %s to interface: %v", config.AddressIPv4, err)
    94  	}
    95  
    96  	if err := setupVerifyAndReconcile(config, inf); err != nil {
    97  		t.Fatalf("Address verification failed: %v", err)
    98  	}
    99  }
   100  
   101  func TestSetupVerifyIPv6Missing(t *testing.T) {
   102  	defer testutils.SetupTestOSContext(t)()
   103  
   104  	addrv4 := net.IPv4(192, 168, 1, 1)
   105  	inf := setupVerifyTest(t)
   106  	config := &networkConfiguration{}
   107  	config.AddressIPv4 = &net.IPNet{IP: addrv4, Mask: addrv4.DefaultMask()}
   108  	config.EnableIPv6 = true
   109  
   110  	if err := netlink.AddrAdd(inf.Link, &netlink.Addr{IPNet: config.AddressIPv4}); err != nil {
   111  		t.Fatalf("Failed to assign IPv4 %s to interface: %v", config.AddressIPv4, err)
   112  	}
   113  
   114  	if err := setupVerifyAndReconcile(config, inf); err == nil {
   115  		t.Fatal("Address verification was expected to fail")
   116  	}
   117  }