summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeisuke Tagami <tagami.keisuke@lab.ntt.co.jp>2011-09-05 20:23:28 +0900
committerKeisuke Tagami <tagami.keisuke@lab.ntt.co.jp>2011-09-05 20:23:28 +0900
commitd6f1a31d56de84398246498d0f2676d9741cdccf (patch)
treeae0e125ebab103a5d96fd845772bbefa23718435
parent6b61a6be4a14444723e3728fb0fcdd77bac8fe74 (diff)
implement unit test for linux_net
-rwxr-xr-x[-rw-r--r--]nova/db/api.py5
-rwxr-xr-xnova/network/linux_net.py17
-rwxr-xr-xnova/tests/test_linux_net.py232
3 files changed, 247 insertions, 7 deletions
diff --git a/nova/db/api.py b/nova/db/api.py
index 148887635..85e9c7669 100644..100755
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -532,6 +532,11 @@ def instance_get_all_by_reservation(context, reservation_id):
return IMPL.instance_get_all_by_reservation(context, reservation_id)
+def instance_get_all_by_network(context, network_id):
+ """Get all instances belonging to a network."""
+ return IMPL.instance_get_all_by_network(context, network_id)
+
+
def instance_get_by_fixed_ip(context, address):
"""Get an instance for a fixed ip by address."""
return IMPL.instance_get_by_fixed_ip(context, address)
diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py
index 8d5a0bbbd..50d9ccf19 100755
--- a/nova/network/linux_net.py
+++ b/nova/network/linux_net.py
@@ -514,6 +514,7 @@ def get_dhcp_hosts(context, network_ref):
def get_dhcp_opts(context, network_ref):
"""Get network's hosts config in dhcp-opts format."""
# create a decision dictionary for default gateway for eache instance
+ hosts = []
default_gateway_network_node = dict()
network_id = network_ref['id']
instance_refs = db.instance_get_all_by_network(context, network_id)
@@ -521,9 +522,10 @@ def get_dhcp_opts(context, network_ref):
for instance_ref in instance_refs:
instance_id = instance_ref['id']
- # nic number is decided by from this function in xxx function
+ # nic number is decided by xxx from this function in xxx function
vifs = db.virtual_interface_get_by_instance(context, instance_id)
- if not vifs:
+ if vifs == None:
+ default_gateway_network_node[instance_id] = None
continue
# offer a default gateway to the first virtual interface of instance
first_vif = vifs[0]
@@ -531,11 +533,12 @@ def get_dhcp_opts(context, network_ref):
for fixed_ip_ref in ips_ref:
instance_id = fixed_ip_ref['instance_id']
- target_network_id = default_gateway_network_node[instance_id]
- if target_network_id == fixed_ip_ref['network_id']:
- hosts.append(_host_dhcp_opts(fixed_ip_ref, gw=True))
- else:
- hosts.append(_host_dhcp_opts(fixed_ip_ref, gw=None))
+ if default_gateway_network_node.has_key(instance_id):
+ target_network_id = default_gateway_network_node[instance_id]
+ if target_network_id == fixed_ip_ref['network_id']:
+ hosts.append(_host_dhcp_opts(fixed_ip_ref, gw=True))
+ else:
+ hosts.append(_host_dhcp_opts(fixed_ip_ref, gw=None))
return '\n'.join(hosts)
diff --git a/nova/tests/test_linux_net.py b/nova/tests/test_linux_net.py
new file mode 100755
index 000000000..3c3cdd0d9
--- /dev/null
+++ b/nova/tests/test_linux_net.py
@@ -0,0 +1,232 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 NTT
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from nova import context
+from nova import db
+from nova import exception
+from nova import log as logging
+from nova import test
+from nova import utils
+from nova import flags
+from nova.network import manager as network_manager
+
+import mox
+
+FLAGS = flags.FLAGS
+
+LOG = logging.getLogger('nova.tests.network')
+
+
+HOST = "testhost"
+
+instances = [{'id': 0,
+ 'host': 'fake_instance00',
+ 'hostname': 'fake_instance00'},
+ {'id': 1,
+ 'host': 'fake_instance01',
+ 'hostname': 'fake_instance01'}]
+
+
+addresses = [{"address" : "10.0.0.1" },
+ {"address" : "10.0.0.2" },
+ {"address" : "10.0.0.3" },
+ {"address" : "10.0.0.4" }]
+
+
+networks = [{'id': 0,
+ 'uuid': "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
+ 'label': 'test0',
+ 'injected': False,
+ 'multi_host': False,
+ 'cidr': '192.168.0.0/24',
+ 'cidr_v6': '2001:db8::/64',
+ 'gateway_v6': '2001:db8::1',
+ 'netmask_v6': '64',
+ 'netmask': '255.255.255.0',
+ 'bridge': 'fa0',
+ 'bridge_interface': 'fake_fa0',
+ 'gateway': '192.168.0.1',
+ 'broadcast': '192.168.0.255',
+ 'dns1': '192.168.0.1',
+ 'dns2': '192.168.0.2',
+ 'dhcp_server' : '0.0.0.0',
+ 'dhcp_start' : '192.168.100.1',
+ 'vlan': None,
+ 'host': None,
+ 'project_id': 'fake_project',
+ 'vpn_public_address': '192.168.0.2'},
+ {'id': 1,
+ 'uuid': "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
+ 'label': 'test1',
+ 'injected': False,
+ 'multi_host': False,
+ 'cidr': '192.168.1.0/24',
+ 'cidr_v6': '2001:db9::/64',
+ 'gateway_v6': '2001:db9::1',
+ 'netmask_v6': '64',
+ 'netmask': '255.255.255.0',
+ 'bridge': 'fa1',
+ 'bridge_interface': 'fake_fa1',
+ 'gateway': '192.168.1.1',
+ 'broadcast': '192.168.1.255',
+ 'dns1': '192.168.0.1',
+ 'dns2': '192.168.0.2',
+ 'dhcp_server' : '0.0.0.0',
+ 'dhcp_start' : '192.168.100.1',
+ 'vlan': None,
+ 'host': None,
+ 'project_id': 'fake_project',
+ 'vpn_public_address': '192.168.1.2'}]
+
+
+fixed_ips = [{'id': 0,
+ 'network_id': 0,
+ 'address': '192.168.0.100',
+ 'instance_id': 0,
+ 'allocated': True,
+ 'virtual_interface_id': 0,
+ 'virtual_interface' : addresses[0],
+ 'instance': instances[0],
+ 'floating_ips': []},
+ {'id': 1,
+ 'network_id': 1,
+ 'address': '192.168.1.100',
+ 'instance_id': 0,
+ 'allocated': True,
+ 'virtual_interface_id': 1,
+ 'virtual_interface' : addresses[1],
+ 'instance': instances[0],
+ 'floating_ips': []},
+ {'id': 2,
+ 'network_id': 0,
+ 'address': '192.168.0.101',
+ 'instance_id': 1,
+ 'allocated': True,
+ 'virtual_interface_id': 2,
+ 'virtual_interface' : addresses[2],
+ 'instance': instances[1],
+ 'floating_ips': []},
+ {'id': 3,
+ 'network_id': 1,
+ 'address': '192.168.1.101',
+ 'instance_id': 1,
+ 'allocated': True,
+ 'virtual_interface_id': 3,
+ 'virtual_interface' : addresses[3],
+ 'instance': instances[1],
+ 'floating_ips': []}]
+
+
+
+
+vifs = [{'id': 0,
+ 'address': 'DE:AD:BE:EF:00:00',
+ 'uuid': '00000000-0000-0000-0000-0000000000000000',
+ 'network_id': 0,
+ 'network': networks[0],
+ 'instance_id': 0},
+ {'id': 1,
+ 'address': 'DE:AD:BE:EF:00:01',
+ 'uuid': '00000000-0000-0000-0000-0000000000000001',
+ 'network_id': 1,
+ 'network': networks[1],
+ 'instance_id': 0},
+ {'id': 2,
+ 'address': 'DE:AD:BE:EF:00:02',
+ 'uuid': '00000000-0000-0000-0000-0000000000000002',
+ 'network_id': 1,
+ 'network': networks[1],
+ 'instance_id': 1},
+ {'id': 3,
+ 'address': 'DE:AD:BE:EF:00:03',
+ 'uuid': '00000000-0000-0000-0000-0000000000000003',
+ 'network_id': 0,
+ 'network': networks[0],
+ 'instance_id': 1}]
+
+
+class LinuxNetworkTestCase(test.TestCase):
+
+ def setUp(self):
+ super(LinuxNetworkTestCase, self).setUp()
+ network_driver = FLAGS.network_driver
+ self.driver = utils.import_object(network_driver)
+ self.driver.db = db
+
+ def test_update_dhcp(self):
+ self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips')
+ self.mox.StubOutWithMock(db, 'instance_get_all_by_network')
+ self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance')
+
+ fixed_ips[1]['instance'] = instances[0]
+ db.network_get_associated_fixed_ips(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn(fixed_ips)
+
+ db.instance_get_all_by_network(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn(instances)
+ db.network_get_associated_fixed_ips(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn(fixed_ips)
+ db.virtual_interface_get_by_instance(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn([vifs[0],vifs[1]])
+ db.virtual_interface_get_by_instance(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn([vifs[2],vifs[3]])
+
+ self.mox.ReplayAll()
+ self.driver.update_dhcp(None, "eth0", networks[0])
+
+
+ def test_get_dhcp_hosts(self):
+ self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips')
+
+ fixed_ips[1]['instance'] = instances[0]
+ db.network_get_associated_fixed_ips(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn(fixed_ips)
+
+ self.mox.ReplayAll()
+
+ hosts = self.driver.get_dhcp_hosts(None, networks[0])
+
+ self.assertEquals(hosts,
+ "10.0.0.1,fake_instance00.novalocal,192.168.0.100,net:NW-i00000000-0\n" \
+ "10.0.0.2,fake_instance00.novalocal,192.168.1.100,net:NW-i00000000-1\n" \
+ "10.0.0.3,fake_instance01.novalocal,192.168.0.101,net:NW-i00000001-0\n" \
+ "10.0.0.4,fake_instance01.novalocal,192.168.1.101,net:NW-i00000001-1")
+
+
+ def test_get_dhcp_opts(self):
+ self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips')
+ self.mox.StubOutWithMock(db, 'instance_get_all_by_network')
+ self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance')
+
+ fixed_ips[1]['instance'] = instances[0]
+
+ db.instance_get_all_by_network(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn(instances)
+ db.network_get_associated_fixed_ips(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn(fixed_ips)
+ db.virtual_interface_get_by_instance(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn([vifs[0],vifs[1]])
+ db.virtual_interface_get_by_instance(mox.IgnoreArg(),
+ mox.IgnoreArg()).AndReturn([vifs[2],vifs[3]])
+
+ self.mox.ReplayAll()
+
+ opts = self.driver.get_dhcp_opts(None, networks[0])
+ self.assertEquals(opts, '\nNW-i00000000-1,3\nNW-i00000001-0,3\n')
+
+
+