1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
3
# Copyright 2011 OpenStack LLC.
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may
7
# not use this file except in compliance with the License. You may obtain
8
# a copy of the License at
10
# http://www.apache.org/licenses/LICENSE-2.0
12
# Unless required by applicable law or agreed to in writing, software
13
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15
# License for the specific language governing permissions and limitations
18
from nova import exception
19
from nova import log as logging
20
from nova.network import model
22
from nova.tests import fake_network_cache_model
24
LOG = logging.getLogger(__name__)
27
class RouteTests(test.TestCase):
28
def test_create_route_with_attrs(self):
29
route = fake_network_cache_model.new_route()
30
ip = fake_network_cache_model.new_ip(dict(address='192.168.1.1'))
31
self.assertEqual(route['cidr'], '0.0.0.0/24')
32
self.assertEqual(route['gateway']['address'], '192.168.1.1')
33
self.assertEqual(route['interface'], 'eth0')
35
def test_routes_equal(self):
36
route1 = fake_network_cache_model.new_route()
37
route2 = fake_network_cache_model.new_route()
38
self.assertEqual(route1, route2)
40
def test_routes_not_equal(self):
41
route1 = fake_network_cache_model.new_route()
42
route2 = fake_network_cache_model.new_route(dict(cidr='1.1.1.1/24'))
43
self.assertNotEqual(route1, route2)
45
def test_hydrate(self):
46
route = model.Route.hydrate(
47
{'gateway': fake_network_cache_model.new_ip(
48
dict(address='192.168.1.1'))})
49
self.assertEqual(route['cidr'], None)
50
self.assertEqual(route['gateway']['address'], '192.168.1.1')
51
self.assertEqual(route['interface'], None)
54
class FixedIPTests(test.TestCase):
55
def test_createnew_fixed_ip_with_attrs(self):
56
fixed_ip = model.FixedIP(address='192.168.1.100')
57
self.assertEqual(fixed_ip['address'], '192.168.1.100')
58
self.assertEqual(fixed_ip['floating_ips'], [])
59
self.assertEqual(fixed_ip['type'], 'fixed')
60
self.assertEqual(fixed_ip['version'], 4)
62
def test_create_fixed_ipv6(self):
63
fixed_ip = model.FixedIP(address='::1')
64
self.assertEqual(fixed_ip['address'], '::1')
65
self.assertEqual(fixed_ip['floating_ips'], [])
66
self.assertEqual(fixed_ip['type'], 'fixed')
67
self.assertEqual(fixed_ip['version'], 6)
69
def test_create_fixed_bad_ip_fails(self):
70
self.assertRaises(exception.InvalidIpAddressError,
72
address='picklespicklespickles')
74
def test_equate_two_fixed_ips(self):
75
fixed_ip = model.FixedIP(address='::1')
76
fixed_ip2 = model.FixedIP(address='::1')
77
self.assertEqual(fixed_ip, fixed_ip2)
79
def test_equate_two_dissimilar_fixed_ips_fails(self):
80
fixed_ip = model.FixedIP(address='::1')
81
fixed_ip2 = model.FixedIP(address='::2')
82
self.assertNotEqual(fixed_ip, fixed_ip2)
84
def test_hydrate(self):
85
fixed_ip = model.FixedIP.hydrate({})
86
self.assertEqual(fixed_ip['floating_ips'], [])
87
self.assertEqual(fixed_ip['address'], None)
88
self.assertEqual(fixed_ip['type'], 'fixed')
89
self.assertEqual(fixed_ip['version'], None)
91
def test_add_floating_ip(self):
92
fixed_ip = model.FixedIP(address='192.168.1.100')
93
fixed_ip.add_floating_ip('192.168.1.101')
94
self.assertEqual(fixed_ip['floating_ips'], ['192.168.1.101'])
96
def test_add_floating_ip_repeatedly_only_one_instance(self):
97
fixed_ip = model.FixedIP(address='192.168.1.100')
99
fixed_ip.add_floating_ip('192.168.1.101')
100
self.assertEqual(fixed_ip['floating_ips'], ['192.168.1.101'])
103
class SubnetTests(test.TestCase):
104
def test_create_subnet_with_attrs(self):
105
subnet = fake_network_cache_model.new_subnet()
107
route1 = fake_network_cache_model.new_route()
109
self.assertEqual(subnet['cidr'], '10.10.0.0/24')
110
self.assertEqual(subnet['dns'],
111
[fake_network_cache_model.new_ip(dict(address='1.2.3.4')),
112
fake_network_cache_model.new_ip(dict(address='2.3.4.5'))])
113
self.assertEqual(subnet['gateway']['address'], '10.10.0.1')
114
self.assertEqual(subnet['ips'],
115
[fake_network_cache_model.new_ip(
116
dict(address='10.10.0.2')),
117
fake_network_cache_model.new_ip(
118
dict(address='10.10.0.3'))])
119
self.assertEqual(subnet['routes'], [route1])
120
self.assertEqual(subnet['version'], 4)
122
def test_add_route(self):
123
subnet = fake_network_cache_model.new_subnet()
124
route1 = fake_network_cache_model.new_route()
125
route2 = fake_network_cache_model.new_route({'cidr': '1.1.1.1/24'})
126
subnet.add_route(route2)
127
self.assertEqual(subnet['routes'], [route1, route2])
129
def test_add_route_a_lot(self):
130
subnet = fake_network_cache_model.new_subnet()
131
route1 = fake_network_cache_model.new_route()
132
route2 = fake_network_cache_model.new_route({'cidr': '1.1.1.1/24'})
134
subnet.add_route(route2)
135
self.assertEqual(subnet['routes'], [route1, route2])
137
def test_add_dns(self):
138
subnet = fake_network_cache_model.new_subnet()
139
dns = fake_network_cache_model.new_ip(dict(address='9.9.9.9'))
141
self.assertEqual(subnet['dns'],
142
[fake_network_cache_model.new_ip(dict(address='1.2.3.4')),
143
fake_network_cache_model.new_ip(dict(address='2.3.4.5')),
144
fake_network_cache_model.new_ip(dict(address='9.9.9.9'))])
146
def test_add_dns_a_lot(self):
147
subnet = fake_network_cache_model.new_subnet()
149
subnet.add_dns(fake_network_cache_model.new_ip(
150
dict(address='9.9.9.9')))
151
self.assertEqual(subnet['dns'],
152
[fake_network_cache_model.new_ip(dict(address='1.2.3.4')),
153
fake_network_cache_model.new_ip(dict(address='2.3.4.5')),
154
fake_network_cache_model.new_ip(dict(address='9.9.9.9'))])
156
def test_add_ip(self):
157
subnet = fake_network_cache_model.new_subnet()
158
subnet.add_ip(fake_network_cache_model.new_ip(
159
dict(address='192.168.1.102')))
160
self.assertEqual(subnet['ips'],
161
[fake_network_cache_model.new_ip(
162
dict(address='10.10.0.2')),
163
fake_network_cache_model.new_ip(
164
dict(address='10.10.0.3')),
165
fake_network_cache_model.new_ip(
166
dict(address='192.168.1.102'))])
168
def test_add_ip_a_lot(self):
169
subnet = fake_network_cache_model.new_subnet()
171
subnet.add_ip(fake_network_cache_model.new_ip(
172
dict(address='192.168.1.102')))
173
self.assertEqual(subnet['ips'],
174
[fake_network_cache_model.new_ip(
175
dict(address='10.10.0.2')),
176
fake_network_cache_model.new_ip(
177
dict(address='10.10.0.3')),
178
fake_network_cache_model.new_ip(
179
dict(address='192.168.1.102'))])
181
def test_hydrate(self):
183
'cidr': '255.255.255.0',
184
'dns': [fake_network_cache_model.new_ip(dict(address='1.1.1.1'))],
185
'ips': [fake_network_cache_model.new_ip(dict(address='2.2.2.2'))],
186
'routes': [fake_network_cache_model.new_route()],
188
'gateway': fake_network_cache_model.new_ip(
189
dict(address='3.3.3.3'))}
190
subnet = model.Subnet.hydrate(subnet_dict)
192
self.assertEqual(subnet['cidr'], '255.255.255.0')
193
self.assertEqual(subnet['dns'], [fake_network_cache_model.new_ip(
194
dict(address='1.1.1.1'))])
195
self.assertEqual(subnet['gateway']['address'], '3.3.3.3')
196
self.assertEqual(subnet['ips'], [fake_network_cache_model.new_ip(
197
dict(address='2.2.2.2'))])
198
self.assertEqual(subnet['routes'], [
199
fake_network_cache_model.new_route()])
200
self.assertEqual(subnet['version'], 4)
203
class NetworkTests(test.TestCase):
204
def test_create_network(self):
205
network = fake_network_cache_model.new_network()
206
self.assertEqual(network['id'], 1)
207
self.assertEqual(network['bridge'], 'br0')
208
self.assertEqual(network['label'], 'public')
209
self.assertEqual(network['subnets'],
210
[fake_network_cache_model.new_subnet(),
211
fake_network_cache_model.new_subnet(
212
dict(cidr='255.255.255.255'))])
214
def test_add_subnet(self):
215
network = fake_network_cache_model.new_network()
216
network.add_subnet(fake_network_cache_model.new_subnet(
217
dict(cidr='0.0.0.0')))
218
self.assertEqual(network['subnets'],
219
[fake_network_cache_model.new_subnet(),
220
fake_network_cache_model.new_subnet(
221
dict(cidr='255.255.255.255')),
222
fake_network_cache_model.new_subnet(dict(cidr='0.0.0.0'))])
224
def test_add_subnet_a_lot(self):
225
network = fake_network_cache_model.new_network()
227
network.add_subnet(fake_network_cache_model.new_subnet(
228
dict(cidr='0.0.0.0')))
229
self.assertEqual(network['subnets'],
230
[fake_network_cache_model.new_subnet(),
231
fake_network_cache_model.new_subnet(
232
dict(cidr='255.255.255.255')),
233
fake_network_cache_model.new_subnet(dict(cidr='0.0.0.0'))])
235
def test_hydrate(self):
240
subnets=[fake_network_cache_model.new_subnet(),
241
fake_network_cache_model.new_subnet(
242
dict(cidr='255.255.255.255'))])
243
network = model.Network.hydrate(fake_network_cache_model.new_network())
245
self.assertEqual(network['id'], 1)
246
self.assertEqual(network['bridge'], 'br0')
247
self.assertEqual(network['label'], 'public')
248
self.assertEqual(network['subnets'],
249
[fake_network_cache_model.new_subnet(),
250
fake_network_cache_model.new_subnet(
251
dict(cidr='255.255.255.255'))])
254
class VIFTests(test.TestCase):
255
def test_create_vif(self):
256
vif = fake_network_cache_model.new_vif()
257
self.assertEqual(vif['id'], 1)
258
self.assertEqual(vif['address'], 'aa:aa:aa:aa:aa:aa')
259
self.assertEqual(vif['network'],
260
fake_network_cache_model.new_network())
262
def test_vif_get_fixed_ips(self):
263
vif = fake_network_cache_model.new_vif()
264
fixed_ips = vif.fixed_ips()
265
ips = [fake_network_cache_model.new_ip(dict(address='10.10.0.2')),
266
fake_network_cache_model.new_ip(
267
dict(address='10.10.0.3'))] * 2
268
self.assertEqual(fixed_ips, ips)
270
def test_vif_get_floating_ips(self):
271
vif = fake_network_cache_model.new_vif()
272
vif['network']['subnets'][0]['ips'][0].add_floating_ip('192.168.1.1')
273
floating_ips = vif.floating_ips()
274
self.assertEqual(floating_ips, ['192.168.1.1'])
276
def test_vif_get_labeled_ips(self):
277
vif = fake_network_cache_model.new_vif()
278
labeled_ips = vif.labeled_ips()
281
'ips': [fake_network_cache_model.new_ip(
282
{'address': '10.10.0.2'}),
283
fake_network_cache_model.new_ip(
284
{'address': '10.10.0.3'})] * 2,
285
'network_label': 'public'}
286
self.assertEqual(labeled_ips, ip_dict)
288
def test_hydrate(self):
292
network=fake_network_cache_model.new_network())
293
vif = model.VIF.hydrate(fake_network_cache_model.new_vif())
294
self.assertEqual(vif['id'], 1)
295
self.assertEqual(vif['address'], 'aa:aa:aa:aa:aa:aa')
296
self.assertEqual(vif['network'],
297
fake_network_cache_model.new_network())
300
class NetworkInfoTests(test.TestCase):
301
def test_create_model(self):
302
ninfo = model.NetworkInfo([fake_network_cache_model.new_vif(),
303
fake_network_cache_model.new_vif(
304
{'address':'bb:bb:bb:bb:bb:bb'})])
305
self.assertEqual(ninfo.fixed_ips(),
306
[fake_network_cache_model.new_ip({'address': '10.10.0.2'}),
307
fake_network_cache_model.new_ip(
308
{'address': '10.10.0.3'})] * 4)
310
def test_get_floating_ips(self):
311
vif = fake_network_cache_model.new_vif()
312
vif['network']['subnets'][0]['ips'][0].add_floating_ip('192.168.1.1')
313
ninfo = model.NetworkInfo([vif,
314
fake_network_cache_model.new_vif(
315
{'address':'bb:bb:bb:bb:bb:bb'})])
316
self.assertEqual(ninfo.floating_ips(), ['192.168.1.1'])
318
def test_hydrate(self):
319
ninfo = model.NetworkInfo([fake_network_cache_model.new_vif(),
320
fake_network_cache_model.new_vif(
321
{'address':'bb:bb:bb:bb:bb:bb'})])
322
deserialized = model.NetworkInfo.hydrate(ninfo)
323
self.assertEqual(ninfo.fixed_ips(),
324
[fake_network_cache_model.new_ip({'address': '10.10.0.2'}),
325
fake_network_cache_model.new_ip(
326
{'address': '10.10.0.3'})] * 4)