pytest-based selenium tests add volume manage attachments test

test_manage_volume_attachments

Increase wait_for_steady_state_of_volume. Attach/detach can
take quite a long time.

Add wait_for_steady_state_of_volume into the extend_volume
test to wait until extending is done before checking size via SDK.

Change-Id: Ie3b9cf74e7c0a2ffcc3c9bbed1b4d45a84545e8f
This commit is contained in:
Jan Jasek 2024-02-05 19:18:45 +01:00
parent 9395b8da1e
commit 485724209c
1 changed files with 58 additions and 1 deletions

View File

@ -45,7 +45,7 @@ def clear_volume_admin(volume_name, openstack_admin):
def wait_for_steady_state_of_volume(openstack, volume_name):
for attempt in range(10):
for attempt in range(120):
if (openstack.block_storage.find_volume(volume_name).status in
["available", "error", "in-use", "error_restoring",
"error_extending", "error_managing"]):
@ -179,6 +179,7 @@ def test_extend_volume_demo(login, driver, openstack_demo, new_volume_demo,
".btn-primary[value='Extend Volume']").click()
messages = widgets.get_and_dismiss_messages(driver)
assert f'Info: Extending volume: "{new_volume_demo.name}"' in messages
wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name)
assert(openstack_demo.block_storage.find_volume(
new_volume_demo.name).size == 2)
@ -322,6 +323,62 @@ def test_volumes_pagination_demo(login, driver, volume_name,
assert first_page_definition == actual_page1_definition
# Not possible to detach volume from server via OpenstackSDK for
# security reasons. So attach and detach is combined in one test.
def test_manage_volume_attachments(login, driver, openstack_demo,
new_volume_demo, new_instance_demo,
config):
login('user')
url = '/'.join((
config.dashboard.dashboard_url,
'project',
'volumes',
))
driver.get(url)
rows = driver.find_elements_by_css_selector(
f"table#volumes tr[data-display='{new_volume_demo.name}']"
)
assert len(rows) == 1
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Manage Attachments")
attach_to_instance_form = driver.find_element_by_css_selector(
".modal-content form[id='attach_volume_form']")
widgets.select_from_dropdown(
attach_to_instance_form,
f"{new_instance_demo.name} ({new_instance_demo.id})")
attach_to_instance_form.find_element_by_css_selector(
".btn-primary[value='Attach Volume']").click()
messages = widgets.get_and_dismiss_messages(driver)
assert(f"Info: Attaching volume {new_volume_demo.name} to instance "
f"{new_instance_demo.name} on /dev/vdb." in messages)
wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name)
assert(openstack_demo.block_storage.find_volume(
new_volume_demo.id).attachments[0]['server_id'] ==
new_instance_demo.id)
# Wait for Edit Volume appear for required row.
row = widgets.find_already_visible_element_by_xpath(
f".//tr[@data-display='{new_volume_demo.name}']/td[@class"
f"='actions_column']/div/a[normalize-space()='Edit Volume']", driver)
actions_column = row.find_element_by_xpath(
".//ancestor::tr/td[contains(@class,'actions_column')]")
widgets.select_from_dropdown(actions_column, "Manage Attachments")
rows_attachments = driver.find_elements_by_css_selector(
f"table#attachments tr[data-display='Volume {new_volume_demo.name} "
f"on instance {new_instance_demo.name}']")
assert len(rows_attachments) == 1
rows_attachments[0].find_element_by_css_selector(
"td.actions_column").click()
driver.find_element_by_xpath(
".//a[normalize-space()='Detach Volume']").click()
messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Detaching Volume: Volume {new_volume_demo.name} "
f"on instance {new_instance_demo.name}" in messages)
wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name)
assert(openstack_demo.block_storage.find_volume(
new_volume_demo.id).attachments == [])
# Admin tests