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