|
@@ -17,7 +17,7 @@ func TestRequestNewIps(t *testing.T) {
|
|
Mask: []byte{255, 255, 255, 0},
|
|
Mask: []byte{255, 255, 255, 0},
|
|
}
|
|
}
|
|
|
|
|
|
- var ip *net.IP
|
|
|
|
|
|
+ var ip net.IP
|
|
var err error
|
|
var err error
|
|
for i := 2; i < 10; i++ {
|
|
for i := 2; i < 10; i++ {
|
|
ip, err = RequestIP(network, nil)
|
|
ip, err = RequestIP(network, nil)
|
|
@@ -106,19 +106,19 @@ func TestRequesetSpecificIp(t *testing.T) {
|
|
|
|
|
|
ip := net.ParseIP("192.168.1.5")
|
|
ip := net.ParseIP("192.168.1.5")
|
|
|
|
|
|
- if _, err := RequestIP(network, &ip); err != nil {
|
|
|
|
|
|
+ if _, err := RequestIP(network, ip); err != nil {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
func TestConversion(t *testing.T) {
|
|
func TestConversion(t *testing.T) {
|
|
ip := net.ParseIP("127.0.0.1")
|
|
ip := net.ParseIP("127.0.0.1")
|
|
- i := ipToInt(&ip)
|
|
|
|
|
|
+ i := ipToInt(ip)
|
|
if i == 0 {
|
|
if i == 0 {
|
|
t.Fatal("converted to zero")
|
|
t.Fatal("converted to zero")
|
|
}
|
|
}
|
|
conv := intToIP(i)
|
|
conv := intToIP(i)
|
|
- if !ip.Equal(*conv) {
|
|
|
|
|
|
+ if !ip.Equal(conv) {
|
|
t.Error(conv.String())
|
|
t.Error(conv.String())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -146,7 +146,7 @@ func TestIPAllocator(t *testing.T) {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
|
|
- assertIPEquals(t, &expectedIPs[i], ip)
|
|
|
|
|
|
+ assertIPEquals(t, expectedIPs[i], ip)
|
|
}
|
|
}
|
|
// Before loop begin
|
|
// Before loop begin
|
|
// 2(f) - 3(f) - 4(f) - 5(f) - 6(f)
|
|
// 2(f) - 3(f) - 4(f) - 5(f) - 6(f)
|
|
@@ -179,19 +179,19 @@ func TestIPAllocator(t *testing.T) {
|
|
}
|
|
}
|
|
|
|
|
|
// Release some IPs in non-sequential order
|
|
// Release some IPs in non-sequential order
|
|
- if err := ReleaseIP(network, &expectedIPs[3]); err != nil {
|
|
|
|
|
|
+ if err := ReleaseIP(network, expectedIPs[3]); err != nil {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
// 2(u) - 3(u) - 4(u) - 5(f) - 6(u)
|
|
// 2(u) - 3(u) - 4(u) - 5(f) - 6(u)
|
|
// ↑
|
|
// ↑
|
|
|
|
|
|
- if err := ReleaseIP(network, &expectedIPs[2]); err != nil {
|
|
|
|
|
|
+ if err := ReleaseIP(network, expectedIPs[2]); err != nil {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
// 2(u) - 3(u) - 4(f) - 5(f) - 6(u)
|
|
// 2(u) - 3(u) - 4(f) - 5(f) - 6(u)
|
|
// ↑
|
|
// ↑
|
|
|
|
|
|
- if err := ReleaseIP(network, &expectedIPs[4]); err != nil {
|
|
|
|
|
|
+ if err := ReleaseIP(network, expectedIPs[4]); err != nil {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
// 2(u) - 3(u) - 4(f) - 5(f) - 6(f)
|
|
// 2(u) - 3(u) - 4(f) - 5(f) - 6(f)
|
|
@@ -199,7 +199,7 @@ func TestIPAllocator(t *testing.T) {
|
|
|
|
|
|
// Make sure that IPs are reused in sequential order, starting
|
|
// Make sure that IPs are reused in sequential order, starting
|
|
// with the first released IP
|
|
// with the first released IP
|
|
- newIPs := make([]*net.IP, 3)
|
|
|
|
|
|
+ newIPs := make([]net.IP, 3)
|
|
for i := 0; i < 3; i++ {
|
|
for i := 0; i < 3; i++ {
|
|
ip, err := RequestIP(network, nil)
|
|
ip, err := RequestIP(network, nil)
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -208,9 +208,9 @@ func TestIPAllocator(t *testing.T) {
|
|
|
|
|
|
newIPs[i] = ip
|
|
newIPs[i] = ip
|
|
}
|
|
}
|
|
- assertIPEquals(t, &expectedIPs[2], newIPs[0])
|
|
|
|
- assertIPEquals(t, &expectedIPs[3], newIPs[1])
|
|
|
|
- assertIPEquals(t, &expectedIPs[4], newIPs[2])
|
|
|
|
|
|
+ assertIPEquals(t, expectedIPs[2], newIPs[0])
|
|
|
|
+ assertIPEquals(t, expectedIPs[3], newIPs[1])
|
|
|
|
+ assertIPEquals(t, expectedIPs[4], newIPs[2])
|
|
|
|
|
|
_, err = RequestIP(network, nil)
|
|
_, err = RequestIP(network, nil)
|
|
if err == nil {
|
|
if err == nil {
|
|
@@ -226,7 +226,7 @@ func TestAllocateFirstIP(t *testing.T) {
|
|
}
|
|
}
|
|
|
|
|
|
firstIP := network.IP.To4().Mask(network.Mask)
|
|
firstIP := network.IP.To4().Mask(network.Mask)
|
|
- first := ipToInt(&firstIP) + 1
|
|
|
|
|
|
+ first := ipToInt(firstIP) + 1
|
|
|
|
|
|
ip, err := RequestIP(network, nil)
|
|
ip, err := RequestIP(network, nil)
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -247,7 +247,7 @@ func TestAllocateAllIps(t *testing.T) {
|
|
}
|
|
}
|
|
|
|
|
|
var (
|
|
var (
|
|
- current, first *net.IP
|
|
|
|
|
|
+ current, first net.IP
|
|
err error
|
|
err error
|
|
isFirst = true
|
|
isFirst = true
|
|
)
|
|
)
|
|
@@ -313,14 +313,94 @@ func TestAllocateDifferentSubnets(t *testing.T) {
|
|
if err != nil {
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
- assertIPEquals(t, &expectedIPs[0], ip11)
|
|
|
|
- assertIPEquals(t, &expectedIPs[1], ip12)
|
|
|
|
- assertIPEquals(t, &expectedIPs[2], ip21)
|
|
|
|
- assertIPEquals(t, &expectedIPs[3], ip22)
|
|
|
|
|
|
+ assertIPEquals(t, expectedIPs[0], ip11)
|
|
|
|
+ assertIPEquals(t, expectedIPs[1], ip12)
|
|
|
|
+ assertIPEquals(t, expectedIPs[2], ip21)
|
|
|
|
+ assertIPEquals(t, expectedIPs[3], ip22)
|
|
|
|
+}
|
|
|
|
+func TestRegisterBadTwice(t *testing.T) {
|
|
|
|
+ defer reset()
|
|
|
|
+ network := &net.IPNet{
|
|
|
|
+ IP: []byte{192, 168, 1, 1},
|
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
|
+ }
|
|
|
|
+ subnet := &net.IPNet{
|
|
|
|
+ IP: []byte{192, 168, 1, 8},
|
|
|
|
+ Mask: []byte{255, 255, 255, 248},
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err := RegisterSubnet(network, subnet); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ subnet = &net.IPNet{
|
|
|
|
+ IP: []byte{192, 168, 1, 16},
|
|
|
|
+ Mask: []byte{255, 255, 255, 248},
|
|
|
|
+ }
|
|
|
|
+ if err := RegisterSubnet(network, subnet); err != ErrNetworkAlreadyRegistered {
|
|
|
|
+ t.Fatalf("Expecteded ErrNetworkAlreadyRegistered error, got %v", err)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func TestRegisterBadRange(t *testing.T) {
|
|
|
|
+ defer reset()
|
|
|
|
+ network := &net.IPNet{
|
|
|
|
+ IP: []byte{192, 168, 1, 1},
|
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
|
+ }
|
|
|
|
+ subnet := &net.IPNet{
|
|
|
|
+ IP: []byte{192, 168, 1, 1},
|
|
|
|
+ Mask: []byte{255, 255, 0, 0},
|
|
|
|
+ }
|
|
|
|
+ if err := RegisterSubnet(network, subnet); err != ErrBadSubnet {
|
|
|
|
+ t.Fatalf("Expected ErrBadSubnet error, got %v", err)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func TestAllocateFromRange(t *testing.T) {
|
|
|
|
+ defer reset()
|
|
|
|
+ network := &net.IPNet{
|
|
|
|
+ IP: []byte{192, 168, 0, 1},
|
|
|
|
+ Mask: []byte{255, 255, 255, 0},
|
|
|
|
+ }
|
|
|
|
+ // 192.168.1.9 - 192.168.1.14
|
|
|
|
+ subnet := &net.IPNet{
|
|
|
|
+ IP: []byte{192, 168, 0, 8},
|
|
|
|
+ Mask: []byte{255, 255, 255, 248},
|
|
|
|
+ }
|
|
|
|
+ if err := RegisterSubnet(network, subnet); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ expectedIPs := []net.IP{
|
|
|
|
+ 0: net.IPv4(192, 168, 0, 9),
|
|
|
|
+ 1: net.IPv4(192, 168, 0, 10),
|
|
|
|
+ 2: net.IPv4(192, 168, 0, 11),
|
|
|
|
+ 3: net.IPv4(192, 168, 0, 12),
|
|
|
|
+ 4: net.IPv4(192, 168, 0, 13),
|
|
|
|
+ 5: net.IPv4(192, 168, 0, 14),
|
|
|
|
+ }
|
|
|
|
+ for _, ip := range expectedIPs {
|
|
|
|
+ rip, err := RequestIP(network, nil)
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ assertIPEquals(t, ip, rip)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if _, err := RequestIP(network, nil); err != ErrNoAvailableIPs {
|
|
|
|
+ t.Fatalf("Expected ErrNoAvailableIPs error, got %v", err)
|
|
|
|
+ }
|
|
|
|
+ for _, ip := range expectedIPs {
|
|
|
|
+ ReleaseIP(network, ip)
|
|
|
|
+ rip, err := RequestIP(network, nil)
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ assertIPEquals(t, ip, rip)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
-func assertIPEquals(t *testing.T, ip1, ip2 *net.IP) {
|
|
|
|
- if !ip1.Equal(*ip2) {
|
|
|
|
|
|
+func assertIPEquals(t *testing.T, ip1, ip2 net.IP) {
|
|
|
|
+ if !ip1.Equal(ip2) {
|
|
t.Fatalf("Expected IP %s, got %s", ip1, ip2)
|
|
t.Fatalf("Expected IP %s, got %s", ip1, ip2)
|
|
}
|
|
}
|
|
}
|
|
}
|