Skip to content
This repository has been archived by the owner on Apr 7, 2022. It is now read-only.

[1LP][RFR] Automated test_storage_volume_backup_restore tests #10057

Merged
merged 2 commits into from
Apr 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions cfme/storage/volume_backup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from navmazing import NavigateToSibling
from widgetastic.widget import NoSuchElementException
from widgetastic.widget import Text
from widgetastic.widget import TextInput
from widgetastic.widget import View
from widgetastic_patternfly import BootstrapNav
from widgetastic_patternfly import BootstrapSelect
Expand Down Expand Up @@ -132,6 +133,7 @@ def is_displayed(self):
self.entities.breadcrumb.active_location == expected_title)

volume_name = BootstrapSelect(name='volume_id')
restored_volume_name = TextInput(name='name')
save = Button('Save')
reset = Button('Reset')
cancel = Button('cancel')
Expand All @@ -150,14 +152,26 @@ class VolumeBackup(BaseEntity, Taggable):
name = attr.ib()
provider = attr.ib()

def restore(self, name):
def restore(self, name, new_volume=False, from_all_backups=False):
"""Restore the volume backup.

Args:
name: volume name
name: restored volume name
new_volume: Whether to create new volume from backup
from_all_backups: Whether to navigate from All Backups page

"""
view = navigate_to(self, 'Restore')
view.volume_name.fill(name)
if from_all_backups:
view = navigate_to(self.parent, 'All')
view.entities.get_entity(surf_pages=True, name=self.name).ensure_checked()
view.toolbar.configuration.item_select('Restore backup to Cloud Volume',
handle_alert=True)
view = view.browser.create_view(VolumeRestoreView, additional_context={'object': self})
else:
view = navigate_to(self, 'Restore')
view.volume_name.fill('<New Volume>') if new_volume else view.volume_name.fill(name)
if new_volume:
view.restored_volume_name.fill(name)
view.save.click()
view.flash.assert_success_message(f'Restoring Cloud Volume "{self.name}"')

Expand Down
89 changes: 83 additions & 6 deletions cfme/tests/storage/test_volume_backup.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import fauxfactory
import pytest
from wait_for import wait_for

from cfme import test_requirements
from cfme.cloud.provider.openstack import OpenStackProvider
Expand Down Expand Up @@ -103,9 +104,8 @@ def test_storage_volume_backup_delete(backup):
assert not backup.exists


@pytest.mark.manual
@test_requirements.storage
def test_storage_volume_backup_restore(backup):
def test_storage_volume_backup_restore(appliance, backup, provider, request):
"""
Requires:
test_storage_volume_backup[openstack]
Expand All @@ -125,12 +125,82 @@ def test_storage_volume_backup_restore(backup):
1.
2. check in Task whether restored
"""
pass
backup.restore(name=backup.volume, new_volume=False)
backup.refresh()
volumes_collection = appliance.collections.volumes
restored_volume = volumes_collection.instantiate(name=backup.volume, provider=provider)
wait_for(lambda: restored_volume.status == 'available', fail_func=backup.refresh, delay=30,
timeout=600)
Comment on lines +132 to +133
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order for this test to assert properly I think this should be like,

try:
    wait_for(lambda: restored_volume.status == 'available', fail_func=backup.refresh, delay=30,
             timeout=600)
except TimedOutError:
    pytest.fail("Failed waiting for volume to become available")

But I'd consider it optional for now.



@pytest.mark.manual
@test_requirements.storage
def test_storage_volume_backup_restore_from_backup_page(backup):
@pytest.mark.ignore_stream("5.10")
def test_storage_volume_backup_restore_new_volume(appliance, backup, provider, request):
"""
Requires:
test_storage_volume_backup[openstack]

Polarion:
assignee: mmojzis
casecomponent: Cloud
caseimportance: medium
initialEstimate: 1/5h
startsin: 5.7
upstream: yes
testSteps:
1 . Go back to the summary page of the respective volume.
2 . Restore Volume [configuration > Restore from backup of this cloud
volume > select cloud volume backup]
expectedResults:
1.
2. check in Task whether restored
"""
restored_volume_name = fauxfactory.gen_alpha(start="vol_")
backup.restore(name=restored_volume_name, new_volume=True)
backup.refresh()
volumes_collection = appliance.collections.volumes
restored_volume = volumes_collection.instantiate(name=restored_volume_name, provider=provider)
request.addfinalizer(lambda: restored_volume.delete())
wait_for(lambda: restored_volume.status == 'available', fail_func=backup.refresh, delay=30,
timeout=600)


@test_requirements.storage
def test_storage_volume_backup_restore_from_backup_page(appliance, backup, provider, request):
"""
Requires:
test_storage_volume_backup[openstack]

Polarion:
assignee: mmojzis
casecomponent: Cloud
caseimportance: medium
initialEstimate: 1/5h
startsin: 5.9
testSteps:
1. Navigate to Volume Backups [Storage > Block Storage > Volume
Backups]
2. Select respective Volume backups
3. Restore Volume [configuration > Restore backup to cloud volume
4. Select Proper Volume to restore
expectedResults:
1.
2.
3.
4. check in Task whether restored
"""
backup.restore(name=backup.volume, new_volume=False, from_all_backups=True)
backup.refresh()
volumes_collection = appliance.collections.volumes
restored_volume = volumes_collection.instantiate(name=backup.volume, provider=provider)
wait_for(lambda: restored_volume.status == 'available', fail_func=backup.refresh, delay=30,
timeout=600)


@pytest.mark.ignore_stream("5.10")
@test_requirements.storage
def test_storage_volume_backup_restore_new_volume_from_backup_page(appliance, backup, provider,
request):
"""
Requires:
test_storage_volume_backup[openstack]
Expand All @@ -153,4 +223,11 @@ def test_storage_volume_backup_restore_from_backup_page(backup):
3.
4. check in Task whether restored
"""
pass
restored_volume_name = fauxfactory.gen_alpha(start="vol_")
backup.restore(name=restored_volume_name, new_volume=True, from_all_backups=True)
backup.refresh()
volumes_collection = appliance.collections.volumes
restored_volume = volumes_collection.instantiate(name=restored_volume_name, provider=provider)
request.addfinalizer(lambda: restored_volume.delete())
wait_for(lambda: restored_volume.status == 'available', fail_func=backup.refresh, delay=30,
timeout=600)