1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
# Copyright [2010] [Anso Labs, LLC]
4
# Licensed under the Apache License, Version 2.0 (the "License");
5
# you may not use this file except in compliance with the License.
6
# You may obtain a copy of the License at
8
# http://www.apache.org/licenses/LICENSE-2.0
10
# Unless required by applicable law or agreed to in writing, software
11
# distributed under the License is distributed on an "AS IS" BASIS,
12
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
# See the License for the specific language governing permissions and
14
# limitations under the License.
19
from nova import vendor
22
from nova import flags
24
from nova.compute import network
25
from nova.auth import users
28
class NetworkTestCase(test.TrialTestCase):
30
super(NetworkTestCase, self).setUp()
31
logging.getLogger().setLevel(logging.DEBUG)
32
self.manager = users.UserManager.instance()
35
if not self.manager.get_user(name):
36
self.manager.create_user(name, name, name)
37
self.network = network.NetworkController(netsize=16)
40
super(NetworkTestCase, self).tearDown()
43
self.manager.delete_user(name)
45
def test_network_serialization(self):
46
net1 = network.Network(vlan=100, network="192.168.100.0/24", conn=None)
47
address = net1.allocate_ip("user0", "01:24:55:36:f2:a0")
49
net2 = network.Network.from_json(net_json)
50
self.assertEqual(net_json, str(net2))
51
self.assertTrue(IPy.IP(address) in net2.network)
53
def test_allocate_deallocate_address(self):
54
for flag in flags.FLAGS:
55
print "%s=%s" % (flag, flags.FLAGS.get(flag, None))
56
(address, net_name) = self.network.allocate_address(
57
"user0", "01:24:55:36:f2:a0")
58
logging.debug("Was allocated %s" % (address))
59
self.assertEqual(True, address in self._get_user_addresses("user0"))
60
rv = self.network.deallocate_address(address)
61
self.assertEqual(False, address in self._get_user_addresses("user0"))
63
def test_range_allocation(self):
64
(address, net_name) = self.network.allocate_address(
65
"user0", "01:24:55:36:f2:a0")
66
(secondaddress, net_name) = self.network.allocate_address(
67
"user1", "01:24:55:36:f2:a0")
68
self.assertEqual(True, address in self._get_user_addresses("user0"))
69
self.assertEqual(True,
70
secondaddress in self._get_user_addresses("user1"))
71
self.assertEqual(False, address in self._get_user_addresses("user1"))
72
rv = self.network.deallocate_address(address)
73
self.assertEqual(False, address in self._get_user_addresses("user0"))
74
rv = self.network.deallocate_address(secondaddress)
75
self.assertEqual(False,
76
secondaddress in self._get_user_addresses("user1"))
78
def test_subnet_edge(self):
79
(secondaddress, net_name) = self.network.allocate_address("user0")
80
for user in range(1,5):
81
user_id = "user%s" % (user)
82
(address, net_name) = self.network.allocate_address(
83
user_id, "01:24:55:36:f2:a0")
84
(address2, net_name) = self.network.allocate_address(
85
user_id, "01:24:55:36:f2:a0")
86
(address3, net_name) = self.network.allocate_address(
87
user_id, "01:24:55:36:f2:a0")
88
self.assertEqual(False,
89
address in self._get_user_addresses("user0"))
90
self.assertEqual(False,
91
address2 in self._get_user_addresses("user0"))
92
self.assertEqual(False,
93
address3 in self._get_user_addresses("user0"))
94
rv = self.network.deallocate_address(address)
95
rv = self.network.deallocate_address(address2)
96
rv = self.network.deallocate_address(address3)
97
rv = self.network.deallocate_address(secondaddress)
99
def test_too_many_users(self):
100
for i in range(0, 30):
101
name = 'toomany-user%s' % i
102
self.manager.create_user(name, name, name)
103
(address, net_name) = self.network.allocate_address(
104
name, "01:24:55:36:f2:a0")
105
self.manager.delete_user(name)
107
def _get_user_addresses(self, user_id):
108
rv = self.network.describe_addresses()
111
if item['user_id'] == user_id:
112
user_addresses.append(item['address'])
113
return user_addresses