horizon/openstack_dashboard/test/selenium/integration/test_security_groups.py
Jan Jasek eb48bf5e3f pytest-based selenium tests add security_groups/rules create, delete tests
test_create_sec_group_demo
test_delete_sec_group_demo
test_add_rule_sec_group_demo
test_delete_rule_sec_group_demo

Change-Id: I71a266cc684bcef44f34c1d70924ee55738e32a2
2023-10-05 11:16:42 +02:00

152 lines
5.7 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import random
from oslo_utils import uuidutils
import pytest
from openstack_dashboard.test.selenium import widgets
@pytest.fixture
def sec_group_name():
return 'sec_group_name_%s' % uuidutils.generate_uuid(dashed=False)
@pytest.fixture
def new_sec_group_demo(sec_group_name, openstack_demo):
sec_group = openstack_demo.create_security_group(
name=sec_group_name,
description=f"Description for {sec_group_name}"
)
yield sec_group
openstack_demo.delete_security_group(sec_group_name)
@pytest.fixture
def clear_sec_group_demo(sec_group_name, openstack_demo):
yield None
openstack_demo.delete_security_group(sec_group_name)
@pytest.fixture
def new_sec_group_rule_demo(new_sec_group_demo, openstack_demo):
rule_port = random.randint(9000, 9999)
sec_group_rule = openstack_demo.network.create_security_group_rule(
security_group_id=new_sec_group_demo.id,
direction="ingress",
port_range_max=rule_port,
port_range_min=rule_port,
protocol="tcp"
)
yield sec_group_rule
openstack_demo.network.delete_security_group_rule(sec_group_rule)
def test_create_sec_group_demo(login, driver, config, sec_group_name,
openstack_demo, clear_sec_group_demo):
login('user')
url = '/'.join((
config.dashboard.dashboard_url,
'project',
'security_groups',
))
driver.get(url)
driver.find_element_by_link_text("Create Security Group").click()
sec_group_form = driver.find_element_by_css_selector(".modal-dialog form")
sec_group_form.find_element_by_id("id_name").send_keys(sec_group_name)
sec_group_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
assert(f'Success: Successfully created security group: {sec_group_name}'
in messages)
assert(openstack_demo.network.find_security_group(sec_group_name)
is not None)
def test_delete_sec_group_demo(login, driver, sec_group_name, openstack_demo,
new_sec_group_demo, config):
login('user')
url = '/'.join((
config.dashboard.dashboard_url,
'project',
'security_groups',
))
driver.get(url)
rows = driver.find_elements_by_css_selector(
f"table#security_groups tr[data-display='{sec_group_name}']")
assert len(rows) == 1
actions_column = rows[0].find_element_by_css_selector("td.actions_column")
widgets.select_from_dropdown(actions_column, "Delete Security Group")
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
assert f"Success: Deleted Security Group: {sec_group_name}" in messages
assert openstack_demo.network.find_security_group(sec_group_name) is None
def test_add_rule_sec_group_demo(login, driver, sec_group_name, openstack_demo,
new_sec_group_demo, config):
rule_port = random.randint(9000, 9999)
login('user')
url = '/'.join((
config.dashboard.dashboard_url,
'project',
'security_groups',
new_sec_group_demo.id,
))
driver.get(url)
driver.find_element_by_id("rules__action_add_rule").click()
rule_form = driver.find_element_by_css_selector(".modal-dialog form")
rule_form.find_element_by_id("id_port").send_keys(rule_port)
rule_form.find_element_by_css_selector(".btn-primary").click()
messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Successfully added rule: ALLOW IPv4 {rule_port}"
f"/tcp from 0.0.0.0/0" in messages)
sec_group_rules_sdk = openstack_demo.network.find_security_group(
sec_group_name).security_group_rules
rule_port_found = False
for rule_sdk in sec_group_rules_sdk:
if(rule_sdk['port_range_min'] == rule_port and
rule_sdk['port_range_max'] == rule_port):
rule_port_found = True
assert rule_port_found
def test_delete_rule_sec_group_demo(login, driver, sec_group_name,
openstack_demo, new_sec_group_demo,
new_sec_group_rule_demo, config):
rule_port = new_sec_group_rule_demo.port_range_max
login('user')
url = '/'.join((
config.dashboard.dashboard_url,
'project',
'security_groups',
new_sec_group_demo.id,
))
driver.get(url)
rows = driver.find_elements_by_css_selector(
f"table#rules tr[data-object-id='{new_sec_group_rule_demo.id}']")
assert len(rows) == 1
rows[0].find_element_by_css_selector("td.actions_column").click()
widgets.confirm_modal(driver)
messages = widgets.get_and_dismiss_messages(driver)
assert(f"Success: Deleted Rule: ALLOW IPv4 {rule_port}/tcp from 0.0.0.0/0"
in messages)
sec_group_rules_sdk = openstack_demo.network.find_security_group(
sec_group_name).security_group_rules
rule_port_found = False
for rule_sdk in sec_group_rules_sdk:
if (rule_sdk['port_range_min'] == rule_port and
rule_sdk['port_range_max'] == rule_port):
rule_port_found = True
assert not(rule_port_found)