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 }