From b84b7daaf83b8280d4a80ca00c4d5e3783a162db Mon Sep 17 00:00:00 2001 From: Johannes Erdfelt Date: Thu, 1 Nov 2012 15:53:27 +0000 Subject: Fix quota updating during soft delete and restore Fixes bug 1075716 Quotas were not properly updated when soft deletes were enabled. This patch fixes quotas for soft deletes and restores. Change-Id: I77fd3ff76caa9eba3e2180c1abcfb390ea7857d6 --- nova/tests/compute/test_compute.py | 42 ++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index be3eeb601..00f2ceb7a 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -3229,7 +3229,12 @@ class ComputeAPITestCase(BaseTestCase): db.instance_destroy(self.context, instance['uuid']) def test_delete_soft(self): - instance, instance_uuid = self._run_instance() + instance, instance_uuid = self._run_instance(params={ + 'host': FLAGS.host}) + + self.mox.StubOutWithMock(nova.quota.QUOTAS, 'commit') + nova.quota.QUOTAS.commit(mox.IgnoreArg(), mox.IgnoreArg()) + self.mox.ReplayAll() self.compute_api.soft_delete(self.context, instance) @@ -3239,10 +3244,11 @@ class ComputeAPITestCase(BaseTestCase): db.instance_destroy(self.context, instance['uuid']) def test_delete_soft_fail(self): - instance, instance_uuid = self._run_instance() - + instance, instance_uuid = self._run_instance(params={ + 'host': FLAGS.host}) instance = db.instance_update(self.context, instance_uuid, {'disable_terminate': True}) + self.compute_api.soft_delete(self.context, instance) instance = db.instance_get_by_uuid(self.context, instance_uuid) @@ -3250,6 +3256,27 @@ class ComputeAPITestCase(BaseTestCase): db.instance_destroy(self.context, instance['uuid']) + def test_delete_soft_rollback(self): + instance, instance_uuid = self._run_instance(params={ + 'host': FLAGS.host}) + + self.mox.StubOutWithMock(nova.quota.QUOTAS, 'rollback') + nova.quota.QUOTAS.rollback(mox.IgnoreArg(), mox.IgnoreArg()) + self.mox.ReplayAll() + + def fail(*args, **kwargs): + raise test.TestingException() + self.stubs.Set(self.compute_api.compute_rpcapi, 'soft_delete_instance', + fail) + + self.assertRaises(test.TestingException, self.compute_api.soft_delete, + self.context, instance) + + instance = db.instance_get_by_uuid(self.context, instance_uuid) + self.assertEqual(instance['task_state'], task_states.SOFT_DELETING) + + db.instance_destroy(self.context, instance['uuid']) + def test_force_delete(self): """Ensure instance can be deleted after a soft delete""" instance = jsonutils.to_primitive(self._create_fake_instance(params={ @@ -3344,9 +3371,8 @@ class ComputeAPITestCase(BaseTestCase): def test_restore(self): """Ensure instance can be restored from a soft delete""" - instance = jsonutils.to_primitive(self._create_fake_instance()) - instance_uuid = instance['uuid'] - self.compute.run_instance(self.context, instance=instance) + instance, instance_uuid = self._run_instance(params={ + 'host': FLAGS.host}) instance = db.instance_get_by_uuid(self.context, instance_uuid) self.compute_api.soft_delete(self.context, instance) @@ -3359,6 +3385,10 @@ class ComputeAPITestCase(BaseTestCase): {'vm_state': vm_states.SOFT_DELETED, 'task_state': None}) + self.mox.StubOutWithMock(nova.quota.QUOTAS, 'commit') + nova.quota.QUOTAS.commit(mox.IgnoreArg(), mox.IgnoreArg()) + self.mox.ReplayAll() + self.compute_api.restore(self.context, instance) instance = db.instance_get_by_uuid(self.context, instance_uuid) -- cgit