diff options
| author | Johannes Erdfelt <johannes.erdfelt@rackspace.com> | 2012-11-01 15:53:27 +0000 |
|---|---|---|
| committer | Johannes Erdfelt <johannes.erdfelt@rackspace.com> | 2012-11-06 19:54:44 +0000 |
| commit | b84b7daaf83b8280d4a80ca00c4d5e3783a162db (patch) | |
| tree | 8038d26d28dae83f06757daa92573f104dfd262f /nova/tests | |
| parent | 66a6fdd73f8fd095fa212f515407fd64fdbf805f (diff) | |
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
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/compute/test_compute.py | 42 |
1 files changed, 36 insertions, 6 deletions
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) |
