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
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -65,7 +65,7 @@ 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 (
|
||||||
@@ -94,7 +94,7 @@ 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
|
||||||
|
@@ -134,6 +134,7 @@ def test_associate_floatingip(login, driver, openstack_demo, new_floating_ip,
|
|||||||
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,
|
||||||
|
@@ -99,7 +99,7 @@ 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(
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
|
@@ -230,7 +230,7 @@ def test_router_set_gateway_demo(login, driver, new_router_demo,
|
|||||||
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="
|
||||||
|
@@ -59,7 +59,7 @@ 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')
|
||||||
@@ -88,7 +88,7 @@ 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
|
||||||
@@ -140,7 +140,7 @@ 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
|
||||||
|
@@ -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
|
||||||
|
@@ -249,7 +249,7 @@ 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,7 +275,7 @@ 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'})
|
||||||
@@ -300,7 +300,7 @@ def test_qos_spec_delete_extra_specs(login, driver, openstack_admin, config,
|
|||||||
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'] == {})
|
||||||
|
@@ -63,7 +63,8 @@ def test_delete_multiple_images_rows(live_server, driver, dashboard_data,
|
|||||||
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