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