66
69
self.assertTrue(IPy.IP(address) in pubnet)
67
70
self.assertTrue(IPy.IP(address) in self.network.network)
69
def test_allocate_deallocate_ip(self):
70
address = network.allocate_ip(
71
self.user.id, self.projects[0].id, utils.generate_mac())
72
def test_allocate_deallocate_fixed_ip(self):
73
result = yield self.service.allocate_fixed_ip(
74
self.user.id, self.projects[0].id)
75
address = result['private_dns_name']
76
mac = result['mac_address']
72
77
logging.debug("Was allocated %s" % (address))
73
net = network.get_project_network(self.projects[0].id, "default")
78
net = model.get_project_network(self.projects[0].id, "default")
74
79
self.assertEqual(True, is_in_project(address, self.projects[0].id))
75
mac = utils.generate_mac()
76
80
hostname = "test-host"
77
81
self.dnsmasq.issue_ip(mac, address, hostname, net.bridge_name)
78
rv = network.deallocate_ip(address)
82
rv = self.service.deallocate_fixed_ip(address)
80
84
# Doesn't go away until it's dhcp released
81
85
self.assertEqual(True, is_in_project(address, self.projects[0].id))
84
88
self.assertEqual(False, is_in_project(address, self.projects[0].id))
86
90
def test_range_allocation(self):
87
mac = utils.generate_mac()
88
secondmac = utils.generate_mac()
89
91
hostname = "test-host"
90
address = network.allocate_ip(
91
self.user.id, self.projects[0].id, mac)
92
secondaddress = network.allocate_ip(
93
self.user, self.projects[1].id, secondmac)
94
net = network.get_project_network(self.projects[0].id, "default")
95
secondnet = network.get_project_network(self.projects[1].id, "default")
92
result = yield self.service.allocate_fixed_ip(
93
self.user.id, self.projects[0].id)
94
mac = result['mac_address']
95
address = result['private_dns_name']
96
result = yield self.service.allocate_fixed_ip(
97
self.user, self.projects[1].id)
98
secondmac = result['mac_address']
99
secondaddress = result['private_dns_name']
101
net = model.get_project_network(self.projects[0].id, "default")
102
secondnet = model.get_project_network(self.projects[1].id, "default")
97
104
self.assertEqual(True, is_in_project(address, self.projects[0].id))
98
105
self.assertEqual(True, is_in_project(secondaddress, self.projects[1].id))
103
110
self.dnsmasq.issue_ip(secondmac, secondaddress,
104
111
hostname, secondnet.bridge_name)
106
rv = network.deallocate_ip(address)
113
rv = self.service.deallocate_fixed_ip(address)
107
114
self.dnsmasq.release_ip(mac, address, hostname, net.bridge_name)
108
115
self.assertEqual(False, is_in_project(address, self.projects[0].id))
110
117
# First address release shouldn't affect the second
111
118
self.assertEqual(True, is_in_project(secondaddress, self.projects[1].id))
113
rv = network.deallocate_ip(secondaddress)
120
rv = self.service.deallocate_fixed_ip(secondaddress)
114
121
self.dnsmasq.release_ip(secondmac, secondaddress,
115
122
hostname, secondnet.bridge_name)
116
123
self.assertEqual(False, is_in_project(secondaddress, self.projects[1].id))
118
125
def test_subnet_edge(self):
119
secondaddress = network.allocate_ip(self.user.id, self.projects[0].id,
120
utils.generate_mac())
126
result = yield self.service.allocate_fixed_ip(self.user.id,
128
firstaddress = result['private_dns_name']
121
129
hostname = "toomany-hosts"
122
130
for i in range(1,5):
123
131
project_id = self.projects[i].id
124
mac = utils.generate_mac()
125
mac2 = utils.generate_mac()
126
mac3 = utils.generate_mac()
127
address = network.allocate_ip(
128
self.user, project_id, mac)
129
address2 = network.allocate_ip(
130
self.user, project_id, mac2)
131
address3 = network.allocate_ip(
132
self.user, project_id, mac3)
132
result = yield self.service.allocate_fixed_ip(
133
self.user, project_id)
134
mac = result['mac_address']
135
address = result['private_dns_name']
136
result = yield self.service.allocate_fixed_ip(
137
self.user, project_id)
138
mac2 = result['mac_address']
139
address2 = result['private_dns_name']
140
result = yield self.service.allocate_fixed_ip(
141
self.user, project_id)
142
mac3 = result['mac_address']
143
address3 = result['private_dns_name']
133
144
self.assertEqual(False, is_in_project(address, self.projects[0].id))
134
145
self.assertEqual(False, is_in_project(address2, self.projects[0].id))
135
146
self.assertEqual(False, is_in_project(address3, self.projects[0].id))
136
rv = network.deallocate_ip(address)
137
rv = network.deallocate_ip(address2)
138
rv = network.deallocate_ip(address3)
139
net = network.get_project_network(project_id, "default")
147
rv = self.service.deallocate_fixed_ip(address)
148
rv = self.service.deallocate_fixed_ip(address2)
149
rv = self.service.deallocate_fixed_ip(address3)
150
net = model.get_project_network(project_id, "default")
140
151
self.dnsmasq.release_ip(mac, address, hostname, net.bridge_name)
141
152
self.dnsmasq.release_ip(mac2, address2, hostname, net.bridge_name)
142
153
self.dnsmasq.release_ip(mac3, address3, hostname, net.bridge_name)
143
net = network.get_project_network(self.projects[0].id, "default")
144
rv = network.deallocate_ip(secondaddress)
145
self.dnsmasq.release_ip(mac, secondaddress, hostname, net.bridge_name)
154
net = model.get_project_network(self.projects[0].id, "default")
155
rv = self.service.deallocate_fixed_ip(firstaddress)
156
self.dnsmasq.release_ip(mac, firstaddress, hostname, net.bridge_name)
158
def test_212_vpn_ip_and_port_looks_valid(self):
159
vpn.NetworkData.create(self.projects[0].id)
160
self.assert_(self.projects[0].vpn_ip)
161
self.assert_(self.projects[0].vpn_port >= FLAGS.vpn_start_port)
162
self.assert_(self.projects[0].vpn_port <= FLAGS.vpn_end_port)
164
def test_too_many_vpns(self):
166
for i in xrange(vpn.NetworkData.num_ports_for_ip(FLAGS.vpn_ip)):
167
vpns.append(vpn.NetworkData.create("vpnuser%s" % i))
168
self.assertRaises(vpn.NoMorePorts, vpn.NetworkData.create, "boom")
169
for network_datum in vpns:
170
network_datum.destroy()
147
172
def test_release_before_deallocate(self):
185
210
for i in range(0, (num_available_ips - 1)):
186
macs[i] = utils.generate_mac()
187
addresses[i] = network.allocate_ip(self.user.id, self.projects[0].id, macs[i])
211
result = yield self.service.allocate_fixed_ip(self.user.id, self.projects[0].id)
212
macs[i] = result['mac_address']
213
addresses[i] = result['private_dns_name']
188
214
self.dnsmasq.issue_ip(macs[i], addresses[i], hostname, net.bridge_name)
190
self.assertRaises(NoMoreAddresses, network.allocate_ip, self.user.id, self.projects[0].id, utils.generate_mac())
216
self.assertFailure(self.service.allocate_fixed_ip(self.user.id, self.projects[0].id), NoMoreAddresses)
192
218
for i in range(0, (num_available_ips - 1)):
193
rv = network.deallocate_ip(addresses[i])
219
rv = self.service.deallocate_fixed_ip(addresses[i])
194
220
self.dnsmasq.release_ip(macs[i], addresses[i], hostname, net.bridge_name)
196
222
def is_in_project(address, project_id):
197
return address in network.get_project_network(project_id).list_addresses()
223
return address in model.get_project_network(project_id).list_addresses()
199
225
def _get_project_addresses(project_id):
200
226
project_addresses = []
201
for addr in network.get_project_network(project_id).list_addresses():
227
for addr in model.get_project_network(project_id).list_addresses():
202
228
project_addresses.append(addr)
203
229
return project_addresses