Merge "Check deleted flag in Instance.create()"

This commit is contained in:
Jenkins 2016-11-28 23:44:05 +00:00 committed by Gerrit Code Review
commit 64eae8dce2
4 changed files with 19 additions and 5 deletions

View File

@ -479,6 +479,9 @@ class Instance(base.NovaPersistentObject, base.NovaObject,
if self.obj_attr_is_set('id'):
raise exception.ObjectActionError(action='create',
reason='already created')
if self.obj_attr_is_set('deleted') and self.deleted:
raise exception.ObjectActionError(action='create',
reason='already deleted')
updates = self.obj_get_changes()
expected_attrs = [attr for attr in INSTANCE_DEFAULT_FIELDS
if attr in updates]

View File

@ -6278,10 +6278,14 @@ class ComputeTestCase(BaseTestCase):
admin_context = context.get_admin_context()
deleted_at = (timeutils.utcnow() -
datetime.timedelta(hours=1, minutes=5))
instance1 = self._create_fake_instance_obj({"deleted_at": deleted_at,
"deleted": True})
instance2 = self._create_fake_instance_obj({"deleted_at": deleted_at,
"deleted": True})
instance1 = self._create_fake_instance_obj()
instance2 = self._create_fake_instance_obj()
timeutils.set_time_override(deleted_at)
instance1.destroy()
instance2.destroy()
timeutils.clear_time_override()
self.flags(running_deleted_instance_timeout=3600,
running_deleted_instance_action=action)

View File

@ -3006,8 +3006,8 @@ class FloatingIPTestCase(test.TestCase):
lambda *args, **kwargs: None)
instance = objects.Instance(context=self.context)
instance.project_id = self.project_id
instance.deleted = True
instance.create()
instance.destroy()
network = db.network_create_safe(self.context.elevated(), {
'project_id': self.project_id,
'host': CONF.host,

View File

@ -1058,6 +1058,13 @@ class _TestInstanceObject(object):
inst2 = objects.Instance.get_by_uuid(self.context, inst1.uuid)
self.assertEqual('foo-host', inst2.host)
def test_create_deleted(self):
inst1 = objects.Instance(context=self.context,
user_id=self.context.user_id,
project_id=self.context.project_id,
deleted=True)
self.assertRaises(exception.ObjectActionError, inst1.create)
def test_create_with_extras(self):
inst = objects.Instance(context=self.context,
uuid=self.fake_instance['uuid'],