summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/network/api.py2
-rw-r--r--nova/tests/network/test_api.py55
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)