Source code for stepler.horizon.steps.networks
"""
--------------
Networks steps
--------------
"""
# 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.
from hamcrest import assert_that, equal_to, less_than # noqa
from stepler import config
from stepler.horizon.steps import base
from stepler.third_party import steps_checker
from stepler.third_party import utils
from stepler.third_party.utils import Timer
from stepler.third_party import waiter
[docs]class NetworksSteps(base.BaseSteps):
"""networks steps."""
def _page_networks(self):
"""Open networks page if it isn't opened."""
return self._open(self.app.page_networks)
def _page_admin_networks(self):
"""Open admin networks page if it isn't opened."""
return self._open(self.app.page_admin_networks)
def _page_network_topology(self):
"""Open network topology page if it isn't opened."""
return self._open(self.app.page_network_topology)
@steps_checker.step
[docs] def create_network(self,
network_name=None,
shared=False,
create_subnet=False,
subnet_name='subnet',
network_adress='192.168.0.0/24',
gateway_ip='192.168.0.1',
check=True):
"""Step to create network."""
network_name = network_name or next(utils.generate_ids('network'))
page_networks = self._page_networks()
page_networks.button_create_network.click()
with page_networks.form_create_network as form:
form.field_name.value = network_name
if shared:
form.checkbox_shared.select()
else:
form.checkbox_shared.unselect()
if create_subnet:
form.checkbox_create_subnet.select()
form.button_next.click()
form.field_subnet_name.value = subnet_name
form.field_network_address.value = network_adress
form.field_gateway_ip.value = gateway_ip
form.button_next.click()
else:
form.checkbox_create_subnet.unselect()
form.submit()
if check:
self.close_notification('success')
page_networks.table_networks.row(
name=network_name).wait_for_presence()
return network_name
@steps_checker.step
[docs] def delete_network(self, network_name, check=True):
"""Step to delete network."""
page_networks = self._page_networks()
with page_networks.table_networks.row(
name=network_name).dropdown_menu as menu:
menu.button_toggle.click()
menu.item_delete.click()
page_networks.form_confirm.submit()
if check:
self.close_notification('success')
page_networks.table_networks.row(
name=network_name).wait_for_absence()
@steps_checker.step
[docs] def delete_networks(self, network_names, check=True):
"""Step to delete networks as batch."""
page_networks = self._page_networks()
for network_name in network_names:
page_networks.table_networks.row(
name=network_name).checkbox.select()
page_networks.button_delete_networks.click()
page_networks.form_confirm.submit()
if check:
self.close_notification('success')
for network_name in network_names:
page_networks.table_networks.row(
name=network_name).wait_for_absence()
@steps_checker.step
[docs] def add_subnet(self, network_name, subnet_name=None,
network_address='10.109.3.0/24', check=True):
"""Step to add subnet for network."""
subnet_name = subnet_name or next(utils.generate_ids('subnet'))
page_networks = self._page_networks()
with page_networks.table_networks.row(
name=network_name).dropdown_menu as menu:
menu.button_toggle.click()
menu.item_add_subnet.click()
with page_networks.form_add_subnet as form:
form.field_name.value = subnet_name
form.field_network_address.value = network_address
form.button_next.click()
form.submit()
if check:
page_network = self.app.page_network
self.close_notification('success')
page_network.open_tab_subnets().table_subnets.row(
name=subnet_name,
network_address=network_address).wait_for_presence()
return subnet_name
@steps_checker.step
[docs] def admin_update_network(self, network_name, new_network_name=False,
shared=False, check=True):
"""Step to update network as admin."""
page_networks = self._page_admin_networks()
page_networks.table_networks.row(
name=network_name).dropdown_menu.item_default.click()
with page_networks.form_update_network as form:
if new_network_name:
form.field_name.value = new_network_name
if shared:
form.checkbox_shared.select()
else:
form.checkbox_shared.unselect()
form.submit()
if check:
self.close_notification('success')
page_networks.table_networks.row(
name=new_network_name or network_name).wait_for_presence()
@steps_checker.step
[docs] def admin_delete_network(self, network_name, check=True):
"""Step to delete network as admin."""
page_networks = self._page_admin_networks()
with page_networks.table_networks.row(
name=network_name).dropdown_menu as menu:
menu.button_toggle.click()
menu.item_delete.click()
page_networks.form_confirm.submit()
if check:
self.close_notification('success')
page_networks.table_networks.row(
name=network_name).wait_for_absence()
@steps_checker.step
[docs] def admin_filter_networks(self, query, check=True):
"""Step to filter networks."""
page_networks = self._page_admin_networks()
page_networks.field_filter_networks.value = query
page_networks.button_filter_networks.click()
if check:
def check_rows():
is_present = False
for row in page_networks.table_networks.rows:
if not (row.is_present and
query in row.link_network.value):
break
is_present = True
return waiter.expect_that(is_present, equal_to(True))
waiter.wait(check_rows,
timeout_seconds=10,
sleep_seconds=0.1)
@steps_checker.step
[docs] def check_network_present(self, network_name):
"""Step to check network is present."""
self._page_networks().table_networks.row(
name=network_name).wait_for_presence()
@steps_checker.step
[docs] def check_network_share_status(self, network_name, is_shared=True):
"""Step to check network share status."""
share_status = 'Yes' if is_shared else 'No'
with self._page_networks().table_networks.row(
name=network_name).cell('shared') as cell:
assert_that(cell.value, equal_to(share_status))
@steps_checker.step
[docs] def network_topology_page_availability(self, check=True):
"""Step to go to network topology page."""
page_network_topology = self._page_network_topology()
if check:
assert_that(
page_network_topology.button_launch_instance.is_enabled,
equal_to(True))
assert_that(page_network_topology.button_create_network.is_enabled,
equal_to(True))
assert_that(page_network_topology.button_create_router.is_enabled,
equal_to(True))
assert_that(page_network_topology.webdriver.title,
equal_to("Network Topology - OpenStack Dashboard"))
@steps_checker.step
[docs] def check_networks_time(self):
"""Step to check time opening Networks tab."""
with Timer() as timer:
self._page_networks()
assert_that(timer.interval, less_than(config.UI_TIMEOUT_OPENING_PAGE))
@steps_checker.step
[docs] def user_try_to_create_shared_network(self, check=True):
"""Step to check user can't create shared network."""
page_networks = self._page_networks()
page_networks.button_create_network.click()
form = page_networks.form_create_network
if check:
assert_that(form.checkbox_shared.is_present, equal_to(False))