diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index bccc590c..a40a3eee 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -713,6 +713,31 @@ class ComputeTestCase(BaseTestCase): self.compute.terminate_instance(self.context, instance['uuid']) + def test_finish_resize_handles_error(self): + """Make sure we don't leave the instance in RESIZE on error""" + + def throw_up(*args, **kwargs): + raise Exception() + + def fake(*args, **kwargs): + pass + + self.stubs.Set(self.compute.driver, 'finish_migration', throw_up) + self.stubs.Set(self.compute.network_api, 'get_instance_nw_info', fake) + context = self.context.elevated() + instance = self._create_fake_instance() + self.compute.prep_resize(context, instance['uuid'], 1) + migration_ref = db.migration_get_by_instance_and_status(context, + instance['uuid'], 'pre-migrating') + + self.assertRaises(Exception, self.compute.finish_resize, + context, instance['uuid'], + int(migration_ref['id']), {}) + + instance = db.instance_get_by_uuid(context, instance['uuid']) + self.assertEqual(instance['vm_state'], vm_states.ERROR) + self.compute.terminate_instance(self.context, instance['uuid']) + def test_resize_instance_notification(self): """Ensure notifications on instance migrate/resize""" instance = self._create_fake_instance() @@ -831,9 +856,9 @@ class ComputeTestCase(BaseTestCase): self.compute.terminate_instance(self.context, instance['uuid']) def test_resize_instance_handles_migration_error(self): - """Ensure vm_state is ERROR when MigrationError occurs""" + """Ensure vm_state is ERROR when error occurs""" def raise_migration_failure(*args): - raise exception.MigrationError(reason='test failure') + raise Exception(reason='test failure') self.stubs.Set(self.compute.driver, 'migrate_disk_and_power_off', raise_migration_failure) @@ -846,9 +871,8 @@ class ComputeTestCase(BaseTestCase): self.compute.prep_resize(context, inst_ref['uuid'], 1) migration_ref = db.migration_get_by_instance_and_status(context, inst_ref['uuid'], 'pre-migrating') - self.compute.resize_instance(context, - inst_ref['uuid'], - migration_ref['id']) + self.assertRaises(Exception, self.compute.resize_instance, + context, inst_ref['uuid'], migration_ref['id']) inst_ref = db.instance_get_by_uuid(context, inst_ref['uuid']) self.assertEqual(inst_ref['vm_state'], vm_states.ERROR) self.compute.terminate_instance(context, inst_ref['uuid'])