utils_test.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package ipamutils
  2. import (
  3. "net"
  4. "sync"
  5. "testing"
  6. _ "github.com/docker/libnetwork/testutils"
  7. "gotest.tools/assert"
  8. is "gotest.tools/assert/cmp"
  9. )
  10. func initBroadPredefinedNetworks() []*net.IPNet {
  11. pl := make([]*net.IPNet, 0, 31)
  12. mask := []byte{255, 255, 0, 0}
  13. for i := 17; i < 32; i++ {
  14. pl = append(pl, &net.IPNet{IP: []byte{172, byte(i), 0, 0}, Mask: mask})
  15. }
  16. mask20 := []byte{255, 255, 240, 0}
  17. for i := 0; i < 16; i++ {
  18. pl = append(pl, &net.IPNet{IP: []byte{192, 168, byte(i << 4), 0}, Mask: mask20})
  19. }
  20. return pl
  21. }
  22. func initGranularPredefinedNetworks() []*net.IPNet {
  23. pl := make([]*net.IPNet, 0, 256*256)
  24. mask := []byte{255, 255, 255, 0}
  25. for i := 0; i < 256; i++ {
  26. for j := 0; j < 256; j++ {
  27. pl = append(pl, &net.IPNet{IP: []byte{10, byte(i), byte(j), 0}, Mask: mask})
  28. }
  29. }
  30. return pl
  31. }
  32. func TestDefaultNetwork(t *testing.T) {
  33. InitNetworks(nil)
  34. for _, nw := range PredefinedGranularNetworks {
  35. if ones, bits := nw.Mask.Size(); bits != 32 || ones != 24 {
  36. t.Fatalf("Unexpected size for network in granular list: %v", nw)
  37. }
  38. }
  39. for _, nw := range PredefinedBroadNetworks {
  40. if ones, bits := nw.Mask.Size(); bits != 32 || (ones != 20 && ones != 16) {
  41. t.Fatalf("Unexpected size for network in broad list: %v", nw)
  42. }
  43. }
  44. originalBroadNets := initBroadPredefinedNetworks()
  45. m := make(map[string]bool)
  46. for _, v := range originalBroadNets {
  47. m[v.String()] = true
  48. }
  49. for _, nw := range PredefinedBroadNetworks {
  50. _, ok := m[nw.String()]
  51. assert.Check(t, ok)
  52. delete(m, nw.String())
  53. }
  54. assert.Check(t, is.Len(m, 0))
  55. originalGranularNets := initGranularPredefinedNetworks()
  56. m = make(map[string]bool)
  57. for _, v := range originalGranularNets {
  58. m[v.String()] = true
  59. }
  60. for _, nw := range PredefinedGranularNetworks {
  61. _, ok := m[nw.String()]
  62. assert.Check(t, ok)
  63. delete(m, nw.String())
  64. }
  65. assert.Check(t, is.Len(m, 0))
  66. }
  67. func TestInitAddressPools(t *testing.T) {
  68. initNetworksOnce = sync.Once{}
  69. InitNetworks([]*NetworkToSplit{{"172.80.0.0/16", 24}, {"172.90.0.0/16", 24}})
  70. // Check for Random IPAddresses in PredefinedBroadNetworks ex: first , last and middle
  71. assert.Check(t, is.Len(PredefinedBroadNetworks, 512), "Failed to find PredefinedBroadNetworks")
  72. assert.Check(t, is.Equal(PredefinedBroadNetworks[0].String(), "172.80.0.0/24"))
  73. assert.Check(t, is.Equal(PredefinedBroadNetworks[127].String(), "172.80.127.0/24"))
  74. assert.Check(t, is.Equal(PredefinedBroadNetworks[255].String(), "172.80.255.0/24"))
  75. assert.Check(t, is.Equal(PredefinedBroadNetworks[256].String(), "172.90.0.0/24"))
  76. assert.Check(t, is.Equal(PredefinedBroadNetworks[383].String(), "172.90.127.0/24"))
  77. assert.Check(t, is.Equal(PredefinedBroadNetworks[511].String(), "172.90.255.0/24"))
  78. }