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 }