Merge "Fix: Restore output 'VolumeBackupsRestore' object is not iterable"

This commit is contained in:
Zuul 2019-02-28 17:52:37 +00:00 committed by Gerrit Code Review
commit 3599ebe933
4 changed files with 67 additions and 5 deletions

View File

@ -166,11 +166,11 @@
s-container: false s-container: false
s-object: false s-object: false
s-proxy: false s-proxy: false
# As swift is not available for this job, c-backup service won't be functional. # As swift is not available for this job, c-bak service won't be functional.
# The backup related tests can be handled by other jobs having swift enabled. # The backup related tests can be handled by other jobs having swift enabled.
# The backup service along with swift services can be enabled once swift is # The backup service along with swift services can be enabled once swift is
# compatible with py3 # compatible with py3
c-backup: false c-bak: false
tox_envlist: functional tox_envlist: functional
tox_install_siblings: true tox_install_siblings: true

View File

@ -0,0 +1,58 @@
# 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.
import json
import uuid
from openstackclient.tests.functional.volume.v2 import common
class VolumeBackupTests(common.BaseVolumeTests):
"""Functional tests for volume backups. """
def setUp(self):
super(VolumeBackupTests, self).setUp()
self.backup_enabled = False
serv_list = json.loads(self.openstack('volume service list -f json'))
for service in serv_list:
if service['Binary'] == 'cinder-backup':
if service['Status'] == 'enabled':
self.backup_enabled = True
def test_volume_backup_restore(self):
"""Test restore backup"""
if not self.backup_enabled:
self.skipTest('Backup service is not enabled')
vol_id = uuid.uuid4().hex
# create a volume
json.loads(self.openstack(
'volume create -f json ' +
'--size 1 ' +
vol_id
))
# create a backup
backup = json.loads(self.openstack(
'volume backup create -f json ' +
vol_id
))
self.wait_for_status("volume", vol_id, "available")
self.wait_for_status("backup", backup['id'], "available")
# restore the backup
backup_restored = json.loads(self.openstack(
'volume backup restore -f json %s %s'
% (backup['id'], vol_id)))
self.assertEqual(backup_restored['backup_id'], backup['id'])
self.wait_for_status("backup", backup['id'], "available")
self.wait_for_status("volume", backup_restored['volume_id'],
"available")
self.addCleanup(self.openstack, 'volume delete %s' % vol_id)

View File

@ -367,7 +367,9 @@ class TestBackupRestore(TestBackup):
self.backups_mock.get.return_value = self.backup self.backups_mock.get.return_value = self.backup
self.volumes_mock.get.return_value = self.volume self.volumes_mock.get.return_value = self.volume
self.restores_mock.restore.return_value = None self.restores_mock.restore.return_value = (
volume_fakes.FakeVolume.create_one_volume(
{'id': self.volume['id']}))
# Get the command object to mock # Get the command object to mock
self.cmd = backup.RestoreVolumeBackup(self.app, None) self.cmd = backup.RestoreVolumeBackup(self.app, None)
@ -385,7 +387,7 @@ class TestBackupRestore(TestBackup):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.restores_mock.restore.assert_called_with(self.backup.id, self.restores_mock.restore.assert_called_with(self.backup.id,
self.backup.volume_id) self.backup.volume_id)
self.assertIsNone(result) self.assertIsNotNone(result)
class TestBackupSet(TestBackup): class TestBackupSet(TestBackup):

View File

@ -319,7 +319,9 @@ class RestoreVolumeBackup(command.ShowOne):
backup = utils.find_resource(volume_client.backups, parsed_args.backup) backup = utils.find_resource(volume_client.backups, parsed_args.backup)
destination_volume = utils.find_resource(volume_client.volumes, destination_volume = utils.find_resource(volume_client.volumes,
parsed_args.volume) parsed_args.volume)
return volume_client.restores.restore(backup.id, destination_volume.id) backup = volume_client.restores.restore(backup.id,
destination_volume.id)
return zip(*sorted(six.iteritems(backup._info)))
class RestoreBackup(RestoreVolumeBackup): class RestoreBackup(RestoreVolumeBackup):