Bump hacking

hacking 3.1.x is too old.

Change-Id: I7c7686c36cedb9d88caea2fd74880d138fa00c8e
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
This commit is contained in:
Takashi Kajinami
2025-05-27 15:14:21 +09:00
parent 4e1eb11d81
commit 69dad6e6d6
38 changed files with 224 additions and 215 deletions

View File

@@ -167,7 +167,7 @@ class HorizonMiddleware(object):
""" """
if http_utils.is_ajax(request) and hasattr(request, 'horizon'): if http_utils.is_ajax(request) and hasattr(request, 'horizon'):
queued_msgs = request.horizon['async_messages'] 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 # Drop our messages back into the session as per usual so they
# don't disappear during the redirect. Not that we explicitly # don't disappear during the redirect. Not that we explicitly
# use django's messages methods here. # use django's messages methods here.

View File

@@ -20,8 +20,9 @@ import os
import socket import socket
from horizon.defaults import * # noqa: F401,F403,H303 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) socket.setdefaulttimeout(1)

View File

@@ -167,4 +167,4 @@ def extract_angular(fileobj, keywords, comment_tags, options):
parser.feed(encodeutils.safe_decode(line)) parser.feed(encodeutils.safe_decode(line))
for string in parser.strings: for string in parser.strings:
yield(string) yield string

View File

@@ -91,7 +91,7 @@ class Service(base.APIDictWrapper):
self.region = region self.region = region
def __str__(self): def __str__(self):
if(self.type == "identity"): if self.type == "identity":
return _("%(type)s (%(backend)s backend)") \ return _("%(type)s (%(backend)s backend)") \
% {"type": self.type, "backend": keystone_backend_name()} % {"type": self.type, "backend": keystone_backend_name()}
return self.type return self.type

View File

@@ -46,7 +46,7 @@ class Networks(generic.View):
result = api.neutron.network_list_for_tenant( result = api.neutron.network_list_for_tenant(
request, tenant_id, request, tenant_id,
include_pre_auto_allocate=True) 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) @rest_utils.ajax(data_required=True)
def post(self, request): def post(self, request):
@@ -92,7 +92,7 @@ class Subnets(generic.View):
""" """
result = api.neutron.subnet_list(request, **request.GET.dict()) 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) @rest_utils.ajax(data_required=True)
def post(self, request): def post(self, request):

View File

@@ -169,7 +169,7 @@ def swift_get_containers(request, marker=None, prefix=None):
prefix=prefix, prefix=prefix,
full_listing=True) full_listing=True)
container_objs = [Container(c) for c in containers] 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[0:-1], True)
return (container_objs, False) return (container_objs, False)
@@ -270,7 +270,7 @@ def swift_get_objects(request, container_name, prefix=None, marker=None,
**kwargs) **kwargs)
object_objs = _objectify(objects, container_name) 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[0:-1], True)
return (object_objs, False) return (object_objs, False)

View File

@@ -54,7 +54,7 @@ def openstack(request):
regions = {'support': len(available_regions) > 1, regions = {'support': len(available_regions) > 1,
'current': {'endpoint': request.session.get('region_endpoint'), 'current': {'endpoint': request.session.get('region_endpoint'),
'name': request.session.get('region_name')}, '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]} region in available_regions]}
# K2K Federation Service Providers context/support # K2K Federation Service Providers context/support

View File

@@ -1005,7 +1005,7 @@ class NetworkTests(test.BaseAdminViewTests):
url = reverse('horizon:admin:networks:create') url = reverse('horizon:admin:networks:create')
res = self.client.get(url) res = self.client.get(url)
physical_network = res.context['form'].fields['physical_network'] 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.mock_tenant_list.assert_called_once_with(test.IsHttpRequest())
self._check_is_extension_supported( self._check_is_extension_supported(
@@ -1029,7 +1029,7 @@ class NetworkTests(test.BaseAdminViewTests):
url = reverse('horizon:admin:networks:create') url = reverse('horizon:admin:networks:create')
res = self.client.get(url) res = self.client.get(url)
physical_network = res.context['form'].fields['physical_network'] 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), self.assertListEqual(list(physical_network.choices),
[('default', 'default'), ('test', 'test')]) [('default', 'default'), ('test', 'test')])

View File

@@ -1156,7 +1156,7 @@ class NetworkViewTests(test.TestCase, NetworkStubMixin):
networks = res.context['networks_table'].data networks = res.context['networks_table'].data
button = find_button_fn(res) button = find_button_fn(res)
self.assertFalse('disabled' in button.classes, self.assertNotIn('disabled', button.classes,
"The create button should not be disabled") "The create button should not be disabled")
self._check_net_list() self._check_net_list()

View File

@@ -1221,7 +1221,7 @@ class RouterViewTests(RouterMixin, test.TestCase):
self.assertCountEqual(routers, self.routers.list()) self.assertCountEqual(routers, self.routers.list())
create_action = self.getAndAssertTableAction(res, 'routers', 'create') 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') 'Create button should not be disabled')
self.assertEqual('Create Router', self.assertEqual('Create Router',
create_action.verbose_name) create_action.verbose_name)

View File

@@ -104,7 +104,7 @@ class MetadatadefinitionsPage(basepage.BaseNavigationPage):
return bool(self._get_row_with_namespace_name(name)) return bool(self._get_row_with_namespace_name(name))
def is_public_set_correct(self, name, exp_value, row=None): 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') raise ValueError('Expected value "exp_value" is not boolean')
if not row: if not row:
row = self._get_row_with_namespace_name(name) 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]) return self._is_text_visible(cell, self.boolean_mapping[exp_value])
def is_protected_set_correct(self, name, exp_value, row=None): 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') raise ValueError('Expected value "exp_value" is not boolean')
if not row: if not row:
row = self._get_row_with_namespace_name(name) row = self._get_row_with_namespace_name(name)

View File

@@ -322,6 +322,7 @@ class TestImagesAdvancedAngular(helpers.TestCase):
return InstancesPage(self.driver, self.CONFIG) return InstancesPage(self.driver, self.CONFIG)
"""Login as demo user""" """Login as demo user"""
def test_create_volume_from_image(self): def test_create_volume_from_image(self):
"""This test case checks create volume from image functionality: """This test case checks create volume from image functionality:

View File

@@ -21,6 +21,7 @@ class TestLogin(helpers.BaseTestCase):
* logs in as a regular user * logs in as a regular user
* checks that the user home page loads without error * checks that the user home page loads without error
""" """
def test_login(self): def test_login(self):
login_pg = loginpage.LoginPage(self.driver, self.CONFIG) login_pg = loginpage.LoginPage(self.driver, self.CONFIG)
login_pg.go_to_login_page() login_pg.go_to_login_page()

View File

@@ -85,7 +85,7 @@ def change_page_size(driver, config, page_size):
driver.find_element_by_css_selector( driver.find_element_by_css_selector(
f"#id_pagesize[value='{page_size}']") f"#id_pagesize[value='{page_size}']")
break break
except(exceptions.NoSuchElementException): except exceptions.NoSuchElementException:
time.sleep(3) time.sleep(3)

View File

@@ -56,7 +56,7 @@ def test_download_rc_file_admin(login, driver, config, openstack_admin,
project_id = re.search( project_id = re.search(
r'export OS_PROJECT_ID=(.+)', content).group(1) r'export OS_PROJECT_ID=(.+)', content).group(1)
assert(config.identity.admin_username == username and assert (config.identity.admin_username == username and
config.identity.admin_home_project == project_name and config.identity.admin_home_project == project_name and
openstack_admin.identity.find_project( openstack_admin.identity.find_project(
config.identity.admin_home_project).id == project_id) config.identity.admin_home_project).id == project_id)
@@ -88,7 +88,7 @@ def test_download_rc_file_demo(login, driver, config, openstack_admin,
project_id = re.search( project_id = re.search(
r'export OS_PROJECT_ID=(.+)', content).group(1) r'export OS_PROJECT_ID=(.+)', content).group(1)
assert(config.identity.username == username and assert (config.identity.username == username and
config.identity.home_project == project_name and config.identity.home_project == project_name and
openstack_admin.identity.find_project( openstack_admin.identity.find_project(
config.identity.home_project).id == project_id) config.identity.home_project).id == project_id)

View File

@@ -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_id("id_cores").send_keys(number_of_cores)
defaults_form.find_element_by_css_selector(".btn-primary").click() defaults_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) 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( new_quotas = openstack_admin.compute.get(
"/os-quota-class-sets/default").json() "/os-quota-class-sets/default").json()
assert( assert (
new_quotas["quota_class_set"]["instances"] == number_of_instances and new_quotas["quota_class_set"]["instances"] == number_of_instances and
new_quotas["quota_class_set"]["cores"] == number_of_cores) 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) number_of_snapshots)
defaults_form.find_element_by_css_selector(".btn-primary").click() defaults_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) 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( new_quotas = openstack_admin.block_storage.get(
"/os-quota-class-sets/default").json() "/os-quota-class-sets/default").json()
assert(new_quotas["quota_class_set"]["volumes"] == number_of_volumes and assert (new_quotas["quota_class_set"]["volumes"] == number_of_volumes and
new_quotas["quota_class_set"]["snapshots"] == number_of_snapshots) new_quotas["quota_class_set"]["snapshots"] == number_of_snapshots)

View File

@@ -20,7 +20,7 @@ from openstack_dashboard.test.selenium import widgets
@pytest.fixture @pytest.fixture
def floatingip_description(): def floatingip_description():
return('horizon_floatingip_description_%s' return ('horizon_floatingip_description_%s'
% uuidutils.generate_uuid(dashed=False)) % uuidutils.generate_uuid(dashed=False))
@@ -100,7 +100,7 @@ def test_release_floatingip(login, driver, openstack_demo, config,
widgets.select_from_dropdown(actions_column, "Release Floating IP") widgets.select_from_dropdown(actions_column, "Release Floating IP")
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Released Floating IP: " assert (f"Success: Released Floating IP: "
f"{new_floating_ip.floating_ip_address}" in messages) f"{new_floating_ip.floating_ip_address}" in messages)
assert openstack_demo.network.find_ip( assert openstack_demo.network.find_ip(
new_floating_ip.floating_ip_address) is None new_floating_ip.floating_ip_address) is None
@@ -129,11 +129,12 @@ def test_associate_floatingip(login, driver, openstack_demo, new_floating_ip,
f"{instance_name}: {new_instance_demo.private_v4}") f"{instance_name}: {new_instance_demo.private_v4}")
associateip_form.find_element_by_css_selector(".btn-primary").click() associateip_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: IP address {new_floating_ip.floating_ip_address}" assert (f"Success: IP address {new_floating_ip.floating_ip_address}"
f" associated." in messages) f" associated." in messages)
assert(new_instance_demo.id == openstack_demo.network.find_ip( assert (new_instance_demo.id == openstack_demo.network.find_ip(
new_floating_ip.floating_ip_address).port_details['device_id']) new_floating_ip.floating_ip_address).port_details['device_id'])
@pytest.mark.parametrize('new_instance_demo', [(1, True)], @pytest.mark.parametrize('new_instance_demo', [(1, True)],
indirect=True) indirect=True)
def test_disassociate_floatingip(login, driver, openstack_demo, config, def test_disassociate_floatingip(login, driver, openstack_demo, config,
@@ -156,7 +157,7 @@ def test_disassociate_floatingip(login, driver, openstack_demo, config,
rows[0].find_element_by_css_selector(".data-table-action").click() rows[0].find_element_by_css_selector(".data-table-action").click()
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Successfully disassociated Floating IP: " assert (f"Success: Successfully disassociated Floating IP: "
f"{instance_auto_ip}" in messages) f"{instance_auto_ip}" in messages)
instance_sdk = openstack_demo.compute.find_server(new_instance_demo.id) instance_sdk = openstack_demo.compute.find_server(new_instance_demo.id)
assert (len(instance_sdk.addresses['default_test_network']) == 1) assert (len(instance_sdk.addresses['default_test_network']) == 1)

View File

@@ -52,7 +52,7 @@ 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_id("id_name").send_keys(group_name)
group_form.find_element_by_css_selector(".btn-primary").click() group_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Success: Group "{group_name}" was successfully created.' assert (f'Success: Group "{group_name}" was successfully created.'
in messages) in messages)
assert openstack_admin.identity.find_group(group_name) is not None 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}") f"EDITED_Description for: {group_name}")
group_form.find_element_by_css_selector(".btn-primary").click() group_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert f"Success: Group has been updated successfully." in messages assert "Success: Group has been updated successfully." in messages
assert(openstack_admin.identity.find_group( assert (openstack_admin.identity.find_group(
f"EDITED_{group_name}") is not None) f"EDITED_{group_name}") is not None)
assert(openstack_admin.identity.find_group( assert (openstack_admin.identity.find_group(
f"EDITED_{group_name}").description == f"EDITED_{group_name}").description ==
f"EDITED_Description for: {group_name}") f"EDITED_Description for: {group_name}")

View File

@@ -52,9 +52,9 @@ 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_id("id_name").send_keys(grouptype_name)
grouptype_form.find_element_by_css_selector(".btn-primary").click() grouptype_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Success: Successfully created group type: {grouptype_name}' assert (f'Success: Successfully created group type: {grouptype_name}'
in messages) in messages)
assert(openstack_admin.block_storage.find_group_type(grouptype_name) assert (openstack_admin.block_storage.find_group_type(grouptype_name)
is not None) is not None)

View File

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

View File

@@ -164,7 +164,7 @@ def test_image_create_from_local_file_demo(login, driver, image_names,
"[label='QCOW2 - QEMU Emulator']").click() "[label='QCOW2 - QEMU Emulator']").click()
wizard.find_element_by_css_selector("button.btn-primary.finish").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)
assert(f"Success: Image {image_name} was successfully" assert (f"Success: Image {image_name} was successfully"
f" created." in messages) f" created." in messages)
assert openstack_demo.compute.find_image(image_name) is not None assert openstack_demo.compute.find_image(image_name) is not None
@@ -263,7 +263,7 @@ def test_image_create_from_local_file_admin(login, driver, image_names,
"[label='QCOW2 - QEMU Emulator']").click() "[label='QCOW2 - QEMU Emulator']").click()
wizard.find_element_by_css_selector("button.btn-primary.finish").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)
assert(f"Success: Image {image_name} was successfully" assert (f"Success: Image {image_name} was successfully"
f" created." in messages) f" created." in messages)
assert openstack_admin.compute.find_image(image_name) is not None 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": if option.text == "Delete Image":
pytest.fail("Delete option should not exist") pytest.fail("Delete option should not exist")
actions_column.find_element_by_xpath( actions_column.find_element_by_xpath(
f".//*[normalize-space()='Edit Image']").click() ".//*[normalize-space()='Edit Image']").click()
wait_for_angular_readiness(driver) wait_for_angular_readiness(driver)
image_form = driver.find_element_by_css_selector(".ng-wizard") image_form = driver.find_element_by_css_selector(".ng-wizard")
image_form.find_element_by_xpath(".//label[text()='No']").click() 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( image_form.find_element_by_xpath(
"//button[@ng-click='modal.save()']").click() "//button[@ng-click='modal.save()']").click()
messages = widgets.get_and_dismiss_messages(driver) 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 image_id = new_image_admin.id
for name, value in new_metadata.items(): for name, value in new_metadata.items():
assert (openstack_admin.compute.get(f"/images/{image_id}").json( 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( wizard.find_element_by_css_selector(
"button.btn-primary.finish").click() "button.btn-primary.finish").click()
messages = widgets.get_and_dismiss_messages(driver) 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 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.clear()
name_field.send_keys(volume_name) name_field.send_keys(volume_name)
create_vol_btn = WebDriverWait(driver, config.selenium.page_timeout).until( create_vol_btn = WebDriverWait(driver, config.selenium.page_timeout).until(
EC.element_to_be_clickable((By.XPATH, f"//button[@class='btn " EC.element_to_be_clickable(
f"btn-primary finish']"))) (By.XPATH, "//button[@class='btn btn-primary finish']")))
create_vol_btn.click() create_vol_btn.click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert f"Info: Creating volume {volume_name}" in messages assert f"Info: Creating volume {volume_name}" in messages

View File

@@ -105,7 +105,7 @@ def apply_instance_name_filter(driver, config, name_pattern):
driver.find_element_by_css_selector( driver.find_element_by_css_selector(
f".table_search input[value='{name_pattern}']") f".table_search input[value='{name_pattern}']")
break break
except(exceptions.NoSuchElementException): except (exceptions.NoSuchElementException):
time.sleep(3) time.sleep(3)

View File

@@ -58,7 +58,7 @@ def test_create_keypair_demo(login, driver, openstack_demo, clear_keypair_demo,
type_options.find_element_by_css_selector('option[label="SSH Key"]').click() type_options.find_element_by_css_selector('option[label="SSH Key"]').click()
keypair_form.find_element_by_css_selector(".btn-primary").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)
assert(f'Success: Key pair {keypair_name} was successfully created.' assert (f'Success: Key pair {keypair_name} was successfully created.'
in messages) in messages)
assert openstack_demo.compute.find_keypair(keypair_name) is not None assert openstack_demo.compute.find_keypair(keypair_name) is not None

View File

@@ -19,7 +19,7 @@ from openstack_dashboard.test.selenium import widgets
@pytest.fixture @pytest.fixture
def metadata_namespace_name(): def metadata_namespace_name():
return('horizon_metadata_namespace_%s' % return ('horizon_metadata_namespace_%s' %
uuidutils.generate_uuid(dashed=False)) uuidutils.generate_uuid(dashed=False))
@@ -78,7 +78,7 @@ 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_id("id_direct_input").send_keys(namespace)
namespace_form.find_element_by_css_selector(".btn-primary").click() namespace_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Namespace {metadata_namespace_name} " assert (f"Success: Namespace {metadata_namespace_name} "
f"has been created." in messages) f"has been created." in messages)
try: try:
openstack_admin.image.get_metadef_namespace(metadata_namespace_name) openstack_admin.image.get_metadef_namespace(metadata_namespace_name)
@@ -105,7 +105,7 @@ def test_delete_metadata_namespace(login, driver, new_metadata_namespace,
widgets.select_from_dropdown(actions_column, "Delete Namespace") widgets.select_from_dropdown(actions_column, "Delete Namespace")
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Deleted Namespace: " assert (f"Success: Deleted Namespace: "
f"{new_metadata_namespace.namespace}" in messages) f"{new_metadata_namespace.namespace}" in messages)
try: try:
openstack_admin.image.get_metadef_namespace( openstack_admin.image.get_metadef_namespace(

View File

@@ -77,7 +77,7 @@ def ensure_checkbox(required_state, element):
current_state = element.is_selected() current_state = element.is_selected()
if required_state != current_state: if required_state != current_state:
element.find_element_by_xpath( 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, def test_create_network_without_subnet_demo(login, openstack_demo, driver,

View File

@@ -126,7 +126,7 @@ def test_add_member_to_project(login, driver, project_name, openstack_admin,
".btn-primary[value='Save']").click() ".btn-primary[value='Save']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert f'Success: Modified project "{project_name}".' in messages 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, project=new_project,
user=openstack_admin.identity.find_user(admin_name).id, user=openstack_admin.identity.find_user(admin_name).id,
role=openstack_admin.identity.find_role(regular_role_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( project_form.find_element_by_css_selector(
".btn-primary[value='Save']").click() ".btn-primary[value='Save']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Success: Modified project ' assert (f'Success: Modified project '
f'"{new_project_with_admin.name}".' in messages) f'"{new_project_with_admin.name}".' in messages)
assert(openstack_admin.identity.validate_user_has_project_role( assert (openstack_admin.identity.validate_user_has_project_role(
project=new_project_with_admin, project=new_project_with_admin,
user=openstack_admin.identity.find_user(admin_name).id, user=openstack_admin.identity.find_user(admin_name).id,
role=openstack_admin.identity.find_role(regular_role_name).id,) and 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() ".btn-primary[value='Save']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert f'Success: Modified project "{new_project.name}".' in messages 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, project=new_project,
group=openstack_admin.identity.find_group(group_name).id, group=openstack_admin.identity.find_group(group_name).id,
role=openstack_admin.identity.find_role(regular_role_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( project_form.find_element_by_css_selector(
".btn-primary[value='Save']").click() ".btn-primary[value='Save']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Success: Modified project ' assert (f'Success: Modified project '
f'"{new_project_with_group.name}".' in messages) f'"{new_project_with_group.name}".' in messages)
assert(openstack_admin.identity.validate_group_has_project_role( assert (openstack_admin.identity.validate_group_has_project_role(
project=new_project_with_group, project=new_project_with_group,
group=openstack_admin.identity.find_group(group_name).id, group=openstack_admin.identity.find_group(group_name).id,
role=openstack_admin.identity.find_role(regular_role_name).id,) and role=openstack_admin.identity.find_role(regular_role_name).id,) and

View File

@@ -110,7 +110,7 @@ def test_create_router_demo(login, driver, router_name, openstack_demo,
router_form.find_element_by_css_selector( router_form.find_element_by_css_selector(
".btn-primary[value='Create Router']").click() ".btn-primary[value='Create Router']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Success: Router {router_name} was successfully created.' assert (f'Success: Router {router_name} was successfully created.'
in messages) in messages)
assert openstack_demo.network.find_router(router_name) is not None 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) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert f"Success: Deleted Interface: {extracted_port_name}" in messages 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) new_interface['port_id']) is None)
@@ -223,19 +223,19 @@ def test_router_set_gateway_demo(login, driver, new_router_demo,
f"/routers/{new_router_demo.id}" f"/routers/{new_router_demo.id}"
f"?fields=id&fields=name&fields=" f"?fields=id&fields=name&fields="
f"external_gateway_info").json()['router'] 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() rows[0].find_element_by_css_selector(".data-table-action").click()
gateway_form = driver.find_element_by_css_selector(".modal-dialog form") gateway_form = driver.find_element_by_css_selector(".modal-dialog form")
widgets.select_from_specific_dropdown_in_form( widgets.select_from_specific_dropdown_in_form(
gateway_form, 'id_network_id', config.network.external_network) gateway_form, 'id_network_id', config.network.external_network)
gateway_form.find_element_by_css_selector(".btn-primary").click() gateway_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) 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( router_sdk = openstack_demo.network.get(
f"/routers/{new_router_demo.id}" f"/routers/{new_router_demo.id}"
f"?fields=id&fields=name&fields=" f"?fields=id&fields=name&fields="
f"external_gateway_info").json()['router'] f"external_gateway_info").json()['router']
assert(router_sdk["external_gateway_info"]["network_id"] == assert (router_sdk["external_gateway_info"]["network_id"] ==
openstack_demo.network.find_network( openstack_demo.network.find_network(
config.network.external_network).id) config.network.external_network).id)
@@ -257,19 +257,19 @@ def test_router_clear_gateway_demo(login, driver, new_router_with_gateway,
f"/routers/{new_router_with_gateway.id}" f"/routers/{new_router_with_gateway.id}"
f"?fields=id&fields=name&fields=" f"?fields=id&fields=name&fields="
f"external_gateway_info").json()['router'] f"external_gateway_info").json()['router']
assert(router_sdk["external_gateway_info"]["network_id"] == assert (router_sdk["external_gateway_info"]["network_id"] ==
openstack_demo.network.find_network( openstack_demo.network.find_network(
config.network.external_network).id) config.network.external_network).id)
rows[0].find_element_by_css_selector(".data-table-action").click() rows[0].find_element_by_css_selector(".data-table-action").click()
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Cleared Gateway: {new_router_with_gateway.name}" in assert (f"Success: Cleared Gateway: {new_router_with_gateway.name}" in
messages) messages)
router_sdk = openstack_demo.network.get( router_sdk = openstack_demo.network.get(
f"/routers/{new_router_with_gateway.id}" f"/routers/{new_router_with_gateway.id}"
f"?fields=id&fields=name&fields=" f"?fields=id&fields=name&fields="
f"external_gateway_info").json()['router'] 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, def test_create_router_admin(login, driver, router_name, openstack_admin,
@@ -291,7 +291,7 @@ def test_create_router_admin(login, driver, router_name, openstack_admin,
router_form.find_element_by_css_selector( router_form.find_element_by_css_selector(
".btn-primary[value='Create Router']").click() ".btn-primary[value='Create Router']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Success: Router {router_name} was successfully created.' assert (f'Success: Router {router_name} was successfully created.'
in messages) in messages)
assert openstack_admin.network.find_router(router_name) is not None assert openstack_admin.network.find_router(router_name) is not None

View File

@@ -67,9 +67,9 @@ 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_id("id_name").send_keys(sec_group_name)
sec_group_form.find_element_by_css_selector(".btn-primary").click() 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)
assert(f'Success: Successfully created security group: {sec_group_name}' assert (f'Success: Successfully created security group: {sec_group_name}'
in messages) in messages)
assert(openstack_demo.network.find_security_group(sec_group_name) assert (openstack_demo.network.find_security_group(sec_group_name)
is not None) is not None)
@@ -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_id("id_port").send_keys(rule_port)
rule_form.find_element_by_css_selector(".btn-primary").click() rule_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Successfully added rule: ALLOW IPv4 {rule_port}" assert (f"Success: Successfully added rule: ALLOW IPv4 {rule_port}"
f"/tcp from 0.0.0.0/0" in messages) f"/tcp from 0.0.0.0/0" in messages)
sec_group_rules_sdk = openstack_demo.network.find_security_group( sec_group_rules_sdk = openstack_demo.network.find_security_group(
sec_group_name).security_group_rules sec_group_name).security_group_rules
rule_port_found = False rule_port_found = False
for rule_sdk in sec_group_rules_sdk: 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_sdk['port_range_max'] == rule_port):
rule_port_found = True rule_port_found = True
assert rule_port_found assert rule_port_found
@@ -139,7 +139,7 @@ def test_delete_rule_sec_group_demo(login, driver, sec_group_name,
rows[0].find_element_by_css_selector("td.actions_column").click() rows[0].find_element_by_css_selector("td.actions_column").click()
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Deleted Rule: ALLOW IPv4 {rule_port}/tcp from 0.0.0.0/0" assert (f"Success: Deleted Rule: ALLOW IPv4 {rule_port}/tcp from 0.0.0.0/0"
in messages) in messages)
sec_group_rules_sdk = openstack_demo.network.find_security_group( sec_group_rules_sdk = openstack_demo.network.find_security_group(
sec_group_name).security_group_rules sec_group_name).security_group_rules
@@ -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 if (rule_sdk['port_range_min'] == rule_port and
rule_sdk['port_range_max'] == rule_port): rule_sdk['port_range_max'] == rule_port):
rule_port_found = True rule_port_found = True
assert not(rule_port_found) assert not (rule_port_found)

View File

@@ -51,7 +51,7 @@ def test_create_user_credential_totp(login, driver, openstack_admin, config,
)) ))
driver.get(url) driver.get(url)
credentials_sdk_before = list(openstack_admin.identity.credentials()) 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() driver.find_element_by_link_text("Create User Credential").click()
user_credential_form = driver.find_element_by_css_selector( user_credential_form = driver.find_element_by_css_selector(
".modal-dialog form") ".modal-dialog form")
@@ -59,9 +59,9 @@ def test_create_user_credential_totp(login, driver, openstack_admin, config,
user_credential_form, 'id_cred_type', 'TOTP') user_credential_form, 'id_cred_type', 'TOTP')
user_credential_form.find_element_by_css_selector(".btn-primary").click() 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)
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()) credentials_sdk_after = list(openstack_admin.identity.credentials())
assert(len(credentials_sdk_after) == 1 and assert (len(credentials_sdk_after) == 1 and
credentials_sdk_after[0]['type'] == 'totp') credentials_sdk_after[0]['type'] == 'totp')
@@ -75,7 +75,7 @@ def test_create_user_credential_ec2(login, driver, openstack_admin, config,
)) ))
driver.get(url) driver.get(url)
credentials_sdk_before = list(openstack_admin.identity.credentials()) 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() driver.find_element_by_link_text("Create User Credential").click()
user_credential_form = driver.find_element_by_css_selector( user_credential_form = driver.find_element_by_css_selector(
".modal-dialog form") ".modal-dialog form")
@@ -88,9 +88,9 @@ def test_create_user_credential_ec2(login, driver, openstack_admin, config,
user_credential_form, 'id_project', 'admin') user_credential_form, 'id_project', 'admin')
user_credential_form.find_element_by_css_selector(".btn-primary").click() 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)
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()) credentials_sdk_after = list(openstack_admin.identity.credentials())
assert(len(credentials_sdk_after) == 1 and assert (len(credentials_sdk_after) == 1 and
credentials_sdk_after[0]['type'] == 'ec2' and credentials_sdk_after[0]['type'] == 'ec2' and
(credentials_sdk_after[0]['blob'] == (credentials_sdk_after[0]['blob'] ==
'{"access": "acs", "secret": "scrt"}') and '{"access": "acs", "secret": "scrt"}') and
@@ -114,10 +114,10 @@ def test_delete_user_credential(login, driver, openstack_admin, config,
widgets.select_from_dropdown(actions_column, "Delete User Credential") widgets.select_from_dropdown(actions_column, "Delete User Credential")
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Deleted User Credential: {user_credential_blob}" in assert (f"Success: Deleted User Credential: {user_credential_blob}" in
messages) messages)
credentials_sdk_after = list(openstack_admin.identity.credentials()) 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, def test_edit_user_credential(login, driver, openstack_admin, config,
@@ -140,9 +140,9 @@ def test_edit_user_credential(login, driver, openstack_admin, config,
f"EDITED_{user_credential_blob}") f"EDITED_{user_credential_blob}")
user_credential_form.find_element_by_css_selector(".btn-primary").click() 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)
assert(f"Success: User credential updated successfully." in messages) assert ("Success: User credential updated successfully." in messages)
credentials_sdk = list(openstack_admin.identity.credentials()) credentials_sdk = list(openstack_admin.identity.credentials())
assert(len(credentials_sdk) == 1 and assert (len(credentials_sdk) == 1 and
credentials_sdk[0]['blob'] == f'EDITED_{user_credential_blob}') credentials_sdk[0]['blob'] == f'EDITED_{user_credential_blob}')
@@ -163,12 +163,12 @@ def test_user_credential_filtration(login, driver, openstack_admin,
try: try:
driver.find_element_by_xpath( driver.find_element_by_xpath(
"//td[text()='No items to display.']") "//td[text()='No items to display.']")
except(exceptions.NoSuchElementException): except exceptions.NoSuchElementException:
assert False, "Message 'No items to display' not found" assert False, "Message 'No items to display' not found"
filter_input_field = driver.find_element_by_css_selector(".form-control") filter_input_field = driver.find_element_by_css_selector(".form-control")
filter_input_field.clear() filter_input_field.clear()
filter_input_field.send_keys('admin') filter_input_field.send_keys('admin')
driver.find_element_by_id("credentialstable__action_filter").click() driver.find_element_by_id("credentialstable__action_filter").click()
rows = driver.find_elements_by_css_selector( rows = driver.find_elements_by_css_selector(
f"table#credentialstable tr[data-display]") "table#credentialstable tr[data-display]")
assert len(rows) == 1 assert len(rows) == 1

View File

@@ -102,4 +102,4 @@ def test_change_user_password(login, driver, user_name, new_user, config):
"id_confirm_password").send_keys(new_password) "id_confirm_password").send_keys(new_password)
password_form.find_element_by_css_selector(".btn-primary").click() password_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) 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

View File

@@ -164,7 +164,7 @@ def test_create_volume_snapshot_demo(login, driver, volume_name,
volume_snapshot_name) volume_snapshot_name)
create_snap_form.find_element_by_css_selector(".btn-primary").click() 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)
assert(f'Info: Creating volume snapshot "{volume_snapshot_name}".' assert (f'Info: Creating volume snapshot "{volume_snapshot_name}".'
in messages) in messages)
assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name) assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name)
is not None) is not None)
@@ -188,7 +188,7 @@ def test_delete_volume_snapshot_demo(login, driver, volume_snapshot_names,
widgets.select_from_dropdown(actions_column, "Delete Volume Snapshot") widgets.select_from_dropdown(actions_column, "Delete Volume Snapshot")
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Scheduled deletion of Volume Snapshot: " assert (f"Success: Scheduled deletion of Volume Snapshot: "
f"{volume_snapshot_name}" in messages) f"{volume_snapshot_name}" in messages)
wait_for_volume_snapshot_is_deleted(openstack_demo, volume_snapshot_name) wait_for_volume_snapshot_is_deleted(openstack_demo, volume_snapshot_name)
assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name) assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name)
@@ -217,9 +217,9 @@ def test_edit_volume_snapshot_description_demo(login, driver, openstack_demo,
f"EDITED_Description for: {new_volume_snapshot_demo.name}") f"EDITED_Description for: {new_volume_snapshot_demo.name}")
snapshot_form.find_element_by_css_selector(".btn-primary").click() snapshot_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Info: Updating volume snapshot ' assert (f'Info: Updating volume snapshot '
f'"{new_volume_snapshot_demo.name}"' in messages) f'"{new_volume_snapshot_demo.name}"' in messages)
assert(openstack_demo.block_storage.find_snapshot( assert (openstack_demo.block_storage.find_snapshot(
new_volume_snapshot_demo.name).description == new_volume_snapshot_demo.name).description ==
f"EDITED_Description for: {new_volume_snapshot_demo.name}") 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_from_snapshot_name)
volume_form.find_element_by_css_selector(".btn-primary").click() volume_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Info: Creating volume "{volume_from_snapshot_name}"' in messages) assert (f'Info: Creating volume "{volume_from_snapshot_name}"' in messages)
assert(openstack_demo.block_storage.find_volume( assert (openstack_demo.block_storage.find_volume(
volume_from_snapshot_name) is not None) 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.select_from_dropdown(actions_column, "Delete Volume")
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Info: Scheduled deletion of Volume: " assert (f"Info: Scheduled deletion of Volume: "
f"{new_volume_from_snapshot_demo.name}" in messages) f"{new_volume_from_snapshot_demo.name}" in messages)
test_volumes.wait_for_volume_is_deleted( test_volumes.wait_for_volume_is_deleted(
openstack_demo, new_volume_from_snapshot_demo.name) openstack_demo, new_volume_from_snapshot_demo.name)
assert (openstack_demo.block_storage.find_volume( 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, def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo,
@@ -303,7 +303,7 @@ def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo,
"Delete Volume Snapshot") "Delete Volume Snapshot")
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Scheduled deletion of Volume Snapshot: " assert (f"Success: Scheduled deletion of Volume Snapshot: "
f"{volume_snapshot_name}" in messages) f"{volume_snapshot_name}" in messages)
wait_for_volume_snapshot_is_deleted(openstack_demo, volume_snapshot_name) wait_for_volume_snapshot_is_deleted(openstack_demo, volume_snapshot_name)
assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name) assert (openstack_demo.block_storage.find_snapshot(volume_snapshot_name)
@@ -323,7 +323,7 @@ def test_delete_snapshot_before_volume_demo(login, driver, openstack_demo,
widgets.select_from_dropdown(actions_column_volume, "Delete Volume") widgets.select_from_dropdown(actions_column_volume, "Delete Volume")
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Info: Scheduled deletion of Volume: " assert (f"Info: Scheduled deletion of Volume: "
f"{new_volume_from_snapshot_demo.name}" in messages) f"{new_volume_from_snapshot_demo.name}" in messages)
test_volumes.wait_for_volume_is_deleted( test_volumes.wait_for_volume_is_deleted(
openstack_demo, new_volume_from_snapshot_demo.name) openstack_demo, new_volume_from_snapshot_demo.name)
@@ -426,7 +426,7 @@ def test_create_volume_snapshot_admin(login, driver, new_volume_admin,
volume_snapshot_name) volume_snapshot_name)
snapshot_form.find_element_by_css_selector(".btn-primary").click() snapshot_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Info: Creating volume snapshot "{volume_snapshot_name}".' assert (f'Info: Creating volume snapshot "{volume_snapshot_name}".'
in messages) in messages)
assert (openstack_admin.block_storage.find_snapshot(volume_snapshot_name) assert (openstack_admin.block_storage.find_snapshot(volume_snapshot_name)
is not None) 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.select_from_dropdown(actions_column, "Delete Volume Snapshot")
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Scheduled deletion of Volume Snapshot: " assert (f"Success: Scheduled deletion of Volume Snapshot: "
f"{new_volume_snapshot_admin.name}" in messages) f"{new_volume_snapshot_admin.name}" in messages)
wait_for_volume_snapshot_is_deleted(openstack_admin, wait_for_volume_snapshot_is_deleted(openstack_admin,
new_volume_snapshot_admin.name) new_volume_snapshot_admin.name)
assert (openstack_admin.block_storage.find_snapshot( 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, 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}") f"EDITED_Description for: {new_volume_snapshot_admin.name}")
snapshot_form.find_element_by_css_selector(".btn-primary").click() snapshot_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Info: Updating volume snapshot ' assert (f'Info: Updating volume snapshot '
f'"{new_volume_snapshot_admin.name}"' in messages) f'"{new_volume_snapshot_admin.name}"' in messages)
assert(openstack_admin.block_storage.find_snapshot( assert (openstack_admin.block_storage.find_snapshot(
new_volume_snapshot_admin.name).description == new_volume_snapshot_admin.name).description ==
f"EDITED_Description for: {new_volume_snapshot_admin.name}") f"EDITED_Description for: {new_volume_snapshot_admin.name}")

View File

@@ -144,7 +144,7 @@ def test_edit_volume_description_demo(login, driver, volume_name, config,
volume_form.find_element_by_css_selector(".btn-primary").click() volume_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert f'Info: Updating volume "{volume_name}"' in messages assert f'Info: Updating volume "{volume_name}"' in messages
assert(openstack_demo.block_storage.find_volume( assert (openstack_demo.block_storage.find_volume(
volume_name).description == f"EDITED_Description for: {volume_name}") volume_name).description == f"EDITED_Description for: {volume_name}")
@@ -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}']" f"table#volumes tr[data-display='{new_volume_demo.name}']"
) )
assert len(rows) == 1 assert len(rows) == 1
assert(openstack_demo.block_storage.find_volume( assert (openstack_demo.block_storage.find_volume(
new_volume_demo.name).size == 1) new_volume_demo.name).size == 1)
actions_column = rows[0].find_element_by_css_selector("td.actions_column") actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Extend Volume") 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) messages = widgets.get_and_dismiss_messages(driver)
assert f'Info: Extending volume: "{new_volume_demo.name}"' in messages assert f'Info: Extending volume: "{new_volume_demo.name}"' in messages
wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) 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) 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( WebDriverWait(driver, config.selenium.page_timeout).until(
EC.invisibility_of_element_located(actions_column)) EC.invisibility_of_element_located(actions_column))
wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) 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'] == new_volume_demo.name).attachments[0]['server_id'] ==
openstack_demo.compute.find_server(instance_name).id) openstack_demo.compute.find_server(instance_name).id)
@@ -245,7 +245,7 @@ def test_volume_upload_to_image_demo(login, driver, openstack_demo,
volume_form.find_element_by_css_selector( volume_form.find_element_by_css_selector(
".btn-primary[value='Upload']").click() ".btn-primary[value='Upload']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f'Info: Successfully sent the request to upload volume to image for ' assert ('Info: Successfully sent the request to upload volume to image for '
f'volume: "{new_volume_demo.name}"' in messages) f'volume: "{new_volume_demo.name}"' in messages)
wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name)
assert openstack_demo.compute.find_image(image_names[0]) is not None 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( attach_to_instance_form.find_element_by_css_selector(
".btn-primary[value='Attach Volume']").click() ".btn-primary[value='Attach Volume']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Info: Attaching volume {new_volume_demo.name} to instance " assert (f"Info: Attaching volume {new_volume_demo.name} to instance "
f"{new_instance_demo.name} on /dev/vdb." in messages) f"{new_instance_demo.name} on /dev/vdb." in messages)
wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) 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_volume_demo.id).attachments[0]['server_id'] ==
new_instance_demo.id) new_instance_demo.id)
@@ -369,10 +369,10 @@ def test_manage_volume_attachments(login, driver, openstack_demo,
driver.find_element_by_xpath( driver.find_element_by_xpath(
".//a[normalize-space()='Detach Volume']").click() ".//a[normalize-space()='Detach Volume']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Detaching Volume: Volume {new_volume_demo.name} " assert (f"Success: Detaching Volume: Volume {new_volume_demo.name} "
f"on instance {new_instance_demo.name}" in messages) f"on instance {new_instance_demo.name}" in messages)
wait_for_steady_state_of_volume(openstack_demo, new_volume_demo.name) 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 == []) new_volume_demo.id).attachments == [])
@@ -470,7 +470,7 @@ def test_edit_volume_description_admin(login, driver, volume_name, config,
volume_form.find_element_by_css_selector(".btn-primary").click() volume_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert f'Info: Updating volume "{volume_name}"' in messages assert f'Info: Updating volume "{volume_name}"' in messages
assert(openstack_admin.block_storage.find_volume( assert (openstack_admin.block_storage.find_volume(
volume_name).description == f"EDITED_Description for: {volume_name}") volume_name).description == f"EDITED_Description for: {volume_name}")

View File

@@ -108,7 +108,7 @@ 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_id("id_name").send_keys(volume_type_name)
volume_type_form.find_element_by_css_selector(".btn-primary").click() 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)
assert(f'Success: Successfully created volume ' assert (f'Success: Successfully created volume '
f'type: {volume_type_name}' in messages) f'type: {volume_type_name}' in messages)
assert openstack_admin.block_storage.find_type(volume_type_name) is not None 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( volume_type_form.find_element_by_css_selector(
".btn-primary[value='Create Volume Type Encryption']").click() ".btn-primary[value='Create Volume Type Encryption']").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Successfully created encryption for " assert (f"Success: Successfully created encryption for "
f"volume type: {new_volume_type.name}" in messages) f"volume type: {new_volume_type.name}" in messages)
assert(openstack_admin.block_storage.get_type_encryption( assert (openstack_admin.block_storage.get_type_encryption(
new_volume_type.id).provider == 'plain') 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"table#volume_types tr[data-display="
f"'{new_volume_type_with_encryption.name}']") f"'{new_volume_type_with_encryption.name}']")
assert len(rows) == 1 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') new_volume_type_with_encryption.id).provider == 'plain')
rows[0].find_element_by_css_selector(".data-table-action") rows[0].find_element_by_css_selector(".data-table-action")
actions_column = rows[0].find_element_by_css_selector("td.actions_column") actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Encryption") widgets.select_from_dropdown(actions_column, "Delete Encryption")
widgets.confirm_modal(driver) widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Deleted Encryption: " assert (f"Success: Deleted Encryption: "
f"{new_volume_type_with_encryption.name}" in messages) f"{new_volume_type_with_encryption.name}" in messages)
assert(openstack_admin.block_storage.get_type_encryption( assert (openstack_admin.block_storage.get_type_encryption(
new_volume_type_with_encryption.id).provider is None) new_volume_type_with_encryption.id).provider is None)
@@ -197,11 +197,11 @@ 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_id("id_name").send_keys(qos_spec_name)
volume_qos_form.find_element_by_css_selector(".btn-primary").click() 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)
assert(f'Success: Successfully created QoS ' assert (f'Success: Successfully created QoS '
f'Spec: {qos_spec_name}' in messages) f'Spec: {qos_spec_name}' in messages)
qos_specs = openstack_admin.block_storage.get( qos_specs = openstack_admin.block_storage.get(
"/qos-specs").json()['qos_specs'] "/qos-specs").json()['qos_specs']
assert(len([spec for spec in qos_specs if qos_spec_name == assert (len([spec for spec in qos_specs if qos_spec_name ==
spec['name']]) > 0) spec['name']]) > 0)
@@ -224,7 +224,7 @@ def test_delete_qos_spec(login, driver, qos_spec_name, openstack_admin,
assert f"Success: Deleted QoS Spec: {qos_spec_name}" in messages assert f"Success: Deleted QoS Spec: {qos_spec_name}" in messages
qos_specs = openstack_admin.block_storage.get( qos_specs = openstack_admin.block_storage.get(
"/qos-specs").json()['qos_specs'] "/qos-specs").json()['qos_specs']
assert(len([spec for spec in qos_specs if qos_spec_name == assert (len([spec for spec in qos_specs if qos_spec_name ==
spec['name']]) == 0) spec['name']]) == 0)
@@ -240,7 +240,7 @@ def test_edit_qos_spec_consumer(login, driver, openstack_admin, config,
rows = driver.find_elements_by_css_selector( rows = driver.find_elements_by_css_selector(
f"table#qos_specs tr[data-display='{new_qos_spec['name']}']") f"table#qos_specs tr[data-display='{new_qos_spec['name']}']")
assert len(rows) == 1 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'] == f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['consumer'] ==
'back-end') 'back-end')
actions_column = rows[0].find_element_by_css_selector("td.actions_column") 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') widgets.select_from_dropdown(volume_qos_form, 'front-end')
volume_qos_form.find_element_by_css_selector(".btn-primary").click() 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)
assert f"Success: Successfully modified QoS Spec consumer." in messages assert "Success: Successfully modified QoS Spec consumer." in messages
assert(openstack_admin.block_storage.get( assert (openstack_admin.block_storage.get(
f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['consumer'] == f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['consumer'] ==
'front-end') '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_id("id_value").send_keys(20)
extra_specs_form.find_element_by_css_selector(".btn-primary").click() 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)
assert f'Success: Created spec "minIOPS".' in messages assert 'Success: Created spec "minIOPS".' in messages
assert(openstack_admin.block_storage.get( assert (openstack_admin.block_storage.get(
f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['specs'] == f"/qos-specs/{new_qos_spec['id']}").json()['qos_specs']['specs'] ==
{'minIOPS': '20'}) {'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'table#qos_specs tr[data-display="'
f'{new_qos_spec_with_extra_specs["name"]}"]') f'{new_qos_spec_with_extra_specs["name"]}"]')
assert len(rows) == 1 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() f"/qos-specs/{new_qos_spec_with_extra_specs['id']}").json()
['qos_specs']['specs'] == {'maxIOPS': '5000'}) ['qos_specs']['specs'] == {'maxIOPS': '5000'})
rows[0].find_element_by_css_selector(".data-table-action").click() rows[0].find_element_by_css_selector(".data-table-action").click()
volume_qos_form = driver.find_element_by_css_selector(".modal-dialog form") volume_qos_form = driver.find_element_by_css_selector(".modal-dialog form")
rows_extra = volume_qos_form.find_elements_by_css_selector( 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 assert len(rows_extra) == 1
actions_column = rows_extra[0].find_element_by_css_selector( actions_column = rows_extra[0].find_element_by_css_selector(
"td.actions_column") "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( driver.find_element_by_css_selector(
".modal-dialog .modal-footer .btn-danger").click() ".modal-dialog .modal-footer .btn-danger").click()
messages = widgets.get_and_dismiss_messages(driver) messages = widgets.get_and_dismiss_messages(driver)
assert f"Success: Deleted Spec: maxIOPS" in messages assert "Success: Deleted Spec: maxIOPS" in messages
assert(openstack_admin.block_storage.get( assert (openstack_admin.block_storage.get(
f"/qos-specs/{new_qos_spec_with_extra_specs['id']}").json() f"/qos-specs/{new_qos_spec_with_extra_specs['id']}").json()
['qos_specs']['specs'] == {}) ['qos_specs']['specs'] == {})

View File

@@ -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, def test_delete_multiple_images_rows(live_server, driver, dashboard_data,
user): user):
with mock.patch.object( 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( 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( mock.patch.object(
api.glance, 'image_delete') as mocked_i_d: api.glance, 'image_delete') as mocked_i_d:
mocked_i_l_d.return_value = ( mocked_i_l_d.return_value = (

View File

@@ -52,26 +52,26 @@ def test_vcpu_pcpu_data_display(live_server, driver, user, dashboard_data):
driver.get(live_server.url + '/admin/hypervisors') driver.get(live_server.url + '/admin/hypervisors')
assert (driver.find_element_by_xpath( assert (driver.find_element_by_xpath(
f"//*[normalize-space()='vCPU Usage']/" "//*[normalize-space()='vCPU Usage']/"
f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 "ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231
f"/div[contains(@class,'h6')]/" # noqa: E231 "/div[contains(@class,'h6')]/" # noqa: E231
f"span[1]").text == str(p['vcpus_used'])) "span[1]").text == str(p['vcpus_used']))
assert (driver.find_element_by_xpath( assert (driver.find_element_by_xpath(
f"//*[normalize-space()='vCPU Usage']/" "//*[normalize-space()='vCPU Usage']/"
f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 "ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231
f"/div[contains(@class,'h6')]/" # noqa: E231 "/div[contains(@class,'h6')]/" # noqa: E231
f"span[2]").text == str(p['vcpus_capacity'])) "span[2]").text == str(p['vcpus_capacity']))
assert (driver.find_element_by_xpath( assert (driver.find_element_by_xpath(
f"//*[normalize-space()='pCPU Usage']/" "//*[normalize-space()='pCPU Usage']/"
f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 "ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231
f"/div[contains(@class,'h6')]/" # noqa: E231 "/div[contains(@class,'h6')]/" # noqa: E231
f"span[1]").text == str(p['pcpus_used'])) "span[1]").text == str(p['pcpus_used']))
assert (driver.find_element_by_xpath( assert (driver.find_element_by_xpath(
f"//*[normalize-space()='pCPU Usage']/" "//*[normalize-space()='pCPU Usage']/"
f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231 "ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231
f"/div[contains(@class,'h6')]/" # noqa: E231 "/div[contains(@class,'h6')]/" # noqa: E231
f"span[2]").text == str(p['pcpus_capacity'])) "span[2]").text == str(p['pcpus_capacity']))
driver.find_element_by_link_text("Resource Provider").click() driver.find_element_by_link_text("Resource Provider").click()
resource_provider_tab = driver.find_element_by_id( resource_provider_tab = driver.find_element_by_id(

View File

@@ -37,7 +37,8 @@ def test_switch_to_material_theme(live_server, driver, user, config):
driver.find_element_by_css_selector(".navbar-default"))) driver.find_element_by_css_selector(".navbar-default")))
options = user_dropdown_menu.find_element_by_css_selector( options = user_dropdown_menu.find_element_by_css_selector(
"ul.dropdown-menu[id='editor_list']") "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( WebDriverWait(driver, config.selenium.page_timeout).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, '.material-header'))) EC.visibility_of_element_located((By.CSS_SELECTOR, '.material-header')))
user_dropdown_menu = driver.find_element_by_css_selector( user_dropdown_menu = driver.find_element_by_css_selector(

View File

@@ -11,6 +11,7 @@
# under the License. # under the License.
from dataclasses import dataclass from dataclasses import dataclass
from selenium.common import exceptions from selenium.common import exceptions
from selenium.webdriver.common.by import By from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC

View File

@@ -18,7 +18,7 @@ deps =
-r{toxinidir}/test-requirements.txt -r{toxinidir}/test-requirements.txt
-r{toxinidir}/requirements.txt -r{toxinidir}/requirements.txt
# Unit test for a local hacking rule requires hacking. # 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 = commands =
dj42: pip install django>=4.2,<4.3 dj42: pip install django>=4.2,<4.3
find . -type f -name "*.pyc" -delete find . -type f -name "*.pyc" -delete
@@ -30,7 +30,7 @@ commands = {posargs}
[testenv:pep8] [testenv:pep8]
deps = deps =
{[testenv]deps} {[testenv]deps}
flake8-import-order==0.12 # LGPLv3 flake8-import-order>=0.18.0,<0.19.0 # LGPLv3
pylint==3.3.1 # GPLv2 pylint==3.3.1 # GPLv2
bandit[baseline]>=1.7.7 # Apache-2.0 bandit[baseline]>=1.7.7 # Apache-2.0
setenv = 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.) # Existing codes follows W503, so we disable W504.)
# F405 TEMPLATES may be undefined, or defined from star imports # F405 TEMPLATES may be undefined, or defined from star imports
# (because it is not easy to avoid this in openstack_dashboard.test.settings) # (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 # Enable the following hacking rules which are disabled by default
# H106 Do not put vim configuration in source files. # H106 Do not put vim configuration in source files.
# H203 Use assertIs(Not)None to check for None. # H203 Use assertIs(Not)None to check for None.