diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-10-16 15:31:13 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-10-16 15:31:13 +0000 |
| commit | fc31bc4990438619bde8fe7eb0f15afc2bc1ab7e (patch) | |
| tree | 8d9bab3993713f9ab827dd9d9500df1e867c8218 /nova/tests | |
| parent | bff0ee67779eafb4872e1d8ef8d36c311fd2424b (diff) | |
| parent | 70275a6502d47d70fc006b84af1035138bc16d66 (diff) | |
Merge "Remove db access for block devices on terminate_instance"
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/compute/test_compute.py | 41 | ||||
| -rw-r--r-- | nova/tests/compute/test_rpcapi.py | 3 | ||||
| -rw-r--r-- | nova/tests/fake_volume.py | 2 |
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 |
