~blamar/+junk/openstack-api-arrrg

« back to all changes in this revision

Viewing changes to nova/tests/network_unittest.py

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 
2
# Copyright [2010] [Anso Labs, LLC]
 
3
#
 
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
 
7
#
 
8
#        http://www.apache.org/licenses/LICENSE-2.0
 
9
#
 
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.
 
15
 
 
16
import logging
 
17
import unittest
 
18
 
 
19
from nova import vendor
 
20
import IPy
 
21
 
 
22
from nova import flags
 
23
from nova import test
 
24
from nova.compute import network
 
25
from nova.auth import users
 
26
 
 
27
 
 
28
class NetworkTestCase(test.TrialTestCase):
 
29
    def setUp(self):
 
30
        super(NetworkTestCase, self).setUp()
 
31
        logging.getLogger().setLevel(logging.DEBUG)
 
32
        self.manager = users.UserManager.instance()
 
33
        for i in range(0, 6):
 
34
            name = 'user%s' % i
 
35
            if not self.manager.get_user(name):
 
36
                self.manager.create_user(name, name, name)
 
37
        self.network = network.NetworkController(netsize=16)
 
38
 
 
39
    def tearDown(self):
 
40
        super(NetworkTestCase, self).tearDown()
 
41
        for i in range(0, 6):
 
42
            name = 'user%s' % i
 
43
            self.manager.delete_user(name)
 
44
 
 
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")
 
48
        net_json = str(net1)
 
49
        net2 = network.Network.from_json(net_json)
 
50
        self.assertEqual(net_json, str(net2))
 
51
        self.assertTrue(IPy.IP(address) in net2.network)
 
52
 
 
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"))
 
62
 
 
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"))
 
77
 
 
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)
 
98
 
 
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)
 
106
 
 
107
    def _get_user_addresses(self, user_id):
 
108
        rv = self.network.describe_addresses()
 
109
        user_addresses = []
 
110
        for item in rv:
 
111
            if item['user_id'] == user_id:
 
112
                user_addresses.append(item['address'])
 
113
        return user_addresses