summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-01-09 02:30:25 +0000
committerGerrit Code Review <review@openstack.org>2013-01-09 02:30:25 +0000
commit9026553e2f6af93fa8a15dbb9dd452f73d09ac1d (patch)
treeb1918359cfab380c382f36e4ad970cedcb0f3cac /nova/tests
parentdb3da2d95626ed25ed8fc925662a5a17dc7d32a2 (diff)
parent6fc00d34651858308c5b08fdabe8a0b9ce663e26 (diff)
Merge "Adds to manager init_host validation for instances location"
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/compute/test_compute.py143
-rw-r--r--nova/tests/compute/test_compute_utils.py94
2 files changed, 237 insertions, 0 deletions
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index 9d8114ea2..190503e86 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -3110,6 +3110,149 @@ class ComputeTestCase(BaseTestCase):
self.assertEqual(timeouts.count(10), 10)
self.assertTrue(None in timeouts)
+ def test_init_host_with_evacuated_instances_uuid_list(self):
+ # creating testdata
+ c = context.get_admin_context()
+
+ # instances in central db
+ instances = [
+ # those are still related to this host
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'host': self.compute.host})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'host': self.compute.host})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'host': self.compute.host}))
+ ]
+
+ # those are already been evacuated to other host
+ evacuated_instance = self._create_fake_instance({'host': 'otherhost'})
+
+ # creating mocks
+ self.mox.StubOutWithMock(self.compute.driver, 'init_host')
+
+ self.compute.driver.init_host(host=self.compute.host)
+
+ def fake_get_admin_context():
+ return c
+
+ def fake_all(*args, **kwargs):
+ pass
+
+ def fake_list_instance_uuids():
+ return [
+ # those are still related to this host
+ instances[0]['uuid'],
+ instances[1]['uuid'],
+ instances[2]['uuid'],
+ # and this one already been evacuated to other host
+ evacuated_instance['uuid']
+ ]
+
+ def fake_destroy(instance, nw, bdi, destroyDisks):
+ self.assertFalse(destroyDisks)
+ self.assertEqual(instance['uuid'], evacuated_instance['uuid'])
+
+ self.stubs.Set(nova.context,
+ 'get_admin_context',
+ fake_get_admin_context)
+ self.stubs.Set(self.compute.driver, 'filter_defer_apply_on', fake_all)
+ self.stubs.Set(self.compute.driver,
+ 'list_instance_uuids',
+ fake_list_instance_uuids)
+ self.stubs.Set(self.compute, '_get_instance_nw_info', fake_all)
+ self.stubs.Set(self.compute, '_get_instance_volume_block_device_info',
+ fake_all)
+ self.stubs.Set(self.compute.driver, 'destroy', fake_destroy)
+ self.stubs.Set(self.compute, '_legacy_nw_info', fake_all)
+ self.stubs.Set(self.compute, '_init_instance', fake_all)
+
+ self.stubs.Set(self.compute.driver, 'filter_defer_apply_off', fake_all)
+ self.stubs.Set(self.compute, '_report_driver_status', fake_all)
+ self.stubs.Set(self.compute, 'publish_service_capabilities', fake_all)
+ # start test
+ self.mox.ReplayAll()
+ self.compute.init_host()
+
+ db.instance_destroy(c, evacuated_instance['uuid'])
+ for instance in instances:
+ db.instance_destroy(c, instance['uuid'])
+
+ def test_init_host_with_evacuated_instances_names_list(self):
+ # creating testdata
+ c = context.get_admin_context()
+
+ # instances in central db
+ instances = [
+ # those are still related to this host
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'host': self.compute.host})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'host': self.compute.host})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'host': self.compute.host}))
+ ]
+
+ # those are already been evacuated to other host
+ evacuated_instance = self._create_fake_instance({'host': 'otherhost'})
+
+ # creating mocks
+ self.mox.StubOutWithMock(self.compute.driver, 'init_host')
+
+ self.compute.driver.init_host(host=self.compute.host)
+
+ def fake_get_admin_context():
+ return c
+
+ def fake_all(*args, **kwargs):
+ pass
+
+ def fake_list_instances():
+ return [
+ # those are still related to this host
+ CONF.instance_name_template % instances[0]['id'],
+ CONF.instance_name_template % instances[1]['id'],
+ CONF.instance_name_template % instances[2]['id'],
+ # and this one already been evacuated to other host
+ CONF.instance_name_template % evacuated_instance['id']
+ ]
+
+ def fake_list_instance_uuids():
+ raise NotImplementedError()
+
+ def fake_destroy(instance, nw, bdi, destroyDisks):
+ self.assertFalse(destroyDisks)
+ self.assertEqual(instance['uuid'], evacuated_instance['uuid'])
+
+ self.stubs.Set(nova.context,
+ 'get_admin_context',
+ fake_get_admin_context)
+ self.stubs.Set(self.compute.driver, 'filter_defer_apply_on', fake_all)
+ self.stubs.Set(self.compute.driver,
+ 'list_instances',
+ fake_list_instances)
+ self.stubs.Set(self.compute.driver,
+ 'list_instance_uuids',
+ fake_list_instance_uuids)
+
+ self.stubs.Set(self.compute, '_get_instance_nw_info', fake_all)
+ self.stubs.Set(self.compute, '_get_instance_volume_block_device_info',
+ fake_all)
+ self.stubs.Set(self.compute.driver, 'destroy', fake_destroy)
+ self.stubs.Set(self.compute, '_legacy_nw_info', fake_all)
+ self.stubs.Set(self.compute, '_init_instance', fake_all)
+
+ self.stubs.Set(self.compute.driver, 'filter_defer_apply_off', fake_all)
+ self.stubs.Set(self.compute, '_report_driver_status', fake_all)
+ self.stubs.Set(self.compute, 'publish_service_capabilities', fake_all)
+ # start test
+ self.mox.ReplayAll()
+ self.compute.init_host()
+
+ db.instance_destroy(c, evacuated_instance['uuid'])
+ for instance in instances:
+ db.instance_destroy(c, instance['uuid'])
+
class ComputeAPITestCase(BaseTestCase):
diff --git a/nova/tests/compute/test_compute_utils.py b/nova/tests/compute/test_compute_utils.py
index 5acc1cc53..bdd42d4f1 100644
--- a/nova/tests/compute/test_compute_utils.py
+++ b/nova/tests/compute/test_compute_utils.py
@@ -390,3 +390,97 @@ class MetadataToDictTestCase(test.TestCase):
def test_metadata_to_dict_empty(self):
self.assertEqual(compute_utils.metadata_to_dict([]), {})
+
+
+class ParseDecimalIDTestCase(test.TestCase):
+
+ def setUp(self):
+ super(ParseDecimalIDTestCase, self).setUp()
+ self.context = context.RequestContext('fake', 'fake')
+
+ self.templates = [
+ CONF.instance_name_template,
+ 'instance-%08x',
+ 'instance-%08o',
+ 'instance-%08d',
+ 'instance-%04x',
+ 'instance-%04o',
+ 'instance-%04d',
+ 'instance-%x',
+ 'instance-%o',
+ 'instance-%d',
+ 'james-%07x-bond',
+ 'james-%07o-bond',
+ 'james-%07d-bond',
+ 'xxxx%xxxx',
+ 'oooo%oooo',
+ 'dddd%dddd',
+ '%02x',
+ '%02o',
+ '%02d',
+ '%x',
+ '%o',
+ '%d',
+ '%07x-bond',
+ '%07o-bond',
+ '%07d-bond',
+ '123%xxxx',
+ '123%oooo',
+ '123%dddd',
+ '007%02x',
+ '007%02o',
+ '007%02d',
+ '42%x',
+ '42%o',
+ '42%d',
+ '700%07x007',
+ '700%07o007',
+ '700%07d007']
+
+ self.ids = [
+ 1,
+ 5,
+ 10,
+ 42,
+ 90,
+ 100,
+ 256,
+ 500,
+ 1000,
+ 2500,
+ 19294,
+ 100500,
+ 21093404
+ ]
+
+ def _validate_id(self, template, name):
+ return compute_utils.parse_decimal_id(template, name)
+
+ def test_name_template_based(self):
+ for template in self.templates:
+ for id in self.ids:
+ self.assertEqual(id, self._validate_id(template,
+ template % id))
+
+ def test_name_not_template_based(self):
+
+ for template in self.templates:
+ for id in self.ids:
+ name = template % id
+
+ self.assertEqual(-1, self._validate_id(template,
+ 'n%s' % name))
+ self.assertEqual(-1, self._validate_id(template,
+ '%sw' % name))
+ self.assertEqual(-1, self._validate_id(template,
+ 'reg%s' % name))
+ self.assertEqual(-1, self._validate_id(template,
+ '%sex' % name))
+ self.assertEqual(-1, self._validate_id(template, '%s%s%s' % (
+ name[:1],
+ 'abr',
+ name[-1:])))
+ self.assertEqual(-1, self._validate_id(template, '%s%s%s' % (
+ name[:1],
+ 'qwer23456ert',
+ name[-1:])))