summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorWilliam Wolf <throughnothing@gmail.com>2011-09-19 22:09:53 -0400
committerWilliam Wolf <throughnothing@gmail.com>2011-09-19 22:09:53 -0400
commitf27ed550fae070c8cfeaf638b2a00a9b80f188c1 (patch)
tree7b8afa180e5f2ada4c8bf35c340fcc043b185f98 /nova/tests
parenta0e705359353cb6a9b0c3fc8178e714e4350c585 (diff)
parentb90503021b5d55c51cf082fd168512bd4586383d (diff)
merged with trunk
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/api/openstack/contrib/test_virtual_interfaces.py17
-rw-r--r--nova/tests/api/openstack/test_servers.py54
-rw-r--r--nova/tests/fake_network.py61
-rw-r--r--nova/tests/test_compute.py253
-rw-r--r--nova/tests/test_db_api.py34
-rw-r--r--nova/tests/test_metadata.py9
-rw-r--r--nova/tests/test_network.py182
-rw-r--r--nova/tests/test_virt_drivers.py4
8 files changed, 319 insertions, 295 deletions
diff --git a/nova/tests/api/openstack/contrib/test_virtual_interfaces.py b/nova/tests/api/openstack/contrib/test_virtual_interfaces.py
index 1db253b35..0260e89d4 100644
--- a/nova/tests/api/openstack/contrib/test_virtual_interfaces.py
+++ b/nova/tests/api/openstack/contrib/test_virtual_interfaces.py
@@ -14,22 +14,20 @@
# under the License.
import json
-import stubout
import webob
from nova import test
-from nova import compute
+from nova import network
from nova.tests.api.openstack import fakes
from nova.api.openstack.contrib.virtual_interfaces import \
ServerVirtualInterfaceController
-def compute_api_get(self, context, server_id):
- return {'virtual_interfaces': [
- {'uuid': '00000000-0000-0000-0000-00000000000000000',
- 'address': '00-00-00-00-00-00'},
- {'uuid': '11111111-1111-1111-1111-11111111111111111',
- 'address': '11-11-11-11-11-11'}]}
+def get_vifs_by_instance(self, context, server_id):
+ return [{'uuid': '00000000-0000-0000-0000-00000000000000000',
+ 'address': '00-00-00-00-00-00'},
+ {'uuid': '11111111-1111-1111-1111-11111111111111111',
+ 'address': '11-11-11-11-11-11'}]
class ServerVirtualInterfaceTest(test.TestCase):
@@ -37,7 +35,8 @@ class ServerVirtualInterfaceTest(test.TestCase):
def setUp(self):
super(ServerVirtualInterfaceTest, self).setUp()
self.controller = ServerVirtualInterfaceController()
- self.stubs.Set(compute.api.API, "get", compute_api_get)
+ self.stubs.Set(network.api.API, "get_vifs_by_instance",
+ get_vifs_by_instance)
def tearDown(self):
super(ServerVirtualInterfaceTest, self).tearDown()
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index b3e4ad0cf..cccbafcde 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -1309,7 +1309,7 @@ class ServersTest(test.TestCase):
self.assertEqual(servers[0]['id'], 100)
def test_tenant_id_filter_converts_to_project_id_for_admin(self):
- def fake_get_all(context, filters=None):
+ def fake_get_all(context, filters=None, instances=None):
self.assertNotEqual(filters, None)
self.assertEqual(filters['project_id'], 'faketenant')
self.assertFalse(filters.get('tenant_id'))
@@ -2255,6 +2255,58 @@ class ServersTest(test.TestCase):
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 400)
+ def test_create_instance_v1_1_malformed_entity(self):
+ self._setup_for_create_instance()
+ req = webob.Request.blank('/v1.1/fake/servers')
+ req.method = 'POST'
+ req.body = json.dumps({'server': 'string'})
+ req.headers['content-type'] = "application/json"
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 400)
+
+ def test_create_instance_v1_1_malformed_body_string(self):
+ self._setup_for_create_instance()
+ req = webob.Request.blank('/v1.1/fake/servers')
+ req.method = 'POST'
+ req.body = 'string'
+ req.headers['content-type'] = "application/json"
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 400)
+
+ def test_create_instance_v1_1_malformed_body_list(self):
+ self._setup_for_create_instance()
+ body = ['string']
+ req = webob.Request.blank('/v1.1/fake/servers')
+ req.method = 'POST'
+ req.body = json.dumps(['string'])
+ req.headers['content-type'] = "application/json"
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 422)
+
+ def test_create_instance_v1_0_malformed_entity(self):
+ req = webob.Request.blank('/v1.0/servers')
+ req.method = 'POST'
+ req.body = json.dumps({'server': 'string'})
+ req.headers['content-type'] = "application/json"
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 400)
+
+ def test_create_instance_v1_0_malformed_body_string(self):
+ req = webob.Request.blank('/v1.0/servers')
+ req.method = 'POST'
+ req.body = 'string'
+ req.headers['content-type'] = "application/json"
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 400)
+
+ def test_create_instance_v1_0_malformed_body_list(self):
+ req = webob.Request.blank('/v1.0/servers')
+ req.method = 'POST'
+ req.body = json.dumps(['string'])
+ req.headers['content-type'] = "application/json"
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 422)
+
def test_update_server_no_body(self):
req = webob.Request.blank('/v1.0/servers/1')
req.method = 'PUT'
diff --git a/nova/tests/fake_network.py b/nova/tests/fake_network.py
index 142206755..febac5e09 100644
--- a/nova/tests/fake_network.py
+++ b/nova/tests/fake_network.py
@@ -16,8 +16,9 @@
# under the License.
from nova import db
+from nova import exception
from nova import flags
-from nova import test
+from nova import utils
from nova.network import manager as network_manager
@@ -64,6 +65,64 @@ class FakeModel(dict):
return self[name]
+class FakeNetworkManager(network_manager.NetworkManager):
+ """This NetworkManager doesn't call the base class so we can bypass all
+ inherited service cruft and just perform unit tests.
+ """
+
+ class FakeDB:
+ def fixed_ip_get_by_instance(self, context, instance_id):
+ return [dict(address='10.0.0.0'), dict(address='10.0.0.1'),
+ dict(address='10.0.0.2')]
+
+ def network_get_by_cidr(self, context, cidr):
+ raise exception.NetworkNotFoundForCidr()
+
+ def network_create_safe(self, context, net):
+ fakenet = dict(net)
+ fakenet['id'] = 999
+ return fakenet
+
+ def network_get_all(self, context):
+ raise exception.NoNetworksFound()
+
+ def virtual_interface_get_all(self, context):
+ floats = [{'address': '172.16.1.1'},
+ {'address': '172.16.1.2'},
+ {'address': '173.16.1.2'}]
+
+ vifs = [{'instance_id': 0,
+ 'fixed_ipv6': '2001:db8::dcad:beff:feef:1',
+ 'fixed_ips': [{'address': '172.16.0.1',
+ 'floating_ips': [floats[0]]}]},
+ {'instance_id': 20,
+ 'fixed_ipv6': '2001:db8::dcad:beff:feef:2',
+ 'fixed_ips': [{'address': '172.16.0.2',
+ 'floating_ips': [floats[1]]}]},
+ {'instance_id': 30,
+ 'fixed_ipv6': '2002:db8::dcad:beff:feef:2',
+ 'fixed_ips': [{'address': '173.16.0.2',
+ 'floating_ips': [floats[2]]}]}]
+ return vifs
+
+ def instance_get_id_to_uuid_mapping(self, context, ids):
+ # NOTE(jkoelker): This is just here until we can rely on UUIDs
+ mapping = {}
+ for id in ids:
+ mapping[id] = str(utils.gen_uuid())
+ return mapping
+
+ def __init__(self):
+ self.db = self.FakeDB()
+ self.deallocate_called = None
+
+ def deallocate_fixed_ip(self, context, address):
+ self.deallocate_called = address
+
+ def _create_fixed_ips(self, context, network_id):
+ pass
+
+
flavor = {'id': 0,
'name': 'fake_flavor',
'memory_mb': 2048,
diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py
index 356412dbf..948c7ad40 100644
--- a/nova/tests/test_compute.py
+++ b/nova/tests/test_compute.py
@@ -21,22 +21,24 @@ Tests For Compute
"""
from nova import compute
-from nova.compute import instance_types
-from nova.compute import manager as compute_manager
-from nova.compute import power_state
-from nova.compute import vm_states
from nova import context
from nova import db
-from nova.db.sqlalchemy import models
-from nova.db.sqlalchemy import api as sqlalchemy_api
from nova import exception
from nova import flags
-import nova.image.fake
from nova import log as logging
from nova import rpc
from nova import test
from nova import utils
+
+from nova.compute import instance_types
+from nova.compute import manager as compute_manager
+from nova.compute import power_state
+from nova.compute import vm_states
+from nova.db.sqlalchemy import models
+from nova.image import fake as fake_image
from nova.notifier import test_notifier
+from nova.tests import fake_network
+
LOG = logging.getLogger('nova.tests.compute')
FLAGS = flags.FLAGS
@@ -74,7 +76,7 @@ class ComputeTestCase(test.TestCase):
def fake_show(meh, context, id):
return {'id': 1, 'properties': {'kernel_id': 1, 'ramdisk_id': 1}}
- self.stubs.Set(nova.image.fake._FakeImageService, 'show', fake_show)
+ self.stubs.Set(fake_image._FakeImageService, 'show', fake_show)
def _create_instance(self, params=None):
"""Create a test instance"""
@@ -1023,190 +1025,19 @@ class ComputeTestCase(test.TestCase):
db.instance_destroy(c, instance_id2)
db.instance_destroy(c, instance_id3)
- def test_get_by_fixed_ip(self):
- """Test getting 1 instance by Fixed IP"""
- c = context.get_admin_context()
- instance_id1 = self._create_instance()
- instance_id2 = self._create_instance({'id': 20})
- instance_id3 = self._create_instance({'id': 30})
-
- vif_ref1 = db.virtual_interface_create(c,
- {'address': '12:34:56:78:90:12',
- 'instance_id': instance_id1,
- 'network_id': 1})
- vif_ref2 = db.virtual_interface_create(c,
- {'address': '90:12:34:56:78:90',
- 'instance_id': instance_id2,
- 'network_id': 1})
-
- db.fixed_ip_create(c,
- {'address': '1.1.1.1',
- 'instance_id': instance_id1,
- 'virtual_interface_id': vif_ref1['id']})
- db.fixed_ip_create(c,
- {'address': '1.1.2.1',
- 'instance_id': instance_id2,
- 'virtual_interface_id': vif_ref2['id']})
-
- # regex not allowed
- instances = self.compute_api.get_all(c,
- search_opts={'fixed_ip': '.*'})
- self.assertEqual(len(instances), 0)
-
- instances = self.compute_api.get_all(c,
- search_opts={'fixed_ip': '1.1.3.1'})
- self.assertEqual(len(instances), 0)
-
- instances = self.compute_api.get_all(c,
- search_opts={'fixed_ip': '1.1.1.1'})
- self.assertEqual(len(instances), 1)
- self.assertEqual(instances[0].id, instance_id1)
-
- instances = self.compute_api.get_all(c,
- search_opts={'fixed_ip': '1.1.2.1'})
- self.assertEqual(len(instances), 1)
- self.assertEqual(instances[0].id, instance_id2)
-
- db.virtual_interface_delete(c, vif_ref1['id'])
- db.virtual_interface_delete(c, vif_ref2['id'])
- db.instance_destroy(c, instance_id1)
- db.instance_destroy(c, instance_id2)
-
- def test_get_all_by_ip_regexp(self):
- """Test searching by Floating and Fixed IP"""
- c = context.get_admin_context()
- instance_id1 = self._create_instance({'display_name': 'woot'})
- instance_id2 = self._create_instance({
- 'display_name': 'woo',
- 'id': 20})
- instance_id3 = self._create_instance({
- 'display_name': 'not-woot',
- 'id': 30})
-
- vif_ref1 = db.virtual_interface_create(c,
- {'address': '12:34:56:78:90:12',
- 'instance_id': instance_id1,
- 'network_id': 1})
- vif_ref2 = db.virtual_interface_create(c,
- {'address': '90:12:34:56:78:90',
- 'instance_id': instance_id2,
- 'network_id': 1})
- vif_ref3 = db.virtual_interface_create(c,
- {'address': '34:56:78:90:12:34',
- 'instance_id': instance_id3,
- 'network_id': 1})
-
- db.fixed_ip_create(c,
- {'address': '1.1.1.1',
- 'instance_id': instance_id1,
- 'virtual_interface_id': vif_ref1['id']})
- db.fixed_ip_create(c,
- {'address': '1.1.2.1',
- 'instance_id': instance_id2,
- 'virtual_interface_id': vif_ref2['id']})
- fix_addr = db.fixed_ip_create(c,
- {'address': '1.1.3.1',
- 'instance_id': instance_id3,
- 'virtual_interface_id': vif_ref3['id']})
- fix_ref = db.fixed_ip_get_by_address(c, fix_addr)
- flo_ref = db.floating_ip_create(c,
- {'address': '10.0.0.2',
- 'fixed_ip_id': fix_ref['id']})
-
- # ends up matching 2nd octet here.. so all 3 match
- instances = self.compute_api.get_all(c,
- search_opts={'ip': '.*\.1'})
- self.assertEqual(len(instances), 3)
-
- instances = self.compute_api.get_all(c,
- search_opts={'ip': '1.*'})
- self.assertEqual(len(instances), 3)
-
- instances = self.compute_api.get_all(c,
- search_opts={'ip': '.*\.1.\d+$'})
- self.assertEqual(len(instances), 1)
- instance_ids = [instance.id for instance in instances]
- self.assertTrue(instance_id1 in instance_ids)
-
- instances = self.compute_api.get_all(c,
- search_opts={'ip': '.*\.2.+'})
- self.assertEqual(len(instances), 1)
- self.assertEqual(instances[0].id, instance_id2)
-
- instances = self.compute_api.get_all(c,
- search_opts={'ip': '10.*'})
- self.assertEqual(len(instances), 1)
- self.assertEqual(instances[0].id, instance_id3)
-
- db.virtual_interface_delete(c, vif_ref1['id'])
- db.virtual_interface_delete(c, vif_ref2['id'])
- db.virtual_interface_delete(c, vif_ref3['id'])
- db.floating_ip_destroy(c, '10.0.0.2')
- db.instance_destroy(c, instance_id1)
- db.instance_destroy(c, instance_id2)
- db.instance_destroy(c, instance_id3)
-
- def test_get_all_by_ipv6_regexp(self):
- """Test searching by IPv6 address"""
-
- c = context.get_admin_context()
- instance_id1 = self._create_instance({'display_name': 'woot'})
- instance_id2 = self._create_instance({
- 'display_name': 'woo',
- 'id': 20})
- instance_id3 = self._create_instance({
- 'display_name': 'not-woot',
- 'id': 30})
-
- vif_ref1 = db.virtual_interface_create(c,
- {'address': '12:34:56:78:90:12',
- 'instance_id': instance_id1,
- 'network_id': 1})
- vif_ref2 = db.virtual_interface_create(c,
- {'address': '90:12:34:56:78:90',
- 'instance_id': instance_id2,
- 'network_id': 1})
- vif_ref3 = db.virtual_interface_create(c,
- {'address': '34:56:78:90:12:34',
- 'instance_id': instance_id3,
- 'network_id': 1})
-
- # This will create IPv6 addresses of:
- # 1: fd00::1034:56ff:fe78:9012
- # 20: fd00::9212:34ff:fe56:7890
- # 30: fd00::3656:78ff:fe90:1234
-
- instances = self.compute_api.get_all(c,
- search_opts={'ip6': '.*1034.*'})
- self.assertEqual(len(instances), 1)
- self.assertEqual(instances[0].id, instance_id1)
-
- instances = self.compute_api.get_all(c,
- search_opts={'ip6': '^fd00.*'})
- self.assertEqual(len(instances), 3)
- instance_ids = [instance.id for instance in instances]
- self.assertTrue(instance_id1 in instance_ids)
- self.assertTrue(instance_id2 in instance_ids)
- self.assertTrue(instance_id3 in instance_ids)
-
- instances = self.compute_api.get_all(c,
- search_opts={'ip6': '^.*12.*34.*'})
- self.assertEqual(len(instances), 2)
- instance_ids = [instance.id for instance in instances]
- self.assertTrue(instance_id2 in instance_ids)
- self.assertTrue(instance_id3 in instance_ids)
-
- db.virtual_interface_delete(c, vif_ref1['id'])
- db.virtual_interface_delete(c, vif_ref2['id'])
- db.virtual_interface_delete(c, vif_ref3['id'])
- db.instance_destroy(c, instance_id1)
- db.instance_destroy(c, instance_id2)
- db.instance_destroy(c, instance_id3)
-
def test_get_all_by_multiple_options_at_once(self):
"""Test searching by multiple options at once"""
c = context.get_admin_context()
- instance_id1 = self._create_instance({'display_name': 'woot'})
+ network_manager = fake_network.FakeNetworkManager()
+ self.stubs.Set(self.compute_api.network_api,
+ 'get_instance_uuids_by_ip_filter',
+ network_manager.get_instance_uuids_by_ip_filter)
+ self.stubs.Set(network_manager.db,
+ 'instance_get_id_to_uuid_mapping',
+ db.instance_get_id_to_uuid_mapping)
+
+ instance_id1 = self._create_instance({'display_name': 'woot',
+ 'id': 0})
instance_id2 = self._create_instance({
'display_name': 'woo',
'id': 20})
@@ -1214,36 +1045,6 @@ class ComputeTestCase(test.TestCase):
'display_name': 'not-woot',
'id': 30})
- vif_ref1 = db.virtual_interface_create(c,
- {'address': '12:34:56:78:90:12',
- 'instance_id': instance_id1,
- 'network_id': 1})
- vif_ref2 = db.virtual_interface_create(c,
- {'address': '90:12:34:56:78:90',
- 'instance_id': instance_id2,
- 'network_id': 1})
- vif_ref3 = db.virtual_interface_create(c,
- {'address': '34:56:78:90:12:34',
- 'instance_id': instance_id3,
- 'network_id': 1})
-
- db.fixed_ip_create(c,
- {'address': '1.1.1.1',
- 'instance_id': instance_id1,
- 'virtual_interface_id': vif_ref1['id']})
- db.fixed_ip_create(c,
- {'address': '1.1.2.1',
- 'instance_id': instance_id2,
- 'virtual_interface_id': vif_ref2['id']})
- fix_addr = db.fixed_ip_create(c,
- {'address': '1.1.3.1',
- 'instance_id': instance_id3,
- 'virtual_interface_id': vif_ref3['id']})
- fix_ref = db.fixed_ip_get_by_address(c, fix_addr)
- flo_ref = db.floating_ip_create(c,
- {'address': '10.0.0.2',
- 'fixed_ip_id': fix_ref['id']})
-
# ip ends up matching 2nd octet here.. so all 3 match ip
# but 'name' only matches one
instances = self.compute_api.get_all(c,
@@ -1251,18 +1052,18 @@ class ComputeTestCase(test.TestCase):
self.assertEqual(len(instances), 1)
self.assertEqual(instances[0].id, instance_id3)
- # ip ends up matching any ip with a '2' in it.. so instance
- # 2 and 3.. but name should only match #2
+ # ip ends up matching any ip with a '1' in the last octet..
+ # so instance 1 and 3.. but name should only match #1
# but 'name' only matches one
instances = self.compute_api.get_all(c,
- search_opts={'ip': '.*2', 'name': '^woo.*'})
+ search_opts={'ip': '.*\.1$', 'name': '^woo.*'})
self.assertEqual(len(instances), 1)
- self.assertEqual(instances[0].id, instance_id2)
+ self.assertEqual(instances[0].id, instance_id1)
# same as above but no match on name (name matches instance_id1
# but the ip query doesn't
instances = self.compute_api.get_all(c,
- search_opts={'ip': '.*2.*', 'name': '^woot.*'})
+ search_opts={'ip': '.*\.2$', 'name': '^woot.*'})
self.assertEqual(len(instances), 0)
# ip matches all 3... ipv6 matches #2+#3...name matches #3
@@ -1273,10 +1074,6 @@ class ComputeTestCase(test.TestCase):
self.assertEqual(len(instances), 1)
self.assertEqual(instances[0].id, instance_id3)
- db.virtual_interface_delete(c, vif_ref1['id'])
- db.virtual_interface_delete(c, vif_ref2['id'])
- db.virtual_interface_delete(c, vif_ref3['id'])
- db.floating_ip_destroy(c, '10.0.0.2')
db.instance_destroy(c, instance_id1)
db.instance_destroy(c, instance_id2)
db.instance_destroy(c, instance_id3)
diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py
index 60d7abd8c..81194e3f9 100644
--- a/nova/tests/test_db_api.py
+++ b/nova/tests/test_db_api.py
@@ -18,6 +18,8 @@
"""Unit tests for the DB API"""
+import datetime
+
from nova import test
from nova import context
from nova import db
@@ -92,6 +94,32 @@ class DbApiTestCase(test.TestCase):
db.instance_destroy(self.context, inst1.id)
result = db.instance_get_all_by_filters(self.context.elevated(), {})
self.assertEqual(2, len(result))
- self.assertEqual(result[0].id, inst2.id)
- self.assertEqual(result[1].id, inst1.id)
- self.assertTrue(result[1].deleted)
+ self.assertIn(inst1.id, [result[0].id, result[1].id])
+ self.assertIn(inst2.id, [result[0].id, result[1].id])
+ if inst1.id == result[0].id:
+ self.assertTrue(result[0].deleted)
+ else:
+ self.assertTrue(result[1].deleted)
+
+ def test_migration_get_all_unconfirmed(self):
+ ctxt = context.get_admin_context()
+
+ # Ensure no migrations are returned.
+ results = db.migration_get_all_unconfirmed(ctxt, 10)
+ self.assertEqual(0, len(results))
+
+ # Ensure one migration older than 10 seconds is returned.
+ updated_at = datetime.datetime(2000, 01, 01, 12, 00, 00)
+ values = {"status": "FINISHED", "updated_at": updated_at}
+ migration = db.migration_create(ctxt, values)
+ results = db.migration_get_all_unconfirmed(ctxt, 10)
+ self.assertEqual(1, len(results))
+ db.migration_update(ctxt, migration.id, {"status": "CONFIRMED"})
+
+ # Ensure the new migration is not returned.
+ updated_at = datetime.datetime.utcnow()
+ values = {"status": "FINISHED", "updated_at": updated_at}
+ migration = db.migration_create(ctxt, values)
+ results = db.migration_get_all_unconfirmed(ctxt, 10)
+ self.assertEqual(0, len(results))
+ db.migration_update(ctxt, migration.id, {"status": "CONFIRMED"})
diff --git a/nova/tests/test_metadata.py b/nova/tests/test_metadata.py
index b06e5c136..2f82132fa 100644
--- a/nova/tests/test_metadata.py
+++ b/nova/tests/test_metadata.py
@@ -19,22 +19,21 @@
"""Tests for the testing the metadata code."""
import base64
-import httplib
import webob
from nova import exception
from nova import test
-from nova import wsgi
from nova.api.ec2 import metadatarequesthandler
from nova.db.sqlalchemy import api
+from nova.tests import fake_network
USER_DATA_STRING = ("This is an encoded string")
ENCODE_USER_DATA_STRING = base64.b64encode(USER_DATA_STRING)
-def return_non_existing_server_by_address(context, address):
+def return_non_existing_server_by_address(context, address, *args, **kwarg):
raise exception.NotFound()
@@ -69,6 +68,10 @@ class MetadataTestCase(test.TestCase):
self.stubs.Set(api, 'instance_get_all_by_filters', instance_get_list)
self.stubs.Set(api, 'instance_get_floating_address', floating_get)
self.app = metadatarequesthandler.MetadataRequestHandler()
+ network_manager = fake_network.FakeNetworkManager()
+ self.stubs.Set(self.app.cc.network_api,
+ 'get_instance_uuids_by_ip_filter',
+ network_manager.get_instance_uuids_by_ip_filter)
def request(self, relative_url):
request = webob.Request.blank(relative_url)
diff --git a/nova/tests/test_network.py b/nova/tests/test_network.py
index 926ea065a..15c179177 100644
--- a/nova/tests/test_network.py
+++ b/nova/tests/test_network.py
@@ -438,55 +438,23 @@ class VlanNetworkTestCase(test.TestCase):
class CommonNetworkTestCase(test.TestCase):
-
- class FakeNetworkManager(network_manager.NetworkManager):
- """This NetworkManager doesn't call the base class so we can bypass all
- inherited service cruft and just perform unit tests.
- """
-
- class FakeDB:
- def fixed_ip_get_by_instance(self, context, instance_id):
- return [dict(address='10.0.0.0'), dict(address='10.0.0.1'),
- dict(address='10.0.0.2')]
-
- def network_get_by_cidr(self, context, cidr):
- raise exception.NetworkNotFoundForCidr()
-
- def network_create_safe(self, context, net):
- fakenet = dict(net)
- fakenet['id'] = 999
- return fakenet
-
- def network_get_all(self, context):
- raise exception.NoNetworksFound()
-
- def __init__(self):
- self.db = self.FakeDB()
- self.deallocate_called = None
-
- def deallocate_fixed_ip(self, context, address):
- self.deallocate_called = address
-
- def _create_fixed_ips(self, context, network_id):
- pass
-
def fake_create_fixed_ips(self, context, network_id):
return None
def test_remove_fixed_ip_from_instance(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
manager.remove_fixed_ip_from_instance(None, 99, '10.0.0.1')
self.assertEquals(manager.deallocate_called, '10.0.0.1')
def test_remove_fixed_ip_from_instance_bad_input(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.assertRaises(exception.FixedIpNotFoundForSpecificInstance,
manager.remove_fixed_ip_from_instance,
None, 99, 'bad input')
def test_validate_cidrs(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
nets = manager.create_networks(None, 'fake', '192.168.0.0/24',
False, 1, 256, None, None, None,
None)
@@ -495,7 +463,7 @@ class CommonNetworkTestCase(test.TestCase):
self.assertTrue('192.168.0.0/24' in cidrs)
def test_validate_cidrs_split_exact_in_half(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
nets = manager.create_networks(None, 'fake', '192.168.0.0/24',
False, 2, 128, None, None, None,
None)
@@ -505,7 +473,7 @@ class CommonNetworkTestCase(test.TestCase):
self.assertTrue('192.168.0.128/25' in cidrs)
def test_validate_cidrs_split_cidr_in_use_middle_of_range(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.mox.StubOutWithMock(manager.db, 'network_get_all')
ctxt = mox.IgnoreArg()
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
@@ -523,7 +491,7 @@ class CommonNetworkTestCase(test.TestCase):
self.assertFalse('192.168.2.0/24' in cidrs)
def test_validate_cidrs_smaller_subnet_in_use(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.mox.StubOutWithMock(manager.db, 'network_get_all')
ctxt = mox.IgnoreArg()
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
@@ -536,7 +504,7 @@ class CommonNetworkTestCase(test.TestCase):
self.assertRaises(ValueError, manager.create_networks, *args)
def test_validate_cidrs_split_smaller_cidr_in_use(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.mox.StubOutWithMock(manager.db, 'network_get_all')
ctxt = mox.IgnoreArg()
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
@@ -553,7 +521,7 @@ class CommonNetworkTestCase(test.TestCase):
self.assertFalse('192.168.2.0/24' in cidrs)
def test_validate_cidrs_split_smaller_cidr_in_use2(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.mox.StubOutWithMock(manager.db, 'network_get_all')
ctxt = mox.IgnoreArg()
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
@@ -569,7 +537,7 @@ class CommonNetworkTestCase(test.TestCase):
self.assertFalse('192.168.2.0/27' in cidrs)
def test_validate_cidrs_split_all_in_use(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.mox.StubOutWithMock(manager.db, 'network_get_all')
ctxt = mox.IgnoreArg()
in_use = [{'id': 1, 'cidr': '192.168.2.9/29'},
@@ -585,14 +553,14 @@ class CommonNetworkTestCase(test.TestCase):
self.assertRaises(ValueError, manager.create_networks, *args)
def test_validate_cidrs_one_in_use(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
args = (None, 'fake', '192.168.0.0/24', False, 2, 256, None, None,
None, None)
# ValueError: network_size * num_networks exceeds cidr size
self.assertRaises(ValueError, manager.create_networks, *args)
def test_validate_cidrs_already_used(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.mox.StubOutWithMock(manager.db, 'network_get_all')
ctxt = mox.IgnoreArg()
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
@@ -604,7 +572,7 @@ class CommonNetworkTestCase(test.TestCase):
self.assertRaises(ValueError, manager.create_networks, *args)
def test_validate_cidrs_too_many(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
args = (None, 'fake', '192.168.0.0/24', False, 200, 256, None, None,
None, None)
# ValueError: Not enough subnets avail to satisfy requested
@@ -612,7 +580,7 @@ class CommonNetworkTestCase(test.TestCase):
self.assertRaises(ValueError, manager.create_networks, *args)
def test_validate_cidrs_split_partial(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
nets = manager.create_networks(None, 'fake', '192.168.0.0/16',
False, 2, 256, None, None, None, None)
returned_cidrs = [str(net['cidr']) for net in nets]
@@ -620,7 +588,7 @@ class CommonNetworkTestCase(test.TestCase):
self.assertTrue('192.168.1.0/24' in returned_cidrs)
def test_validate_cidrs_conflict_existing_supernet(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.mox.StubOutWithMock(manager.db, 'network_get_all')
ctxt = mox.IgnoreArg()
fakecidr = [{'id': 1, 'cidr': '192.168.0.0/8'}]
@@ -634,16 +602,15 @@ class CommonNetworkTestCase(test.TestCase):
def test_create_networks(self):
cidr = '192.168.0.0/24'
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.stubs.Set(manager, '_create_fixed_ips',
self.fake_create_fixed_ips)
args = [None, 'foo', cidr, None, 1, 256, 'fd00::/48', None, None,
None]
- result = manager.create_networks(*args)
self.assertTrue(manager.create_networks(*args))
def test_create_networks_cidr_already_used(self):
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.mox.StubOutWithMock(manager.db, 'network_get_all')
ctxt = mox.IgnoreArg()
fakecidr = [{'id': 1, 'cidr': '192.168.0.0/24'}]
@@ -655,9 +622,124 @@ class CommonNetworkTestCase(test.TestCase):
def test_create_networks_many(self):
cidr = '192.168.0.0/16'
- manager = self.FakeNetworkManager()
+ manager = fake_network.FakeNetworkManager()
self.stubs.Set(manager, '_create_fixed_ips',
self.fake_create_fixed_ips)
args = [None, 'foo', cidr, None, 10, 256, 'fd00::/48', None, None,
None]
self.assertTrue(manager.create_networks(*args))
+
+ def test_get_instance_uuids_by_ip_regex(self):
+ manager = fake_network.FakeNetworkManager()
+ _vifs = manager.db.virtual_interface_get_all(None)
+
+ # Greedy get eveything
+ res = manager.get_instance_uuids_by_ip_filter(None, {'ip': '.*'})
+ self.assertEqual(len(res), len(_vifs))
+
+ # Doesn't exist
+ res = manager.get_instance_uuids_by_ip_filter(None, {'ip': '10.0.0.1'})
+ self.assertFalse(res)
+
+ # Get instance 1
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'ip': '172.16.0.2'})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 1)
+ self.assertEqual(res[0]['instance_id'], _vifs[1]['instance_id'])
+
+ # Get instance 2
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'ip': '173.16.0.2'})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 1)
+ self.assertEqual(res[0]['instance_id'], _vifs[2]['instance_id'])
+
+ # Get instance 0 and 1
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'ip': '172.16.0.*'})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 2)
+ self.assertEqual(res[0]['instance_id'], _vifs[0]['instance_id'])
+ self.assertEqual(res[1]['instance_id'], _vifs[1]['instance_id'])
+
+ # Get instance 1 and 2
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'ip': '17..16.0.2'})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 2)
+ self.assertEqual(res[0]['instance_id'], _vifs[1]['instance_id'])
+ self.assertEqual(res[1]['instance_id'], _vifs[2]['instance_id'])
+
+ def test_get_instance_uuids_by_ipv6_regex(self):
+ manager = fake_network.FakeNetworkManager()
+ _vifs = manager.db.virtual_interface_get_all(None)
+
+ # Greedy get eveything
+ res = manager.get_instance_uuids_by_ip_filter(None, {'ip6': '.*'})
+ self.assertEqual(len(res), len(_vifs))
+
+ # Doesn't exist
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'ip6': '.*1034.*'})
+ self.assertFalse(res)
+
+ # Get instance 1
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'ip6': '2001:.*:2'})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 1)
+ self.assertEqual(res[0]['instance_id'], _vifs[1]['instance_id'])
+
+ # Get instance 2
+ ip6 = '2002:db8::dcad:beff:feef:2'
+ res = manager.get_instance_uuids_by_ip_filter(None, {'ip6': ip6})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 1)
+ self.assertEqual(res[0]['instance_id'], _vifs[2]['instance_id'])
+
+ # Get instance 0 and 1
+ res = manager.get_instance_uuids_by_ip_filter(None, {'ip6': '2001:.*'})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 2)
+ self.assertEqual(res[0]['instance_id'], _vifs[0]['instance_id'])
+ self.assertEqual(res[1]['instance_id'], _vifs[1]['instance_id'])
+
+ # Get instance 1 and 2
+ ip6 = '200.:db8::dcad:beff:feef:2'
+ res = manager.get_instance_uuids_by_ip_filter(None, {'ip6': ip6})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 2)
+ self.assertEqual(res[0]['instance_id'], _vifs[1]['instance_id'])
+ self.assertEqual(res[1]['instance_id'], _vifs[2]['instance_id'])
+
+ def test_get_instance_uuids_by_ip(self):
+ manager = fake_network.FakeNetworkManager()
+ _vifs = manager.db.virtual_interface_get_all(None)
+
+ # No regex for you!
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'fixed_ip': '.*'})
+ self.assertFalse(res)
+
+ # Doesn't exist
+ ip = '10.0.0.1'
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'fixed_ip': ip})
+ self.assertFalse(res)
+
+ # Get instance 1
+ ip = '172.16.0.2'
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'fixed_ip': ip})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 1)
+ self.assertEqual(res[0]['instance_id'], _vifs[1]['instance_id'])
+
+ # Get instance 2
+ ip = '173.16.0.2'
+ res = manager.get_instance_uuids_by_ip_filter(None,
+ {'fixed_ip': ip})
+ self.assertTrue(res)
+ self.assertEqual(len(res), 1)
+ self.assertEqual(res[0]['instance_id'], _vifs[2]['instance_id'])
diff --git a/nova/tests/test_virt_drivers.py b/nova/tests/test_virt_drivers.py
index 440d3401b..8e20e999f 100644
--- a/nova/tests/test_virt_drivers.py
+++ b/nova/tests/test_virt_drivers.py
@@ -177,6 +177,10 @@ class _VirtDriverTestCase(test.TestCase):
self.connection.poll_rescued_instances(10)
@catch_notimplementederror
+ def test_poll_unconfirmed_resizes(self):
+ self.connection.poll_unconfirmed_resizes(10)
+
+ @catch_notimplementederror
def test_migrate_disk_and_power_off(self):
instance_ref = test_utils.get_test_instance()
network_info = test_utils.get_test_network_info()