diff options
author | Jian Wen <wenjianhn@gmail.com> | 2012-11-06 01:31:32 +0800 |
---|---|---|
committer | Jian Wen <wenjianhn@gmail.com> | 2012-11-07 16:44:46 +0800 |
commit | 2368eadcc8e87bdb0691b3d753d113d20a98aa18 (patch) | |
tree | 229fdf3a29b9a33e8c6c1996a63f57b00b7b5291 | |
parent | b6d267d728b4b3e5fb8494499b7d1449013789a9 (diff) | |
download | nova-2368eadcc8e87bdb0691b3d753d113d20a98aa18.tar.gz nova-2368eadcc8e87bdb0691b3d753d113d20a98aa18.tar.xz nova-2368eadcc8e87bdb0691b3d753d113d20a98aa18.zip |
Corrects usage of db.api.network_get
Sets project_only='allow_none' to get the network whose project_id
is None or not.
Fixes bug 1075215
Change-Id: I80622b1f5ccf194b4810bd0560bd0cdb077370df
-rw-r--r-- | nova/network/api.py | 2 | ||||
-rw-r--r-- | nova/tests/network/test_api.py | 55 |
2 files changed, 56 insertions, 1 deletions
diff --git a/nova/network/api.py b/nova/network/api.py index 46a7e0360..e4fd38b13 100644 --- a/nova/network/api.py +++ b/nova/network/api.py @@ -329,7 +329,7 @@ class API(base.Base): except exception.FixedIpNotFoundForInstance: return False network = self.db.network_get(context, fixed_ips[0]['network_id'], - project_only=True) + project_only='allow_none') return network['multi_host'] def _get_floating_ip_addresses(self, context, instance): diff --git a/nova/tests/network/test_api.py b/nova/tests/network/test_api.py index 04f646ef0..bfc9dc878 100644 --- a/nova/tests/network/test_api.py +++ b/nova/tests/network/test_api.py @@ -17,13 +17,19 @@ """Tests for network API""" +import random + from nova import context +from nova import exception from nova import network from nova.network import rpcapi as network_rpcapi from nova.openstack.common import rpc from nova import test +FAKE_UUID = 'a47ae74e-ab08-547f-9eee-ffd23fc46c16' + + class ApiTestCase(test.TestCase): def setUp(self): super(ApiTestCase, self).setUp() @@ -142,3 +148,52 @@ class ApiTestCase(test.TestCase): 'migrate_instance_finish', False, info) self.network_api.migrate_instance_finish(self.context, arg1, arg2) self.assertEqual(info['kwargs'], expected) + + def test_is_multi_host_instance_has_no_fixed_ip(self): + def fake_fixed_ip_get_by_instance(ctxt, uuid): + raise exception.FixedIpNotFoundForInstance + self.stubs.Set(self.network_api.db, 'fixed_ip_get_by_instance', + fake_fixed_ip_get_by_instance) + instance = {'uuid': FAKE_UUID} + self.assertFalse(self.network_api._is_multi_host(self.context, + instance)) + + def test_is_multi_host_network_has_no_project_id(self): + is_multi_host = random.choice([True, False]) + network = {'project_id': None, + 'multi_host': is_multi_host, } + network_ref = self.network_api.db.network_create_safe( + self.context.elevated(), + network) + + def fake_fixed_ip_get_by_instance(ctxt, uuid): + fixed_ip = [{'network_id': network_ref['id'], + 'instance_uuid': FAKE_UUID, }] + return fixed_ip + + self.stubs.Set(self.network_api.db, 'fixed_ip_get_by_instance', + fake_fixed_ip_get_by_instance) + + instance = {'uuid': FAKE_UUID} + result = self.network_api._is_multi_host(self.context, instance) + self.assertEqual(is_multi_host, result) + + def test_is_multi_host_network_has_project_id(self): + is_multi_host = random.choice([True, False]) + network = {'project_id': self.context.project_id, + 'multi_host': is_multi_host, } + network_ref = self.network_api.db.network_create_safe( + self.context.elevated(), + network) + + def fake_fixed_ip_get_by_instance(ctxt, uuid): + fixed_ip = [{'network_id': network_ref['id'], + 'instance_uuid': FAKE_UUID, }] + return fixed_ip + + self.stubs.Set(self.network_api.db, 'fixed_ip_get_by_instance', + fake_fixed_ip_get_by_instance) + + instance = {'uuid': FAKE_UUID} + result = self.network_api._is_multi_host(self.context, instance) + self.assertEqual(is_multi_host, result) |