forked from mistifyio/lochness
/
subnet_test.go
146 lines (105 loc) · 2.91 KB
/
subnet_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package lochness_test
import (
"net"
"strings"
"testing"
h "github.com/bakins/test-helpers"
"github.com/mistifyio/lochness"
)
func TestNewSubnet(t *testing.T) {
c := newContext(t)
s := c.NewSubnet()
h.Equals(t, 36, len(s.ID))
}
func newSubnet(t *testing.T) *lochness.Subnet {
c := newContext(t)
s := c.NewSubnet()
var err error
_, s.CIDR, err = net.ParseCIDR("10.10.10.0/24")
h.Ok(t, err)
s.StartRange = net.IPv4(10, 10, 10, 10)
s.EndRange = net.IPv4(10, 10, 10, 100)
err = s.Save()
h.Ok(t, err)
return s
}
func removeSubnet(t *testing.T, s *lochness.Subnet) {
err := s.Delete()
h.Ok(t, err)
}
func TestSubnetSaveFail(t *testing.T) {
s := newSubnet(t)
defer removeSubnet(t, s)
s.CIDR = nil
err := s.Save()
h.Assert(t, err != nil, "should have got an error")
h.Assert(t, strings.Contains(err.Error(), "CIDR cannot be nil"), "unexpected error message")
}
func TestSubnetSave(t *testing.T) {
s := newSubnet(t)
defer removeSubnet(t, s)
s.Metadata["foo"] = "bar"
err := s.Save()
h.Ok(t, err)
}
func TestSubnetSaveInvalidRange(t *testing.T) {
s := newSubnet(t)
defer removeSubnet(t, s)
s.StartRange = net.IPv4(10, 10, 11, 10)
err := s.Save()
h.Assert(t, err != nil, "should have got an error")
h.Assert(t, strings.Contains(err.Error(), "does not contain"), "unexpected error message")
}
func TestSubnetAddresses(t *testing.T) {
s := newSubnet(t)
defer removeSubnet(t, s)
h.Equals(t, 0, len(s.Addresses()))
}
func TestSubnetAvailibleAddresses(t *testing.T) {
s := newSubnet(t)
defer removeSubnet(t, s)
avail := s.AvailibleAddresses()
h.Equals(t, 91, len(avail))
}
func reserveAddress(t *testing.T, s *lochness.Subnet) net.IP {
ip, err := s.ReserveAddress("fake")
h.Ok(t, err)
h.Assert(t, strings.Contains(ip.String(), "10.10.10."), "unexpected ip address")
h.Equals(t, 90, len(s.AvailibleAddresses()))
h.Equals(t, 1, len(s.Addresses()))
// make sure change persists
err = s.Refresh()
h.Ok(t, err)
h.Equals(t, 90, len(s.AvailibleAddresses()))
return ip
}
func TestSubnetReserveAddress(t *testing.T) {
s := newSubnet(t)
defer removeSubnet(t, s)
_ = reserveAddress(t, s)
}
func TestSubnetReleaseAddress(t *testing.T) {
s := newSubnet(t)
defer removeSubnet(t, s)
ip := reserveAddress(t, s)
err := s.ReleaseAddress(ip)
h.Ok(t, err)
h.Equals(t, 91, len(s.AvailibleAddresses()))
// make sure change persists
err = s.Refresh()
h.Ok(t, err)
h.Equals(t, 91, len(s.AvailibleAddresses()))
h.Equals(t, 0, len(s.Addresses()))
}
func TestSubnetsAlias(t *testing.T) {
_ = lochness.Subnets([]*lochness.Subnet{})
}
func TestSubnetWithBadID(t *testing.T) {
c := newContext(t)
_, err := c.Subnet("")
h.Assert(t, err != nil, "should have got an error")
h.Assert(t, strings.Contains(err.Error(), "invalid UUID"), "unexpected error")
_, err = c.Subnet("foo")
h.Assert(t, err != nil, "should have got an error")
h.Assert(t, strings.Contains(err.Error(), "invalid UUID"), "unexpected error")
}