Add some testing for flavor migrations with deleted things

This just tries to further cover the migrate_flavor_data() method with
some additional scenarios of deleted instances, deleted system metadata, etc.

Change-Id: I433dc4f3791b39b2f6d6ee4d197057257be947e1
Related-Bug: #1447132
This commit is contained in:
Dan Smith 2015-04-23 12:47:20 -07:00
parent de8d19dec1
commit 3b6a6b0da8
1 changed files with 43 additions and 0 deletions

View File

@ -7665,6 +7665,49 @@ class FlavorMigrationTestCase(test.TestCase):
self.assertIsNotNone(extra)
self.assertIsNotNone(extra.flavor)
def test_migrate_flavor_with_deleted_things(self):
ctxt = context.get_admin_context()
flavor = flavors.get_default_flavor()
sysmeta = flavors.save_flavor_info({}, flavor)
# Instance with some deleted metadata bits. We create
# with a flavor, then change one of the keys so that
# we end up with a soft-deleted row for that value.
values = {'uuid': str(stdlib_uuid.uuid4()),
'system_metadata': sysmeta,
}
inst1 = db.instance_create(ctxt, values)
_sysmeta = dict(sysmeta, instance_type_id=123)
db.instance_system_metadata_update(ctxt, inst1.uuid,
_sysmeta, True)
# Deleted instance. Without a full flavor in sysmeta,
# if this is hit in the migration, we'll explode trying
# to construct the full flavor.
values = {'uuid': str(stdlib_uuid.uuid4()),
'system_metadata': sysmeta,
}
inst2 = db.instance_create(ctxt, values)
inst2.soft_delete(session=None)
# Instance that has only deleted flavor metadata. This
# looks like an instance that previously had flavor stuff
# in sysmeta, but has since been converted. Since extra.flavor
# is not a legitimate structure, we'll explode if the migration
# code tries to hit this.
values = {'uuid': str(stdlib_uuid.uuid4()),
'system_metadata': {'instance_type_id': '123'},
'extra': {'flavor': 'foobar'},
}
inst3 = db.instance_create(ctxt, values)
db.instance_system_metadata_update(ctxt, inst3.uuid,
{'foo': 'bar'},
True)
match, done = db.migrate_flavor_data(ctxt, None, {})
self.assertEqual(1, match)
self.assertEqual(1, done)
class ArchiveTestCase(test.TestCase):