setup_ipv4_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. config, br := setupTestInterface(t)
  46. if err := setupBridgeIPv4(config, br); err != nil {
  47. t.Fatalf("Failed to setup bridge IPv4: %v", err)
  48. }
  49. addrsv4, err := netlink.AddrList(br.Link, netlink.FAMILY_V4)
  50. if err != nil {
  51. t.Fatalf("Failed to list device IPv4 addresses: %v", err)
  52. }
  53. var found bool
  54. for _, addr := range addrsv4 {
  55. if bridgeNetworks[0].String() == addr.IPNet.String() {
  56. found = true
  57. break
  58. }
  59. }
  60. if !found {
  61. t.Fatalf("Bridge device does not have the automatic IPv4 address %v", bridgeNetworks[0].String())
  62. }
  63. }
  64. func TestSetupGatewayIPv4(t *testing.T) {
  65. defer netutils.SetupTestNetNS(t)()
  66. ip, nw, _ := net.ParseCIDR("192.168.0.24/16")
  67. nw.IP = ip
  68. gw := net.ParseIP("192.168.2.254")
  69. config := &networkConfiguration{
  70. BridgeName: DefaultBridgeName,
  71. DefaultGatewayIPv4: gw}
  72. br := &bridgeInterface{bridgeIPv4: nw}
  73. if err := setupGatewayIPv4(config, br); err != nil {
  74. t.Fatalf("Set Default Gateway failed: %v", err)
  75. }
  76. if !gw.Equal(br.gatewayIPv4) {
  77. t.Fatalf("Set Default Gateway failed. Expected %v, Found %v", gw, br.gatewayIPv4)
  78. }
  79. }
  80. func TestCheckPreallocatedBridgeNetworks(t *testing.T) {
  81. // Just make sure the bridge networks are created the way we want (172.17.x.x/16)
  82. for i := 0; i < len(bridgeNetworks); i++ {
  83. fb := bridgeNetworks[i].IP[0]
  84. ones, _ := bridgeNetworks[i].Mask.Size()
  85. if ((fb == 172 || fb == 10) && ones != 16) || (fb == 192 && ones != 24) {
  86. t.Fatalf("Wrong mask for preallocated bridge network: %s", bridgeNetworks[i].String())
  87. }
  88. }
  89. }