summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-02-05 01:26:25 +0000
committerGerrit Code Review <review@openstack.org>2013-02-05 01:26:25 +0000
commitf9eb7ca2ad7828c9b5a0790718d48a69b829658a (patch)
tree713f0cb05a126aa9b017227199156167e21d8aa0 /nova/tests
parent9fbc5688dcbb2cad6258a38ecd54fe0462af2fb4 (diff)
parent064fefb810eab07d4ddde3dd50537a6236567423 (diff)
Merge "Adds evacuate method to compute.api"
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/compute/test_compute.py101
-rw-r--r--nova/tests/compute/test_compute_cells.py3
2 files changed, 104 insertions, 0 deletions
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index b5a8b91a2..a745a8874 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -5933,6 +5933,107 @@ class ComputeAPITestCase(BaseTestCase):
db.instance_destroy(self.context, instance['uuid'])
+ def test_evacuate(self):
+ instance = jsonutils.to_primitive(self._create_fake_instance())
+ instance_uuid = instance['uuid']
+ instance = db.instance_get_by_uuid(self.context, instance_uuid)
+ self.assertEqual(instance['task_state'], None)
+
+ def fake_service_is_up(*args, **kwargs):
+ return False
+
+ self.stubs.Set(self.compute_api.servicegroup_api, 'service_is_up',
+ fake_service_is_up)
+ self.compute_api.evacuate(self.context.elevated(),
+ instance,
+ host='fake_dest_host',
+ on_shared_storage=True,
+ admin_password=None)
+
+ instance = db.instance_get_by_uuid(self.context, instance_uuid)
+ self.assertEqual(instance['task_state'], task_states.REBUILDING)
+
+ db.instance_destroy(self.context, instance['uuid'])
+
+ def test_fail_evacuate_from_non_existing_host(self):
+ inst = {}
+ inst['vm_state'] = vm_states.ACTIVE
+ inst['image_ref'] = FAKE_IMAGE_REF
+ inst['reservation_id'] = 'r-fakeres'
+ inst['launch_time'] = '10'
+ inst['user_id'] = self.user_id
+ inst['project_id'] = self.project_id
+ inst['host'] = 'fake_host'
+ inst['node'] = NODENAME
+ type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
+ inst['instance_type_id'] = type_id
+ inst['ami_launch_index'] = 0
+ inst['memory_mb'] = 0
+ inst['vcpus'] = 0
+ inst['root_gb'] = 0
+ inst['ephemeral_gb'] = 0
+ inst['architecture'] = 'x86_64'
+ inst['os_type'] = 'Linux'
+
+ instance = jsonutils.to_primitive(db.instance_create(self.context,
+ inst))
+ instance_uuid = instance['uuid']
+ instance = db.instance_get_by_uuid(self.context, instance_uuid)
+ self.assertEqual(instance['task_state'], None)
+
+ self.assertRaises(exception.ComputeHostNotFound,
+ self.compute_api.evacuate, self.context.elevated(), instance,
+ host='fake_dest_host', on_shared_storage=True,
+ admin_password=None)
+
+ db.instance_destroy(self.context, instance['uuid'])
+
+ def test_fail_evacuate_from_running_host(self):
+ instance = jsonutils.to_primitive(self._create_fake_instance())
+ instance_uuid = instance['uuid']
+ instance = db.instance_get_by_uuid(self.context, instance_uuid)
+ self.assertEqual(instance['task_state'], None)
+
+ def fake_service_is_up(*args, **kwargs):
+ return True
+
+ self.stubs.Set(self.compute_api.servicegroup_api, 'service_is_up',
+ fake_service_is_up)
+
+ self.assertRaises(exception.ComputeServiceUnavailable,
+ self.compute_api.evacuate, self.context.elevated(), instance,
+ host='fake_dest_host', on_shared_storage=True,
+ admin_password=None)
+
+ db.instance_destroy(self.context, instance['uuid'])
+
+ def test_fail_evacuate_instance_in_wrong_state(self):
+ instances = [
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'vm_state': vm_states.BUILDING})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'vm_state': vm_states.PAUSED})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'vm_state': vm_states.SUSPENDED})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'vm_state': vm_states.RESCUED})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'vm_state': vm_states.RESIZED})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'vm_state': vm_states.SOFT_DELETED})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'vm_state': vm_states.DELETED})),
+ jsonutils.to_primitive(self._create_fake_instance(
+ {'vm_state': vm_states.ERROR}))
+ ]
+
+ for instance in instances:
+ self.assertRaises(exception.InstanceInvalidState,
+ self.compute_api.evacuate, self.context, instance,
+ host='fake_dest_host', on_shared_storage=True,
+ admin_password=None)
+ db.instance_destroy(self.context, instance['uuid'])
+
def fake_rpc_method(context, topic, msg, do_cast=True):
pass
diff --git a/nova/tests/compute/test_compute_cells.py b/nova/tests/compute/test_compute_cells.py
index df78c37f3..8ba35e033 100644
--- a/nova/tests/compute/test_compute_cells.py
+++ b/nova/tests/compute/test_compute_cells.py
@@ -168,6 +168,9 @@ class CellsComputeAPITestCase(test_compute.ComputeAPITestCase):
self.skipTest("This test is failing due to TypeError: "
"detach_volume() takes exactly 3 arguments (4 given).")
+ def test_evacuate(self):
+ self.skipTest("Test is incompatible with cells.")
+
class CellsComputePolicyTestCase(test_compute.ComputePolicyTestCase):
def setUp(self):