From 485724209cb3c80b0573f50e2c4e57a9fa163954 Mon Sep 17 00:00:00 2001 From: Jan Jasek Date: Mon, 5 Feb 2024 19:18:45 +0100 Subject: [PATCH] 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 --- .../test/selenium/integration/test_volumes.py | 59 ++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/openstack_dashboard/test/selenium/integration/test_volumes.py b/openstack_dashboard/test/selenium/integration/test_volumes.py index bf39e794a7..3d8b8264b1 100644 --- a/openstack_dashboard/test/selenium/integration/test_volumes.py +++ b/openstack_dashboard/test/selenium/integration/test_volumes.py @@ -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