allocator_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package ipallocator
  2. import (
  3. "fmt"
  4. "net"
  5. "testing"
  6. )
  7. func reset() {
  8. allocatedIPs = networkSet{}
  9. availableIPS = networkSet{}
  10. }
  11. func TestRegisterNetwork(t *testing.T) {
  12. defer reset()
  13. network := &net.IPNet{
  14. IP: []byte{192, 168, 0, 1},
  15. Mask: []byte{255, 255, 255, 0},
  16. }
  17. if err := RegisterNetwork(network); err != nil {
  18. t.Fatal(err)
  19. }
  20. n := newIPNet(network)
  21. if _, exists := allocatedIPs[n]; !exists {
  22. t.Fatal("IPNet should exist in allocated IPs")
  23. }
  24. if _, exists := availableIPS[n]; !exists {
  25. t.Fatal("IPNet should exist in available IPs")
  26. }
  27. }
  28. func TestRegisterTwoNetworks(t *testing.T) {
  29. defer reset()
  30. network := &net.IPNet{
  31. IP: []byte{192, 168, 0, 1},
  32. Mask: []byte{255, 255, 255, 0},
  33. }
  34. if err := RegisterNetwork(network); err != nil {
  35. t.Fatal(err)
  36. }
  37. network2 := &net.IPNet{
  38. IP: []byte{10, 1, 42, 1},
  39. Mask: []byte{255, 255, 255, 0},
  40. }
  41. if err := RegisterNetwork(network2); err != nil {
  42. t.Fatal(err)
  43. }
  44. }
  45. func TestRegisterNetworkThatExists(t *testing.T) {
  46. defer reset()
  47. network := &net.IPNet{
  48. IP: []byte{192, 168, 0, 1},
  49. Mask: []byte{255, 255, 255, 0},
  50. }
  51. if err := RegisterNetwork(network); err != nil {
  52. t.Fatal(err)
  53. }
  54. if err := RegisterNetwork(network); err != ErrNetworkAlreadyRegisterd {
  55. t.Fatalf("Expected error of %s got %s", ErrNetworkAlreadyRegisterd, err)
  56. }
  57. }
  58. func TestRequestNewIps(t *testing.T) {
  59. defer reset()
  60. network := &net.IPNet{
  61. IP: []byte{192, 168, 0, 1},
  62. Mask: []byte{255, 255, 255, 0},
  63. }
  64. if err := RegisterNetwork(network); err != nil {
  65. t.Fatal(err)
  66. }
  67. for i := 2; i < 10; i++ {
  68. ip, err := RequestIP(network, nil)
  69. if err != nil {
  70. t.Fatal(err)
  71. }
  72. if expected := fmt.Sprintf("192.168.0.%d", i); ip.String() != expected {
  73. t.Fatalf("Expected ip %s got %s", expected, ip.String())
  74. }
  75. }
  76. }
  77. func TestReleaseIp(t *testing.T) {
  78. defer reset()
  79. network := &net.IPNet{
  80. IP: []byte{192, 168, 0, 1},
  81. Mask: []byte{255, 255, 255, 0},
  82. }
  83. if err := RegisterNetwork(network); err != nil {
  84. t.Fatal(err)
  85. }
  86. ip, err := RequestIP(network, nil)
  87. if err != nil {
  88. t.Fatal(err)
  89. }
  90. if err := ReleaseIP(network, ip); err != nil {
  91. t.Fatal(err)
  92. }
  93. }
  94. func TestGetReleasedIp(t *testing.T) {
  95. defer reset()
  96. network := &net.IPNet{
  97. IP: []byte{192, 168, 0, 1},
  98. Mask: []byte{255, 255, 255, 0},
  99. }
  100. if err := RegisterNetwork(network); err != nil {
  101. t.Fatal(err)
  102. }
  103. ip, err := RequestIP(network, nil)
  104. if err != nil {
  105. t.Fatal(err)
  106. }
  107. value := ip.String()
  108. if err := ReleaseIP(network, ip); err != nil {
  109. t.Fatal(err)
  110. }
  111. ip, err = RequestIP(network, nil)
  112. if err != nil {
  113. t.Fatal(err)
  114. }
  115. if ip.String() != value {
  116. t.Fatalf("Expected to receive same ip %s got %s", value, ip.String())
  117. }
  118. }
  119. func TestRequesetSpecificIp(t *testing.T) {
  120. defer reset()
  121. network := &net.IPNet{
  122. IP: []byte{192, 168, 0, 1},
  123. Mask: []byte{255, 255, 255, 0},
  124. }
  125. if err := RegisterNetwork(network); err != nil {
  126. t.Fatal(err)
  127. }
  128. ip := net.ParseIP("192.168.1.5")
  129. if _, err := RequestIP(network, &ip); err != nil {
  130. t.Fatal(err)
  131. }
  132. }