summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-10-16 15:31:13 +0000
committerGerrit Code Review <review@openstack.org>2012-10-16 15:31:13 +0000
commitfc31bc4990438619bde8fe7eb0f15afc2bc1ab7e (patch)
tree8d9bab3993713f9ab827dd9d9500df1e867c8218 /nova/tests
parentbff0ee67779eafb4872e1d8ef8d36c311fd2424b (diff)
parent70275a6502d47d70fc006b84af1035138bc16d66 (diff)
Merge "Remove db access for block devices on terminate_instance"
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/compute/test_compute.py41
-rw-r--r--nova/tests/compute/test_rpcapi.py3
-rw-r--r--nova/tests/fake_volume.py2
3 files changed, 41 insertions, 5 deletions
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index 76d0f6fb8..285fd7b22 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -1349,7 +1349,8 @@ class ComputeTestCase(BaseTestCase):
fake_cleanup_volumes)
self.compute._delete_instance(self.context,
- instance=jsonutils.to_primitive(instance))
+ instance=jsonutils.to_primitive(instance),
+ bdms={})
def test_instance_termination_exception_sets_error(self):
"""Test that we handle InstanceTerminationFailure
@@ -1357,7 +1358,7 @@ class ComputeTestCase(BaseTestCase):
"""
instance = self._create_fake_instance()
- def fake_delete_instance(context, instance):
+ def fake_delete_instance(context, instance, bdms):
raise exception.InstanceTerminationFailure(reason='')
self.stubs.Set(self.compute, '_delete_instance',
@@ -2369,13 +2370,17 @@ class ComputeTestCase(BaseTestCase):
self.compute.host
).AndReturn([instance])
+ bdms = []
+
self.mox.StubOutWithMock(self.compute, "_shutdown_instance")
self.compute._shutdown_instance(admin_context,
- instance).AndReturn(None)
+ instance,
+ bdms).AndReturn(None)
self.mox.StubOutWithMock(self.compute, "_cleanup_volumes")
self.compute._cleanup_volumes(admin_context,
- instance['uuid']).AndReturn(None)
+ instance['uuid'],
+ bdms).AndReturn(None)
self.mox.ReplayAll()
self.compute._cleanup_running_deleted_instances(admin_context)
@@ -4502,6 +4507,34 @@ class ComputeAPITestCase(BaseTestCase):
self.stubs.Set(compute_rpcapi.ComputeAPI, 'attach_volume',
fake_rpc_attach_volume)
+ def test_terminate_with_volumes(self):
+ """Make sure that volumes get detached during instance termination"""
+ admin = context.get_admin_context()
+ instance = self._create_fake_instance()
+
+ # Create a volume and attach it to our instance
+ volume_id = db.volume_create(admin, {'size': 1})['id']
+ values = {'instance_uuid': instance['uuid'],
+ 'device_name': '/dev/vdc',
+ 'delete_on_termination': False,
+ 'volume_id': volume_id,
+ }
+ db.block_device_mapping_create(admin, values)
+ db.volume_attached(admin, volume_id, instance["uuid"],
+ "/dev/vdc")
+
+ # Stub out and record whether it gets detached
+ result = {"detached": False}
+
+ def fake_detach(self, context, volume):
+ result["detached"] = volume["id"] == volume_id
+ self.stubs.Set(nova.volume.api.API, "detach", fake_detach)
+
+ # Kill the instance and check that it was detached
+ self.compute.terminate_instance(admin, instance=instance)
+ self.assertTrue(result["detached"])
+
+ def test_inject_network_info(self):
instance = self._create_fake_instance()
self.compute_api.attach_volume(self.context, instance, 1, device=None)
self.assertTrue(called.get('fake_check_attach'))
diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py
index c5a5768c5..304f9adb3 100644
--- a/nova/tests/compute/test_rpcapi.py
+++ b/nova/tests/compute/test_rpcapi.py
@@ -325,7 +325,8 @@ class ComputeRpcAPITestCase(test.TestCase):
def test_terminate_instance(self):
self._test_compute_api('terminate_instance', 'cast',
- instance=self.fake_instance)
+ instance=self.fake_instance, bdms=[],
+ version='2.4')
def test_unpause_instance(self):
self._test_compute_api('unpause_instance', 'cast',
diff --git a/nova/tests/fake_volume.py b/nova/tests/fake_volume.py
index 8093ff06f..37aaa83b4 100644
--- a/nova/tests/fake_volume.py
+++ b/nova/tests/fake_volume.py
@@ -163,6 +163,8 @@ class API(object):
if v['id'] == str(volume_id):
return v
+ raise exception.VolumeNotFound(volume_id=volume_id)
+
def get_all(self, context):
return self.volume_list