|
@@ -1,11 +1,18 @@
|
|
|
package ipallocator
|
|
|
|
|
|
import (
|
|
|
+ "fmt"
|
|
|
"net"
|
|
|
"testing"
|
|
|
)
|
|
|
|
|
|
+func reset() {
|
|
|
+ allocatedIPs = networkSet{}
|
|
|
+ availableIPS = networkSet{}
|
|
|
+}
|
|
|
+
|
|
|
func TestRegisterNetwork(t *testing.T) {
|
|
|
+ defer reset()
|
|
|
network := &net.IPNet{
|
|
|
IP: []byte{192, 168, 0, 1},
|
|
|
Mask: []byte{255, 255, 255, 0},
|
|
@@ -24,3 +31,133 @@ func TestRegisterNetwork(t *testing.T) {
|
|
|
t.Fatal("IPNet should exist in available IPs")
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestRegisterTwoNetworks(t *testing.T) {
|
|
|
+ defer reset()
|
|
|
+ network := &net.IPNet{
|
|
|
+ IP: []byte{192, 168, 0, 1},
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := RegisterNetwork(network); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ network2 := &net.IPNet{
|
|
|
+ IP: []byte{10, 1, 42, 1},
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := RegisterNetwork(network2); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestRegisterNetworkThatExists(t *testing.T) {
|
|
|
+ defer reset()
|
|
|
+ network := &net.IPNet{
|
|
|
+ IP: []byte{192, 168, 0, 1},
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := RegisterNetwork(network); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := RegisterNetwork(network); err != ErrNetworkAlreadyRegisterd {
|
|
|
+ t.Fatalf("Expected error of %s got %s", ErrNetworkAlreadyRegisterd, err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestRequestNewIps(t *testing.T) {
|
|
|
+ defer reset()
|
|
|
+ network := &net.IPNet{
|
|
|
+ IP: []byte{192, 168, 0, 1},
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := RegisterNetwork(network); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ for i := 2; i < 10; i++ {
|
|
|
+ ip, err := RequestIP(network, nil)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if expected := fmt.Sprintf("192.168.0.%d", i); ip.String() != expected {
|
|
|
+ t.Fatalf("Expected ip %s got %s", expected, ip.String())
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestReleaseIp(t *testing.T) {
|
|
|
+ defer reset()
|
|
|
+ network := &net.IPNet{
|
|
|
+ IP: []byte{192, 168, 0, 1},
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := RegisterNetwork(network); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ ip, err := RequestIP(network, nil)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := ReleaseIP(network, ip); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestGetReleasedIp(t *testing.T) {
|
|
|
+ defer reset()
|
|
|
+ network := &net.IPNet{
|
|
|
+ IP: []byte{192, 168, 0, 1},
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := RegisterNetwork(network); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ ip, err := RequestIP(network, nil)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ value := ip.String()
|
|
|
+ if err := ReleaseIP(network, ip); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ ip, err = RequestIP(network, nil)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if ip.String() != value {
|
|
|
+ t.Fatalf("Expected to receive same ip %s got %s", value, ip.String())
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestRequesetSpecificIp(t *testing.T) {
|
|
|
+ defer reset()
|
|
|
+ network := &net.IPNet{
|
|
|
+ IP: []byte{192, 168, 0, 1},
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := RegisterNetwork(network); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ ip := net.ParseIP("192.168.1.5")
|
|
|
+
|
|
|
+ if _, err := RequestIP(network, &ip); err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+}
|