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:
@@ -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.
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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):
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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')])
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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:
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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}")
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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(
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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(
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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}")
|
||||||
|
|
||||||
|
@@ -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}")
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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'] == {})
|
||||||
|
@@ -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 = (
|
||||||
|
@@ -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(
|
||||||
|
@@ -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(
|
||||||
|
@@ -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
|
||||||
|
8
tox.ini
8
tox.ini
@@ -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.
|
||||||
|
Reference in New Issue
Block a user