setup_ipv4_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package bridge
  2. import (
  3. "net"
  4. "testing"
  5. "github.com/docker/libnetwork/netutils"
  6. "github.com/vishvananda/netlink"
  7. )
  8. func setupTestInterface(t *testing.T) (*networkConfiguration, *bridgeInterface) {
  9. config := &networkConfiguration{
  10. BridgeName: DefaultBridgeName}
  11. br := &bridgeInterface{}
  12. if err := setupDevice(config, br); err != nil {
  13. t.Fatalf("Bridge creation failed: %v", err)
  14. }
  15. return config, br
  16. }
  17. func TestSetupBridgeIPv4Fixed(t *testing.T) {
  18. defer netutils.SetupTestNetNS(t)()
  19. ip, netw, err := net.ParseCIDR("192.168.1.1/24")
  20. if err != nil {
  21. t.Fatalf("Failed to parse bridge IPv4: %v", err)
  22. }
  23. config, br := setupTestInterface(t)
  24. config.AddressIPv4 = &net.IPNet{IP: ip, Mask: netw.Mask}
  25. if err := setupBridgeIPv4(config, br); err != nil {
  26. t.Fatalf("Failed to setup bridge IPv4: %v", err)
  27. }
  28. addrsv4, err := netlink.AddrList(br.Link, netlink.FAMILY_V4)
  29. if err != nil {
  30. t.Fatalf("Failed to list device IPv4 addresses: %v", err)
  31. }
  32. var found bool
  33. for _, addr := range addrsv4 {
  34. if config.AddressIPv4.String() == addr.IPNet.String() {
  35. found = true
  36. break
  37. }
  38. }
  39. if !found {
  40. t.Fatalf("Bridge device does not have requested IPv4 address %v", config.AddressIPv4)
  41. }
  42. }
  43. func TestSetupBridgeIPv4Auto(t *testing.T) {
  44. defer netutils.SetupTestNetNS(t)()
  45. var toBeChosen *net.IPNet
  46. for _, n := range bridgeNetworks {
  47. if err := netutils.CheckRouteOverlaps(n); err == nil {
  48. toBeChosen = n
  49. break
  50. }
  51. }
  52. if toBeChosen == nil {
  53. t.Skipf("Skip as no more automatic networks available")
  54. }
  55. config, br := setupTestInterface(t)
  56. if err := setupBridgeIPv4(config, br); err != nil {
  57. t.Fatalf("Failed to setup bridge IPv4: %v", err)
  58. }
  59. addrsv4, err := netlink.AddrList(br.Link, netlink.FAMILY_V4)
  60. if err != nil {
  61. t.Fatalf("Failed to list device IPv4 addresses: %v", err)
  62. }
  63. var found bool
  64. for _, addr := range addrsv4 {
  65. if toBeChosen.String() == addr.IPNet.String() {
  66. found = true
  67. break
  68. }
  69. }
  70. if !found {
  71. t.Fatalf("Bridge device does not have the automatic IPv4 address %s", toBeChosen.String())
  72. }
  73. }
  74. func TestSetupGatewayIPv4(t *testing.T) {
  75. defer netutils.SetupTestNetNS(t)()
  76. ip, nw, _ := net.ParseCIDR("192.168.0.24/16")
  77. nw.IP = ip
  78. gw := net.ParseIP("192.168.2.254")
  79. config := &networkConfiguration{
  80. BridgeName: DefaultBridgeName,
  81. DefaultGatewayIPv4: gw}
  82. br := &bridgeInterface{bridgeIPv4: nw}
  83. if err := setupGatewayIPv4(config, br); err != nil {
  84. t.Fatalf("Set Default Gateway failed: %v", err)
  85. }
  86. if !gw.Equal(br.gatewayIPv4) {
  87. t.Fatalf("Set Default Gateway failed. Expected %v, Found %v", gw, br.gatewayIPv4)
  88. }
  89. }
  90. func TestCheckPreallocatedBridgeNetworks(t *testing.T) {
  91. // Just make sure the bridge networks are created the way we want (172.17.x.x/16)
  92. for i := 0; i < len(bridgeNetworks); i++ {
  93. fb := bridgeNetworks[i].IP[0]
  94. ones, _ := bridgeNetworks[i].Mask.Size()
  95. if ((fb == 172 || fb == 10) && ones != 16) || (fb == 192 && ones != 24) {
  96. t.Fatalf("Wrong mask for preallocated bridge network: %s", bridgeNetworks[i].String())
  97. }
  98. }
  99. }