Merge "Fix: Restore output 'VolumeBackupsRestore' object is not iterable"
This commit is contained in:
commit
3599ebe933
@ -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
|
||||||
|
|
||||||
|
58
openstackclient/tests/functional/volume/v2/test_backup.py
Normal file
58
openstackclient/tests/functional/volume/v2/test_backup.py
Normal 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)
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
Loading…
Reference in New Issue
Block a user