diff options
-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) |