Merge "Add assertions to attached volume retype test"

This commit is contained in:
Zuul 2019-05-07 09:04:12 +00:00 committed by Gerrit Code Review
commit 2e11ca3856
2 changed files with 30 additions and 9 deletions

View File

@ -50,7 +50,8 @@ create_get_volume = {
# If it would come as empty array "[]" then,
# those elements can be defined as 'required'.
}
}
},
'os-vol-host-attr:host': {'type': 'string'},
},
'additionalProperties': False,
'required': ['id', 'status', 'displayName', 'availabilityZone',

View File

@ -33,6 +33,9 @@ class TestVolumeMigrateRetypeAttached(manager.ScenarioTest):
* Write to the volume
* Perform a cinder retype --on-demand of the volume to type of backend #2
* Check written content of migrated volume
* Check the type of the volume has been updated.
* Check the volume is still in-use and the migration was successful.
* Check that the same volume is attached to the instance.
"""
credentials = ['primary', 'admin']
@ -78,7 +81,8 @@ class TestVolumeMigrateRetypeAttached(manager.ScenarioTest):
'src_backend': backend_source,
'dst': dest_body['name'],
'dst_backend': backend_dest})
return source_body['name'], dest_body['name']
return ({'name': source_body['name'], 'host': backend_source},
{'name': dest_body['name'], 'host': backend_dest})
def _volume_retype_with_migration(self, volume_id, new_volume_type):
# NOTE: The 'on-demand' migration requires admin operation, so
@ -104,11 +108,11 @@ class TestVolumeMigrateRetypeAttached(manager.ScenarioTest):
# create an instance from volume
LOG.info("Booting instance from volume")
volume_origin = self.create_volume(imageRef=CONF.compute.image_ref,
volume_type=source_type)
volume_id = self.create_volume(imageRef=CONF.compute.image_ref,
volume_type=source_type['name'])['id']
instance = self._boot_instance_from_volume(volume_origin['id'],
keypair, security_group)
instance = self._boot_instance_from_volume(volume_id, keypair,
security_group)
# write content to volume on instance
LOG.info("Setting timestamp in instance %s", instance['id'])
@ -118,9 +122,11 @@ class TestVolumeMigrateRetypeAttached(manager.ScenarioTest):
server=instance)
# retype volume with migration from backend #1 to backend #2
LOG.info("Retyping Volume %s to new type %s", volume_origin['id'],
dest_type)
self._volume_retype_with_migration(volume_origin['id'], dest_type)
LOG.info("Retyping Volume %s to new type %s", volume_id,
dest_type['name'])
# This method calls for the retype of the volume before calling a
# waiter that asserts that the volume type has changed successfully.
self._volume_retype_with_migration(volume_id, dest_type['name'])
# check the content of written file
LOG.info("Getting timestamp in postmigrated instance %s",
@ -129,3 +135,17 @@ class TestVolumeMigrateRetypeAttached(manager.ScenarioTest):
private_key=keypair['private_key'],
server=instance)
self.assertEqual(timestamp, timestamp2)
# Assert that the volume is on the new host, is still in-use and has a
# migration_status of success
volume = self.admin_volumes_client.show_volume(volume_id)['volume']
# dest_type is host@backend, os-vol-host-attr:host is host@backend#type
self.assertIn(dest_type['host'], volume['os-vol-host-attr:host'])
self.assertEqual('in-use', volume['status'])
self.assertEqual('success', volume['migration_status'])
# Assert that the same volume id is attached to the instance, ensuring
# the os-migrate_volume_completion Cinder API has been called.
attached_volumes = self.servers_client.list_volume_attachments(
instance['id'])['volumeAttachments']
self.assertEqual(volume_id, attached_volumes[0]['id'])