From 69dad6e6d6ba18ffb02dc53fd867e0cc5f7e9815 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Tue, 27 May 2025 15:14:21 +0900 Subject: [PATCH] Bump hacking hacking 3.1.x is too old. Change-Id: I7c7686c36cedb9d88caea2fd74880d138fa00c8e Signed-off-by: Takashi Kajinami --- horizon/middleware/base.py | 2 +- horizon/test/settings.py | 5 +- horizon/utils/babel_extract_angular.py | 2 +- openstack_dashboard/api/keystone.py | 2 +- openstack_dashboard/api/rest/neutron.py | 4 +- openstack_dashboard/api/swift.py | 4 +- openstack_dashboard/context_processors.py | 2 +- .../dashboards/admin/networks/tests.py | 4 +- .../dashboards/project/networks/tests.py | 2 +- .../dashboards/project/routers/tests.py | 2 +- .../admin/system/metadatadefinitionspage.py | 4 +- .../integration_tests/tests/test_images.py | 1 + .../integration_tests/tests/test_login.py | 1 + .../test/selenium/integration/conftest.py | 2 +- .../selenium/integration/test_credentials.py | 16 +++---- .../selenium/integration/test_defaults.py | 10 ++-- .../selenium/integration/test_floatingips.py | 21 ++++---- .../test/selenium/integration/test_groups.py | 16 +++---- .../selenium/integration/test_grouptypes.py | 8 ++-- .../integration/test_host_aggregates.py | 8 ++-- .../test/selenium/integration/test_images.py | 18 +++---- .../selenium/integration/test_instances.py | 2 +- .../selenium/integration/test_keypairs.py | 4 +- .../integration/test_metadata_definitions.py | 12 ++--- .../selenium/integration/test_networks.py | 2 +- .../selenium/integration/test_projects.py | 16 +++---- .../test/selenium/integration/test_routers.py | 32 ++++++------- .../integration/test_security_groups.py | 20 ++++---- .../integration/test_user_credentials.py | 40 ++++++++-------- .../test/selenium/integration/test_users.py | 2 +- .../integration/test_volume_snapshots.py | 48 +++++++++---------- .../test/selenium/integration/test_volumes.py | 30 ++++++------ .../selenium/integration/test_volumetypes.py | 48 +++++++++---------- .../test/selenium/ui/test_actions.py | 5 +- .../test/selenium/ui/test_hypervisors.py | 32 ++++++------- .../test/selenium/ui/test_settings.py | 3 +- openstack_dashboard/test/selenium/widgets.py | 1 + tox.ini | 8 ++-- 38 files changed, 224 insertions(+), 215 deletions(-) diff --git a/horizon/middleware/base.py b/horizon/middleware/base.py index 33f5f6b278..64888e714f 100644 --- a/horizon/middleware/base.py +++ b/horizon/middleware/base.py @@ -167,7 +167,7 @@ class HorizonMiddleware(object): """ if http_utils.is_ajax(request) and hasattr(request, 'horizon'): queued_msgs = request.horizon['async_messages'] - if type(response) == http.HttpResponseRedirect: + if isinstance(response, http.HttpResponseRedirect): # Drop our messages back into the session as per usual so they # don't disappear during the redirect. Not that we explicitly # use django's messages methods here. diff --git a/horizon/test/settings.py b/horizon/test/settings.py index d271cadaf2..5ee05aecae 100644 --- a/horizon/test/settings.py +++ b/horizon/test/settings.py @@ -20,8 +20,9 @@ import os import socket from horizon.defaults import * # noqa: F401,F403,H303 -from openstack_auth.defaults import * # noqa: F401,F403,H303 -from openstack_dashboard.utils import settings as settings_utils + +from openstack_auth.defaults import * # noqa: F401,F403,H303,I100 +from openstack_dashboard.utils import settings as settings_utils # noqa: I100 socket.setdefaulttimeout(1) diff --git a/horizon/utils/babel_extract_angular.py b/horizon/utils/babel_extract_angular.py index f892b3de53..a753bded84 100644 --- a/horizon/utils/babel_extract_angular.py +++ b/horizon/utils/babel_extract_angular.py @@ -167,4 +167,4 @@ def extract_angular(fileobj, keywords, comment_tags, options): parser.feed(encodeutils.safe_decode(line)) for string in parser.strings: - yield(string) + yield string diff --git a/openstack_dashboard/api/keystone.py b/openstack_dashboard/api/keystone.py index 4507a62a93..edbc491aa0 100644 --- a/openstack_dashboard/api/keystone.py +++ b/openstack_dashboard/api/keystone.py @@ -91,7 +91,7 @@ class Service(base.APIDictWrapper): self.region = region def __str__(self): - if(self.type == "identity"): + if self.type == "identity": return _("%(type)s (%(backend)s backend)") \ % {"type": self.type, "backend": keystone_backend_name()} return self.type diff --git a/openstack_dashboard/api/rest/neutron.py b/openstack_dashboard/api/rest/neutron.py index 858db4aa7a..e365f241cd 100644 --- a/openstack_dashboard/api/rest/neutron.py +++ b/openstack_dashboard/api/rest/neutron.py @@ -46,7 +46,7 @@ class Networks(generic.View): result = api.neutron.network_list_for_tenant( request, tenant_id, include_pre_auto_allocate=True) - return{'items': [n.to_dict() for n in result]} + return {'items': [n.to_dict() for n in result]} @rest_utils.ajax(data_required=True) def post(self, request): @@ -92,7 +92,7 @@ class Subnets(generic.View): """ result = api.neutron.subnet_list(request, **request.GET.dict()) - return{'items': [n.to_dict() for n in result]} + return {'items': [n.to_dict() for n in result]} @rest_utils.ajax(data_required=True) def post(self, request): diff --git a/openstack_dashboard/api/swift.py b/openstack_dashboard/api/swift.py index b4a9bc6a6e..a6a843449a 100644 --- a/openstack_dashboard/api/swift.py +++ b/openstack_dashboard/api/swift.py @@ -169,7 +169,7 @@ def swift_get_containers(request, marker=None, prefix=None): prefix=prefix, full_listing=True) container_objs = [Container(c) for c in containers] - if(len(container_objs) > limit): + if len(container_objs) > limit: return (container_objs[0:-1], True) return (container_objs, False) @@ -270,7 +270,7 @@ def swift_get_objects(request, container_name, prefix=None, marker=None, **kwargs) object_objs = _objectify(objects, container_name) - if(len(object_objs) > limit): + if len(object_objs) > limit: return (object_objs[0:-1], True) return (object_objs, False) diff --git a/openstack_dashboard/context_processors.py b/openstack_dashboard/context_processors.py index faf5afbd2a..44c057346d 100644 --- a/openstack_dashboard/context_processors.py +++ b/openstack_dashboard/context_processors.py @@ -54,7 +54,7 @@ def openstack(request): regions = {'support': len(available_regions) > 1, 'current': {'endpoint': request.session.get('region_endpoint'), 'name': request.session.get('region_name')}, - 'available': [{'endpoint': region[0], 'name':region[1]} for + 'available': [{'endpoint': region[0], 'name': region[1]} for region in available_regions]} # K2K Federation Service Providers context/support diff --git a/openstack_dashboard/dashboards/admin/networks/tests.py b/openstack_dashboard/dashboards/admin/networks/tests.py index fa09dd1df9..458e761630 100644 --- a/openstack_dashboard/dashboards/admin/networks/tests.py +++ b/openstack_dashboard/dashboards/admin/networks/tests.py @@ -1005,7 +1005,7 @@ class NetworkTests(test.BaseAdminViewTests): url = reverse('horizon:admin:networks:create') res = self.client.get(url) physical_network = res.context['form'].fields['physical_network'] - self.assertEqual(type(physical_network), forms.CharField) + self.assertIsInstance(physical_network, forms.CharField) self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) self._check_is_extension_supported( @@ -1029,7 +1029,7 @@ class NetworkTests(test.BaseAdminViewTests): url = reverse('horizon:admin:networks:create') res = self.client.get(url) physical_network = res.context['form'].fields['physical_network'] - self.assertEqual(type(physical_network), forms.ThemableChoiceField) + self.assertIsInstance(physical_network, forms.ThemableChoiceField) self.assertListEqual(list(physical_network.choices), [('default', 'default'), ('test', 'test')]) diff --git a/openstack_dashboard/dashboards/project/networks/tests.py b/openstack_dashboard/dashboards/project/networks/tests.py index 6fb9ae4e8a..9cd0784942 100644 --- a/openstack_dashboard/dashboards/project/networks/tests.py +++ b/openstack_dashboard/dashboards/project/networks/tests.py @@ -1156,7 +1156,7 @@ class NetworkViewTests(test.TestCase, NetworkStubMixin): networks = res.context['networks_table'].data button = find_button_fn(res) - self.assertFalse('disabled' in button.classes, + self.assertNotIn('disabled', button.classes, "The create button should not be disabled") self._check_net_list() diff --git a/openstack_dashboard/dashboards/project/routers/tests.py b/openstack_dashboard/dashboards/project/routers/tests.py index 1ec3019fef..4774e2fa9f 100644 --- a/openstack_dashboard/dashboards/project/routers/tests.py +++ b/openstack_dashboard/dashboards/project/routers/tests.py @@ -1221,7 +1221,7 @@ class RouterViewTests(RouterMixin, test.TestCase): self.assertCountEqual(routers, self.routers.list()) create_action = self.getAndAssertTableAction(res, 'routers', 'create') - self.assertFalse('disabled' in create_action.classes, + self.assertNotIn('disabled', create_action.classes, 'Create button should not be disabled') self.assertEqual('Create Router', create_action.verbose_name) diff --git a/openstack_dashboard/test/integration_tests/pages/admin/system/metadatadefinitionspage.py b/openstack_dashboard/test/integration_tests/pages/admin/system/metadatadefinitionspage.py index bb7e9ad5b2..522901018b 100644 --- a/openstack_dashboard/test/integration_tests/pages/admin/system/metadatadefinitionspage.py +++ b/openstack_dashboard/test/integration_tests/pages/admin/system/metadatadefinitionspage.py @@ -104,7 +104,7 @@ class MetadatadefinitionsPage(basepage.BaseNavigationPage): return bool(self._get_row_with_namespace_name(name)) def is_public_set_correct(self, name, exp_value, row=None): - if type(exp_value) != bool: + if not isinstance(exp_value, bool): raise ValueError('Expected value "exp_value" is not boolean') if not row: row = self._get_row_with_namespace_name(name) @@ -112,7 +112,7 @@ class MetadatadefinitionsPage(basepage.BaseNavigationPage): return self._is_text_visible(cell, self.boolean_mapping[exp_value]) def is_protected_set_correct(self, name, exp_value, row=None): - if type(exp_value) != bool: + if not isinstance(exp_value, bool): raise ValueError('Expected value "exp_value" is not boolean') if not row: row = self._get_row_with_namespace_name(name) diff --git a/openstack_dashboard/test/integration_tests/tests/test_images.py b/openstack_dashboard/test/integration_tests/tests/test_images.py index ddf9db1f45..9ef72282ea 100644 --- a/openstack_dashboard/test/integration_tests/tests/test_images.py +++ b/openstack_dashboard/test/integration_tests/tests/test_images.py @@ -322,6 +322,7 @@ class TestImagesAdvancedAngular(helpers.TestCase): return InstancesPage(self.driver, self.CONFIG) """Login as demo user""" + def test_create_volume_from_image(self): """This test case checks create volume from image functionality: diff --git a/openstack_dashboard/test/integration_tests/tests/test_login.py b/openstack_dashboard/test/integration_tests/tests/test_login.py index 1c37b1be2c..d24dae11fc 100644 --- a/openstack_dashboard/test/integration_tests/tests/test_login.py +++ b/openstack_dashboard/test/integration_tests/tests/test_login.py @@ -21,6 +21,7 @@ class TestLogin(helpers.BaseTestCase): * logs in as a regular user * checks that the user home page loads without error """ + def test_login(self): login_pg = loginpage.LoginPage(self.driver, self.CONFIG) login_pg.go_to_login_page() diff --git a/openstack_dashboard/test/selenium/integration/conftest.py b/openstack_dashboard/test/selenium/integration/conftest.py index 45b1962005..1bce692822 100644 --- a/openstack_dashboard/test/selenium/integration/conftest.py +++ b/openstack_dashboard/test/selenium/integration/conftest.py @@ -85,7 +85,7 @@ def change_page_size(driver, config, page_size): driver.find_element_by_css_selector( f"#id_pagesize[value='{page_size}']") break - except(exceptions.NoSuchElementException): + except exceptions.NoSuchElementException: time.sleep(3) diff --git a/openstack_dashboard/test/selenium/integration/test_credentials.py b/openstack_dashboard/test/selenium/integration/test_credentials.py index 1ba18af8a6..eceb866f1a 100644 --- a/openstack_dashboard/test/selenium/integration/test_credentials.py +++ b/openstack_dashboard/test/selenium/integration/test_credentials.py @@ -56,10 +56,10 @@ def test_download_rc_file_admin(login, driver, config, openstack_admin, project_id = re.search( r'export OS_PROJECT_ID=(.+)', content).group(1) - assert(config.identity.admin_username == username and - config.identity.admin_home_project == project_name and - openstack_admin.identity.find_project( - config.identity.admin_home_project).id == project_id) + assert (config.identity.admin_username == username and + config.identity.admin_home_project == project_name and + openstack_admin.identity.find_project( + config.identity.admin_home_project).id == project_id) def test_download_rc_file_demo(login, driver, config, openstack_admin, @@ -88,7 +88,7 @@ def test_download_rc_file_demo(login, driver, config, openstack_admin, project_id = re.search( r'export OS_PROJECT_ID=(.+)', content).group(1) - assert(config.identity.username == username and - config.identity.home_project == project_name and - openstack_admin.identity.find_project( - config.identity.home_project).id == project_id) + assert (config.identity.username == username and + config.identity.home_project == project_name and + openstack_admin.identity.find_project( + config.identity.home_project).id == project_id) diff --git a/openstack_dashboard/test/selenium/integration/test_defaults.py b/openstack_dashboard/test/selenium/integration/test_defaults.py index 99ee0ca942..f3445c8cb4 100644 --- a/openstack_dashboard/test/selenium/integration/test_defaults.py +++ b/openstack_dashboard/test/selenium/integration/test_defaults.py @@ -65,10 +65,10 @@ def test_update_compute_defaults(login, driver, openstack_admin, config, 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) - assert f'Success: Default quotas updated.' in messages + assert 'Success: Default quotas updated.' in messages new_quotas = openstack_admin.compute.get( "/os-quota-class-sets/default").json() - assert( + assert ( new_quotas["quota_class_set"]["instances"] == number_of_instances and new_quotas["quota_class_set"]["cores"] == number_of_cores) @@ -94,8 +94,8 @@ def test_update_volume_defaults(login, driver, openstack_admin, config, number_of_snapshots) defaults_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) - assert f'Success: Default quotas updated.' in messages + assert 'Success: Default quotas updated.' in messages new_quotas = openstack_admin.block_storage.get( "/os-quota-class-sets/default").json() - assert(new_quotas["quota_class_set"]["volumes"] == number_of_volumes and - new_quotas["quota_class_set"]["snapshots"] == number_of_snapshots) + assert (new_quotas["quota_class_set"]["volumes"] == number_of_volumes and + new_quotas["quota_class_set"]["snapshots"] == number_of_snapshots) diff --git a/openstack_dashboard/test/selenium/integration/test_floatingips.py b/openstack_dashboard/test/selenium/integration/test_floatingips.py index d26bc93206..8edfeb738b 100644 --- a/openstack_dashboard/test/selenium/integration/test_floatingips.py +++ b/openstack_dashboard/test/selenium/integration/test_floatingips.py @@ -20,8 +20,8 @@ from openstack_dashboard.test.selenium import widgets @pytest.fixture def floatingip_description(): - return('horizon_floatingip_description_%s' - % uuidutils.generate_uuid(dashed=False)) + return ('horizon_floatingip_description_%s' + % uuidutils.generate_uuid(dashed=False)) @pytest.fixture @@ -100,8 +100,8 @@ def test_release_floatingip(login, driver, openstack_demo, config, widgets.select_from_dropdown(actions_column, "Release Floating IP") widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Released Floating IP: " - f"{new_floating_ip.floating_ip_address}" in messages) + assert (f"Success: Released Floating IP: " + f"{new_floating_ip.floating_ip_address}" in messages) assert openstack_demo.network.find_ip( new_floating_ip.floating_ip_address) is None @@ -129,10 +129,11 @@ def test_associate_floatingip(login, driver, openstack_demo, new_floating_ip, 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) - 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( - new_floating_ip.floating_ip_address).port_details['device_id']) + 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( + new_floating_ip.floating_ip_address).port_details['device_id']) + @pytest.mark.parametrize('new_instance_demo', [(1, True)], indirect=True) @@ -156,8 +157,8 @@ def test_disassociate_floatingip(login, driver, openstack_demo, config, rows[0].find_element_by_css_selector(".data-table-action").click() widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Successfully disassociated Floating IP: " - f"{instance_auto_ip}" in messages) + assert (f"Success: Successfully disassociated Floating IP: " + f"{instance_auto_ip}" in messages) instance_sdk = openstack_demo.compute.find_server(new_instance_demo.id) assert (len(instance_sdk.addresses['default_test_network']) == 1) assert (instance_sdk.addresses['default_test_network'] diff --git a/openstack_dashboard/test/selenium/integration/test_groups.py b/openstack_dashboard/test/selenium/integration/test_groups.py index 3828bc6dc6..a4dec820a6 100644 --- a/openstack_dashboard/test/selenium/integration/test_groups.py +++ b/openstack_dashboard/test/selenium/integration/test_groups.py @@ -52,8 +52,8 @@ def test_create_group(login, driver, group_name, openstack_admin, config, 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) - assert(f'Success: Group "{group_name}" was successfully created.' - in messages) + assert (f'Success: Group "{group_name}" was successfully created.' + in messages) assert openstack_admin.identity.find_group(group_name) is not None @@ -99,9 +99,9 @@ def test_edit_group_name_and_description(login, driver, group_name, f"EDITED_Description for: {group_name}") group_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) - assert f"Success: Group has been updated successfully." in messages - assert(openstack_admin.identity.find_group( - f"EDITED_{group_name}") is not None) - assert(openstack_admin.identity.find_group( - f"EDITED_{group_name}").description == - f"EDITED_Description for: {group_name}") + assert "Success: Group has been updated successfully." in messages + assert (openstack_admin.identity.find_group( + f"EDITED_{group_name}") is not None) + assert (openstack_admin.identity.find_group( + f"EDITED_{group_name}").description == + f"EDITED_Description for: {group_name}") diff --git a/openstack_dashboard/test/selenium/integration/test_grouptypes.py b/openstack_dashboard/test/selenium/integration/test_grouptypes.py index 151caccd17..24491fa504 100644 --- a/openstack_dashboard/test/selenium/integration/test_grouptypes.py +++ b/openstack_dashboard/test/selenium/integration/test_grouptypes.py @@ -52,10 +52,10 @@ def test_create_grouptype(login, driver, grouptype_name, openstack_admin, 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) - assert(f'Success: Successfully created group type: {grouptype_name}' - in messages) - assert(openstack_admin.block_storage.find_group_type(grouptype_name) - is not None) + assert (f'Success: Successfully created group type: {grouptype_name}' + in messages) + assert (openstack_admin.block_storage.find_group_type(grouptype_name) + is not None) def test_delete_grouptype(login, driver, grouptype_name, openstack_admin, diff --git a/openstack_dashboard/test/selenium/integration/test_host_aggregates.py b/openstack_dashboard/test/selenium/integration/test_host_aggregates.py index 88676799dc..c8d526639b 100644 --- a/openstack_dashboard/test/selenium/integration/test_host_aggregates.py +++ b/openstack_dashboard/test/selenium/integration/test_host_aggregates.py @@ -66,8 +66,8 @@ def test_create_host_aggregate(login, driver, openstack_admin, config, host_aggregate_form.find_element_by_css_selector( ".btn-primary[value='Create Host Aggregate']").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f'Success: Created new host aggregate "{host_aggregate_name}".' - in messages) + assert (f'Success: Created new host aggregate "{host_aggregate_name}".' + in messages) is_host_aggregate_created_sdk = False host_aggregates_sdk = openstack_admin.compute.get( "/os-aggregates").json()['aggregates'] @@ -94,8 +94,8 @@ def test_delete_host_aggregate(login, driver, openstack_admin, config, widgets.select_from_dropdown(actions_column, "Delete Host Aggregate") widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Deleted Host Aggregate: " - f"{new_host_aggregate['aggregate']['name']}" in messages) + assert (f"Success: Deleted Host Aggregate: " + f"{new_host_aggregate['aggregate']['name']}" in messages) is_host_aggregate_deleted_sdk = True host_aggregates_sdk = openstack_admin.compute.get( "/os-aggregates").json()['aggregates'] diff --git a/openstack_dashboard/test/selenium/integration/test_images.py b/openstack_dashboard/test/selenium/integration/test_images.py index 482cff0d7a..1d637143fd 100644 --- a/openstack_dashboard/test/selenium/integration/test_images.py +++ b/openstack_dashboard/test/selenium/integration/test_images.py @@ -164,8 +164,8 @@ def test_image_create_from_local_file_demo(login, driver, image_names, "[label='QCOW2 - QEMU Emulator']").click() wizard.find_element_by_css_selector("button.btn-primary.finish").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Image {image_name} was successfully" - f" created." in messages) + assert (f"Success: Image {image_name} was successfully" + f" created." in messages) assert openstack_demo.compute.find_image(image_name) is not None @@ -263,8 +263,8 @@ def test_image_create_from_local_file_admin(login, driver, image_names, "[label='QCOW2 - QEMU Emulator']").click() wizard.find_element_by_css_selector("button.btn-primary.finish").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Image {image_name} was successfully" - f" created." in messages) + assert (f"Success: Image {image_name} was successfully" + f" created." in messages) assert openstack_admin.compute.find_image(image_name) is not None @@ -387,7 +387,7 @@ def test_remove_protected_image_admin(login, driver, image_names, if option.text == "Delete Image": pytest.fail("Delete option should not exist") actions_column.find_element_by_xpath( - f".//*[normalize-space()='Edit Image']").click() + ".//*[normalize-space()='Edit Image']").click() wait_for_angular_readiness(driver) image_form = driver.find_element_by_css_selector(".ng-wizard") image_form.find_element_by_xpath(".//label[text()='No']").click() @@ -475,7 +475,7 @@ def test_update_image_metadata_admin(login, driver, image_form.find_element_by_xpath( "//button[@ng-click='modal.save()']").click() messages = widgets.get_and_dismiss_messages(driver) - assert f"Success: Metadata was successfully updated." in messages + assert "Success: Metadata was successfully updated." in messages image_id = new_image_admin.id for name, value in new_metadata.items(): assert (openstack_admin.compute.get(f"/images/{image_id}").json( @@ -522,7 +522,7 @@ def test_launch_instance_from_image_admin(complete_default_test_network, login, wizard.find_element_by_css_selector( "button.btn-primary.finish").click() messages = widgets.get_and_dismiss_messages(driver) - assert f"Info: Scheduled creation of 1 instance." in messages + assert "Info: Scheduled creation of 1 instance." in messages assert openstack_admin.compute.find_server(instance_name) is not None @@ -547,8 +547,8 @@ def test_create_volume_from_image_admin(login, driver, volume_name, name_field.clear() name_field.send_keys(volume_name) create_vol_btn = WebDriverWait(driver, config.selenium.page_timeout).until( - EC.element_to_be_clickable((By.XPATH, f"//button[@class='btn " - f"btn-primary finish']"))) + EC.element_to_be_clickable( + (By.XPATH, "//button[@class='btn btn-primary finish']"))) create_vol_btn.click() messages = widgets.get_and_dismiss_messages(driver) assert f"Info: Creating volume {volume_name}" in messages diff --git a/openstack_dashboard/test/selenium/integration/test_instances.py b/openstack_dashboard/test/selenium/integration/test_instances.py index 4fe361c9b3..4ddd93afd1 100644 --- a/openstack_dashboard/test/selenium/integration/test_instances.py +++ b/openstack_dashboard/test/selenium/integration/test_instances.py @@ -105,7 +105,7 @@ def apply_instance_name_filter(driver, config, name_pattern): driver.find_element_by_css_selector( f".table_search input[value='{name_pattern}']") break - except(exceptions.NoSuchElementException): + except (exceptions.NoSuchElementException): time.sleep(3) diff --git a/openstack_dashboard/test/selenium/integration/test_keypairs.py b/openstack_dashboard/test/selenium/integration/test_keypairs.py index 96c05022a5..1c0d587d6b 100644 --- a/openstack_dashboard/test/selenium/integration/test_keypairs.py +++ b/openstack_dashboard/test/selenium/integration/test_keypairs.py @@ -58,8 +58,8 @@ def test_create_keypair_demo(login, driver, openstack_demo, clear_keypair_demo, 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) - assert(f'Success: Key pair {keypair_name} was successfully created.' - in messages) + assert (f'Success: Key pair {keypair_name} was successfully created.' + in messages) assert openstack_demo.compute.find_keypair(keypair_name) is not None diff --git a/openstack_dashboard/test/selenium/integration/test_metadata_definitions.py b/openstack_dashboard/test/selenium/integration/test_metadata_definitions.py index 08ee1bee03..907ce6803a 100644 --- a/openstack_dashboard/test/selenium/integration/test_metadata_definitions.py +++ b/openstack_dashboard/test/selenium/integration/test_metadata_definitions.py @@ -19,8 +19,8 @@ from openstack_dashboard.test.selenium import widgets @pytest.fixture def metadata_namespace_name(): - return('horizon_metadata_namespace_%s' % - uuidutils.generate_uuid(dashed=False)) + return ('horizon_metadata_namespace_%s' % + uuidutils.generate_uuid(dashed=False)) @pytest.fixture @@ -78,8 +78,8 @@ def test_create_metadata_namespace(login, driver, metadata_namespace_name, 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) - assert(f"Success: Namespace {metadata_namespace_name} " - f"has been created." in messages) + assert (f"Success: Namespace {metadata_namespace_name} " + f"has been created." in messages) try: openstack_admin.image.get_metadef_namespace(metadata_namespace_name) assert True @@ -105,8 +105,8 @@ def test_delete_metadata_namespace(login, driver, new_metadata_namespace, widgets.select_from_dropdown(actions_column, "Delete Namespace") widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Deleted Namespace: " - f"{new_metadata_namespace.namespace}" in messages) + assert (f"Success: Deleted Namespace: " + f"{new_metadata_namespace.namespace}" in messages) try: openstack_admin.image.get_metadef_namespace( new_metadata_namespace.namespace) diff --git a/openstack_dashboard/test/selenium/integration/test_networks.py b/openstack_dashboard/test/selenium/integration/test_networks.py index f4984f8b23..4f89746df8 100644 --- a/openstack_dashboard/test/selenium/integration/test_networks.py +++ b/openstack_dashboard/test/selenium/integration/test_networks.py @@ -77,7 +77,7 @@ def ensure_checkbox(required_state, element): current_state = element.is_selected() if required_state != current_state: element.find_element_by_xpath( - f".//following-sibling::label").click() # noqa: E231 + ".//following-sibling::label").click() # noqa: E231 def test_create_network_without_subnet_demo(login, openstack_demo, driver, diff --git a/openstack_dashboard/test/selenium/integration/test_projects.py b/openstack_dashboard/test/selenium/integration/test_projects.py index 815695915f..ff62cb4dd6 100644 --- a/openstack_dashboard/test/selenium/integration/test_projects.py +++ b/openstack_dashboard/test/selenium/integration/test_projects.py @@ -126,7 +126,7 @@ def test_add_member_to_project(login, driver, project_name, openstack_admin, ".btn-primary[value='Save']").click() messages = widgets.get_and_dismiss_messages(driver) assert f'Success: Modified project "{project_name}".' in messages - assert(openstack_admin.identity.validate_user_has_project_role( + assert (openstack_admin.identity.validate_user_has_project_role( project=new_project, user=openstack_admin.identity.find_user(admin_name).id, role=openstack_admin.identity.find_role(regular_role_name).id,) @@ -157,9 +157,9 @@ def test_add_role_to_project_member(login, driver, openstack_admin, config, project_form.find_element_by_css_selector( ".btn-primary[value='Save']").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f'Success: Modified project ' - f'"{new_project_with_admin.name}".' in messages) - assert(openstack_admin.identity.validate_user_has_project_role( + assert (f'Success: Modified project ' + f'"{new_project_with_admin.name}".' in messages) + assert (openstack_admin.identity.validate_user_has_project_role( project=new_project_with_admin, user=openstack_admin.identity.find_user(admin_name).id, role=openstack_admin.identity.find_role(regular_role_name).id,) and @@ -194,7 +194,7 @@ def test_add_group_to_project(login, driver, openstack_admin, ".btn-primary[value='Save']").click() messages = widgets.get_and_dismiss_messages(driver) assert f'Success: Modified project "{new_project.name}".' in messages - assert(openstack_admin.identity.validate_group_has_project_role( + assert (openstack_admin.identity.validate_group_has_project_role( project=new_project, group=openstack_admin.identity.find_group(group_name).id, role=openstack_admin.identity.find_role(regular_role_name).id,) @@ -226,9 +226,9 @@ def test_add_role_to_project_group(login, driver, openstack_admin, config, project_form.find_element_by_css_selector( ".btn-primary[value='Save']").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f'Success: Modified project ' - f'"{new_project_with_group.name}".' in messages) - assert(openstack_admin.identity.validate_group_has_project_role( + assert (f'Success: Modified project ' + f'"{new_project_with_group.name}".' in messages) + assert (openstack_admin.identity.validate_group_has_project_role( project=new_project_with_group, group=openstack_admin.identity.find_group(group_name).id, role=openstack_admin.identity.find_role(regular_role_name).id,) and diff --git a/openstack_dashboard/test/selenium/integration/test_routers.py b/openstack_dashboard/test/selenium/integration/test_routers.py index 6dc0cdc6e2..2b666c1426 100644 --- a/openstack_dashboard/test/selenium/integration/test_routers.py +++ b/openstack_dashboard/test/selenium/integration/test_routers.py @@ -110,8 +110,8 @@ def test_create_router_demo(login, driver, router_name, openstack_demo, router_form.find_element_by_css_selector( ".btn-primary[value='Create Router']").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f'Success: Router {router_name} was successfully created.' - in messages) + assert (f'Success: Router {router_name} was successfully created.' + in messages) assert openstack_demo.network.find_router(router_name) is not None @@ -202,7 +202,7 @@ def test_router_delete_interface_demo(login, driver, router_name, widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) assert f"Success: Deleted Interface: {extracted_port_name}" in messages - assert(openstack_demo.network.find_port( + assert (openstack_demo.network.find_port( new_interface['port_id']) is None) @@ -223,21 +223,21 @@ def test_router_set_gateway_demo(login, driver, new_router_demo, f"/routers/{new_router_demo.id}" f"?fields=id&fields=name&fields=" f"external_gateway_info").json()['router'] - assert(router_sdk["external_gateway_info"] is None) + assert (router_sdk["external_gateway_info"] is None) rows[0].find_element_by_css_selector(".data-table-action").click() gateway_form = driver.find_element_by_css_selector(".modal-dialog form") 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) - assert f"Success: Gateway interface is added" in messages + assert "Success: Gateway interface is added" in messages router_sdk = openstack_demo.network.get( f"/routers/{new_router_demo.id}" f"?fields=id&fields=name&fields=" f"external_gateway_info").json()['router'] - assert(router_sdk["external_gateway_info"]["network_id"] == - openstack_demo.network.find_network( - config.network.external_network).id) + assert (router_sdk["external_gateway_info"]["network_id"] == + openstack_demo.network.find_network( + config.network.external_network).id) def test_router_clear_gateway_demo(login, driver, new_router_with_gateway, @@ -257,19 +257,19 @@ def test_router_clear_gateway_demo(login, driver, new_router_with_gateway, f"/routers/{new_router_with_gateway.id}" f"?fields=id&fields=name&fields=" f"external_gateway_info").json()['router'] - assert(router_sdk["external_gateway_info"]["network_id"] == - openstack_demo.network.find_network( - config.network.external_network).id) + assert (router_sdk["external_gateway_info"]["network_id"] == + openstack_demo.network.find_network( + 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) - assert(f"Success: Cleared Gateway: {new_router_with_gateway.name}" in - messages) + assert (f"Success: Cleared Gateway: {new_router_with_gateway.name}" in + messages) router_sdk = openstack_demo.network.get( f"/routers/{new_router_with_gateway.id}" f"?fields=id&fields=name&fields=" f"external_gateway_info").json()['router'] - assert(router_sdk["external_gateway_info"] is None) + assert (router_sdk["external_gateway_info"] is None) def test_create_router_admin(login, driver, router_name, openstack_admin, @@ -291,8 +291,8 @@ def test_create_router_admin(login, driver, router_name, openstack_admin, router_form.find_element_by_css_selector( ".btn-primary[value='Create Router']").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f'Success: Router {router_name} was successfully created.' - in messages) + assert (f'Success: Router {router_name} was successfully created.' + in messages) assert openstack_admin.network.find_router(router_name) is not None diff --git a/openstack_dashboard/test/selenium/integration/test_security_groups.py b/openstack_dashboard/test/selenium/integration/test_security_groups.py index 4094e44050..ea9a470e8b 100644 --- a/openstack_dashboard/test/selenium/integration/test_security_groups.py +++ b/openstack_dashboard/test/selenium/integration/test_security_groups.py @@ -67,10 +67,10 @@ def test_create_sec_group_demo(login, driver, config, sec_group_name, 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) - assert(f'Success: Successfully created security group: {sec_group_name}' - in messages) - assert(openstack_demo.network.find_security_group(sec_group_name) - is not None) + assert (f'Success: Successfully created security group: {sec_group_name}' + in messages) + assert (openstack_demo.network.find_security_group(sec_group_name) + is not None) def test_delete_sec_group_demo(login, driver, sec_group_name, openstack_demo, @@ -109,13 +109,13 @@ def test_add_rule_sec_group_demo(login, driver, sec_group_name, openstack_demo, 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) - assert(f"Success: Successfully added rule: ALLOW IPv4 {rule_port}" - f"/tcp from 0.0.0.0/0" in messages) + 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( sec_group_name).security_group_rules rule_port_found = False for rule_sdk in sec_group_rules_sdk: - if(rule_sdk['port_range_min'] == rule_port and + if (rule_sdk['port_range_min'] == rule_port and rule_sdk['port_range_max'] == rule_port): rule_port_found = True assert rule_port_found @@ -139,8 +139,8 @@ def test_delete_rule_sec_group_demo(login, driver, sec_group_name, rows[0].find_element_by_css_selector("td.actions_column").click() widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Deleted Rule: ALLOW IPv4 {rule_port}/tcp from 0.0.0.0/0" - in messages) + 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( sec_group_name).security_group_rules rule_port_found = False @@ -148,4 +148,4 @@ def test_delete_rule_sec_group_demo(login, driver, sec_group_name, if (rule_sdk['port_range_min'] == rule_port and rule_sdk['port_range_max'] == rule_port): rule_port_found = True - assert not(rule_port_found) + assert not (rule_port_found) diff --git a/openstack_dashboard/test/selenium/integration/test_user_credentials.py b/openstack_dashboard/test/selenium/integration/test_user_credentials.py index 43293f05b2..608b576d9e 100644 --- a/openstack_dashboard/test/selenium/integration/test_user_credentials.py +++ b/openstack_dashboard/test/selenium/integration/test_user_credentials.py @@ -51,7 +51,7 @@ def test_create_user_credential_totp(login, driver, openstack_admin, config, )) driver.get(url) credentials_sdk_before = list(openstack_admin.identity.credentials()) - assert(len(credentials_sdk_before) == 0) + assert (len(credentials_sdk_before) == 0) driver.find_element_by_link_text("Create User Credential").click() user_credential_form = driver.find_element_by_css_selector( ".modal-dialog form") @@ -59,10 +59,10 @@ def test_create_user_credential_totp(login, driver, openstack_admin, config, 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) - assert f'Success: User credential created successfully.' in messages + assert 'Success: User credential created successfully.' in messages credentials_sdk_after = list(openstack_admin.identity.credentials()) - assert(len(credentials_sdk_after) == 1 and - credentials_sdk_after[0]['type'] == 'totp') + assert (len(credentials_sdk_after) == 1 and + credentials_sdk_after[0]['type'] == 'totp') def test_create_user_credential_ec2(login, driver, openstack_admin, config, @@ -75,7 +75,7 @@ def test_create_user_credential_ec2(login, driver, openstack_admin, config, )) driver.get(url) credentials_sdk_before = list(openstack_admin.identity.credentials()) - assert(len(credentials_sdk_before) == 0) + assert (len(credentials_sdk_before) == 0) driver.find_element_by_link_text("Create User Credential").click() user_credential_form = driver.find_element_by_css_selector( ".modal-dialog form") @@ -88,14 +88,14 @@ def test_create_user_credential_ec2(login, driver, openstack_admin, config, user_credential_form, 'id_project', 'admin') user_credential_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) - assert f'Success: User credential created successfully.' in messages + assert 'Success: User credential created successfully.' in messages credentials_sdk_after = list(openstack_admin.identity.credentials()) - assert(len(credentials_sdk_after) == 1 and - credentials_sdk_after[0]['type'] == 'ec2' and - (credentials_sdk_after[0]['blob'] == - '{"access": "acs", "secret": "scrt"}') and - (credentials_sdk_after[0]['project_id'] == - openstack_admin.identity.find_project('admin').id)) + assert (len(credentials_sdk_after) == 1 and + credentials_sdk_after[0]['type'] == 'ec2' and + (credentials_sdk_after[0]['blob'] == + '{"access": "acs", "secret": "scrt"}') and + (credentials_sdk_after[0]['project_id'] == + openstack_admin.identity.find_project('admin').id)) def test_delete_user_credential(login, driver, openstack_admin, config, @@ -114,10 +114,10 @@ def test_delete_user_credential(login, driver, openstack_admin, config, widgets.select_from_dropdown(actions_column, "Delete User Credential") widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Deleted User Credential: {user_credential_blob}" in - messages) + assert (f"Success: Deleted User Credential: {user_credential_blob}" in + messages) credentials_sdk_after = list(openstack_admin.identity.credentials()) - assert(len(credentials_sdk_after) == 0) + assert (len(credentials_sdk_after) == 0) def test_edit_user_credential(login, driver, openstack_admin, config, @@ -140,10 +140,10 @@ def test_edit_user_credential(login, driver, openstack_admin, config, f"EDITED_{user_credential_blob}") user_credential_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: User credential updated successfully." in messages) + assert ("Success: User credential updated successfully." in messages) credentials_sdk = list(openstack_admin.identity.credentials()) - assert(len(credentials_sdk) == 1 and - credentials_sdk[0]['blob'] == f'EDITED_{user_credential_blob}') + assert (len(credentials_sdk) == 1 and + credentials_sdk[0]['blob'] == f'EDITED_{user_credential_blob}') def test_user_credential_filtration(login, driver, openstack_admin, @@ -163,12 +163,12 @@ def test_user_credential_filtration(login, driver, openstack_admin, try: driver.find_element_by_xpath( "//td[text()='No items to display.']") - except(exceptions.NoSuchElementException): + except exceptions.NoSuchElementException: assert False, "Message 'No items to display' not found" filter_input_field = driver.find_element_by_css_selector(".form-control") filter_input_field.clear() filter_input_field.send_keys('admin') driver.find_element_by_id("credentialstable__action_filter").click() rows = driver.find_elements_by_css_selector( - f"table#credentialstable tr[data-display]") + "table#credentialstable tr[data-display]") assert len(rows) == 1 diff --git a/openstack_dashboard/test/selenium/integration/test_users.py b/openstack_dashboard/test/selenium/integration/test_users.py index c6e405beb6..9e6889d447 100644 --- a/openstack_dashboard/test/selenium/integration/test_users.py +++ b/openstack_dashboard/test/selenium/integration/test_users.py @@ -102,4 +102,4 @@ def test_change_user_password(login, driver, user_name, new_user, config): "id_confirm_password").send_keys(new_password) password_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) - assert f"Success: User password has been updated successfully." in messages + assert "Success: User password has been updated successfully." in messages diff --git a/openstack_dashboard/test/selenium/integration/test_volume_snapshots.py b/openstack_dashboard/test/selenium/integration/test_volume_snapshots.py index 41e8041328..ab93477548 100644 --- a/openstack_dashboard/test/selenium/integration/test_volume_snapshots.py +++ b/openstack_dashboard/test/selenium/integration/test_volume_snapshots.py @@ -164,8 +164,8 @@ def test_create_volume_snapshot_demo(login, driver, volume_name, volume_snapshot_name) create_snap_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f'Info: Creating volume snapshot "{volume_snapshot_name}".' - in messages) + assert (f'Info: Creating volume snapshot "{volume_snapshot_name}".' + in messages) assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name) is not None) @@ -188,8 +188,8 @@ def test_delete_volume_snapshot_demo(login, driver, volume_snapshot_names, widgets.select_from_dropdown(actions_column, "Delete Volume Snapshot") widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Scheduled deletion of Volume Snapshot: " - f"{volume_snapshot_name}" in messages) + 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) assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name) is None) @@ -217,9 +217,9 @@ def test_edit_volume_snapshot_description_demo(login, driver, openstack_demo, 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) - assert(f'Info: Updating volume snapshot ' - f'"{new_volume_snapshot_demo.name}"' in messages) - assert(openstack_demo.block_storage.find_snapshot( + assert (f'Info: Updating volume snapshot ' + f'"{new_volume_snapshot_demo.name}"' in messages) + assert (openstack_demo.block_storage.find_snapshot( new_volume_snapshot_demo.name).description == f"EDITED_Description for: {new_volume_snapshot_demo.name}") @@ -247,8 +247,8 @@ def test_create_volume_from_volume_snapshot_demo(login, driver, openstack_demo, volume_from_snapshot_name) volume_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f'Info: Creating volume "{volume_from_snapshot_name}"' in messages) - assert(openstack_demo.block_storage.find_volume( + 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) @@ -270,12 +270,12 @@ def test_delete_volume_from_volume_snapshot_demo(login, driver, openstack_demo, widgets.select_from_dropdown(actions_column, "Delete Volume") widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Info: Scheduled deletion of Volume: " - f"{new_volume_from_snapshot_demo.name}" in messages) + assert (f"Info: Scheduled deletion of Volume: " + f"{new_volume_from_snapshot_demo.name}" in messages) test_volumes.wait_for_volume_is_deleted( openstack_demo, new_volume_from_snapshot_demo.name) assert (openstack_demo.block_storage.find_volume( - new_volume_from_snapshot_demo.name)is None) + new_volume_from_snapshot_demo.name) is None) def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo, @@ -303,8 +303,8 @@ def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo, "Delete Volume Snapshot") widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Scheduled deletion of Volume Snapshot: " - f"{volume_snapshot_name}" in messages) + 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) assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name) is None) @@ -323,8 +323,8 @@ def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo, widgets.select_from_dropdown(actions_column_volume, "Delete Volume") widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Info: Scheduled deletion of Volume: " - f"{new_volume_from_snapshot_demo.name}" in messages) + assert (f"Info: Scheduled deletion of Volume: " + f"{new_volume_from_snapshot_demo.name}" in messages) test_volumes.wait_for_volume_is_deleted( openstack_demo, new_volume_from_snapshot_demo.name) assert (openstack_demo.block_storage.find_volume( @@ -426,8 +426,8 @@ def test_create_volume_snapshot_admin(login, driver, new_volume_admin, volume_snapshot_name) snapshot_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f'Info: Creating volume snapshot "{volume_snapshot_name}".' - in messages) + assert (f'Info: Creating volume snapshot "{volume_snapshot_name}".' + in messages) assert (openstack_admin.block_storage.find_snapshot(volume_snapshot_name) is not None) @@ -449,12 +449,12 @@ def test_delete_volume_snapshot_admin(login, driver, openstack_admin, widgets.select_from_dropdown(actions_column, "Delete Volume Snapshot") widgets.confirm_modal(driver) messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Scheduled deletion of Volume Snapshot: " - f"{new_volume_snapshot_admin.name}" in messages) + assert (f"Success: Scheduled deletion of Volume Snapshot: " + f"{new_volume_snapshot_admin.name}" in messages) wait_for_volume_snapshot_is_deleted(openstack_admin, new_volume_snapshot_admin.name) assert (openstack_admin.block_storage.find_snapshot( - new_volume_snapshot_admin.name)is None) + new_volume_snapshot_admin.name) is None) def test_edit_volume_snapshot_description_admin(login, driver, openstack_admin, @@ -479,9 +479,9 @@ def test_edit_volume_snapshot_description_admin(login, driver, openstack_admin, 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) - assert(f'Info: Updating volume snapshot ' - f'"{new_volume_snapshot_admin.name}"' in messages) - assert(openstack_admin.block_storage.find_snapshot( + assert (f'Info: Updating volume snapshot ' + f'"{new_volume_snapshot_admin.name}"' in messages) + assert (openstack_admin.block_storage.find_snapshot( new_volume_snapshot_admin.name).description == f"EDITED_Description for: {new_volume_snapshot_admin.name}") diff --git a/openstack_dashboard/test/selenium/integration/test_volumes.py b/openstack_dashboard/test/selenium/integration/test_volumes.py index c16764e718..42f7dcc2b6 100644 --- a/openstack_dashboard/test/selenium/integration/test_volumes.py +++ b/openstack_dashboard/test/selenium/integration/test_volumes.py @@ -144,8 +144,8 @@ def test_edit_volume_description_demo(login, driver, volume_name, config, volume_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) 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}") + assert (openstack_demo.block_storage.find_volume( + volume_name).description == f"EDITED_Description for: {volume_name}") def test_extend_volume_demo(login, driver, openstack_demo, new_volume_demo, @@ -161,7 +161,7 @@ def test_extend_volume_demo(login, driver, openstack_demo, new_volume_demo, f"table#volumes tr[data-display='{new_volume_demo.name}']" ) assert len(rows) == 1 - assert(openstack_demo.block_storage.find_volume( + assert (openstack_demo.block_storage.find_volume( new_volume_demo.name).size == 1) actions_column = rows[0].find_element_by_css_selector("td.actions_column") widgets.select_from_dropdown(actions_column, "Extend Volume") @@ -172,7 +172,7 @@ def test_extend_volume_demo(login, driver, openstack_demo, new_volume_demo, messages = widgets.get_and_dismiss_messages(driver) assert f'Info: Extending volume: "{new_volume_demo.name}"' in messages wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) - assert(openstack_demo.block_storage.find_volume( + assert (openstack_demo.block_storage.find_volume( new_volume_demo.name).size == 2) @@ -218,7 +218,7 @@ def test_volume_launch_as_instance_demo(login, driver, openstack_demo, WebDriverWait(driver, config.selenium.page_timeout).until( EC.invisibility_of_element_located(actions_column)) wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) - assert(openstack_demo.block_storage.find_volume( + assert (openstack_demo.block_storage.find_volume( new_volume_demo.name).attachments[0]['server_id'] == openstack_demo.compute.find_server(instance_name).id) @@ -245,8 +245,8 @@ def test_volume_upload_to_image_demo(login, driver, openstack_demo, volume_form.find_element_by_css_selector( ".btn-primary[value='Upload']").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f'Info: Successfully sent the request to upload volume to image for ' - f'volume: "{new_volume_demo.name}"' in messages) + 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) assert openstack_demo.compute.find_image(image_names[0]) is not None @@ -346,10 +346,10 @@ def test_manage_volume_attachments(login, driver, openstack_demo, attach_to_instance_form.find_element_by_css_selector( ".btn-primary[value='Attach Volume']").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f"Info: Attaching volume {new_volume_demo.name} to instance " - f"{new_instance_demo.name} on /dev/vdb." in messages) + assert (f"Info: Attaching volume {new_volume_demo.name} to instance " + f"{new_instance_demo.name} on /dev/vdb." in messages) wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) - assert(openstack_demo.block_storage.find_volume( + assert (openstack_demo.block_storage.find_volume( new_volume_demo.id).attachments[0]['server_id'] == new_instance_demo.id) @@ -369,10 +369,10 @@ def test_manage_volume_attachments(login, driver, openstack_demo, driver.find_element_by_xpath( ".//a[normalize-space()='Detach Volume']").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Detaching Volume: Volume {new_volume_demo.name} " - f"on instance {new_instance_demo.name}" in messages) + assert (f"Success: Detaching Volume: Volume {new_volume_demo.name} " + f"on instance {new_instance_demo.name}" in messages) wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) - assert(openstack_demo.block_storage.find_volume( + assert (openstack_demo.block_storage.find_volume( new_volume_demo.id).attachments == []) @@ -470,8 +470,8 @@ def test_edit_volume_description_admin(login, driver, volume_name, config, volume_form.find_element_by_css_selector(".btn-primary").click() messages = widgets.get_and_dismiss_messages(driver) 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}") + assert (openstack_admin.block_storage.find_volume( + volume_name).description == f"EDITED_Description for: {volume_name}") @pytest.mark.parametrize('volume_name', [3], indirect=True) diff --git a/openstack_dashboard/test/selenium/integration/test_volumetypes.py b/openstack_dashboard/test/selenium/integration/test_volumetypes.py index 7fab7eebb9..01a702ed31 100644 --- a/openstack_dashboard/test/selenium/integration/test_volumetypes.py +++ b/openstack_dashboard/test/selenium/integration/test_volumetypes.py @@ -108,8 +108,8 @@ def test_create_volume_type(login, driver, volume_type_name, openstack_admin, 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) - assert(f'Success: Successfully created volume ' - f'type: {volume_type_name}' in messages) + 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 @@ -151,9 +151,9 @@ def test_volume_type_create_encryption(login, driver, openstack_admin, config, volume_type_form.find_element_by_css_selector( ".btn-primary[value='Create Volume Type Encryption']").click() messages = widgets.get_and_dismiss_messages(driver) - assert(f"Success: Successfully created encryption for " - f"volume type: {new_volume_type.name}" in messages) - assert(openstack_admin.block_storage.get_type_encryption( + assert (f"Success: Successfully created encryption for " + f"volume type: {new_volume_type.name}" in messages) + assert (openstack_admin.block_storage.get_type_encryption( new_volume_type.id).provider == 'plain') @@ -170,16 +170,16 @@ def test_volume_type_delete_encryption(login, driver, openstack_admin, config, f"table#volume_types tr[data-display=" f"'{new_volume_type_with_encryption.name}']") assert len(rows) == 1 - assert(openstack_admin.block_storage.get_type_encryption( + assert (openstack_admin.block_storage.get_type_encryption( new_volume_type_with_encryption.id).provider == 'plain') rows[0].find_element_by_css_selector(".data-table-action") 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) - assert(f"Success: Deleted Encryption: " - f"{new_volume_type_with_encryption.name}" in messages) - assert(openstack_admin.block_storage.get_type_encryption( + assert (f"Success: Deleted Encryption: " + f"{new_volume_type_with_encryption.name}" in messages) + assert (openstack_admin.block_storage.get_type_encryption( new_volume_type_with_encryption.id).provider is None) @@ -197,12 +197,12 @@ def test_create_qos_spec(login, driver, qos_spec_name, openstack_admin, 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) - assert(f'Success: Successfully created QoS ' - f'Spec: {qos_spec_name}' in messages) + assert (f'Success: Successfully created QoS ' + f'Spec: {qos_spec_name}' in messages) qos_specs = openstack_admin.block_storage.get( "/qos-specs").json()['qos_specs'] - assert(len([spec for spec in qos_specs if qos_spec_name == - spec['name']]) > 0) + assert (len([spec for spec in qos_specs if qos_spec_name == + spec['name']]) > 0) def test_delete_qos_spec(login, driver, qos_spec_name, openstack_admin, @@ -224,8 +224,8 @@ def test_delete_qos_spec(login, driver, qos_spec_name, openstack_admin, assert f"Success: Deleted QoS Spec: {qos_spec_name}" in messages qos_specs = openstack_admin.block_storage.get( "/qos-specs").json()['qos_specs'] - assert(len([spec for spec in qos_specs if qos_spec_name == - spec['name']]) == 0) + assert (len([spec for spec in qos_specs if qos_spec_name == + spec['name']]) == 0) def test_edit_qos_spec_consumer(login, driver, openstack_admin, config, @@ -240,7 +240,7 @@ def test_edit_qos_spec_consumer(login, driver, openstack_admin, config, rows = driver.find_elements_by_css_selector( f"table#qos_specs tr[data-display='{new_qos_spec['name']}']") assert len(rows) == 1 - assert(openstack_admin.block_storage.get( + assert (openstack_admin.block_storage.get( f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['consumer'] == 'back-end') actions_column = rows[0].find_element_by_css_selector("td.actions_column") @@ -249,8 +249,8 @@ def test_edit_qos_spec_consumer(login, driver, openstack_admin, config, 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) - assert f"Success: Successfully modified QoS Spec consumer." in messages - assert(openstack_admin.block_storage.get( + 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'] == 'front-end') @@ -275,8 +275,8 @@ def test_qos_spec_create_extra_specs(login, driver, openstack_admin, config, 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) - assert f'Success: Created spec "minIOPS".' in messages - assert(openstack_admin.block_storage.get( + assert 'Success: Created spec "minIOPS".' in messages + assert (openstack_admin.block_storage.get( f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['specs'] == {'minIOPS': '20'}) @@ -294,13 +294,13 @@ def test_qos_spec_delete_extra_specs(login, driver, openstack_admin, config, f'table#qos_specs tr[data-display="' f'{new_qos_spec_with_extra_specs["name"]}"]') assert len(rows) == 1 - assert(openstack_admin.block_storage.get( + assert (openstack_admin.block_storage.get( f"/qos-specs/{new_qos_spec_with_extra_specs['id']}").json() ['qos_specs']['specs'] == {'maxIOPS': '5000'}) rows[0].find_element_by_css_selector(".data-table-action").click() volume_qos_form = driver.find_element_by_css_selector(".modal-dialog form") rows_extra = volume_qos_form.find_elements_by_css_selector( - f"table#specs tr[data-display='maxIOPS']") + "table#specs tr[data-display='maxIOPS']") assert len(rows_extra) == 1 actions_column = rows_extra[0].find_element_by_css_selector( "td.actions_column") @@ -308,7 +308,7 @@ def test_qos_spec_delete_extra_specs(login, driver, openstack_admin, config, driver.find_element_by_css_selector( ".modal-dialog .modal-footer .btn-danger").click() messages = widgets.get_and_dismiss_messages(driver) - assert f"Success: Deleted Spec: maxIOPS" in messages - assert(openstack_admin.block_storage.get( + assert "Success: Deleted Spec: maxIOPS" in messages + assert (openstack_admin.block_storage.get( f"/qos-specs/{new_qos_spec_with_extra_specs['id']}").json() ['qos_specs']['specs'] == {}) diff --git a/openstack_dashboard/test/selenium/ui/test_actions.py b/openstack_dashboard/test/selenium/ui/test_actions.py index d47492cf8a..e24a62e170 100644 --- a/openstack_dashboard/test/selenium/ui/test_actions.py +++ b/openstack_dashboard/test/selenium/ui/test_actions.py @@ -61,9 +61,10 @@ def test_delete_multiple_instance_rows(live_server, driver, dashboard_data, def test_delete_multiple_images_rows(live_server, driver, dashboard_data, user): with mock.patch.object( - api.glance, 'image_list_detailed') as mocked_i_l_d,\ + api.glance, 'image_list_detailed') as mocked_i_l_d, \ mock.patch.object( - api.glance, 'metadefs_namespace_full_list') as mocked_m_n_f_l,\ + api.glance, + 'metadefs_namespace_full_list') as mocked_m_n_f_l, \ mock.patch.object( api.glance, 'image_delete') as mocked_i_d: mocked_i_l_d.return_value = ( diff --git a/openstack_dashboard/test/selenium/ui/test_hypervisors.py b/openstack_dashboard/test/selenium/ui/test_hypervisors.py index c5293e951a..3d5616edab 100644 --- a/openstack_dashboard/test/selenium/ui/test_hypervisors.py +++ b/openstack_dashboard/test/selenium/ui/test_hypervisors.py @@ -52,26 +52,26 @@ def test_vcpu_pcpu_data_display(live_server, driver, user, dashboard_data): driver.get(live_server.url + '/admin/hypervisors') assert (driver.find_element_by_xpath( - f"//*[normalize-space()='vCPU Usage']/" - f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 - f"/div[contains(@class,'h6')]/" # noqa: E231 - f"span[1]").text == str(p['vcpus_used'])) + "//*[normalize-space()='vCPU Usage']/" + "ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 + "/div[contains(@class,'h6')]/" # noqa: E231 + "span[1]").text == str(p['vcpus_used'])) assert (driver.find_element_by_xpath( - f"//*[normalize-space()='vCPU Usage']/" - f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 - f"/div[contains(@class,'h6')]/" # noqa: E231 - f"span[2]").text == str(p['vcpus_capacity'])) + "//*[normalize-space()='vCPU Usage']/" + "ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 + "/div[contains(@class,'h6')]/" # noqa: E231 + "span[2]").text == str(p['vcpus_capacity'])) assert (driver.find_element_by_xpath( - f"//*[normalize-space()='pCPU Usage']/" - f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 - f"/div[contains(@class,'h6')]/" # noqa: E231 - f"span[1]").text == str(p['pcpus_used'])) + "//*[normalize-space()='pCPU Usage']/" + "ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 + "/div[contains(@class,'h6')]/" # noqa: E231 + "span[1]").text == str(p['pcpus_used'])) assert (driver.find_element_by_xpath( - f"//*[normalize-space()='pCPU Usage']/" - f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 - f"/div[contains(@class,'h6')]/" # noqa: E231 - f"span[2]").text == str(p['pcpus_capacity'])) + "//*[normalize-space()='pCPU Usage']/" + "ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 + "/div[contains(@class,'h6')]/" # noqa: E231 + "span[2]").text == str(p['pcpus_capacity'])) driver.find_element_by_link_text("Resource Provider").click() resource_provider_tab = driver.find_element_by_id( diff --git a/openstack_dashboard/test/selenium/ui/test_settings.py b/openstack_dashboard/test/selenium/ui/test_settings.py index 661f88a28a..c829f8bcb9 100644 --- a/openstack_dashboard/test/selenium/ui/test_settings.py +++ b/openstack_dashboard/test/selenium/ui/test_settings.py @@ -37,7 +37,8 @@ def test_switch_to_material_theme(live_server, driver, user, config): driver.find_element_by_css_selector(".navbar-default"))) options = user_dropdown_menu.find_element_by_css_selector( "ul.dropdown-menu[id='editor_list']") - options.find_element_by_xpath(f".//*[normalize-space()='Material']").click() + options.find_element_by_xpath( + ".//*[normalize-space()='Material']").click() WebDriverWait(driver, config.selenium.page_timeout).until( EC.visibility_of_element_located((By.CSS_SELECTOR, '.material-header'))) user_dropdown_menu = driver.find_element_by_css_selector( diff --git a/openstack_dashboard/test/selenium/widgets.py b/openstack_dashboard/test/selenium/widgets.py index c517dd2a55..e85e63d176 100644 --- a/openstack_dashboard/test/selenium/widgets.py +++ b/openstack_dashboard/test/selenium/widgets.py @@ -11,6 +11,7 @@ # under the License. from dataclasses import dataclass + from selenium.common import exceptions from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC diff --git a/tox.ini b/tox.ini index 272dbece56..54f7073113 100644 --- a/tox.ini +++ b/tox.ini @@ -18,7 +18,7 @@ deps = -r{toxinidir}/test-requirements.txt -r{toxinidir}/requirements.txt # Unit test for a local hacking rule requires hacking. - hacking>=3.0.1,<3.1.0 # Apache-2.0 + hacking>=7.0.0,<7.1.0 # Apache-2.0 commands = dj42: pip install django>=4.2,<4.3 find . -type f -name "*.pyc" -delete @@ -30,7 +30,7 @@ commands = {posargs} [testenv:pep8] deps = {[testenv]deps} - flake8-import-order==0.12 # LGPLv3 + flake8-import-order>=0.18.0,<0.19.0 # LGPLv3 pylint==3.3.1 # GPLv2 bandit[baseline]>=1.7.7 # Apache-2.0 setenv = @@ -198,7 +198,9 @@ exclude = .git,.tox,dist,*lib/python*,*egg,build,panel_template,dash_template,lo # Existing codes follows W503, so we disable W504.) # F405 TEMPLATES may be undefined, or defined from star imports # (because it is not easy to avoid this in openstack_dashboard.test.settings) -ignore = W504,F405 +# I201 Missing newline between import groups. +# I202 Additional newline in a group of imports. +ignore = W504,F405,I201,I202 # Enable the following hacking rules which are disabled by default # H106 Do not put vim configuration in source files. # H203 Use assertIs(Not)None to check for None.