setup_verify_linux_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package bridge
  2. import (
  3. "net"
  4. "testing"
  5. "github.com/docker/docker/internal/testutils/netnsutils"
  6. "github.com/vishvananda/netlink"
  7. )
  8. func setupVerifyTest(t *testing.T) *bridgeInterface {
  9. nh, err := netlink.NewHandle()
  10. if err != nil {
  11. t.Fatal(err)
  12. }
  13. inf := &bridgeInterface{nlh: nh}
  14. br := netlink.Bridge{}
  15. br.LinkAttrs.Name = "default0"
  16. if err := nh.LinkAdd(&br); err == nil {
  17. inf.Link = &br
  18. } else {
  19. t.Fatalf("Failed to create bridge interface: %v", err)
  20. }
  21. return inf
  22. }
  23. func TestSetupVerify(t *testing.T) {
  24. defer netnsutils.SetupTestOSContext(t)()
  25. addrv4 := net.IPv4(192, 168, 1, 1)
  26. inf := setupVerifyTest(t)
  27. config := &networkConfiguration{}
  28. config.AddressIPv4 = &net.IPNet{IP: addrv4, Mask: addrv4.DefaultMask()}
  29. if err := netlink.AddrAdd(inf.Link, &netlink.Addr{IPNet: config.AddressIPv4}); err != nil {
  30. t.Fatalf("Failed to assign IPv4 %s to interface: %v", config.AddressIPv4, err)
  31. }
  32. if err := setupVerifyAndReconcileIPv4(config, inf); err != nil {
  33. t.Fatalf("Address verification failed: %v", err)
  34. }
  35. }
  36. func TestSetupVerifyBad(t *testing.T) {
  37. defer netnsutils.SetupTestOSContext(t)()
  38. addrv4 := net.IPv4(192, 168, 1, 1)
  39. inf := setupVerifyTest(t)
  40. config := &networkConfiguration{}
  41. config.AddressIPv4 = &net.IPNet{IP: addrv4, Mask: addrv4.DefaultMask()}
  42. ipnet := &net.IPNet{IP: net.IPv4(192, 168, 1, 2), Mask: addrv4.DefaultMask()}
  43. if err := netlink.AddrAdd(inf.Link, &netlink.Addr{IPNet: ipnet}); err != nil {
  44. t.Fatalf("Failed to assign IPv4 %s to interface: %v", ipnet, err)
  45. }
  46. if err := setupVerifyAndReconcileIPv4(config, inf); err == nil {
  47. t.Fatal("Address verification was expected to fail")
  48. }
  49. }
  50. func TestSetupVerifyMissing(t *testing.T) {
  51. defer netnsutils.SetupTestOSContext(t)()
  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. if err := setupVerifyAndReconcileIPv4(config, inf); err == nil {
  57. t.Fatal("Address verification was expected to fail")
  58. }
  59. }