Added test descriptions

Change-Id: I91b4d1b070a9e41f02c2c30b8b644398a074733c
This commit is contained in:
asledzinskiy 2014-02-20 14:43:20 +02:00
parent 67b4f643aa
commit e5b88fbd44
16 changed files with 1724 additions and 197 deletions

View File

@ -0,0 +1,17 @@
(dp1
S'failed'
p2
(lp3
S'1'
asS'source_names'
p4
(lp5
S'tests'
p6
asS'ids'
p7
(dp8
I1
(Ng6
Ntp9
ss.

View File

@ -4,14 +4,14 @@ from unittest import TestCase
from PIL import Image
import operator
import math
import time
from selenium.common.exceptions import NoSuchElementException
import time
import browser
from pageobjects.header import Header
from fuelweb_ui_test.settings import FOLDER_SCREEN_CURRENT
from fuelweb_ui_test.settings import FOLDER_SCREEN_EXPECTED
from fuelweb_ui_test.settings import NAILGUN_FIXTURES
from fuelweb_ui_test.settings import URL_HOME
from settings import FOLDER_SCREEN_CURRENT
from settings import FOLDER_SCREEN_EXPECTED
from settings import NAILGUN_FIXTURES
from settings import URL_HOME
class BaseTestCase(TestCase):
@ -39,10 +39,9 @@ class BaseTestCase(TestCase):
$('head').append(
'<style type="text/css">
* {
-webkit-transition-duration: 0.00000001s !
important;
-moz-transition: 0.00000001s !important;
transition-duration: 0.00000001s !important;
-webkit-transition-duration: 0.00000001s !important;
-moz-transition: 0.00000001s !important;
transition-duration: 0.00000001s !important;
}
</style>')
'''.replace('\n', ''))
@ -84,8 +83,7 @@ class BaseTestCase(TestCase):
h1 = img_exp.histogram()
h2 = img_cur.histogram()
rms = math.sqrt(
reduce(operator.add,
map(lambda a, b: (a - b) ** 2, h1, h2)) / len(h1))
rms = math.sqrt(reduce(operator.add, map(lambda a, b: (a - b) ** 2,
h1, h2)) / len(h1))
self.assertNotEqual(rms == 0, 'Screen valid')

View File

@ -1,15 +1,13 @@
import time
from pageobjects.environments import Environments
from pageobjects.environments import Wizard
from pageobjects.environments import DeployChangesPopup
from pageobjects.environments import Environments, Wizard, DeployChangesPopup
from pageobjects.header import TaskResultAlert
from pageobjects.nodes import Nodes, RolesPanel
from settings import OPENSTACK_CENTOS, OPENSTACK_RELEASE_CENTOS
from tests.base import BaseTestCase
from fuelweb_ui_test.settings import OPENSTACK_CENTOS
from fuelweb_ui_test.settings import OPENSTACK_RELEASE_CENTOS
class Environment:
@staticmethod
def simple_flat(name=OPENSTACK_CENTOS,
release=OPENSTACK_RELEASE_CENTOS):

View File

@ -12,41 +12,82 @@ from tests.test_roles import ROLE_CONTROLLER, ROLE_CEPH, ROLE_CINDER
class TestNodesAddPage(BaseTestCase):
"""Global precondition
Steps:
1. Simple environment with default values is created
"""
@classmethod
def setUpClass(cls):
BaseTestCase.setUpClass()
preconditions.Environment.simple_flat()
"""Each test precondition
Steps:
1. Click on created simple environment
2. Click 'Add nodes'
"""
def setUp(self):
BaseTestCase.setUp(self)
Environments().create_cluster_boxes[0].click()
time.sleep(1)
Nodes().add_nodes.click()
time.sleep(1)
"""Check that discovered nodes checkboxes are enabled
Scenario:
1. Verify discovered nodes checkboxes are active
"""
def test_discovered_nodes_enabled(self):
with Nodes()as n:
for node in n.nodes_discovered:
self.assertTrue(
node.checkbox.
find_element_by_tag_name('input').is_enabled(),
node.checkbox.find_element_by_tag_name('input').
is_enabled(),
'Node enabled')
"""Check that offline nodes checkboxes are disabled
Scenario:
1. Verify offline nodes checkboxes are inactive
"""
def test_offline_nodes_disabled(self):
with Nodes()as n:
for node in n.nodes_offline:
self.assertFalse(
node.checkbox.
find_element_by_tag_name('input').is_enabled(),
node.checkbox.find_element_by_tag_name('input').
is_enabled(),
'Node disabled')
"""Check that error nodes checkboxes are disabled
Scenario:
1. Verify error nodes checkboxes are inactive
"""
def test_error_nodes_disabled(self):
with Nodes()as n:
for node in n.nodes_error:
self.assertFalse(
node.checkbox.
find_element_by_tag_name('input').is_enabled(),
node.checkbox.find_element_by_tag_name('input').
is_enabled(),
'Node disabled')
"""Check Select All checkbox
Scenario:
1. Click Select All checkbox
2. Verify that group Select All checkboxes are selected
3. Verify that discovered nodes checkboxes are selected
4. Verify that offline and error nodes checkboxes aren't selected
"""
def test_select_all(self):
with Nodes()as n:
n.select_all.click()
@ -55,20 +96,27 @@ class TestNodesAddPage(BaseTestCase):
'Select all in group is selected')
for node in n.nodes_discovered:
self.assertTrue(
node.checkbox.
find_element_by_tag_name('input').is_selected(),
node.checkbox.find_element_by_tag_name('input').
is_selected(),
'Discovered node is selected')
for node in n.nodes_offline:
self.assertFalse(
node.checkbox.
find_element_by_tag_name('input').is_selected(),
node.checkbox.find_element_by_tag_name('input').
is_selected(),
'Offline node is not selected')
for node in n.nodes_error:
self.assertFalse(
node.checkbox.
find_element_by_tag_name('input').is_selected(),
node.checkbox.find_element_by_tag_name('input').
is_selected(),
'Error node is not selected')
"""Check Select All in group
Scenario:
1. Click Select All in each group of nodes
2. Verify that nodes checkboxes are selected
"""
def test_select_all_in_group(self):
with Nodes()as n:
for i, group in enumerate(n.node_groups):
@ -81,6 +129,16 @@ class TestNodesAddPage(BaseTestCase):
self.assertTrue(
n.select_all.is_selected(), '"Select all" is checked')
"""Check selecting elements one by one
Scenario:
1. Select nodes one by one
2. Verify that Select all checkbox for group is selected
when all discovered nodes in group are selected
3. Verify that Select all checkbox is selected when
all nodes are selected
"""
def test_select_all_selecting_nodes_one_by_one(self):
with Nodes()as n:
for i, group in enumerate(n.node_groups):
@ -92,33 +150,62 @@ class TestNodesAddPage(BaseTestCase):
self.assertTrue(
n.select_all.is_selected(), '"Select all" is checked')
"""Check selecting discovered elements by clicking on node area
Scenario:
1. Select all discovered nodes by clicking on node area
2. Verify that all discovered nodes are selected
"""
def test_selecting_nodes_clicking_them_discovered(self):
with Nodes()as n:
for node in n.nodes_discovered:
node.parent.click()
self.assertTrue(
node.checkbox.
find_element_by_tag_name('input').is_selected(),
node.checkbox.find_element_by_tag_name('input').
is_selected(),
'Discovered node is selected')
"""Check offline nodes can't be selected by clicking on node area
Scenario:
1. Select all offline nodes by clicking on node area
2. Verify that all offline nodes aren't selected
"""
def test_selecting_nodes_clicking_them_offline(self):
with Nodes()as n:
for node in n.nodes_offline:
node.parent.click()
self.assertFalse(
node.checkbox.
find_element_by_tag_name('input').is_selected(),
node.checkbox.find_element_by_tag_name('input').
is_selected(),
'Offline node is not selected')
"""Check error nodes can't be selected by clicking on node area
Scenario:
1. Select all error nodes by clicking on node area
2. Verify that all error nodes aren't selected
"""
def test_selecting_nodes_clicking_them_error(self):
with Nodes()as n:
for node in n.nodes_error:
node.parent.click()
self.assertFalse(
node.checkbox.
find_element_by_tag_name('input').is_selected(),
node.checkbox.find_element_by_tag_name('input').
is_selected(),
'Error node is not selected')
"""Check node info in pop-up
Scenario:
1. Click edit node
2. Verify that name in header is the same as on nodes list page
3. Do this check for discovered, offline, error node
"""
def test_node_info_popup(self):
def test_popup(node):
node.details.click()
@ -134,6 +221,16 @@ class TestNodesAddPage(BaseTestCase):
test_popup(n.nodes_offline[0])
test_popup(n.nodes_error[0])
"""Rename node name
Scenario:
1. Click on node name
2. Change name and click on node area - name isn't changed
3. Click on node name again
4. Change name and hit enter
5. Verify that name is correctly changed
"""
def test_renaming_node(self):
name = 'new node name'
with Nodes()as n:
@ -165,14 +262,34 @@ class TestAddingNodes(BaseTestCase):
def setUpClass(cls):
BaseTestCase.setUpClass()
"""Each test precondition
Steps:
1. Create simple environment with default values
2. Click on created simple environment
2. Click 'Add nodes'
"""
def setUp(self):
BaseTestCase.clear_nailgun_database()
preconditions.Environment.simple_flat()
BaseTestCase.setUp(self)
Environments().create_cluster_boxes[0].click()
time.sleep(1)
Nodes().add_nodes.click()
time.sleep(1)
"""Add one controller node
Scenario:
1. Select Controller role and select node
2. Click Apply Changes
3. Verify that Nodes page is open
4. Amount of nodes is 1
5. Node is the same that was selected
6. Role of node is Controller
"""
def test_adding_node_single_role(self):
name = Nodes().nodes_discovered[0].name.text
Nodes().nodes_discovered[0].checkbox.click()
@ -185,6 +302,15 @@ class TestAddingNodes(BaseTestCase):
self.assertEqual(n.nodes[0].name.text, name, 'Node name')
self.assertIn(ROLE_CONTROLLER, n.nodes[0].roles.text, 'Node role')
"""Add node with controller, cinder, ceph roles
Scenario:
1. Select Controller, Cinder, Ceph roles and select node
2. Click Apply Changes
3. Verify that Nodes page is open
4. Role of node is Controller, Cinder, Ceph
"""
def test_adding_node_multiple_roles(self):
Nodes().nodes_discovered[0].checkbox.click()
with RolesPanel() as r:
@ -202,6 +328,16 @@ class TestAddingNodes(BaseTestCase):
self.assertIn(ROLE_CEPH, n.nodes[0].roles.text,
'Node third role')
"""Edit node by adding new role to it
Scenario:
1. Select Controller role and select node
2. Click Apply Changes
3. Select added node and click Edit Roles
4. Select Cinder Role and click Apply Changes
5. Verify that roles of node are Controller, Cinder
"""
def test_edit_role_add_new_role(self):
# Add node with controller role
Nodes().nodes_discovered[0].checkbox.click()
@ -221,6 +357,17 @@ class TestAddingNodes(BaseTestCase):
self.assertIn(ROLE_CINDER, n.nodes[0].roles.text,
'Cinder role')
"""Edit node by removing old role and adding two new roles to it
Scenario:
1. Select Controller role and select node
2. Click Apply Changes
3. Select added node and click Edit Roles
4. Unselect Controller and select Cinder and Ceph Role
5. Click Apply Changes
6. Verify that roles of node are Cinder and Ceph
"""
def test_edit_role_change_role(self):
# Add node with controller role
Nodes().nodes_discovered[0].checkbox.click()
@ -245,13 +392,22 @@ class TestAddingNodes(BaseTestCase):
self.assertIn(ROLE_CEPH, n.nodes[0].roles.text,
'Ceph-osd role')
"""Unallocated nodes counter
Scenario:
1. Add new node with compute role
2. Verify that number of unallocated nodes was reduced on 1
"""
def test_unallocated_nodes_counter(self):
initial = int(Header().unallocated_nodes.text)
discovered = len(Nodes().nodes_discovered)
Tabs().nodes.click()
for i in range(discovered):
time.sleep(1)
Nodes().add_nodes.click()
time.sleep(1)
Nodes().nodes_discovered[0].checkbox.click()
RolesPanel().compute.click()
Nodes().apply_changes.click()
@ -264,12 +420,21 @@ class TestAddingNodes(BaseTestCase):
class TestGroupBy(BaseTestCase):
"""Global precondition
Steps:
1. Create simple environment with default values
2. Add one controller node
3. Add other nodes as compute
"""
@classmethod
def setUpClass(cls):
BaseTestCase.setUpClass()
BaseTestCase.get_home()
preconditions.Environment().simple_flat()
Environments().create_cluster_boxes[0].click()
time.sleep(1)
# Add controller
Nodes().add_nodes.click()
@ -287,26 +452,57 @@ class TestGroupBy(BaseTestCase):
RolesPanel().compute.click()
Nodes().apply_changes.click()
"""Each test precondition
Steps:
1. Click on created environment
"""
def setUp(self):
BaseTestCase.setUp(self)
Environments().create_cluster_boxes[0].click()
def _test_group_by(self, group_by, nodes_in_groups):
with Nodes() as n:
time.sleep(1)
n.group_by.select_by_visible_text(group_by)
time.sleep(1)
self.assertEqual(
len(nodes_in_groups), len(n.node_groups), 'Groups amount')
self.assertEqual(len(nodes_in_groups),
len(n.node_groups), 'Groups amount')
for i, group in enumerate(n.node_groups):
self.assertEqual(
nodes_in_groups[i], len(group.nodes),
'Group #{0} has {1} nodes'.format(i, nodes_in_groups[i]))
"""Group nodes by role
Scenario:
1. Select Roles value in Group By list
2. Verify that there are 2 groups with
correct number of nodes in each group
"""
def test_group_by_roles(self):
self._test_group_by('Roles', [1, 5])
"""Group nodes by hardware
Scenario:
1. Select Hardware Info value in Group By list
2. Verify that there are 5 groups with
correct number of nodes in each group
"""
def test_group_by_hardware_info(self):
self._test_group_by('Hardware Info', [1, 1, 2, 1, 1])
"""Group nodes by role and hardware info
Scenario:
1. Select Roles and hardware info value in Group By list
2. Verify that there are 6 groups with
correct number of nodes in each group
"""
def test_group_by_roles_and_hardware_info(self):
self._test_group_by('Roles and hardware info', [1, 2, 1, 1, 1])

View File

@ -3,9 +3,7 @@ import time
from pageobjects.base import ConfirmPopup
from pageobjects.environments import Environments
from pageobjects.node_disks_settings import DisksSettings
from pageobjects.nodes import Nodes
from pageobjects.nodes import RolesPanel
from pageobjects.nodes import NodeInfo
from pageobjects.nodes import Nodes, RolesPanel, NodeInfo
from pageobjects.tabs import Tabs
from tests import preconditions
from tests.base import BaseTestCase
@ -13,17 +11,33 @@ from tests.base import BaseTestCase
class TestConfigureDisks(BaseTestCase):
"""Global precondition
Steps:
1. Create simple environment with default values
2. Add one controller node
"""
@classmethod
def setUpClass(cls):
BaseTestCase.setUpClass()
preconditions.Environment.simple_flat()
Environments().create_cluster_boxes[0].click()
time.sleep(1)
Nodes().add_nodes.click()
time.sleep(1)
Nodes().nodes_discovered[0].checkbox.click()
RolesPanel().controller.click()
Nodes().apply_changes.click()
"""Each test precondition
Steps:
1. Click on created environment
2. Select controller node
3. Click Configure Disks
"""
def setUp(self):
BaseTestCase.setUp(self)
Environments().create_cluster_boxes[0].click()
@ -31,6 +45,16 @@ class TestConfigureDisks(BaseTestCase):
NodeInfo().edit_disks.click()
time.sleep(1)
"""Expand and collapse blocks with disk information
Scenario:
1. Click on disk area
2. Verify that area is expanded and disk information is available
3. Click disk area again
4. Verify that area is collapsed and
disk information is unavailable
"""
def test_volume_animation(self):
with DisksSettings() as s:
s.disks[0].volume_os.parent.click()
@ -45,6 +69,14 @@ class TestConfigureDisks(BaseTestCase):
s.disks[0].details_panel.is_displayed(),
'details panel is expanded')
"""Remove disk volume by clicking on X button
Scenario:
1. Click on disk area
2. Click on X button for some volume group
3. Verify that image size is 0 and there is Unallocated space
"""
def test_remove_volume_cross(self):
with DisksSettings() as s:
s.disks[0].volume_image.parent.click()
@ -58,6 +90,18 @@ class TestConfigureDisks(BaseTestCase):
s.disks[0].volume_group_image.input.get_attribute('value'),
'image volume size is 0')
"""Use all allowed space
Scenario:
1. Click on disk area
2. Click on X button for all volumes group
3. Click Use all allowed space for Base system
4. Verify that all space is allocated for Base system
5. Remove all volumes group and click
Use all allowed space for Image Storage
6. Verify that all space is allocated for Image Storage
"""
def test_use_all_allowed(self):
with DisksSettings() as s:
s.disks[1].volume_image.parent.click()
@ -78,6 +122,14 @@ class TestConfigureDisks(BaseTestCase):
'Image storage uses all allowed space'
)
"""Allocate space for volume groups
Scenario:
1. Click on disk area
2. Allocate space for Image Storage
3. Verify that allocated size is correct in the header of disk area
"""
def test_type_volume_size(self):
values = [random.randint(100000, 200000) for i in range(3)]
with DisksSettings() as s:
@ -93,14 +145,24 @@ class TestConfigureDisks(BaseTestCase):
exp, cur,
'Volume size. exp: {0} ({1}), cur {2}'.format(exp, v, cur))
"""Load default values
Scenario:
1. Click on disk area
2. Allocate space for Image Storage
3. Apply changes
4. Click Load Defaults
5. Verify that Image size is default value
"""
def test_save_load_defaults(self):
default = None
value = random.randint(60000, 80000)
with DisksSettings() as s:
s.disks[0].volume_image.parent.click()
time.sleep(1)
default = s.disks[0].\
volume_group_image.input.get_attribute('value')
default = s.disks[0].volume_group_image.input.\
get_attribute('value')
s.disks[0].volume_group_image.input.\
clear()
s.disks[0].volume_group_image.input.\
@ -123,12 +185,21 @@ class TestConfigureDisks(BaseTestCase):
'default value has been restored'
)
"""Cancel changes to disk configuring
Scenario:
1. Click on disk area
2. Allocate space for Image Storage
3. Click Cancel Changes
4. Verify that default value is restored
"""
def test_cancel_changes(self):
with DisksSettings() as s:
s.disks[0].volume_image.parent.click()
time.sleep(1)
default = s.disks[0].\
volume_group_image.input.get_attribute('value')
default = s.disks[0].volume_group_image.input.\
get_attribute('value')
s.disks[0].volume_group_image.input.\
clear()
s.disks[0].volume_group_image.input.\
@ -141,6 +212,19 @@ class TestConfigureDisks(BaseTestCase):
'default value has been restored'
)
"""Back to node list form disk configuring
Scenario:
1. Click on disk area
2. Allocate space for Image Storage
3. Click Back to node list
4. Click Stay on page
5. Verify that changes aren't discarded
6. Click Back to node list
7. Click Leave page
8. Verify that Nodes page is present and changes are discarded
"""
def test_confirm_if_back_to_list(self):
with DisksSettings() as s:
s.disks[0].volume_image.parent.click()
@ -156,7 +240,8 @@ class TestConfigureDisks(BaseTestCase):
p.wait_until_exists()
self.assertEqual(
'0', s.disks[0].volume_group_image.
input.get_attribute('value'), 'Value is not changed')
input.get_attribute('value'),
'Value is not changed')
s.back_to_node_list.click()
with ConfirmPopup() as p:
@ -168,6 +253,16 @@ class TestConfigureDisks(BaseTestCase):
Nodes().add_nodes.is_displayed(),
'Backed to nodes page. Add Nodes button is displayed')
"""Configure disks for several nodes
Scenario:
1. Add two compute nodes
2. Select this two nodes and click configure disks
3. Allocate size for Base system volume
4. Click apply changes
5. Verify that changes are correctly applied
"""
def test_configure_disks_of_several_nodes(self):
values = [random.randint(100000, 500000) for i in range(4)]
@ -210,7 +305,7 @@ class TestConfigureDisks(BaseTestCase):
for j, v in enumerate(values):
self.assertEqual(
"{:,}".format(v),
s.disks[j].
volume_group_storage.input.get_attribute('value'),
s.disks[j].volume_group_storage.input.
get_attribute('value'),
'Image volume size of disk {0} of node {0} is correct'.
format(j, i))

View File

@ -5,9 +5,7 @@ import browser
from pageobjects.environments import Environments
from pageobjects.networks import Networks
from pageobjects.node_interfaces_settings import InterfacesSettings
from pageobjects.nodes import Nodes
from pageobjects.nodes import RolesPanel
from pageobjects.nodes import NodeInfo
from pageobjects.nodes import Nodes, RolesPanel, NodeInfo
from pageobjects.tabs import Tabs
from tests import preconditions
from tests.base import BaseTestCase
@ -15,23 +13,49 @@ from tests.base import BaseTestCase
class TestConfigureNetworksPage(BaseTestCase):
"""Global precondition
Steps:
1. Create simple environment with default values
2. Add one controller node
"""
@classmethod
def setUpClass(cls):
BaseTestCase.setUpClass()
preconditions.Environment.simple_flat()
Environments().create_cluster_boxes[0].click()
time.sleep(1)
Nodes().add_nodes.click()
time.sleep(1)
Nodes().nodes_discovered[0].checkbox.click()
RolesPanel().controller.click()
Nodes().apply_changes.click()
time.sleep(1)
"""Each test precondition
Steps:
1. Click on created environment
2. Select controller node
3. Click Configure Interfaces
"""
def setUp(self):
BaseTestCase.setUp(self)
Environments().create_cluster_boxes[0].click()
Nodes().nodes[0].details.click()
NodeInfo().edit_networks.click()
"""Drag and drop networks between interfaces
Scenario:
1. Drag and drop Storage network from eth0 to eth1
2. Drag and drop Management network from eth0 to eth2
3. Drag and drop VM network from eth0 to eth2
4. Verify that networks are on correct interfaces
"""
def test_drag_and_drop(self):
with InterfacesSettings() as s:
ActionChains(browser.driver).drag_and_drop(
@ -54,6 +78,15 @@ class TestConfigureNetworksPage(BaseTestCase):
'vm (fixed)', s.interfaces[2].networks,
'vm (fixed) at eht2')
"""Drag and drop public and floating networks
Scenario:
1. Drag and drop Public network from eth0 to eth1
2. Verify that Floating network is moved to eth1 too
3. Drag and drop Floating network from eth1 to eth2
4. Verify that Public network is moved to eth2 too
"""
def test_public_floating_grouped(self):
with InterfacesSettings() as s:
ActionChains(browser.driver).drag_and_drop(
@ -69,15 +102,33 @@ class TestConfigureNetworksPage(BaseTestCase):
'public', s.interfaces[2].networks,
'Public has been moved')
"""Drag and drop Admin(PXE) network
Scenario:
1. Drag and drop Admin(PXE) network from eth2 to eth0
2. Verify that network isn't draggable
"""
def test_admin_pxe_is_not_dragable(self):
with InterfacesSettings() as s:
ActionChains(browser.driver).drag_and_drop(
s.interfaces[2].networks['admin (pxe)'],
s.interfaces[0].networks_box).perform()
self.assertNotIn(
'admin (pxe)', s.interfaces[1].networks,
'admin (pxe)', s.interfaces[0].networks,
'admin (pxe) has not been moved')
"""Assign two untagged networks to one interface
Scenario:
1. Drag and drop Public network from eth0 to eth2
2. Verify that eth2 is highlighted with red colour,
there is error message and Apply button is inactive
3. Drag and drop Public network from eth2 to eth1
4. Verify that eth2 isn't highlighted, error message
has disappeared and Apply button is active
"""
def test_two_untagged_on_interface(self):
error = 'Untagged networks can not be assigned to one interface'
with InterfacesSettings() as s:
@ -88,8 +139,8 @@ class TestConfigureNetworksPage(BaseTestCase):
'nodrag', s.interfaces[2].parent.get_attribute('class'),
'Red border')
self.assertIn(
error, s.interfaces[2].
parent.find_element_by_xpath('./..').text,
error,
s.interfaces[2].parent.find_element_by_xpath('./..').text,
'Error message is displayed'
)
self.assertFalse(s.apply.is_enabled(), 'Apply disabled')
@ -100,12 +151,22 @@ class TestConfigureNetworksPage(BaseTestCase):
'nodrag', s.interfaces[2].parent.get_attribute('class'),
'Red border')
self.assertNotIn(
error, s.interfaces[2].
parent.find_element_by_xpath('./..').text,
error,
s.interfaces[2].parent.find_element_by_xpath('./..').text,
'Error message is displayed'
)
self.assertTrue(s.apply.is_enabled(), 'Apply enabled')
"""Assign two untagged networks to one interface
Scenario:
1. Drag and drop Public network from eth0 to eth1
2. Drag and drop Storage network from eth0 to eth2
3. Click Cancel Changes
4. Verify that Public, Storage, Floating network
are on eth0 interface
"""
def test_cancel_changes(self):
with InterfacesSettings() as s:
ActionChains(browser.driver).drag_and_drop(
@ -134,13 +195,25 @@ class TestConfigureNetworks(BaseTestCase):
def setUpClass(cls):
BaseTestCase.setUpClass()
"""Each test precondition
Steps:
1. Create simple environment with default values
2. Click on created environment
3. Create controller node
4. Select controller node
5. Click Configure Interfaces
"""
def setUp(self):
BaseTestCase.clear_nailgun_database()
BaseTestCase.setUp(self)
preconditions.Environment.simple_flat()
Environments().create_cluster_boxes[0].click()
time.sleep(1)
Nodes().add_nodes.click()
time.sleep(1)
Nodes().nodes_discovered[0].checkbox.click()
RolesPanel().controller.click()
Nodes().apply_changes.click()
@ -148,6 +221,17 @@ class TestConfigureNetworks(BaseTestCase):
Nodes().nodes[0].details.click()
NodeInfo().edit_networks.click()
"""Load default network settings
Scenario:
1. Drag and drop Public network from eth0 to eth1
2. Drag and drop Storage network from eth0 to eth2
3. Click Apply
4. Click Load Defaults
5. Verify that Public, Storage, Floating network
are on eth0 interface
"""
def test_save_load_defaults(self):
with InterfacesSettings() as s:
ActionChains(browser.driver).drag_and_drop(
@ -181,10 +265,25 @@ class TestConfigureNetworks(BaseTestCase):
'floating', s.interfaces[0].networks,
'floating at eht0')
"""Configure interfaces on several nodes
Scenario:
1. Add compute node
2. Select compute and controller node
and click Configure interfaces
3. Drag and drop Public network from eth0 to eth1
4. Drag and drop Storage network from eth0 to eth2
5. Drag and drop Management network from eth0 to eth1
6. Click Apply
7. Verify that Public and Management networks
are on eth1 interface, Storage is on eth2
"""
def test_configure_interfaces_of_several_nodes(self):
# Go back to nodes page
Tabs().nodes.click()
# Add second node
time.sleep(1)
Nodes().add_nodes.click()
Nodes().nodes_discovered[0].checkbox.click()
RolesPanel().compute.click()
@ -223,6 +322,18 @@ class TestConfigureNetworks(BaseTestCase):
'storage', s.interfaces[2].networks,
'storage at eht2. Node #{0}'.format(i))
"""Checking vlan id label when vlan tagging is disabled
Scenario:
1. Open Networks tab
2. Disable vlan tagging for Management, Storage, VM(Fixed)
3. Open Nodes tab
4. Select controller node
5. Click configure interfaces
6. Verify that 'Vlan Id' isn't visible on Storage,
Management, VM(Fixed) network boxes
"""
def test_vlan_id_labels_visibility(self):
label = 'VLAN ID'
Tabs().networks.click()
@ -246,6 +357,19 @@ class TestConfigureNetworks(BaseTestCase):
label, s.interfaces[0].networks['vm (fixed)'].text,
'vlan id is visible. VM (Fixed) network')
"""Checking correctness of vlan id on Networks tab
Scenario:
1. Open Networks tab
2. Enable vlan tagging for Management, Storage, VM(Fixed)
and enter values in range from 110 to 200
3. Open Nodes tab
4. Select controller node
5. Click configure interfaces
6. Verify that 'Vlan Id' values are correct on Storage,
Management, VM(Fixed) network boxes
"""
def test_vlan_id_values(self):
label = 'VLAN ID: {0}'
vlans = [random.randint(110, 200) for i in range(3)]
@ -268,14 +392,14 @@ class TestConfigureNetworks(BaseTestCase):
NodeInfo().edit_networks.click()
with InterfacesSettings() as s:
self.assertIn(
label.format(vlans[0]),
s.interfaces[0].networks['management'].text,
label.format(vlans[0]), s.interfaces[0].
networks['management'].text,
'vlan id is correct. Management network')
self.assertIn(
label.format(vlans[1]),
s.interfaces[0].networks['storage'].text,
label.format(vlans[1]), s.interfaces[0].
networks['storage'].text,
'vlan id is correct. Storage network')
self.assertIn(
label.format(vlans[2]),
s.interfaces[0].networks['vm (fixed)'].text,
label.format(vlans[2]), s.interfaces[0].
networks['vm (fixed)'].text,
'vlan id is correct. VM (Fixed) network')

View File

@ -16,6 +16,13 @@ class TestDeploy(BaseTestCase):
def setUpClass(cls):
BaseTestCase.setUpClass()
"""Each test precondition
Steps:
1. Create simple environment with default values
2. Click on created environment
"""
def setUp(self):
BaseTestCase.clear_nailgun_database()
BaseTestCase.setUp(self)
@ -23,6 +30,14 @@ class TestDeploy(BaseTestCase):
Environments().create_cluster_boxes[0].click()
time.sleep(1)
"""Deploy environment with controller and compute nodes
Scenario:
1. Add controller and compute node
2. Deploy changes
3. Verify that nodes statuses are ready
"""
def test_add_nodes(self):
Nodes().add_nodes.click()
Nodes().nodes_discovered[0].checkbox.click()
@ -51,6 +66,16 @@ class TestDeploy(BaseTestCase):
self.assertEqual('ready', node.status.text.lower(),
'Node status is READY')
"""Delete one node and deploy changes
Scenario:
1. Add controller and compute node
2. Deploy changes
3. Delete one node
4. Deploy changes
5. Verify that only one node is present
"""
def test_delete_node(self):
self.test_add_nodes()
@ -76,6 +101,17 @@ class TestDeploy(BaseTestCase):
self.assertEqual('ready', node.status.text.lower(),
'Node status is READY')
"""Configure network interfaces after deploy
Scenario:
1. Add controller node
2. Deploy changes
3. Select controller node and click configure interfaces
4. Drag and drop Storage network to eth1
5. Verify that Storage network can't be dragged and dropped
6. Apply, Load defaults, Cancel Changes buttons are not active
"""
def test_node_configure_networks_is_readonly(self):
Nodes().add_nodes.click()
Nodes().nodes_discovered[0].checkbox.click()
@ -104,6 +140,16 @@ class TestDeploy(BaseTestCase):
self.assertFalse(s.cancel_changes.is_enabled(),
'Cancel changes is disabled')
"""Configure disks after deploy
Scenario:
1. Add controller node
2. Deploy changes
3. Select controller node and click configure disks
4. Verify that volume inputs are disabled
6. Apply, Load defaults, Cancel Changes buttons are not active
"""
def test_node_configure_disks_is_readonly(self):
Nodes().add_nodes.click()
Nodes().nodes_discovered[0].checkbox.click()

View File

@ -11,6 +11,14 @@ class TestDiscardEnvironmentChanges(BaseTestCase):
def setUpClass(cls):
BaseTestCase.setUpClass()
"""Each test precondition
Steps:
1. Create simple environment with default values
2. Click on created environment
3. Deploy environment with 1 controller and 2 compute nodes
"""
def setUp(self):
BaseTestCase.clear_nailgun_database()
BaseTestCase.setUp(self)
@ -31,6 +39,14 @@ class TestDiscardEnvironmentChanges(BaseTestCase):
self.assertEqual('ready', node.status.text.lower(),
'Node status is READY')
"""Discard changes after adding new node
Scenario:
1. Add compute node
2. Discard changes
3. Verify that there are 3 nodes and their statuses are ready
"""
def test_discard_adding_node(self):
Nodes().add_nodes.click()
Nodes().nodes_discovered[0].checkbox.click()
@ -39,6 +55,14 @@ class TestDiscardEnvironmentChanges(BaseTestCase):
time.sleep(1)
self._discard_changes()
"""Discard changes after deleting node
Scenario:
1. Delete one compute node
2. Discard changes
3. Verify that there are 3 nodes and their statuses are ready
"""
def test_discard_deleting_node(self):
with Nodes() as n:
n.nodes[1].checkbox.click()

View File

@ -1,15 +1,20 @@
import time
import random
from pageobjects.environments import Environments
from pageobjects.environments import Wizard
from pageobjects.environments import Environments, Wizard
from pageobjects.settings import Settings
from pageobjects.tabs import Tabs
from settings import OPENSTACK_CENTOS, OPENSTACK_RELEASE_CENTOS
from tests.base import BaseTestCase
from fuelweb_ui_test.settings import OPENSTACK_CENTOS
from fuelweb_ui_test.settings import OPENSTACK_RELEASE_CENTOS
class BaseClass(BaseTestCase):
"""Global precondition
Steps:
1. Create simple environment with Neutron with GRE segmentation
"""
@classmethod
def setUpClass(cls):
BaseTestCase.setUpClass()
@ -26,6 +31,13 @@ class BaseClass(BaseTestCase):
w.create.click()
w.wait_until_exists()
"""Each test precondition
Steps:
1. Click on created environment
2. Open Settings tab
"""
def setUp(self):
BaseTestCase.setUp(self)
Environments().create_cluster_boxes[0].click()
@ -94,12 +106,41 @@ class BaseClass(BaseTestCase):
class TestAccess(BaseClass):
"""Change username
Scenario:
1. Enter new username
2. Save settings
3. Verify that username is correctly saved
4. Click Load defaults
5. Verify that previous username is displayed
"""
def test_username(self):
self._test_text_field('username', 'newname')
"""Change password
Scenario:
1. Enter new password
2. Save settings
3. Verify that password is correctly saved
4. Click Load defaults
5. Verify that previous password is activated
"""
def test_password(self):
self._test_text_field('password', 'newpassword')
"""Show password feature
Scenario:
1. Click show password button
2. Verify that text of the password is displayed
3. Click on show password button again
4. Verify that password text isn't displayed
"""
def test_password_show(self):
with Settings() as s:
s.show_password.click()
@ -107,83 +148,303 @@ class TestAccess(BaseClass):
s.show_password.click()
self.assertEqual(s.password.get_attribute('type'), 'password')
"""Change tenant
Scenario:
1. Enter new tenant
2. Save settings
3. Verify that tenant is correctly saved
4. Click Load defaults
5. Verify that previous tenant name is displayed
"""
def test_tenant(self):
self._test_text_field('tenant', 'newtenant')
"""Change email
Scenario:
1. Enter new email
2. Save settings
3. Verify that email is correctly saved
4. Click Load defaults
5. Verify that previous email is displayed
"""
def test_email(self):
self._test_text_field('email', 'newemail@example.org')
class TestAdditionalComponents(BaseClass):
"""Install Savanna component
Scenario:
1. Click on Install Savanna checkbox
2. Save settings
3. Verify that Install Savanna checkbox is selected
4. Click Load defaults
5. Verify that Install Savanna checkbox is not selected
"""
def test_savanna(self):
self._test_tumbler_field('install_savanna')
"""Install Murano component
Scenario:
1. Click on Install Murano checkbox
2. Save settings
3. Verify that Install Murano checkbox is selected
4. Click Load defaults
5. Verify that Install Murano checkbox is not selected
"""
def test_murano(self):
self._test_tumbler_field('install_murano')
"""Install Ceilometer component
Scenario:
1. Click on Install Ceilometer checkbox
2. Save settings
3. Verify that Install Ceilometer checkbox is selected
4. Click Load defaults
5. Verify that Install Ceilometer checkbox is not selected
"""
def test_ceilometer(self):
self._test_tumbler_field('install_ceilometer')
class TestCommon(BaseClass):
"""Enable OpenStack debug logging
Scenario:
1. Click on OpenStack debug logging checkbox
2. Save settings
3. Verify that OpenStack debug logging checkbox is selected
4. Click Load defaults
5. Verify that OpenStack debug logging checkbox is not selected
"""
def test_debug(self):
self._test_tumbler_field('debug')
"""Change hypervisor type
Scenario:
1. Select hypervisor type 'KVM'
2. Save settings
3. Verify that KVM hypervisor type is selected
4. Click Load defaults
5. Verify that QEMU hypervisor is selected
"""
def test_hypervisor_type(self):
self._test_radio_group(['hypervisor_qemu', 'hypervisor_kvm'])
"""Enable Auto assign floating IP
Scenario:
1. Click on Auto assign floating IP checkbox
2. Save settings
3. Verify that Auto assign floating IP checkbox is selected
4. Click Load defaults
5. Verify that Auto assign floating IP checkbox is not selected
"""
def test_assign_ip(self):
self._test_tumbler_field('assign_ip')
"""Change scheduler driver
Scenario:
1. Select 'Simple scheduler' radio button
2. Save settings
3. Verify that 'Simple scheduler' is selected
4. Click Load defaults
5. Verify that 'Filter scheduler' is selected
"""
def test_scheduler_driver(self):
self._test_radio_group(['filter_scheduler', 'simple_scheduler'])
"""Enable VSwitch VLAN splinters
Scenario:
1. Select 'OVS VLAN splinters soft trunks' radio button
2. Save settings
3. Verify that 'OVS VLAN splinters soft trunks' is selected
4. Click Load defaults
5. Verify that 'Disabled' is selected
"""
def test_vlan_splinters(self):
self._test_radio_group(
['vlan_splinters_disabled',
'vlan_splinters_soft',
['vlan_splinters_disabled', 'vlan_splinters_soft',
'vlan_splinters_hard'])
"""Enable 'Use qcow format for images'
Scenario:
1. Click on 'Use qcow format for images' checkbox
2. Save settings
3. Verify that 'Use qcow format for images' checkbox is selected
4. Click Load defaults
5. Verify that 'Use qcow format for images'
checkbox is not selected
"""
def test_use_cow_images(self):
self._test_tumbler_field('use_cow_images')
"""Enable 'Start guests on host boot'
Scenario:
1. Click on 'Start guests on host boot' checkbox
2. Save settings
3. Verify that 'Start guests on host boot' checkbox is selected
4. Click Load defaults
5. Verify that 'Start guests on host boot' checkbox is not selected
"""
def test_start_guests(self):
self._test_tumbler_field('start_guests')
"""Change authorization key
Scenario:
1. Enter new authorization key
2. Save settings
3. Verify that authorization key is correctly saved
4. Click Load defaults
5. Verify that default authorization key is active
"""
def test_auth_key(self):
self._test_text_field('auth_key', 'newauthkey')
class TestSyslog(BaseClass):
"""Change hostname
Scenario:
1. Enter new hostname
2. Save settings
3. Verify that hostname is correctly saved
4. Click Load defaults
5. Verify that default hostname is displayed
"""
def test_hostname(self):
self._test_text_field('syslog_server', 'newsyslog_server')
"""Change port
Scenario:
1. Enter new port value
2. Save settings
3. Verify that port value is correctly saved
4. Click Load defaults
5. Verify that default port value is displayed
"""
def test_port(self):
self._test_text_field('syslog_port', '8000')
"""Change syslog transport protocol
Scenario:
1. Select 'TCP' radio button
2. Save settings
3. Verify that 'TCP' is selected
4. Click Load defaults
5. Verify that 'UDP' is selected
"""
def test_syslog_protocol(self):
self._test_radio_group(['syslog_udp', 'syslog_tcp'])
class TestStorage(BaseClass):
"""Enable 'Cinder LVM'
Scenario:
1. Click on 'Cinder LVM' checkbox
2. Save settings
3. Verify that 'Cinder LVM' checkbox is not selected
4. Click Load defaults
5. Verify that 'Cinder LVM' checkbox is selected
"""
def test_cinder_for_volumes(self):
self._test_tumbler_field('cinder_for_volumes')
"""Enable 'Ceph for volumes'
Scenario:
1. Click on 'Ceph for volumes' checkbox
2. Save settings
3. Verify that 'Ceph for volumes' checkbox is selected
4. Click Load defaults
5. Verify that 'Ceph for volumes' checkbox is not selected
"""
def test_ceph_for_volumes(self):
self._test_tumbler_field('ceph_for_volumes')
"""Enable 'Ceph for images'
Scenario:
1. Click on 'Ceph for images' checkbox
2. Save settings
3. Verify that 'Ceph for images' checkbox is selected
4. Click Load defaults
5. Verify that 'Ceph for images' checkbox is not selected
"""
def test_ceph_for_images(self):
self._test_tumbler_field('ceph_for_images')
"""Enable 'Ceph for ephemeral'
Scenario:
1. Click on 'Ceph for ephemeral' checkbox
2. Save settings
3. Verify that 'Ceph for ephemeral' checkbox is selected
4. Click Load defaults
5. Verify that 'Ceph for ephemeral' checkbox is not selected
"""
def test_ceph_ephemeral(self):
self._test_tumbler_field('ceph_ephemeral')
"""Enable 'Ceph RadosGW for objects'
Scenario:
1. Click on 'Ceph RadosGW for objects' checkbox
2. Save settings
3. Verify that 'Ceph RadosGW for objects' checkbox is selected
4. Click Load defaults
5. Verify that 'Ceph RadosGW for objects' checkbox is not selected
"""
def test_ceph_rados_gw(self):
self._test_tumbler_field('ceph_rados_gw')
"""Change ceph factor
Scenario:
1. Enter new ceph factor
2. Save settings
3. Verify that ceph factor value is correctly saved
4. Click Load defaults
5. Verify that default ceph factor value is displayed
"""
def test_ceph_factor(self):
self._test_text_field('ceph_factor', '10')

View File

@ -3,23 +3,35 @@ from pageobjects.base import PageObject
from pageobjects.environments import Environments, Wizard
from pageobjects.header import Header
from pageobjects.releases import Releases
from settings import OPENSTACK_RELEASE_CENTOS
from settings import OPENSTACK_RELEASE_UBUNTU, OPENSTACK_RELEASE_REDHAT
from settings import OPENSTACK_REDHAT, REDHAT_USERNAME, REDHAT_PASSWORD
from settings import REDHAT_SATELLITE, REDHAT_ACTIVATION_KEY
from tests.base import BaseTestCase
from fuelweb_ui_test.settings import OPENSTACK_RELEASE_CENTOS
from fuelweb_ui_test.settings import OPENSTACK_RELEASE_UBUNTU
from fuelweb_ui_test.settings import OPENSTACK_RELEASE_REDHAT
from fuelweb_ui_test.settings import REDHAT_USERNAME
from fuelweb_ui_test.settings import REDHAT_PASSWORD
from fuelweb_ui_test.settings import OPENSTACK_REDHAT
from fuelweb_ui_test.settings import REDHAT_SATELLITE
from fuelweb_ui_test.settings import REDHAT_ACTIVATION_KEY
class TestEnvWizard(BaseTestCase):
"""Each test precondition
Steps:
1. Click on create environment
"""
def setUp(self):
BaseTestCase.setUp(self)
Environments().create_cluster_box.click()
"""Test environment name
Scenario:
1. Enter Environment name
2. Click next and then previous button
3. Verify that correct name is displayed
4. Clear environment name and click next
5. Verify that message 'Environment name cannot be empty' appears
"""
def test_name_field(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_RELEASE_CENTOS)
@ -33,6 +45,17 @@ class TestEnvWizard(BaseTestCase):
'Environment name cannot be empty',
w.name.find_element_by_xpath('..').text)
"""Test existing environment name
Scenario:
1. Create environment with 'test name'
2. Click create environment again
3. Enter 'test name'
4. Click next button
5. Verify that message 'Environment with name test name
already exists' appears
"""
def test_name_exists(self):
name = 'test name'
with Wizard() as w:
@ -51,6 +74,16 @@ class TestEnvWizard(BaseTestCase):
format(name),
w.name.find_element_by_xpath('..').text)
"""Test environment release field
Scenario:
1. Enter environment name
2. Select Havana on Ubuntu in release list
3. Click next button
4. Click previous button
5. Verify that correct release is selected
"""
def test_release_field(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_RELEASE_UBUNTU)
@ -60,6 +93,18 @@ class TestEnvWizard(BaseTestCase):
self.assertEqual(w.release.first_selected_option.text,
OPENSTACK_RELEASE_UBUNTU)
"""Test validation of empty RHEL form
Scenario:
1. Enter environment name
2. Select RHOS for RHEL in release list
3. Click next button
4. Verify that 'Invalid username' and 'Invalid password'
messages appear
5. Select RHN Satellite license and click next
6. Verify that error messages appear
"""
def test_rhel_empty_form(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_RELEASE_REDHAT)
@ -84,6 +129,18 @@ class TestEnvWizard(BaseTestCase):
'Invalid activation key',
w.redhat_activation_key.find_element_by_xpath('..').text)
"""Test RHEL form on presence of necessary fields
Scenario:
1. Enter environment name
2. Select RHOS for RHEL in release list
3. Verify all necessary fields exist
4. Select RHN Satellite license
5. Verify satellite and activation key fields appear
6. Select RHSM radio button
7. Verify satellite and activation key fields disappear
"""
def test_rhel_form(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_RELEASE_REDHAT)
@ -101,6 +158,16 @@ class TestEnvWizard(BaseTestCase):
self.assertFalse(w.redhat_satellite.is_displayed())
self.assertFalse(w.redhat_activation_key.is_displayed())
"""Test development mode
Scenario:
1. Enter environment name
2. Select Havana on Ubuntu in release list and click next
3. Select HA mode and click next
4. Click previous
5. Verify HA mode is selected
"""
def test_mode_radios(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_RELEASE_UBUNTU)
@ -109,12 +176,21 @@ class TestEnvWizard(BaseTestCase):
w.mode_ha_compact.click()
w.next.click()
w.prev.click()
self.assertTrue(
w.mode_ha_compact.
find_element_by_tag_name('input').is_selected())
self.assertFalse(
w.mode_multinode.
find_element_by_tag_name('input').is_selected())
self.assertTrue(w.mode_ha_compact.
find_element_by_tag_name('input').is_selected())
self.assertFalse(w.mode_multinode.
find_element_by_tag_name('input').is_selected())
"""Select environment hypervisor
Scenario:
1. Enter environment name
2. Select Havana on Ubuntu in release list and click next
3. Click next again
4. Select KVM hypervisor and click next
5. Click previous
6. Verify KVM is selected
"""
def test_hypervisor_radios(self):
with Wizard() as w:
@ -125,12 +201,21 @@ class TestEnvWizard(BaseTestCase):
w.hypervisor_qemu.click()
w.next.click()
w.prev.click()
self.assertTrue(
w.hypervisor_qemu.find_element_by_tag_name('input').
is_selected())
self.assertFalse(
w.hypervisor_kvm.find_element_by_tag_name('input').
is_selected())
self.assertTrue(w.hypervisor_qemu.
find_element_by_tag_name('input').is_selected())
self.assertFalse(w.hypervisor_kvm.
find_element_by_tag_name('input').is_selected())
"""Select environment network
Scenario:
1. Enter environment name
2. Select Havana on Ubuntu in release list
and click next three times
3. Select Neutron with GRE segmentation
4. Click next and click previous button
5. Verify Neutron with GRE network is selected
"""
def test_network_radios(self):
with Wizard() as w:
@ -142,24 +227,30 @@ class TestEnvWizard(BaseTestCase):
w.network_neutron_gre.click()
w.next.click()
w.prev.click()
self.assertFalse(
w.network_nova.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
w.network_neutron_gre.find_element_by_tag_name('input').
is_selected())
self.assertFalse(
w.network_neutron_vlan.find_element_by_tag_name('input').
is_selected())
self.assertFalse(w.network_nova.
find_element_by_tag_name('input').is_selected())
self.assertTrue(w.network_neutron_gre.
find_element_by_tag_name('input').is_selected())
self.assertFalse(w.network_neutron_vlan.
find_element_by_tag_name('input').is_selected())
w.network_neutron_vlan.click()
self.assertFalse(
w.network_nova.find_element_by_tag_name('input').is_selected())
self.assertFalse(
w.network_neutron_gre.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
w.network_neutron_vlan.find_element_by_tag_name('input').
is_selected())
self.assertFalse(w.network_nova.
find_element_by_tag_name('input').is_selected())
self.assertFalse(w.network_neutron_gre.
find_element_by_tag_name('input').is_selected())
self.assertTrue(w.network_neutron_vlan.
find_element_by_tag_name('input').is_selected())
"""Select environment storage
Scenario:
1. Enter environment name
2. Select Havana on Ubuntu in release list
and click next four times
3. Select Ceph for Cinder and Glance
4. Click next and click previous button
5. Verify Ceph options are selected
"""
def test_storage_radios(self):
with Wizard() as w:
@ -173,18 +264,27 @@ class TestEnvWizard(BaseTestCase):
w.storage_glance_ceph.click()
w.next.click()
w.prev.click()
self.assertFalse(
w.storage_cinder_default.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
w.storage_cinder_ceph.find_element_by_tag_name('input').
is_selected())
self.assertFalse(
w.storage_glance_default.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
w.storage_glance_ceph.find_element_by_tag_name('input').
is_selected())
self.assertFalse(w.storage_cinder_default.
find_element_by_tag_name('input').is_selected())
self.assertTrue(w.storage_cinder_ceph.
find_element_by_tag_name('input').is_selected())
self.assertFalse(w.storage_glance_default.
find_element_by_tag_name('input').is_selected())
self.assertTrue(w.storage_glance_ceph.
find_element_by_tag_name('input').is_selected())
"""Select environment additional services
Scenario:
1. Enter environment name
2. Select Havana on Ubuntu in release list and
click next three times
3. Select Neutron with GRE network
4. Click next two times
5. Select install Savanna, Murano, Ceilometer
6. Click next and previous button
7. Verify checkboxes are selected
"""
def test_services_checkboxes(self):
with Wizard() as w:
@ -201,15 +301,27 @@ class TestEnvWizard(BaseTestCase):
w.install_ceilometer.click()
w.next.click()
w.prev.click()
self.assertTrue(
w.install_savanna.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
w.install_murano.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
w.install_ceilometer.find_element_by_tag_name('input').
is_selected())
self.assertTrue(w.install_savanna.
find_element_by_tag_name('input').is_selected())
self.assertTrue(w.install_murano.
find_element_by_tag_name('input').is_selected())
self.assertTrue(w.install_ceilometer.
find_element_by_tag_name('input').is_selected())
"""Cancel environment wizard
Scenario:
1. Enter environment name
2. Select Havana on Ubuntu in release list and click next
3. Select HA mode and click next
4. Select KVM hypervisor and click next
5. Select Neutron with GRE and click next
6. Select Ceph options for Cinder and Glance and click next
7. Select install Savanna, Murano and click next
8. Click cancel button
9. Click create environment again and check that
all default values are selected
"""
def test_cancel_button(self):
with Wizard() as w:
@ -238,40 +350,50 @@ class TestEnvWizard(BaseTestCase):
OPENSTACK_RELEASE_CENTOS)
w.name.send_keys(OPENSTACK_RELEASE_UBUNTU)
w.next.click()
self.assertTrue(
w.mode_multinode.find_element_by_tag_name('input').
is_selected())
self.assertTrue(w.mode_multinode.
find_element_by_tag_name('input').is_selected())
w.next.click()
self.assertTrue(
w.hypervisor_qemu.find_element_by_tag_name('input').
is_selected())
self.assertTrue(w.hypervisor_qemu.
find_element_by_tag_name('input').is_selected())
w.next.click()
self.assertTrue(
w.network_nova.find_element_by_tag_name('input').
is_selected())
self.assertTrue(w.network_nova.
find_element_by_tag_name('input').is_selected())
w.next.click()
self.assertTrue(
w.storage_cinder_default.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
w.storage_glance_default.find_element_by_tag_name('input').
is_selected())
self.assertTrue(w.storage_cinder_default.
find_element_by_tag_name('input').is_selected())
self.assertTrue(w.storage_glance_default.
find_element_by_tag_name('input').is_selected())
w.next.click()
self.assertFalse(
w.install_savanna.find_element_by_tag_name('input').
is_selected())
self.assertFalse(
w.install_murano.find_element_by_tag_name('input').
is_selected())
self.assertFalse(w.install_savanna.
find_element_by_tag_name('input').is_selected())
self.assertFalse(w.install_murano.
find_element_by_tag_name('input').is_selected())
class TestEnvWizardRedHat(BaseTestCase):
"""Each test precondition
Steps:
1. Click on create environment
"""
def setUp(self):
BaseTestCase.clear_nailgun_database()
BaseTestCase.setUp(self)
Environments().create_cluster_box.click()
"""Download RHEL and RHOS by RHSM
Scenario:
1. Enter environment name
2. Select RHOS in release list
3. Enter Redhat username and password
4. Click next till the end and click create
5. Open releases tab
6. Verify that RHOS status is active
"""
def test_rhsm(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_RELEASE_REDHAT)
@ -291,6 +413,19 @@ class TestEnvWizardRedHat(BaseTestCase):
'Active', r.dict[OPENSTACK_REDHAT].status.text,
'RHOS status is active')
"""Download RHEL and RHOS by RHN satellite
Scenario:
1. Enter environment name
2. Select RHOS in release list
3. Select RHN option
4. Enter Redhat username and password, satellite
hostname and activation key
5. Click next till the end and click create
6. Open releases tab
7. Verify that RHOS status is active
"""
def test_rhn_satellite(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_RELEASE_REDHAT)

View File

@ -1,20 +1,37 @@
import time
from pageobjects.environments import Environments, Wizard
from pageobjects.networks import Networks, NeutronParameters
from pageobjects.nodes import Nodes
from pageobjects.settings import Settings
from pageobjects.tabs import Tabs
from settings import OPENSTACK_CENTOS, OPENSTACK_RELEASE_CENTOS
from tests.base import BaseTestCase
from fuelweb_ui_test.settings import OPENSTACK_CENTOS
from fuelweb_ui_test.settings import OPENSTACK_RELEASE_CENTOS
class TestEnvironment(BaseTestCase):
"""Each test precondition
Steps:
1. Click on create environment
"""
def setUp(self):
self.clear_nailgun_database()
BaseTestCase.setUp(self)
Environments().create_cluster_box.click()
"""Create default environment
Scenario:
1. Create environment with default values
2. Click on created environment
3. Verify that correct environment name is displayed
4. Click on information icon and verify all
information is displayed correctly
5. Verify all info on Networks and Settings tab
"""
def test_default_settings(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_CENTOS)
@ -29,6 +46,7 @@ class TestEnvironment(BaseTestCase):
cb.click()
with Nodes() as n:
time.sleep(1)
self.assertEqual(n.env_name.text, OPENSTACK_CENTOS)
n.info_icon.click()
self.assertIn('display: block;',
@ -42,25 +60,30 @@ class TestEnvironment(BaseTestCase):
n.env_details.get_attribute('style'))
Tabs().networks.click()
with Networks() as n:
self.assertTrue(
n.flatdhcp_manager.find_element_by_tag_name('input').
is_selected())
self.assertTrue(n.flatdhcp_manager.
find_element_by_tag_name('input').is_selected())
Tabs().settings.click()
with Settings() as s:
self.assertFalse(
s.install_savanna.find_element_by_tag_name('input').
is_selected())
self.assertFalse(
s.install_murano.find_element_by_tag_name('input').
is_selected())
self.assertFalse(
s.install_ceilometer.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
s.hypervisor_qemu.find_element_by_tag_name('input').
is_selected())
self.assertFalse(s.install_savanna.
find_element_by_tag_name('input').is_selected())
self.assertFalse(s.install_murano.
find_element_by_tag_name('input').is_selected())
self.assertFalse(s.install_ceilometer.
find_element_by_tag_name('input').is_selected())
self.assertTrue(s.hypervisor_qemu.
find_element_by_tag_name('input').is_selected())
pass
"""Create environment with HA mode
Scenario:
1. Create environment with HA mode
2. Click on created environment
3. Verify that correct environment name is displayed
4. Click on information icon and verify
all information is displayed correctly
"""
def test_ha_mode(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_CENTOS)
@ -81,6 +104,15 @@ class TestEnvironment(BaseTestCase):
self.assertIn(OPENSTACK_CENTOS, n.env_details.text)
self.assertIn('Multi-node with HA', n.env_details.text)
"""Create environment with KVM hypervisor
Scenario:
1. Create environment with KVM hypervisor
2. Click on created environment
3. Open settings tab
4. Verify KVM hypervisor is selected
"""
def test_hypervisor_kvm(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_CENTOS)
@ -98,9 +130,18 @@ class TestEnvironment(BaseTestCase):
Tabs().settings.click()
with Settings() as s:
self.assertTrue(
s.hypervisor_kvm.find_element_by_tag_name('input').
is_selected())
self.assertTrue(s.hypervisor_kvm.
find_element_by_tag_name('input').is_selected())
"""Create environment with Neutron GRE network
Scenario:
1. Create environment with Neutron GRE network
2. Click on created environment
3. Open networks tab
4. Verify Neutron parameters are displayed and
Neutron with gre segmentation text is displayed
"""
def test_neutron_gre(self):
with Wizard() as w:
@ -123,6 +164,16 @@ class TestEnvironment(BaseTestCase):
'Neutron with gre segmentation')
self.assertTrue(NeutronParameters().parent.is_displayed())
"""Create environment with Neutron VLAN network
Scenario:
1. Create environment with Neutron VLAN network
2. Click on created environment
3. Open networks tab
4. Verify Neutron parameters are displayed and
Neutron with vlan segmentation text is displayed
"""
def test_neutron_vlan(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_CENTOS)
@ -144,6 +195,16 @@ class TestEnvironment(BaseTestCase):
'Neutron with vlan segmentation')
self.assertTrue(NeutronParameters().parent.is_displayed())
"""Create environment with Ceph storage
Scenario:
1. Create environment with Ceph storage for Cinder and Glance
2. Click on created environment
3. Open settings tab
4. Verify that Cinder for volumes, Ceph for volumes
and images are selected, Ceph for rados isn't selected
"""
def test_storage_ceph(self):
with Wizard() as w:
w.name.send_keys(OPENSTACK_CENTOS)
@ -162,18 +223,25 @@ class TestEnvironment(BaseTestCase):
Tabs().settings.click()
with Settings() as s:
self.assertTrue(
s.cinder_for_volumes.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
s.ceph_for_volumes.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
s.ceph_for_images.find_element_by_tag_name('input').
is_selected())
self.assertFalse(
s.ceph_rados_gw.find_element_by_tag_name('input').
is_selected())
self.assertTrue(s.cinder_for_volumes.
find_element_by_tag_name('input').is_selected())
self.assertTrue(s.ceph_for_volumes.
find_element_by_tag_name('input').is_selected())
self.assertTrue(s.ceph_for_images.
find_element_by_tag_name('input').is_selected())
self.assertFalse(s.ceph_rados_gw.
find_element_by_tag_name('input').is_selected())
"""Create environment with Savanna, Murano, Ceilometer selected
Scenario:
1. Create environment with Install Savanna,
Murano, Ceilometer selected
2. Click on created environment
3. Open settings tab
4. Verify that Install Savanna, Murano,
Ceilometer checkboxes are selected
"""
def test_services(self):
with Wizard() as w:
@ -196,12 +264,9 @@ class TestEnvironment(BaseTestCase):
Tabs().settings.click()
with Settings() as s:
self.assertTrue(
s.install_savanna.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
s.install_murano.find_element_by_tag_name('input').
is_selected())
self.assertTrue(
s.install_ceilometer.find_element_by_tag_name('input').
is_selected())
self.assertTrue(s.install_savanna.
find_element_by_tag_name('input').is_selected())
self.assertTrue(s.install_murano.
find_element_by_tag_name('input').is_selected())
self.assertTrue(s.install_ceilometer.
find_element_by_tag_name('input').is_selected())

View File

@ -13,12 +13,29 @@ class TestEnvironmentActions(BaseTestCase):
def setUpClass(cls):
BaseTestCase.setUpClass()
"""Each test precondition
Steps:
1. Create environment with default values
2. Open created environment
3. Open actions tab
"""
def setUp(self):
BaseTestCase.clear_nailgun_database()
preconditions.Environment.simple_flat()
Environments().create_cluster_boxes[0].click()
Tabs().actions.click()
"""Rename environment
Scenario:
1. Clear environment name
2. Enter new name
3. Click Rename
4. Verify environment name is changed
"""
def test_rename(self):
value = 'Happy environment'
with Actions() as a:
@ -30,6 +47,14 @@ class TestEnvironmentActions(BaseTestCase):
self.assertEqual(value, Nodes().env_name.text,
'Environment has been renamed')
"""Delete environment
Scenario:
1. Click delete environment
2. Click delete on confirmation pop-up
3. Verify that environment is deleted
"""
def test_delete(self):
with Actions() as a:
a.delete.click()

View File

@ -201,41 +201,154 @@ class SimpleFlatNetworks(BaseTestCase):
class TestNeutronNetworks(SimpleFlatNetworks):
"""Global precondition
Steps:
1. Create simple environment with Neutron GRE
"""
@classmethod
def setUpClass(cls):
BaseTestCase.setUpClass()
preconditions.Environment.simple_neutron_gre()
"""Change id start value in Neutron L2 configuration
Scenario:
1. Enter new value in id start field
2. Click save settings
3. Verify that value is saved
4. Leave id start field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_id_start(self):
self._test_text_field('neutron', 'id_start', '1500')
"""Change id end value in Neutron L2 configuration
Scenario:
1. Enter new value in id end field
2. Click save settings
3. Verify that value is saved
4. Leave id end field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_id_end(self):
self._test_text_field('neutron', 'id_end', '3500')
"""Change Base Mac address value in Neutron L2 configuration
Scenario:
1. Enter new value in base mac address field
2. Click save settings
3. Verify that base mac address value is saved
4. Leave base mac address field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_base_mac(self):
self._test_text_field('neutron', 'base_mac', 'aa:bb:3e:14:b4:a3')
"""Change floating ip start value in Neutron L2 configuration
Scenario:
1. Enter new value in floating ip start field
2. Click save settings
3. Verify that value is saved
4. Leave floating ip start field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_floating_start(self):
self._test_text_field('neutron', 'floating_start', RANGES[3][0])
"""Change floating ip end value in Neutron L2 configuration
Scenario:
1. Enter new value in floating ip end field
2. Click save settings
3. Verify that value is saved
4. Leave floating ip end field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_floating_end(self):
self._test_text_field('neutron', 'floating_end', RANGES[3][1])
"""Change CIDR value in Neutron L2 configuration
Scenario:
1. Enter new value in CIDR field
2. Click save settings
3. Verify that value is saved
4. Leave CIDR field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_cidr(self):
self._test_text_field('neutron', 'cidr', '192.168.111.0/16')
"""Change Gateway value in Neutron L2 configuration
Scenario:
1. Enter new value in Gateway field
2. Click save settings
3. Verify that value is saved
4. Leave Gateway field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_gateway(self):
self._test_text_field('neutron', 'gateway', '192.168.111.2')
"""Change first nameserver value in Neutron L2 configuration
Scenario:
1. Enter new value in first nameserver field
2. Click save settings
3. Verify that value is saved
4. Leave nameserver field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_nameserver0(self):
self._test_text_field('neutron', 'nameserver0', '5.5.5.5')
"""Change second nameserver value in Neutron L2 configuration
Scenario:
1. Enter new value in second nameserver field
2. Click save settings
3. Verify that value is saved
4. Leave nameserver field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_nameserver1(self):
self._test_text_field('neutron', 'nameserver1', '5.5.5.5')
class TestSimpleVlanNetworks(SimpleFlatNetworks):
"""Global precondition
Steps:
1. Create simple environment with default values
2. Click on created environment and open networks tab
3. Select VLAN Manager and save settings
"""
@classmethod
def setUpClass(cls):
BaseTestCase.setUpClass()
@ -247,15 +360,57 @@ class TestSimpleVlanNetworks(SimpleFlatNetworks):
n.save_settings.click()
time.sleep(1)
"""Change number of networks in VLAN Manager
Scenario:
1. Enter new value in number of networks field
2. Click save settings
3. Verify that value is saved
4. Leave number of networks field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_fixed_number_of_networks(self):
self._test_text_field('fixed', 'number_of_networks', '3')
"""Change Size of Networks in VLAN Manager
Scenario:
1. Enter new value in Size of Networks field
2. Click save settings
3. Verify that value is saved
4. Leave Size of Networks field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_fixed_size_of_networks(self):
self._test_select_field('fixed', 'network_size', '128')
"""Change VLAN id start in VLAN Manager
Scenario:
1. Enter new value in VLAN id start field
2. Click save settings
3. Verify that value is saved
4. Leave VLAN id start field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_fixed_vlan_range_start(self):
self._test_text_field('fixed', 'vlan_id', '120')
"""Check calculation of VLAN id end
Scenario:
1. Enter new value in VLAN id start field
2. Click save settings
3. Verify that value in VLAN id end equals to VLAN id start
plus number of networks minus 1
"""
def test_fixed_vlan_range_end_calculation(self):
start_values = [105, 120]
with Networks().fixed as n:
@ -267,6 +422,15 @@ class TestSimpleVlanNetworks(SimpleFlatNetworks):
n.vlan_end.get_attribute('value'),
str(v + number - 1), 'end value')
"""Check calculation of VLAN id end when number of networks is changed
Scenario:
1. Enter new value in number of networks field
2. Click save settings
3. Verify that value in VLAN id end equals to VLAN id start
plus number of networks minus 1
"""
def test_fixed_vlan_range_end_calculation_2(self):
numbers = [5, 20]
with Networks().fixed as n:
@ -281,39 +445,141 @@ class TestSimpleVlanNetworks(SimpleFlatNetworks):
class TestRangesControls(SimpleFlatNetworks):
"""Add new ip ranges for public network
Scenario:
1. Click on '+' to add new ip range
2. Enter values in start and end fields
3. Click on '+' to add new ip range after first ip range
4. Verify that fields are added after first range
"""
def test_public_plus_icon(self):
self._test_ranges_plus_icon('public')
"""Delete ip range for public network
Scenario:
1. Add three new ip ranges
2. Enter values in start and end fields of last ip range
3. Click on '-' for last but one ip range
4. Verify that last ip range values are saved
"""
def test_public_minus_icon(self):
self._test_ranges_minus_icon('public')
"""Add new ip ranges for floating network
Scenario:
1. Click on '+' to add new ip range
2. Enter values in start and end fields
3. Click on '+' to add new ip range after first ip range
4. Verify that fields are added after first range
"""
def test_floating_plus_icon(self):
self._test_ranges_plus_icon('floating')
"""Delete ip range for floating network
Scenario:
1. Add three new ip ranges
2. Enter values in start and end fields of last ip range
3. Click on '-' for last but one ip range
4. Verify that last ip range values are saved
"""
def test_floating_minus_icon(self):
self._test_ranges_minus_icon('floating')
class TestPublicNetwork(SimpleFlatNetworks):
"""Ip range for public network
Scenario:
1. Add one new ip range
2. Enter values in start and end field of first and second ip range
3. Click save settings
4. Verify that values are saved
5. Delete values from the first range
6. Verify that validation messages are displayed
"""
def test_ranges(self):
self._test_ranges('public', RANGES[:2])
"""Use VLAN tagging for public network
Scenario:
1. Enable VLAN tagging
2. Enter value in this field
3. Click save settings
4. Verify that value is saved
5. Clear value from VLAN tagging field
6. Verify that validation messages are displayed
"""
def test_use_vlan_tagging(self):
self._test_use_vlan_tagging('public', '111', False)
"""Change netmask for public network
Scenario:
1. Enter new value in netmask field
2. Click save settings
3. Verify that netmask value is saved
4. Leave netmask field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_net_mask(self):
self._test_text_field('public', 'netmask', '255.255.0.0')
"""Change gateway for public network
Scenario:
1. Enter new value in gateway field
2. Click save settings
3. Verify that gateway value is saved
4. Leave gateway field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_gateway(self):
self._test_text_field('public', 'gateway', '172.16.0.2')
class TestFloatingNetwork(SimpleFlatNetworks):
"""Ip range for floating network
Scenario:
1. Add one new ip range
2. Enter values in start and end field of first and second ip range
3. Click save settings
4. Verify that values are saved
5. Delete values from the first range
6. Verify that validation messages are displayed
"""
def test_ranges(self):
self._test_ranges('floating', RANGES[2:4])
"""Use VLAN tagging for floating network
Scenario:
1. Enable public VLAN tagging
2. Enter value in this field
3. Verify that floating VLAN tagging is selected
and value is the same as for public VLAN
4. Click save settings
5. Verify that changes are saved
"""
def test_use_vlan_tagging(self):
value = '112'
with Networks().public as n:
@ -334,33 +600,109 @@ class TestFloatingNetwork(SimpleFlatNetworks):
class TestManagementNetwork(SimpleFlatNetworks):
"""Change CIDR for management network
Scenario:
1. Enter new value in management CIDR field
2. Click save settings
3. Verify that CIDR value is saved
4. Leave CIDR field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_cidr(self):
self._test_text_field('management', 'cidr', '192.169.0.0/16')
"""Use VLAN tagging for management network
Scenario:
1. Enable VLAN tagging for management network
2. Enter value in this field
3. Click save settings
4. Verify that value is saved
5. Clear value from VLAN tagging field
6. Verify that validation messages are displayed
"""
def test_use_vlan_tagging(self):
self._test_use_vlan_tagging('management', '111', True)
class TestStorageNetwork(SimpleFlatNetworks):
"""Change CIDR for storage network
Scenario:
1. Enter new value in storage CIDR field
2. Click save settings
3. Verify that CIDR value is saved
4. Leave CIDR field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_cidr(self):
self._test_text_field('storage', 'cidr', '192.170.0.0/16')
"""Use VLAN tagging for storage network
Scenario:
1. Enable VLAN tagging for storage network
2. Enter value in this field
3. Click save settings
4. Verify that value is saved
5. Clear value from VLAN tagging field
6. Verify that validation messages are displayed
"""
def test_use_vlan_tagging(self):
self._test_use_vlan_tagging('storage', '111', True)
class TestFixedNetwork(SimpleFlatNetworks):
"""Change CIDR for VM(fixed) network
Scenario:
1. Enter new value in VM(fixed) CIDR field
2. Click save settings
3. Verify that CIDR value is saved
4. Leave CIDR field empty
5. Verify that Save settings and
Verify Networks buttons are disabled
"""
def test_cidr(self):
self._test_text_field('fixed', 'cidr', '10.1.0.0/24')
"""Use VLAN tagging for VM(fixed) network
Scenario:
1. Enable VLAN tagging for VM(fixed) network
2. Enter value in this field
3. Click save settings
4. Verify that value is saved
5. Clear value from VLAN tagging field
6. Verify that validation messages are displayed
"""
def test_use_vlan_tagging(self):
self._test_use_vlan_tagging('fixed', '111', True)
class TestDnsServers(SimpleFlatNetworks):
"""Change dns servers
Scenario:
1. Change dns servers value
2. Click save settings
3. Verify that values are saved
5. Clear values for dns servers
6. Verify that Save settings and Verify networks are disabled
"""
def test_name_servers(self):
v1 = '8.7.7.7'
v2 = '8.6.6.6'
@ -397,6 +739,13 @@ class TestFlatVerifyNetworks(BaseTestCase):
def setUpClass(cls):
BaseTestCase.setUpClass()
"""Each test precondition
Steps:
1. Create simple environment with default values
2. Click on created environment and open Networks tab
"""
def setUp(self):
BaseTestCase.clear_nailgun_database()
BaseTestCase.setUp(self)
@ -405,6 +754,13 @@ class TestFlatVerifyNetworks(BaseTestCase):
Tabs().networks.click()
time.sleep(1)
"""Verify network without added nodes
Scenario:
1. Click Verify Networks
2. Verify that message 'At least two nodes are required' appears
"""
def test_no_nodes(self):
with Networks() as n:
n.verify_networks.click()
@ -413,8 +769,18 @@ class TestFlatVerifyNetworks(BaseTestCase):
n.verification_alert.text,
'Alert text contains "At least two nodes are required"')
"""Verify network with one added nodes
Scenario:
1. Add one controller node
2. Open Networks tab
3. Click Verify Networks
4. Verify that message 'At least two nodes are required' appears
"""
def test_one_node(self):
Tabs().nodes.click()
time.sleep(1)
Nodes().add_nodes.click()
time.sleep(1)
Nodes().nodes_discovered[0].checkbox.click()
@ -430,8 +796,19 @@ class TestFlatVerifyNetworks(BaseTestCase):
n.verification_alert.text,
'Alert text contains "At least two nodes are required"')
"""Verify network with two added nodes
Scenario:
1. Add two compute nodes
2. Open Networks tab
3. Click Verify Networks
4. Verify that message 'Verification succeeded.
Your network is configured correctly' appears
"""
def test_two_nodes(self):
Tabs().nodes.click()
time.sleep(1)
Nodes().add_nodes.click()
time.sleep(1)
Nodes().nodes_discovered[0].checkbox.click()
@ -444,6 +821,7 @@ class TestFlatVerifyNetworks(BaseTestCase):
with Networks() as n:
n.verify_networks.click()
self.assertIn(
'Verification succeeded. Your network is configured correctly',
'Verification succeeded. '
'Your network is configured correctly.',
n.verification_alert.text,
'Verification succeeded')

View File

@ -2,13 +2,9 @@ from pageobjects.base import PageObject
from pageobjects.environments import RedhatAccountPopup
from pageobjects.header import Header
from pageobjects.releases import Releases
from fuelweb_ui_test.settings import OPENSTACK_REDHAT
from fuelweb_ui_test.settings import REDHAT_USERNAME
from fuelweb_ui_test.settings import REDHAT_PASSWORD
from fuelweb_ui_test.settings import REDHAT_SATELLITE
from fuelweb_ui_test.settings import REDHAT_ACTIVATION_KEY
from fuelweb_ui_test.settings import OPENSTACK_CENTOS
from fuelweb_ui_test.settings import OPENSTACK_UBUNTU
from settings import OPENSTACK_REDHAT, REDHAT_USERNAME, REDHAT_PASSWORD, \
REDHAT_SATELLITE, REDHAT_ACTIVATION_KEY, OPENSTACK_CENTOS, \
OPENSTACK_UBUNTU
from tests.base import BaseTestCase
@ -23,24 +19,55 @@ class TestReleases(BaseTestCase):
BaseTestCase.setUp(self)
Header().releases.click()
"""Check Centos status is active on releases tab
Scenario:
1. Open releases tab
2. Check that Centos status is active
"""
def test_centos_is_active(self):
with Releases() as r:
self.assertEqual(
'Active', r.dict[OPENSTACK_CENTOS].status.text,
'CentOS status is active')
"""Check Ubuntu status is active on releases tab
Scenario:
1. Open releases tab
2. Check that Ubuntu status is active
"""
def test_ubuntu_is_active(self):
with Releases() as r:
self.assertEqual(
'Active', r.dict[OPENSTACK_UBUNTU].status.text,
'Ubuntu status is active')
"""Check RHOS status is active on releases tab
Scenario:
1. Open releases tab
2. Check that RHOS status is Not available
"""
def test_rhos_is_active(self):
with Releases() as r:
self.assertEqual(
'Not available', r.dict[OPENSTACK_REDHAT].status.text,
'RHOS status is Not available')
"""Download RHEL with RHSM option
Scenario:
1. Open releases tab
2. Click Configure button in actions column
3. Select 'RHSM' radiobutton
4. Enter username and password and click apply
5. Check that RHOS status is active
"""
def test_rhsm(self):
Releases().rhel_setup.click()
with RedhatAccountPopup() as p:
@ -56,6 +83,17 @@ class TestReleases(BaseTestCase):
'Active', r.dict[OPENSTACK_REDHAT].status.text,
'RHOS status is active')
"""Download RHEL with RHN option
Scenario:
1. Open releases tab
2. Click Configure button in actions column
3. Select 'RHN' radiobutton
4. Enter username and password
5. Enter satellite hostname, activation key and click apply
6. Check that RHOS status is active
"""
def test_rhn_satellite(self):
Releases().rhel_setup.click()
with RedhatAccountPopup() as p:

View File

@ -4,8 +4,8 @@ from pageobjects.nodes import Nodes, RolesPanel
from tests import preconditions
from tests.base import BaseTestCase
ERROR_ROLE_CANNOT_COMBINE = 'This role cannot be combined ' \
'with the other roles already selected.'
ERROR_ROLE_CANNOT_COMBINE = 'This role cannot be combined' \
' with the other roles already selected.'
ROLE_UNALLOCATED = 'UNALLOCATED'
ROLE_CONTROLLER = 'CONTROLLER'
ROLE_COMPUTE = 'COMPUTE'
@ -22,17 +22,34 @@ class BaseClass(BaseTestCase):
def setUp(self):
BaseTestCase.setUp(self)
Environments().create_cluster_boxes[0].click()
time.sleep(1)
Nodes().add_nodes.click()
time.sleep(1)
class TestRolesSimpleFlat(BaseClass):
"""Global precondition
steps:
1. Create simple environment with default values
"""
@classmethod
def setUpClass(cls):
BaseTestCase.setUpClass()
preconditions.Environment.simple_flat()
"""Check controller node
Scenario:
1. Select first node and assign controller role
2. Verify that role of the node is changed,
compute role is disabled
3. Deselect node
4. Verify that role is unallocated
"""
def test_controller(self):
with Nodes()as n:
n.nodes_discovered[0].checkbox.click()
@ -50,6 +67,13 @@ class TestRolesSimpleFlat(BaseClass):
self.assertFalse(n.apply_changes.is_enabled())
self.assertNodeInRoles(n.nodes_discovered[0], [ROLE_UNALLOCATED])
"""Check that only one controller node is possible
Scenario:
1. Select first node and assign controller role
2. Verify that checkboxes of other nodes are disabled
"""
def test_one_controller_allowed_nodes_disabled(self):
with Nodes()as n:
n.nodes_discovered[0].checkbox.click()
@ -60,6 +84,13 @@ class TestRolesSimpleFlat(BaseClass):
n.checkbox.find_element_by_tag_name('input').is_enabled(),
'Checkbox is disabled')
"""Check controller node is disabled if many nodes are selected
Scenario:
1. Select all nodes
2. Verify that controller role is disabled
"""
def test_one_controller_allowed_controller_role_disabled(self):
with Nodes()as n:
with RolesPanel() as r:
@ -69,6 +100,16 @@ class TestRolesSimpleFlat(BaseClass):
node.checkbox.click()
self.assertFalse(r.controller.is_enabled())
"""Check compute node
Scenario:
1. Select first node and assign compute role
2. Verify that role of the node is changed,
controller role is disabled
3. Deselect node
4. Verify that role is unallocated
"""
def test_compute(self):
with Nodes()as n:
n.nodes_discovered[0].checkbox.click()
@ -86,6 +127,15 @@ class TestRolesSimpleFlat(BaseClass):
self.assertFalse(n.apply_changes.is_enabled())
self.assertNodeInRoles(n.nodes_discovered[0], [ROLE_UNALLOCATED])
"""Check cinder node
Scenario:
1. Select first node and assign cinder role
2. Verify that role of the node is changed
3. Deselect node
4. Verify that role is unallocated
"""
def test_cinder(self):
with Nodes()as n:
n.nodes_discovered[0].checkbox.click()
@ -98,6 +148,15 @@ class TestRolesSimpleFlat(BaseClass):
self.assertFalse(n.apply_changes.is_enabled())
self.assertNodeInRoles(n.nodes_discovered[0], [ROLE_UNALLOCATED])
"""Check ceph node
Scenario:
1. Select first node and assign ceph role
2. Verify that role of the node is changed
3. Deselect node
4. Verify that role is unallocated
"""
def test_ceph(self):
with Nodes()as n:
n.nodes_discovered[0].checkbox.click()
@ -110,6 +169,15 @@ class TestRolesSimpleFlat(BaseClass):
self.assertFalse(n.apply_changes.is_enabled())
self.assertNodeInRoles(n.nodes_discovered[0], [ROLE_UNALLOCATED])
"""Check multiroles node
Scenario:
1. Select first node and assign controller, ceph, cinder roles
2. Verify that role of the node is changed
3. Deselect node
4. Verify that role is unallocated
"""
def test_multiroles(self):
with Nodes()as n:
n.nodes_discovered[0].checkbox.click()
@ -122,6 +190,15 @@ class TestRolesSimpleFlat(BaseClass):
n.nodes_discovered[0],
[ROLE_CONTROLLER, ROLE_CINDER, ROLE_CEPH])
"""Check multiroles for many nodes
Scenario:
1. Select three nodes and assign controller, ceph, cinder roles
2. Verify that role of the nodes is changed
3. Deselect nodes
4. Verify that role is unallocated
"""
def test_several_nodes(self):
with Nodes()as n:
n.nodes_discovered[0].checkbox.click()
@ -150,6 +227,14 @@ class TestRolesHAFlat(BaseClass):
BaseTestCase.setUpClass()
preconditions.Environment.ha_flat()
"""Check controller node in HA mode
Scenario:
1. Select all nodes
2. Assign controller role
3. Verify that nodes are with controller role
"""
def test_controller_role_always_enabled(self):
with Nodes()as n:
for node in n.nodes_discovered:
@ -159,6 +244,14 @@ class TestRolesHAFlat(BaseClass):
for node in n.nodes_discovered:
self.assertNodeInRoles(node, [ROLE_CONTROLLER])
"""Check all nodes with controller role in HA mode
Scenario:
1. Select all nodes
2. Assign controller role
3. Verify that nodes are with controller role
"""
def test_all_nodes_could_be_controller(self):
RolesPanel().controller.click()
with Nodes()as n:

View File

@ -13,6 +13,12 @@ class TestSupport(BaseTestCase):
def setUpClass(cls):
BaseTestCase.setUpClass()
"""Each test precondition
Steps:
1. Open Support page
"""
def setUp(self):
BaseTestCase.clear_nailgun_database()
BaseTestCase.setUp(self)
@ -20,6 +26,13 @@ class TestSupport(BaseTestCase):
Header().support.click()
time.sleep(1)
"""Register Fuel
Scenario:
1. Click Register Fuel
2. Verify that register form is present
"""
def test_register_fuel(self):
with Support() as s:
key = re.search(
@ -35,6 +48,13 @@ class TestSupport(BaseTestCase):
'[value="Register and Activate subscription"]').is_displayed(),
'"Register and Activate subscription" is displayed')
"""Contact Support
Scenario:
1. Click contact support
2. Verify that support page is present
"""
def test_contact_support(self):
Support().contact_support.click()
time.sleep(4)
@ -42,6 +62,13 @@ class TestSupport(BaseTestCase):
self.assertIn('http://software.mirantis.com/',
browser.driver.current_url)
"""Generate diagnostic snapshot
Scenario:
1. Click generate diagnostic snapshot
2. Verify that snapshot is available to download
"""
def test_diagnostic_snapshot(self):
Support().generate_snapshot.click()
with Support() as s:
@ -50,6 +77,13 @@ class TestSupport(BaseTestCase):
s.download_snapshot.is_enabled(),
'"Diagnostic Snapshot" is displayed')
"""View capacity audit
Scenario:
1. Click view capacity audit
2. Verify that system information is present
"""
def test_capacity_audit(self):
Support().view_capacity_audit.click()
self.assertEqual(