Merge "pytest-based tests individual timeout for message check"

This commit is contained in:
Zuul
2025-07-31 09:54:57 +00:00
committed by Gerrit Code Review
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,
@@ -84,7 +85,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