123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- 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},
- }
- if err := RegisterNetwork(network); err != nil {
- t.Fatal(err)
- }
- n := newIPNet(network)
- if _, exists := allocatedIPs[n]; !exists {
- t.Fatal("IPNet should exist in allocated IPs")
- }
- if _, exists := availableIPS[n]; !exists {
- 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)
- }
- }
|