tempest/tempest/scenario/test_volume_backup_restore.py
jeremy.zhang d1be501d34 Add status check for creating volume backup
When creating volume backup from volume or snapshot, the status of the
source volume or snapshot will be changed to 'backing-up', and will be
changed to volume or snapshot's original status after the backup
creation finished. So it is necessary to add status check for the source
volume or snapshot to make the tests more robust.

Change-Id: I0add3989e1184012b908c5fab459cda41194dec3
2018-06-19 01:08:28 +00:00

95 lines
3.6 KiB
Python

# Copyright 2018 Red Hat, Inc.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from tempest.common import utils
from tempest.common import waiters
from tempest import config
from tempest.lib import decorators
from tempest.scenario import manager
CONF = config.CONF
class TestVolumeBackupRestore(manager.ScenarioTest):
"""Test cinder backup and restore
This testcase verifies content preservation after backup and restore
operations by booting a server from a restored backup and check the
connectivity to it.
The following is the scenario outline:
1. Create volume from image.
2. Create a backup for the volume.
3. Restore the backup.
4. Boot a server from the restored backup.
5. Create a floating ip.
6. Check server connectivity.
"""
@classmethod
def skip_checks(cls):
super(TestVolumeBackupRestore, cls).skip_checks()
if not CONF.volume_feature_enabled.backup:
raise cls.skipException('Backup is not enable.')
@decorators.idempotent_id('2ce5e55c-4085-43c1-98c6-582525334ad7')
@decorators.attr(type='slow')
@utils.services('compute', 'volume', 'image')
def test_volume_backup_restore(self):
# Create volume from image
img_uuid = CONF.compute.image_ref
volume = self.create_volume(imageRef=img_uuid)
volume_details = self.volumes_client.show_volume(
volume['id'])['volume']
self.assertEqual('true', volume_details['bootable'])
# Create a backup
backup = self.create_backup(volume_id=volume['id'])
waiters.wait_for_volume_resource_status(self.volumes_client,
volume['id'], 'available')
# Restore the backup
restored_volume_id = self.restore_backup(backup['id'])['volume_id']
# Verify the restored backup volume is bootable
restored_volume_info = self.volumes_client.show_volume(
restored_volume_id)['volume']
self.assertEqual('true', restored_volume_info['bootable'])
# Create keypair and security group
keypair = self.create_keypair()
security_group = self._create_security_group()
# Boot a server from the restored backup
bd_map_v2 = [{
'uuid': restored_volume_id,
'source_type': 'volume',
'destination_type': 'volume',
'boot_index': 0}]
server = self.create_server(image_id='',
block_device_mapping_v2=bd_map_v2,
key_name=keypair['name'],
security_groups=[
{'name': security_group['name']}])
# Create a floating ip
floating_ip = self.create_floating_ip(server)
# Check server connectivity
self.check_vm_connectivity(floating_ip['ip'],
username=CONF.validation.image_ssh_user,
private_key=keypair['private_key'],
should_connect=True)