pytest-based tests individual timeout for message check

Until now we have used implicit timeout for message checking.
It is enough for the majority of the cases. But in cases of
overloaded deployment and more consuming actions (like manage
volume attachments) this timeout is enough for all the actions
except for messages so individual message timeout (adjustable
through horizon.conf) seems to be the best solution.

Change-Id: I6e43cdfa9fc02c1346b5a8228caacaf154e20ba3
Signed-off-by: Jan Jasek <jjasek@redhat.com>
This commit is contained in:
Jan Jasek
2025-07-30 11:54:06 +02:00
parent 049fdb8b47
commit efdf40fb46
25 changed files with 110 additions and 107 deletions

View File

@@ -108,9 +108,9 @@ AvailableServiceGroup = [
]
SeleniumGroup = [
cfg.FloatOpt(
'message_implicit_wait',
default=0.1,
cfg.IntOpt(
'message_wait',
default=60,
help='Timeout in seconds to wait for message confirmation modal'),
cfg.IntOpt(
'implicit_wait',

View File

@@ -14,8 +14,8 @@ help_url=https://docs.openstack.org/
[selenium]
# Timeout in seconds to wait for message confirmation modal
# (float value)
message_implicit_wait=3
# (integer value)
message_wait=60
# Timeout in seconds to wait for a page to become available
# (integer value)

View File

@@ -34,6 +34,7 @@ class Session:
self.current_user = None
self.current_project = None
self.driver = driver
self.config = config
self.credentials = {
'user': (
config.identity.username,
@@ -82,7 +83,7 @@ class Session:
selection = project_element.find_element_by_xpath(
f'.//*[normalize-space()="{project}"]')
selection.click()
widgets.get_and_dismiss_messages(self.driver)
widgets.get_and_dismiss_messages(self.driver, self.config)
self.current_project = self.driver.find_element_by_xpath(
self.project_name_xpath).text

View File

@@ -64,7 +64,7 @@ def test_update_compute_defaults(login, driver, openstack_admin, config,
defaults_form.find_element_by_id("id_cores").clear()
defaults_form.find_element_by_id("id_cores").send_keys(number_of_cores)
defaults_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert 'Success: Default quotas updated.' in messages
new_quotas = openstack_admin.compute.get(
"/os-quota-class-sets/default").json()
@@ -93,7 +93,7 @@ def test_update_volume_defaults(login, driver, openstack_admin, config,
defaults_form.find_element_by_id("id_snapshots").send_keys(
number_of_snapshots)
defaults_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert 'Success: Default quotas updated.' in messages
new_quotas = openstack_admin.block_storage.get(
"/os-quota-class-sets/default").json()

View File

@@ -60,7 +60,7 @@ def test_create_flavor(login, driver, flavor_name, openstack_admin,
flavors_form.find_element_by_id("id_disk_gb").send_keys(flavor_disk)
flavors_form.find_element_by_css_selector(
".btn-primary[value='Create Flavor']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Success: Created new flavor "{flavor_name}".' in messages
flavor_sdk = openstack_admin.compute.find_flavor(flavor_name)
assert flavor_sdk is not None
@@ -84,6 +84,6 @@ def test_delete_flavor(login, driver, flavor_name, new_flavor, config,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Flavor")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Flavor: {flavor_name}" in messages
assert openstack_admin.compute.find_flavor(flavor_name) is None

View File

@@ -70,7 +70,7 @@ def test_allocate_floatingip(login, driver, config, openstack_demo,
floatingip_form.find_element_by_id("id_description").send_keys(
floatingip_description)
floatingip_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
if len(messages) > 1:
message = [msg for msg in messages if
"Success: Allocated Floating IP" in msg][0]
@@ -99,7 +99,7 @@ def test_release_floatingip(login, driver, openstack_demo, config,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Release Floating IP")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Released Floating IP: "
f"{new_floating_ip.floating_ip_address}" in messages)
assert openstack_demo.network.find_ip(
@@ -128,7 +128,7 @@ def test_associate_floatingip(login, driver, openstack_demo, new_floating_ip,
associateip_form, "id_port_id",
f"{instance_name}: {new_instance_demo.private_v4}")
associateip_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: IP address {new_floating_ip.floating_ip_address}"
f" associated." in messages)
assert (new_instance_demo.id == openstack_demo.network.find_ip(
@@ -156,7 +156,7 @@ def test_disassociate_floatingip(login, driver, openstack_demo, config,
assert len(rows) == 1
rows[0].find_element_by_css_selector(".data-table-action").click()
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Successfully disassociated Floating IP: "
f"{instance_auto_ip}" in messages)
instance_sdk = openstack_demo.compute.find_server(new_instance_demo.id)

View File

@@ -51,7 +51,7 @@ def test_create_group(login, driver, group_name, openstack_admin, config,
group_form = driver.find_element_by_css_selector(".modal-dialog form")
group_form.find_element_by_id("id_name").send_keys(group_name)
group_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Group "{group_name}" was successfully created.'
in messages)
assert openstack_admin.identity.find_group(group_name) is not None
@@ -72,7 +72,7 @@ def test_delete_group(login, driver, group_name, openstack_admin, config,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Group")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Group: {group_name}" in messages
assert openstack_admin.identity.find_group(group_name) is None
@@ -98,7 +98,7 @@ def test_edit_group_name_and_description(login, driver, group_name,
group_form.find_element_by_id("id_description").send_keys(
f"EDITED_Description for: {group_name}")
group_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert "Success: Group has been updated successfully." in messages
assert (openstack_admin.identity.find_group(
f"EDITED_{group_name}") is not None)

View File

@@ -51,7 +51,7 @@ def test_create_grouptype(login, driver, grouptype_name, openstack_admin,
grouptype_form = driver.find_element_by_css_selector(".modal-content form")
grouptype_form.find_element_by_id("id_name").send_keys(grouptype_name)
grouptype_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Successfully created group type: {grouptype_name}'
in messages)
assert (openstack_admin.block_storage.find_group_type(grouptype_name)
@@ -73,6 +73,6 @@ def test_delete_grouptype(login, driver, grouptype_name, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Group Type")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Group Type: {grouptype_name}" in messages
assert openstack_admin.block_storage.find_group_type(grouptype_name) is None

View File

@@ -65,7 +65,7 @@ def test_create_host_aggregate(login, driver, openstack_admin, config,
host_aggregate_name)
host_aggregate_form.find_element_by_css_selector(
".btn-primary[value='Create Host Aggregate']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Created new host aggregate "{host_aggregate_name}".'
in messages)
is_host_aggregate_created_sdk = False
@@ -93,7 +93,7 @@ def test_delete_host_aggregate(login, driver, openstack_admin, config,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Host Aggregate")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Deleted Host Aggregate: "
f"{new_host_aggregate['aggregate']['name']}" in messages)
is_host_aggregate_deleted_sdk = True

View File

@@ -163,7 +163,7 @@ def test_image_create_from_local_file_demo(login, driver, image_names,
wizard.find_element_by_css_selector(
"[label='QCOW2 - QEMU Emulator']").click()
wizard.find_element_by_css_selector("button.btn-primary.finish").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Image {image_name} was successfully"
f" created." in messages)
assert openstack_demo.compute.find_image(image_name) is not None
@@ -185,7 +185,7 @@ def test_image_delete_demo(login, driver, image_names, openstack_demo,
".//ancestor::tr/td[contains(@class,'actions_column')]")
widgets.select_from_dropdown(actions_column, "Delete Image")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Image: {image_name}." in messages
assert openstack_demo.compute.find_image(image_name) is None
@@ -262,7 +262,7 @@ def test_image_create_from_local_file_admin(login, driver, image_names,
wizard.find_element_by_css_selector(
"[label='QCOW2 - QEMU Emulator']").click()
wizard.find_element_by_css_selector("button.btn-primary.finish").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Image {image_name} was successfully"
f" created." in messages)
assert openstack_admin.compute.find_image(image_name) is not None
@@ -284,7 +284,7 @@ def test_image_delete_admin(login, driver, image_names, openstack_admin,
".//ancestor::tr/td[contains(@class,'actions_column')]")
widgets.select_from_dropdown(actions_column, "Delete Image")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Image: {image_name}." in messages
assert openstack_admin.compute.find_image(image_name) is None
@@ -393,7 +393,7 @@ def test_remove_protected_image_admin(login, driver, image_names,
image_form.find_element_by_xpath(".//label[text()='No']").click()
image_form.find_element_by_xpath(
".//button[@class='btn btn-primary finish']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Image {image_name} was successfully updated." in messages
wait_for_steady_state_of_unprotected_image(openstack_admin, image_name)
WebDriverWait(driver, config.selenium.page_timeout).until(
@@ -405,7 +405,7 @@ def test_remove_protected_image_admin(login, driver, image_names,
".//ancestor::tr/td[contains(@class,'actions_column')]")
widgets.select_from_dropdown(actions_column, "Delete Image")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Image: {image_name}." in messages
assert openstack_admin.compute.find_image(image_name) is None
@@ -436,7 +436,7 @@ def test_edit_image_description_admin(login, driver, image_names,
desc_field.send_keys(new_description)
image_form.find_element_by_xpath(
".//button[@class='btn btn-primary finish']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Image {image_name} " \
f"was successfully updated." in messages
image_id = new_image_admin.id
@@ -474,7 +474,7 @@ def test_update_image_metadata_admin(login, driver,
f"//span[@title='{name}']/parent::div/input").send_keys(value) # noqa: E231,E501
image_form.find_element_by_xpath(
"//button[@ng-click='modal.save()']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert "Success: Metadata was successfully updated." in messages
image_id = new_image_admin.id
for name, value in new_metadata.items():
@@ -521,7 +521,7 @@ def test_launch_instance_from_image_admin(complete_default_test_network, login,
test_instances.delete_volume_on_instance_delete(source_table, "Yes")
wizard.find_element_by_css_selector(
"button.btn-primary.finish").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert "Info: Scheduled creation of 1 instance." in messages
assert openstack_admin.compute.find_server(instance_name) is not None
@@ -550,6 +550,6 @@ def test_create_volume_from_image_admin(login, driver, volume_name,
EC.element_to_be_clickable(
(By.XPATH, "//button[@class='btn btn-primary finish']")))
create_vol_btn.click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Info: Creating volume {volume_name}" in messages
assert openstack_admin.block_storage.find_volume(volume_name) is not None

View File

@@ -246,7 +246,7 @@ def test_delete_instance_demo(login, driver, instance_name, openstack_demo,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Instance")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Info: Scheduled deletion of Instance: {instance_name}" in messages
wait_for_instance_is_deleted(openstack_demo, instance_name)
assert openstack_demo.compute.find_server(instance_name) is None
@@ -496,7 +496,7 @@ def test_delete_instance_admin(login, driver, instance_name, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Instance")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Info: Scheduled deletion of Instance: {instance_name}" in messages
wait_for_instance_is_deleted(openstack_admin, instance_name)
assert openstack_admin.compute.find_server(instance_name) is None

View File

@@ -57,7 +57,7 @@ def test_create_keypair_demo(login, driver, openstack_demo, clear_keypair_demo,
type_options.click()
type_options.find_element_by_css_selector('option[label="SSH Key"]').click()
keypair_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Key pair {keypair_name} was successfully created.'
in messages)
assert openstack_demo.compute.find_keypair(keypair_name) is not None
@@ -78,6 +78,6 @@ def test_delete_keypair_demo(login, driver, openstack_demo, config,
rows[0].find_element_by_xpath(
".//ancestor::tr/td[contains(@class,'actions_column')]").click()
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Key Pair: {new_keypair_demo.name}." in messages
assert openstack_demo.compute.find_keypair(new_keypair_demo.name) is None

View File

@@ -77,7 +77,7 @@ def test_create_metadata_namespace(login, driver, metadata_namespace_name,
widgets.select_from_dropdown(namespace_form, "Direct Input")
namespace_form.find_element_by_id("id_direct_input").send_keys(namespace)
namespace_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Namespace {metadata_namespace_name} "
f"has been created." in messages)
try:
@@ -104,7 +104,7 @@ def test_delete_metadata_namespace(login, driver, new_metadata_namespace,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Namespace")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Deleted Namespace: "
f"{new_metadata_namespace.namespace}" in messages)
try:

View File

@@ -97,7 +97,7 @@ def test_create_network_without_subnet_demo(login, openstack_demo, driver,
ensure_checkbox(False, checkbox_element)
network_form.find_element_by_css_selector(
".btn-primary.button-final").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Success: Created network "{network_name}".' in messages
assert openstack_demo.network.find_network(network_name) is not None
@@ -124,7 +124,7 @@ def test_create_network_with_subnet_demo(login, driver, openstack_demo,
".btn-primary.button-next").click()
network_form.find_element_by_css_selector(
".btn-primary.button-final").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Success: Created network "{network_name}".' in messages
specified_network_sdk = openstack_demo.network.find_network(network_name)
assert specified_network_sdk is not None
@@ -147,7 +147,7 @@ def test_delete_network_demo(login, driver, network_name, openstack_demo,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Network")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Network: {network_name}" in messages
assert openstack_demo.network.find_network(network_name) is None
@@ -171,7 +171,7 @@ def test_create_network_without_subnet_admin(login, openstack_admin, driver,
network_form, 'id_tenant_id', 'admin')
network_form.find_element_by_css_selector(
".btn-primary.button-final").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Success: Created network "{network_name}".' in messages
assert openstack_admin.network.find_network(network_name) is not None
@@ -200,7 +200,7 @@ def test_create_network_with_subnet_admin(login, driver, openstack_admin,
".btn-primary.button-next").click()
network_form.find_element_by_css_selector(
".btn-primary.button-final").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Success: Created network "{network_name}".' in messages
specified_network_sdk = openstack_admin.network.find_network(network_name)
assert specified_network_sdk is not None
@@ -223,6 +223,6 @@ def test_delete_network_admin(login, driver, network_name, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Network")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Network: {network_name}" in messages
assert openstack_admin.network.find_network(network_name) is None

View File

@@ -79,7 +79,7 @@ def test_create_project(login, driver, project_name, openstack_admin,
project_form.find_element_by_id("id_name").send_keys(project_name)
project_form.find_element_by_css_selector(
".btn-primary[value='Create Project']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Success: Created new project "{project_name}".' in messages
assert openstack_admin.identity.find_project(project_name) is not None
@@ -98,7 +98,7 @@ def test_delete_project(login, driver, project_name, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Project")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Project: {project_name}" in messages
assert openstack_admin.identity.find_project(project_name) is None
@@ -124,7 +124,7 @@ def test_add_member_to_project(login, driver, project_name, openstack_admin,
f"/following-sibling::li/a[@href='#add_remove']").click() # noqa: E231
project_form.find_element_by_css_selector(
".btn-primary[value='Save']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Success: Modified project "{project_name}".' in messages
assert (openstack_admin.identity.validate_user_has_project_role(
project=new_project,
@@ -156,7 +156,7 @@ def test_add_role_to_project_member(login, driver, openstack_admin, config,
widgets.select_from_dropdown(select_roles_dropdown, admin_role_name)
project_form.find_element_by_css_selector(
".btn-primary[value='Save']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Modified project '
f'"{new_project_with_admin.name}".' in messages)
assert (openstack_admin.identity.validate_user_has_project_role(
@@ -192,7 +192,7 @@ def test_add_group_to_project(login, driver, openstack_admin,
f"/following-sibling::li/a[@href='#add_remove']").click() # noqa: E231
project_form.find_element_by_css_selector(
".btn-primary[value='Save']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Success: Modified project "{new_project.name}".' in messages
assert (openstack_admin.identity.validate_group_has_project_role(
project=new_project,
@@ -225,7 +225,7 @@ def test_add_role_to_project_group(login, driver, openstack_admin, config,
widgets.select_from_dropdown(select_roles_dropdown, admin_role_name)
project_form.find_element_by_css_selector(
".btn-primary[value='Save']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Modified project '
f'"{new_project_with_group.name}".' in messages)
assert (openstack_admin.identity.validate_group_has_project_role(

View File

@@ -109,7 +109,7 @@ def test_create_router_demo(login, driver, router_name, openstack_demo,
config.network.external_network)
router_form.find_element_by_css_selector(
".btn-primary[value='Create Router']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Router {router_name} was successfully created.'
in messages)
assert openstack_demo.network.find_router(router_name) is not None
@@ -131,7 +131,7 @@ def test_delete_router_demo(login, driver, router_name, openstack_demo,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Router")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Router: {router_name}" in messages
assert openstack_demo.network.find_router(router_name) is None
@@ -164,7 +164,7 @@ def test_router_add_interface_demo(login, driver, router_name, openstack_demo,
add_interface_form.find_element_by_id(
"id_ip_address").send_keys(fixed_ip_test)
add_interface_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Interface added {fixed_ip_test}" in messages
is_interface_added_sdk = False
@@ -200,7 +200,7 @@ def test_router_delete_interface_demo(login, driver, router_name,
assert len(rows) == 1
rows[0].find_element_by_css_selector("td.actions_column").click()
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Interface: {extracted_port_name}" in messages
assert (openstack_demo.network.find_port(
new_interface['port_id']) is None)
@@ -229,7 +229,7 @@ def test_router_set_gateway_demo(login, driver, new_router_demo,
widgets.select_from_specific_dropdown_in_form(
gateway_form, 'id_network_id', config.network.external_network)
gateway_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert "Success: Gateway interface is added" in messages
router_sdk = openstack_demo.network.get(
f"/routers/{new_router_demo.id}"
@@ -262,7 +262,7 @@ def test_router_clear_gateway_demo(login, driver, new_router_with_gateway,
config.network.external_network).id)
rows[0].find_element_by_css_selector(".data-table-action").click()
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Cleared Gateway: {new_router_with_gateway.name}" in
messages)
router_sdk = openstack_demo.network.get(
@@ -290,7 +290,7 @@ def test_create_router_admin(login, driver, router_name, openstack_admin,
router_form, "id_external_network", config.network.external_network)
router_form.find_element_by_css_selector(
".btn-primary[value='Create Router']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Router {router_name} was successfully created.'
in messages)
assert openstack_admin.network.find_router(router_name) is not None
@@ -312,6 +312,6 @@ def test_delete_router_admin(login, driver, router_name, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Router")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Router: {router_name}" in messages
assert openstack_admin.network.find_router(router_name) is None

View File

@@ -66,7 +66,7 @@ def test_create_sec_group_demo(login, driver, config, sec_group_name,
sec_group_form = driver.find_element_by_css_selector(".modal-dialog form")
sec_group_form.find_element_by_id("id_name").send_keys(sec_group_name)
sec_group_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Successfully created security group: {sec_group_name}'
in messages)
assert (openstack_demo.network.find_security_group(sec_group_name)
@@ -88,7 +88,7 @@ def test_delete_sec_group_demo(login, driver, sec_group_name, openstack_demo,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Security Group")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Security Group: {sec_group_name}" in messages
assert openstack_demo.network.find_security_group(sec_group_name) is None
@@ -108,7 +108,7 @@ def test_add_rule_sec_group_demo(login, driver, sec_group_name, openstack_demo,
rule_form = driver.find_element_by_css_selector(".modal-dialog form")
rule_form.find_element_by_id("id_port").send_keys(rule_port)
rule_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Successfully added rule: ALLOW IPv4 {rule_port}"
f"/tcp from 0.0.0.0/0" in messages)
sec_group_rules_sdk = openstack_demo.network.find_security_group(
@@ -138,7 +138,7 @@ def test_delete_rule_sec_group_demo(login, driver, sec_group_name,
assert len(rows) == 1
rows[0].find_element_by_css_selector("td.actions_column").click()
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Deleted Rule: ALLOW IPv4 {rule_port}/tcp from 0.0.0.0/0"
in messages)
sec_group_rules_sdk = openstack_demo.network.find_security_group(

View File

@@ -58,7 +58,7 @@ def test_create_user_credential_totp(login, driver, openstack_admin, config,
widgets.select_from_specific_dropdown_in_form(
user_credential_form, 'id_cred_type', 'TOTP')
user_credential_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert 'Success: User credential created successfully.' in messages
credentials_sdk_after = list(openstack_admin.identity.credentials())
assert (len(credentials_sdk_after) == 1 and
@@ -87,7 +87,7 @@ def test_create_user_credential_ec2(login, driver, openstack_admin, config,
widgets.select_from_specific_dropdown_in_form(
user_credential_form, 'id_project', 'admin')
user_credential_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert 'Success: User credential created successfully.' in messages
credentials_sdk_after = list(openstack_admin.identity.credentials())
assert (len(credentials_sdk_after) == 1 and
@@ -113,7 +113,7 @@ def test_delete_user_credential(login, driver, openstack_admin, config,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete User Credential")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Deleted User Credential: {user_credential_blob}" in
messages)
credentials_sdk_after = list(openstack_admin.identity.credentials())
@@ -139,7 +139,7 @@ def test_edit_user_credential(login, driver, openstack_admin, config,
user_credential_form.find_element_by_id("id_data").send_keys(
f"EDITED_{user_credential_blob}")
user_credential_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert ("Success: User credential updated successfully." in messages)
credentials_sdk = list(openstack_admin.identity.credentials())
assert (len(credentials_sdk) == 1 and

View File

@@ -57,7 +57,7 @@ def test_create_user(login, driver, user_name, openstack_admin,
user_form.find_element_by_id(
"id_confirm_password").send_keys(default_password)
user_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Success: User "{user_name}" was successfully created.' in messages
assert openstack_admin.identity.find_user(user_name) is not None
@@ -77,7 +77,7 @@ def test_delete_user(login, driver, user_name, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete User")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted User: {user_name}" in messages
assert openstack_admin.identity.find_user(user_name) is None
@@ -101,5 +101,5 @@ def test_change_user_password(login, driver, user_name, new_user, config):
password_form.find_element_by_id(
"id_confirm_password").send_keys(new_password)
password_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert "Success: User password has been updated successfully." in messages

View File

@@ -163,7 +163,7 @@ def test_create_volume_snapshot_demo(login, driver, volume_name,
create_snap_form.find_element_by_id("id_name").send_keys(
volume_snapshot_name)
create_snap_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Info: Creating volume snapshot "{volume_snapshot_name}".'
in messages)
assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name)
@@ -187,7 +187,7 @@ def test_delete_volume_snapshot_demo(login, driver, volume_snapshot_names,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Volume Snapshot")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Scheduled deletion of Volume Snapshot: "
f"{volume_snapshot_name}" in messages)
wait_for_volume_snapshot_is_deleted(openstack_demo, volume_snapshot_name)
@@ -216,7 +216,7 @@ def test_edit_volume_snapshot_description_demo(login, driver, openstack_demo,
snapshot_form.find_element_by_id("id_description").send_keys(
f"EDITED_Description for: {new_volume_snapshot_demo.name}")
snapshot_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Info: Updating volume snapshot '
f'"{new_volume_snapshot_demo.name}"' in messages)
assert (openstack_demo.block_storage.find_snapshot(
@@ -246,7 +246,7 @@ def test_create_volume_from_volume_snapshot_demo(login, driver, openstack_demo,
volume_form.find_element_by_id("id_name").send_keys(
volume_from_snapshot_name)
volume_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Info: Creating volume "{volume_from_snapshot_name}"' in messages)
assert (openstack_demo.block_storage.find_volume(
volume_from_snapshot_name) is not None)
@@ -269,7 +269,7 @@ def test_delete_volume_from_volume_snapshot_demo(login, driver, openstack_demo,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Volume")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Info: Scheduled deletion of Volume: "
f"{new_volume_from_snapshot_demo.name}" in messages)
test_volumes.wait_for_volume_is_deleted(
@@ -302,7 +302,7 @@ def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo,
widgets.select_from_dropdown(actions_column_snapshot,
"Delete Volume Snapshot")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Scheduled deletion of Volume Snapshot: "
f"{volume_snapshot_name}" in messages)
wait_for_volume_snapshot_is_deleted(openstack_demo, volume_snapshot_name)
@@ -322,7 +322,7 @@ def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo,
"td.actions_column")
widgets.select_from_dropdown(actions_column_volume, "Delete Volume")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Info: Scheduled deletion of Volume: "
f"{new_volume_from_snapshot_demo.name}" in messages)
test_volumes.wait_for_volume_is_deleted(
@@ -425,7 +425,7 @@ def test_create_volume_snapshot_admin(login, driver, new_volume_admin,
snapshot_form.find_element_by_id("id_name").send_keys(
volume_snapshot_name)
snapshot_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Info: Creating volume snapshot "{volume_snapshot_name}".'
in messages)
assert (openstack_admin.block_storage.find_snapshot(volume_snapshot_name)
@@ -448,7 +448,7 @@ def test_delete_volume_snapshot_admin(login, driver, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Volume Snapshot")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Scheduled deletion of Volume Snapshot: "
f"{new_volume_snapshot_admin.name}" in messages)
wait_for_volume_snapshot_is_deleted(openstack_admin,
@@ -478,7 +478,7 @@ def test_edit_volume_snapshot_description_admin(login, driver, openstack_admin,
snapshot_form.find_element_by_id("id_description").send_keys(
f"EDITED_Description for: {new_volume_snapshot_admin.name}")
snapshot_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Info: Updating volume snapshot '
f'"{new_volume_snapshot_admin.name}"' in messages)
assert (openstack_admin.block_storage.find_snapshot(

View File

@@ -67,7 +67,7 @@ def test_create_empty_volume_demo(login, driver, volume_name, openstack_demo,
volume_form.find_element_by_id("id_name").send_keys(volume_name)
volume_form.find_element_by_css_selector(
".btn-primary[value='Create Volume']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Info: Creating volume "{volume_name}"' in messages
assert openstack_demo.block_storage.find_volume(volume_name) is not None
@@ -94,7 +94,7 @@ def test_create_volume_via_vol_source_image_demo(login, driver,
volume_form, 'id_image_source', image_source_name)
volume_form.find_element_by_css_selector(
".btn-primary[value='Create Volume']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Info: Creating volume "{volume_name}"' in messages
assert openstack_demo.block_storage.find_volume(volume_name) is not None
@@ -116,7 +116,7 @@ def test_delete_volume_demo(login, driver, volume_name, openstack_demo,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Volume")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Info: Scheduled deletion of Volume: {volume_name}" in messages
wait_for_volume_is_deleted(openstack_demo, volume_name)
assert (openstack_demo.block_storage.find_volume(volume_name) is None)
@@ -142,7 +142,7 @@ def test_edit_volume_description_demo(login, driver, volume_name, config,
volume_form.find_element_by_id("id_description").send_keys(
f"EDITED_Description for: {volume_name}")
volume_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Info: Updating volume "{volume_name}"' in messages
assert (openstack_demo.block_storage.find_volume(
volume_name).description == f"EDITED_Description for: {volume_name}")
@@ -169,7 +169,7 @@ def test_extend_volume_demo(login, driver, openstack_demo, new_volume_demo,
volume_form.find_element_by_id("id_new_size").send_keys(2)
volume_form.find_element_by_css_selector(
".btn-primary[value='Extend Volume']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
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(
@@ -244,7 +244,7 @@ def test_volume_upload_to_image_demo(login, driver, openstack_demo,
volume_form.find_element_by_id("id_image_name").send_keys(image_names[0])
volume_form.find_element_by_css_selector(
".btn-primary[value='Upload']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert ('Info: Successfully sent the request to upload volume to image for '
f'volume: "{new_volume_demo.name}"' in messages)
wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name)
@@ -345,7 +345,7 @@ def test_manage_volume_attachments(login, driver, openstack_demo,
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)
messages = widgets.get_and_dismiss_messages(driver, config)
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)
@@ -368,7 +368,7 @@ def test_manage_volume_attachments(login, driver, openstack_demo,
"td.actions_column").click()
driver.find_element_by_xpath(
".//a[normalize-space()='Detach Volume']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
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)
@@ -394,7 +394,7 @@ def test_create_empty_volume_admin(login, driver, volume_name, openstack_admin,
volume_form.find_element_by_id("id_name").send_keys(volume_name)
volume_form.find_element_by_css_selector(
".btn-primary[value='Create Volume']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Info: Creating volume "{volume_name}"' in messages
assert openstack_admin.block_storage.find_volume(volume_name) is not None
@@ -420,7 +420,7 @@ def test_create_volume_via_vol_source_image_admin(login, driver, volume_name,
volume_form, 'id_image_source', image_source_name)
volume_form.find_element_by_css_selector(
".btn-primary[value='Create Volume']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Info: Creating volume "{volume_name}"' in messages
assert openstack_admin.block_storage.find_volume(volume_name) is not None
@@ -442,7 +442,7 @@ def test_delete_volume_admin(login, driver, volume_name, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Volume")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Info: Scheduled deletion of Volume: {volume_name}" in messages
wait_for_volume_is_deleted(openstack_admin, volume_name)
assert (openstack_admin.block_storage.find_volume(volume_name) is None)
@@ -468,7 +468,7 @@ def test_edit_volume_description_admin(login, driver, volume_name, config,
volume_form.find_element_by_id("id_description").send_keys(
f"EDITED_Description for: {volume_name}")
volume_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f'Info: Updating volume "{volume_name}"' in messages
assert (openstack_admin.block_storage.find_volume(
volume_name).description == f"EDITED_Description for: {volume_name}")

View File

@@ -107,7 +107,7 @@ def test_create_volume_type(login, driver, volume_type_name, openstack_admin,
volume_type_form = driver.find_element_by_css_selector(".modal-dialog form")
volume_type_form.find_element_by_id("id_name").send_keys(volume_type_name)
volume_type_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Successfully created volume '
f'type: {volume_type_name}' in messages)
assert openstack_admin.block_storage.find_type(volume_type_name) is not None
@@ -128,7 +128,7 @@ def test_delete_volume_type(login, driver, volume_type_name, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Volume Type")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted Volume Type: {volume_type_name}" in messages
assert openstack_admin.block_storage.find_type(volume_type_name) is None
@@ -150,7 +150,7 @@ def test_volume_type_create_encryption(login, driver, openstack_admin, config,
volume_type_form.find_element_by_id("id_provider").send_keys("plain")
volume_type_form.find_element_by_css_selector(
".btn-primary[value='Create Volume Type Encryption']").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Successfully created encryption for "
f"volume type: {new_volume_type.name}" in messages)
assert (openstack_admin.block_storage.get_type_encryption(
@@ -176,7 +176,7 @@ def test_volume_type_delete_encryption(login, driver, openstack_admin, config,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Encryption")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Deleted Encryption: "
f"{new_volume_type_with_encryption.name}" in messages)
assert (openstack_admin.block_storage.get_type_encryption(
@@ -196,7 +196,7 @@ def test_create_qos_spec(login, driver, qos_spec_name, openstack_admin,
volume_qos_form = driver.find_element_by_css_selector(".modal-dialog form")
volume_qos_form.find_element_by_id("id_name").send_keys(qos_spec_name)
volume_qos_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f'Success: Successfully created QoS '
f'Spec: {qos_spec_name}' in messages)
qos_specs = openstack_admin.block_storage.get(
@@ -220,7 +220,7 @@ def test_delete_qos_spec(login, driver, qos_spec_name, openstack_admin,
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete QoS Spec")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert f"Success: Deleted QoS Spec: {qos_spec_name}" in messages
qos_specs = openstack_admin.block_storage.get(
"/qos-specs").json()['qos_specs']
@@ -248,7 +248,7 @@ def test_edit_qos_spec_consumer(login, driver, openstack_admin, config,
volume_qos_form = driver.find_element_by_css_selector(".modal-dialog form")
widgets.select_from_dropdown(volume_qos_form, 'front-end')
volume_qos_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert "Success: Successfully modified QoS Spec consumer." in messages
assert (openstack_admin.block_storage.get(
f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['consumer'] ==
@@ -274,7 +274,7 @@ def test_qos_spec_create_extra_specs(login, driver, openstack_admin, config,
extra_specs_form.find_element_by_id("id_key").send_keys('minIOPS')
extra_specs_form.find_element_by_id("id_value").send_keys(20)
extra_specs_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert 'Success: Created spec "minIOPS".' in messages
assert (openstack_admin.block_storage.get(
f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['specs'] ==
@@ -307,7 +307,7 @@ def test_qos_spec_delete_extra_specs(login, driver, openstack_admin, config,
widgets.select_from_dropdown(actions_column, "Delete Spec")
driver.find_element_by_css_selector(
".modal-dialog .modal-footer .btn-danger").click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert "Success: Deleted Spec: maxIOPS" in messages
assert (openstack_admin.block_storage.get(
f"/qos-specs/{new_qos_spec_with_extra_specs['id']}").json()

View File

@@ -17,7 +17,7 @@ from openstack_dashboard.test.selenium import widgets
def test_delete_multiple_instance_rows(live_server, driver, dashboard_data,
user):
config, user):
with mock.patch.object(
api.glance, 'image_list_detailed') as mocked_i_l_d, \
mock.patch.object(
@@ -52,14 +52,14 @@ def test_delete_multiple_instance_rows(live_server, driver, dashboard_data,
server_names.append(str(server)[1:-1].split("Server: ")[1])
string_server_names = ", ".join(server_names)
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Info: Scheduled deletion of Instances: {string_server_names}"
in messages)
# Test for cover delete multiple rows also for Angular based table
def test_delete_multiple_images_rows(live_server, driver, dashboard_data,
user):
config, user):
with mock.patch.object(
api.glance, 'image_list_detailed') as mocked_i_l_d, \
mock.patch.object(
@@ -91,6 +91,6 @@ def test_delete_multiple_images_rows(live_server, driver, dashboard_data,
driver.find_element_by_xpath(
"//button[normalize-space()='Delete Images']").click()
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert (f"Success: Deleted Images: {string_image_names}."
in messages)

View File

@@ -94,14 +94,14 @@ def test_message_after_password_change(live_server, driver, user,
'Password changed. Please log in again to continue.')
def test_languages(live_server, driver, user):
def test_languages(live_server, driver, user, config):
driver.get(live_server.url + '/settings')
user_settings = driver.find_element_by_id('user_settings_modal')
language_options = user_settings.find_element_by_id('id_language')
language_options.click()
language_options.find_element_by_xpath("//option[@value='de']").click()
user_settings.find_element_by_xpath('//*[@class="btn btn-primary"]').click()
messages = widgets.get_and_dismiss_messages(driver)
messages = widgets.get_and_dismiss_messages(driver, config)
assert ("Success: Settings saved." in messages or
"Erfolg:Einstellungen gespeichert." in messages)
assert "Error" not in messages

View File

@@ -27,8 +27,10 @@ class TableDefinition:
names: list
def get_and_dismiss_messages(element):
messages = element.find_elements_by_css_selector("div.messages div.alert")
def get_and_dismiss_messages(driver, config):
messages = WebDriverWait(driver, config.selenium.message_wait).until(
EC.presence_of_all_elements_located(
(By.CSS_SELECTOR, 'div.messages div.alert')))
collect = []
for message in messages:
text = message.find_element_by_css_selector("p, div").text