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 }