Merge "pytest-based integration tests:add images tests"

This commit is contained in:
Zuul 2024-03-28 20:02:58 +00:00 committed by Gerrit Code Review
commit f90a202e2a
3 changed files with 132 additions and 14 deletions

View File

@ -14,6 +14,7 @@ import openstack as openstack_sdk
from oslo_utils import uuidutils
import pytest
from openstack_dashboard.test.selenium.integration import test_volumes
from openstack_dashboard.test.selenium import widgets
@ -272,3 +273,14 @@ def new_volume_admin(volume_name, openstack_admin, config):
name_or_id=vol,
wait=True,
)
@pytest.fixture
def clear_volume_admin(volume_name, openstack_admin):
yield None
test_volumes.wait_for_steady_state_of_volume(
openstack_admin, volume_name[0])
openstack_admin.delete_volume(
volume_name[0],
wait=True,
)

View File

@ -18,8 +18,12 @@ import pytest
from oslo_utils import uuidutils
from openstack_dashboard.test.selenium.integration import test_instances
from openstack_dashboard.test.selenium import widgets
# Imported fixtures
clear_instance_admin = test_instances.clear_instance_admin
@pytest.fixture(params=[1])
def image_names(request):
@ -431,3 +435,112 @@ def test_edit_image_description_admin(login, driver, image_names,
image_id = new_image_admin.id
assert (openstack_admin.compute.get(f"/images/{image_id}").json(
)['image']['metadata']['description'] == new_description)
def test_update_image_metadata_admin(login, driver,
new_image_admin, config,
openstack_admin):
new_metadata = {
'metadata1': 'img_metadata%s' % uuidutils.generate_uuid(dashed=False),
'metadata2': 'img_metadata%s' % uuidutils.generate_uuid(dashed=False)
}
image_name = new_image_admin.name
login('admin', 'admin')
url = '/'.join((
config.dashboard.dashboard_url,
'project',
'images',
))
driver.get(url)
rows = driver.find_elements_by_xpath(f"//a[text()='{image_name}']")
assert len(rows) == 1
actions_column = rows[0].find_element_by_xpath(
".//ancestor::tr/td[contains(@class,'actions_column')]")
widgets.select_from_dropdown(actions_column, "Update Metadata")
image_form = driver.find_element_by_css_selector(".modal-content")
for name, value in new_metadata.items():
image_form.find_element_by_xpath(
"//input[@name='customItem']").send_keys(name)
image_form.find_element_by_css_selector(
"button.btn span[class='fa fa-plus']").click()
image_form.find_element_by_xpath(
f"//span[@title='{name}']/parent::div/input").send_keys(value)
image_form.find_element_by_xpath(
"//button[@ng-click='modal.save()']").click()
messages = widgets.get_and_dismiss_messages(driver)
assert f"Success: Metadata was successfully updated." in messages
image_id = new_image_admin.id
for name, value in new_metadata.items():
assert (openstack_admin.compute.get(f"/images/{image_id}").json(
)['image']['metadata'][name] == value)
def test_launch_instance_from_image_admin(complete_default_test_network, login,
driver, instance_name,
clear_instance_admin, new_image_admin,
config, openstack_admin):
image_name = new_image_admin.name
network = complete_default_test_network.name
flavor = config.launch_instances.flavor
login('admin', 'admin')
url = '/'.join((
config.dashboard.dashboard_url,
'project',
'images',
))
driver.get(url)
rows = driver.find_elements_by_xpath(f"//a[text()='{image_name}']")
assert len(rows) == 1
rows[0].find_element_by_xpath(
"//ng-transclude[normalize-space()='Launch']").click()
wizard = driver.find_element_by_css_selector("wizard")
navigation = wizard.find_element_by_css_selector("div.wizard-nav")
widgets.find_already_visible_element_by_xpath(
".//*[@id='name']", wizard).send_keys(instance_name)
navigation.find_element_by_link_text("Networks").click()
network_table = wizard.find_element_by_css_selector(
"ng-include[ng-form=launchInstanceNetworkForm]"
)
widgets.select_from_transfer_table(network_table, network)
navigation.find_element_by_link_text("Flavor").click()
flavor_table = wizard.find_element_by_css_selector(
"ng-include[ng-form=launchInstanceFlavorForm]"
)
widgets.select_from_transfer_table(flavor_table, flavor)
navigation.find_element_by_link_text("Source").click()
source_table = wizard.find_element_by_css_selector(
"ng-include[ng-form=launchInstanceSourceForm]"
)
test_instances.delete_volume_on_instance_delete(source_table, "Yes")
wizard.find_element_by_css_selector(
"button.btn-primary.finish").click()
messages = widgets.get_and_dismiss_messages(driver)
assert f"Info: Scheduled creation of 1 instance." in messages
assert openstack_admin.compute.find_server(instance_name) is not None
def test_create_volume_from_image_admin(login, driver, volume_name,
new_image_admin, clear_volume_admin,
config, openstack_admin):
volume_name = volume_name[0]
image_name = new_image_admin.name
login('admin', 'admin')
url = '/'.join((
config.dashboard.dashboard_url,
'project',
'images',
))
driver.get(url)
rows = driver.find_elements_by_xpath(f"//a[text()='{image_name}']")
assert len(rows) == 1
actions_column = rows[0].find_element_by_xpath(
".//ancestor::tr/td[contains(@class,'actions_column')]")
widgets.select_from_dropdown(actions_column, "Create Volume")
name_field = driver.find_element_by_xpath("//input[@name='name']")
name_field.clear()
name_field.send_keys(volume_name)
driver.find_element_by_xpath(
"//button[@class='btn btn-primary finish']").click()
messages = widgets.get_and_dismiss_messages(driver)
assert f"Info: Creating volume {volume_name}" in messages
assert openstack_admin.block_storage.find_volume(volume_name) is not None

View File

@ -34,16 +34,6 @@ def clear_volume_demo(volume_name, openstack_demo):
)
@pytest.fixture
def clear_volume_admin(volume_name, openstack_admin):
yield None
wait_for_steady_state_of_volume(openstack_admin, volume_name[0])
openstack_admin.delete_volume(
volume_name[0],
wait=True,
)
def wait_for_steady_state_of_volume(openstack, volume_name):
for attempt in range(120):
if (openstack.block_storage.find_volume(volume_name).status in
@ -82,8 +72,10 @@ def test_create_empty_volume_demo(login, driver, volume_name, openstack_demo,
assert openstack_demo.block_storage.find_volume(volume_name) is not None
def test_create_volume_from_image_demo(login, driver, volume_name, config,
clear_volume_demo, openstack_demo):
def test_create_volume_via_vol_source_image_demo(login, driver,
volume_name, config,
clear_volume_demo,
openstack_demo):
image_source_name = config.launch_instances.image_name
volume_name = volume_name[0]
login('user')
@ -402,8 +394,9 @@ def test_create_empty_volume_admin(login, driver, volume_name, openstack_admin,
assert openstack_admin.block_storage.find_volume(volume_name) is not None
def test_create_volume_from_image_admin(login, driver, volume_name, config,
clear_volume_admin, openstack_admin):
def test_create_volume_via_vol_source_image_admin(login, driver, volume_name,
config, clear_volume_admin,
openstack_admin):
image_source_name = config.launch_instances.image_name
volume_name = volume_name[0]
login('admin')