diff --git a/fuelweb_test/tests/test_ceph.py b/fuelweb_test/tests/test_ceph.py index ffbedb178..d1c9e9182 100644 --- a/fuelweb_test/tests/test_ceph.py +++ b/fuelweb_test/tests/test_ceph.py @@ -28,6 +28,7 @@ from fuelweb_test.helpers.decorators import log_snapshot_after_test from fuelweb_test import ostf_test_mapping as map_ostf from fuelweb_test import settings from fuelweb_test.settings import NEUTRON_ENABLE +from fuelweb_test.settings import NEUTRON_SEGMENT_TYPE from fuelweb_test import logger from fuelweb_test.tests.base_test_case import SetupEnvironment from fuelweb_test.tests.base_test_case import TestBasic @@ -407,7 +408,7 @@ class CephHA(TestBasic): 'tenant', 'keystone_user']) -@test(groups=["thread_4", "ceph"]) +@test(groups=["ha_neutron_tun", "ceph"]) class CephRadosGW(TestBasic): """CephRadosGW.""" # TODO documentation @@ -418,7 +419,7 @@ class CephRadosGW(TestBasic): """Deploy ceph HA with RadosGW for objects Scenario: - 1. Create cluster with Neurton/VLAN + 1. Create cluster with Neutron 2. Add 3 nodes with controller role 3. Add 3 nodes with compute and ceph-osd role 4. Deploy the cluster @@ -443,7 +444,7 @@ class CephRadosGW(TestBasic): 'images_ceph': True, 'objects_ceph': True, 'net_provider': 'neutron', - 'net_segment_type': settings.NEUTRON_SEGMENT['vlan'], + 'net_segment_type': NEUTRON_SEGMENT_TYPE, 'tenant': 'rados', 'user': 'rados', 'password': 'rados' diff --git a/fuelweb_test/tests/test_ha.py b/fuelweb_test/tests/test_ha.py index 27285c9c1..dde9ca56d 100644 --- a/fuelweb_test/tests/test_ha.py +++ b/fuelweb_test/tests/test_ha.py @@ -12,10 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. -import re - from proboscis.asserts import assert_equal -from proboscis.asserts import assert_true from proboscis import test from proboscis import SkipTest @@ -26,7 +23,6 @@ from fuelweb_test.settings import DEPLOYMENT_MODE_HA from fuelweb_test.tests.base_test_case import SetupEnvironment from fuelweb_test.tests.base_test_case import TestBasic from fuelweb_test import logger -from fuelweb_test import quiet_logger @test(groups=["thread_3", "ha", "bvt_1"]) @@ -227,349 +223,3 @@ class TestHaFlat(TestBasic): test_sets=['ha', 'smoke', 'sanity']) self.env.make_snapshot("deploy_ha_flat", is_make=True) - - @test(depends_on_groups=['deploy_neutron_gre_ha'], - groups=["ha_flat_addremove"]) - @log_snapshot_after_test - def ha_flat_addremove(self): - #Must be refactored to use neutron network manager - """Add and re-add cinder / compute + cinder to HA cluster - - Scenario: - 1. Revert snapshot deploy_ha_flat with 3 controller - and 2 compute nodes - 2. Add 'cinder' role to a new slave - 3. Deploy changes - 4. Remove the 'cinder' node - Remove a 'controller' node - Add 'controller'+'cinder' multirole to a new slave - 5. Deploy changes - 6. Run verify networks - 7. Run OSTF - - Duration 50m - """ - - self.env.revert_snapshot("deploy_neutron_gre_ha") - cluster_id = self.fuel_web.get_last_created_cluster() - - self.env.bootstrap_nodes( - self.env.d_env.nodes().slaves[5:7]) - - self.fuel_web.update_nodes( - cluster_id, - {'slave-06': ['cinder']}) - self.fuel_web.deploy_cluster_wait(cluster_id) - self.fuel_web.verify_network(cluster_id) - - self.fuel_web.update_nodes( - cluster_id, - {'slave-06': ['cinder']}, False, True,) - - self.fuel_web.update_nodes( - cluster_id, - {'slave-03': ['controller']}, False, True,) - - self.fuel_web.update_nodes( - cluster_id, - {'slave-07': ['controller', 'cinder']}) - - self.fuel_web.deploy_cluster_wait(cluster_id, check_services=False) - self.fuel_web.verify_network(cluster_id) - self.fuel_web.run_ostf( - cluster_id=cluster_id, - test_sets=['ha', 'smoke', 'sanity'], - should_fail=1) - - -@test(groups=["thread_4", "ha", "classic_provisioning"]) -class TestHaFlatAddCompute(TestBasic): - """TestHaFlatAddCompute.""" # TODO documentation - - @test(depends_on_groups=['deploy_neutron_gre_ha'], - groups=["ha_flat_add_compute"]) - @log_snapshot_after_test - def ha_flat_add_compute(self): - #Must be refactored to use neutron network manager - """Add compute node to cluster in HA mode with flat nova-network - - Scenario: - 1. Revert snapshot deploy_ha_flat with 3 controller - and 2 compute nodes - 2. Add 1 node with compute role - 3. Deploy the cluster - 4. Run network verification - 5. Run OSTF - - Duration 10m - Snapshot ha_flat_add_compute - - """ - self.env.revert_snapshot("deploy_neutron_gre_ha") - cluster_id = self.fuel_web.get_last_created_cluster() - - self.env.bootstrap_nodes( - self.env.d_env.nodes().slaves[5:6]) - self.fuel_web.update_nodes( - cluster_id, {'slave-06': ['compute']}, True, False - ) - self.fuel_web.deploy_cluster_wait(cluster_id) - - self.fuel_web.verify_network(cluster_id) - - self.fuel_web.run_ostf( - cluster_id=cluster_id, - test_sets=['ha', 'smoke', 'sanity']) - - self.env.make_snapshot("ha_flat_add_compute") - - -@test(groups=["thread_4", "ha"]) -class TestHaFlatScalability(TestBasic): - """TestHaFlatScalability.""" # TODO documentation - - @test(depends_on=[SetupEnvironment.prepare_slaves_9], - groups=["ha_flat_scalability", "ha_nova_flat_scalability"]) - @log_snapshot_after_test - def ha_flat_scalability(self): - """Check HA mode on scalability - - Scenario: - 1. Create cluster - 2. Add 1 controller node - 3. Deploy the cluster - 4. Add 2 controller nodes - 5. Deploy changes - 6. Run network verification - 7. Add 2 controller 1 compute nodes - 8. Deploy changes - 9. Run network verification - 10. Run OSTF - 11. Delete the primary and the last added controller. - 12. Deploy changes - 13. Run OSTF ha, sanity, smoke - 14. Run sync_time() to check that NTPD daemon is operational - - Duration 110m - Snapshot ha_flat_scalability - - """ - self.env.revert_snapshot("ready_with_9_slaves") - - cluster_id = self.fuel_web.create_cluster( - name=self.__class__.__name__, - mode=DEPLOYMENT_MODE_HA - ) - nodes = {'slave-01': ['controller']} - logger.info("Adding new node to the cluster: {0}".format(nodes)) - self.fuel_web.update_nodes( - cluster_id, nodes) - self.fuel_web.deploy_cluster_wait(cluster_id) - devops_node = self.fuel_web.get_nailgun_primary_node( - self.env.d_env.nodes().slaves[0]) - logger.debug("devops node name is {0}".format(devops_node.name)) - - _ip = self.fuel_web.get_nailgun_node_by_name(devops_node.name)['ip'] - remote = self.env.d_env.get_ssh_to_remote(_ip) - for i in range(5): - try: - checkers.check_swift_ring(remote) - break - except AssertionError: - result = remote.execute( - "/usr/local/bin/swift-rings-rebalance.sh") - logger.debug("command execution result is {0}".format(result)) - else: - checkers.check_swift_ring(remote) - - nodes = {'slave-02': ['controller'], - 'slave-03': ['controller']} - logger.info("Adding new nodes to the cluster: {0}".format(nodes)) - self.fuel_web.update_nodes( - cluster_id, nodes, - True, False - ) - - self.fuel_web.deploy_cluster_wait(cluster_id) - for devops_node in self.env.d_env.nodes().slaves[:3]: - with quiet_logger(): - self.fuel_web.assert_pacemaker( - devops_node.name, - self.env.d_env.nodes().slaves[:3], []) - - devops_node = self.fuel_web.get_nailgun_primary_node( - self.env.d_env.nodes().slaves[0]) - logger.debug("devops node name is {0}".format(devops_node.name)) - - _ip = self.fuel_web.get_nailgun_node_by_name(devops_node.name)['ip'] - remote = self.env.d_env.get_ssh_to_remote(_ip) - for i in range(5): - try: - checkers.check_swift_ring(remote) - break - except AssertionError: - result = remote.execute( - "/usr/local/bin/swift-rings-rebalance.sh") - logger.debug("command execution result is {0}".format(result)) - else: - checkers.check_swift_ring(remote) - - nodes = {'slave-04': ['controller'], - 'slave-05': ['controller'], - 'slave-06': ['compute']} - logger.info("Adding new nodes to the cluster: {0}".format(nodes)) - self.fuel_web.update_nodes( - cluster_id, nodes, - True, False - ) - self.fuel_web.deploy_cluster_wait(cluster_id) - for devops_node in self.env.d_env.nodes().slaves[:5]: - with quiet_logger(): - self.fuel_web.assert_pacemaker( - devops_node.name, - self.env.d_env.nodes().slaves[:5], []) - ret = self.fuel_web.get_pacemaker_status(devops_node.name) - assert_true( - re.search('vip__management\s+\(ocf::fuel:ns_IPaddr2\):' - '\s+Started node', ret), 'vip management started') - assert_true( - re.search('vip__public\s+\(ocf::fuel:ns_IPaddr2\):' - '\s+Started node', ret), 'vip public started') - - self.fuel_web.security.verify_firewall(cluster_id) - devops_node = self.fuel_web.get_nailgun_primary_node( - self.env.d_env.nodes().slaves[0]) - logger.debug("devops node name is {0}".format(devops_node.name))\ - - _ip = self.fuel_web.get_nailgun_node_by_name(devops_node.name)['ip'] - remote = self.env.d_env.get_ssh_to_remote(_ip) - for i in range(5): - try: - checkers.check_swift_ring(remote) - break - except AssertionError: - result = remote.execute( - "/usr/local/bin/swift-rings-rebalance.sh") - logger.debug("command execution result is {0}".format(result)) - else: - checkers.check_swift_ring(remote) - - self.fuel_web.run_ostf( - cluster_id=cluster_id, - test_sets=['ha', 'sanity']) - - nodes = {devops_node.name: ['controller'], - 'slave-05': ['controller']} - logger.info("Deleting nodes from the cluster: {0}".format(nodes)) - self.fuel_web.update_nodes( - cluster_id, nodes, - False, True - ) - self.fuel_web.deploy_cluster_wait(cluster_id, check_services=False) - - nodes = self.fuel_web.get_nailgun_cluster_nodes_by_roles( - cluster_id, ['controller']) - devops_nodes = [self.fuel_web.get_devops_node_by_nailgun_node(node) - for node in nodes] - for devops_node in devops_nodes: - with quiet_logger(): - self.fuel_web.assert_pacemaker( - devops_node.name, - devops_nodes, []) - ret = self.fuel_web.get_pacemaker_status(devops_node.name) - assert_true( - re.search('vip__management\s+\(ocf::fuel:ns_IPaddr2\):' - '\s+Started node', ret), 'vip management started') - assert_true( - re.search('vip__public\s+\(ocf::fuel:ns_IPaddr2\):' - '\s+Started node', ret), 'vip public started') - - self.fuel_web.security.verify_firewall(cluster_id) - devops_node = self.fuel_web.get_nailgun_primary_node( - devops_nodes[0]) - logger.debug("devops node name is {0}".format(devops_node.name))\ - - _ip = self.fuel_web.get_nailgun_node_by_name(devops_node.name)['ip'] - remote = self.env.d_env.get_ssh_to_remote(_ip) - for i in range(5): - try: - checkers.check_swift_ring(remote) - break - except AssertionError: - result = remote.execute( - "/usr/local/bin/swift-rings-rebalance.sh") - logger.debug("command execution result is {0}".format(result)) - else: - checkers.check_swift_ring(remote) - - self.fuel_web.run_ostf( - cluster_id=cluster_id, - test_sets=['sanity', 'smoke', 'ha'], should_fail=1) - self.env.sync_time() - self.env.make_snapshot("ha_flat_scalability") - - -@test(groups=["known_issues", "ha"]) -class BackupRestoreHa(TestBasic): - """BackupRestoreHa.""" # TODO documentation - - @test(depends_on_groups=['deploy_neutron_gre_ha'], - groups=["known_issues", "backup_restore_ha_flat"]) - @log_snapshot_after_test - def backup_restore_ha_flat(self): - #Must be refactored to use neutron network manager - """Backup/restore master node with cluster in ha mode - - Scenario: - 1. Revert snapshot "deploy_ha_flat" - 2. Backup master - 3. Check backup - 4. Run OSTF - 5. Add 1 node with compute role - 6. Restore master - 7. Check restore - 8. Run OSTF - - Duration 50m - - """ - self.env.revert_snapshot("deploy_neutron_gre_ha") - - cluster_id = self.fuel_web.get_last_created_cluster() - os_conn = os_actions.OpenStackActions( - self.fuel_web.get_public_vip(cluster_id), - 'novaHaFlat', 'novaHaFlat', 'novaHaFlat') - self.fuel_web.assert_cluster_ready( - os_conn, smiles_count=16, networks_count=1, timeout=300) - self.fuel_web.backup_master(self.env.d_env.get_admin_remote()) - checkers.backup_check(self.env.d_env.get_admin_remote()) - self.env.bootstrap_nodes( - self.env.d_env.nodes().slaves[5:6]) - self.fuel_web.update_nodes( - cluster_id, {'slave-06': ['compute']}, True, False - ) - - assert_equal( - 6, len(self.fuel_web.client.list_cluster_nodes(cluster_id))) - - self.fuel_web.restore_master(self.env.d_env.get_admin_remote()) - checkers.restore_check_sum(self.env.d_env.get_admin_remote()) - self.fuel_web.restore_check_nailgun_api( - self.env.d_env.get_admin_remote()) - checkers.iptables_check(self.env.d_env.get_admin_remote()) - - assert_equal( - 5, len(self.fuel_web.client.list_cluster_nodes(cluster_id))) - - self.env.bootstrap_nodes( - self.env.d_env.nodes().slaves[5:6]) - self.fuel_web.update_nodes( - cluster_id, {'slave-06': ['compute']}, True, False - ) - self.fuel_web.deploy_cluster_wait(cluster_id) - - self.fuel_web.run_ostf( - cluster_id=cluster_id, - test_sets=['ha', 'smoke', 'sanity']) - - self.env.make_snapshot("backup_restore_ha_flat") diff --git a/fuelweb_test/tests/test_neutron.py b/fuelweb_test/tests/test_neutron.py index f93ca242f..fa013b84f 100644 --- a/fuelweb_test/tests/test_neutron.py +++ b/fuelweb_test/tests/test_neutron.py @@ -11,7 +11,6 @@ # 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 proboscis.asserts import assert_equal from proboscis import test @@ -25,72 +24,6 @@ from fuelweb_test.tests.base_test_case import TestBasic from fuelweb_test import logger -@test(groups=["thread_1", "neutron", "smoke_neutron", "deployment"]) -class NeutronTun(TestBasic): - """NeutronTun.""" # TODO documentation - - @test(depends_on=[SetupEnvironment.prepare_slaves_3], - groups=["deploy_neutron_tun", "ha_one_controller_neutron_tun", - "cinder", "swift", "glance", "neutron", "deployment"]) - @log_snapshot_after_test - def deploy_neutron_tun(self): - """Deploy cluster in ha mode with 1 controller and Neutron VXLAN - - Scenario: - 1. Create cluster - 2. Add 1 node with controller role - 3. Add 2 nodes with compute role - 4. Deploy the cluster - 5. Run network verification - 6. Run OSTF - - Duration 35m - Snapshot deploy_neutron_tun - - """ - self.env.revert_snapshot("ready_with_3_slaves") - - data = { - "net_provider": 'neutron', - "net_segment_type": NEUTRON_SEGMENT['tun'], - 'tenant': 'simpleTun', - 'user': 'simpleTun', - 'password': 'simpleTun' - } - cluster_id = self.fuel_web.create_cluster( - name=self.__class__.__name__, - mode=DEPLOYMENT_MODE, - settings=data - ) - self.fuel_web.update_nodes( - cluster_id, - { - 'slave-01': ['controller'], - 'slave-02': ['compute', 'cinder'], - 'slave-03': ['compute', 'cinder'] - } - ) - self.fuel_web.update_internal_network(cluster_id, '192.168.196.0/26', - '192.168.196.1') - self.fuel_web.deploy_cluster_wait(cluster_id) - os_conn = os_actions.OpenStackActions( - self.fuel_web.get_public_vip(cluster_id), - data['user'], data['password'], data['tenant']) - - cluster = self.fuel_web.client.get_cluster(cluster_id) - assert_equal(str(cluster['net_provider']), 'neutron') - # assert_equal(str(cluster['net_segment_type']), segment_type) - self.fuel_web.check_fixed_network_cidr( - cluster_id, os_conn) - - self.fuel_web.verify_network(cluster_id) - - self.fuel_web.run_ostf( - cluster_id=cluster_id) - - self.env.make_snapshot("deploy_neutron_tun") - - @test(groups=["thread_1", "neutron"]) class NeutronVlan(TestBasic): """NeutronVlan.""" # TODO documentation @@ -149,80 +82,6 @@ class NeutronVlan(TestBasic): self.env.make_snapshot("deploy_neutron_vlan") -@test(groups=["neutron", "ha", "ha_neutron", "classic_provisioning"]) -class NeutronTunHa(TestBasic): - """NeutronTunHa.""" # TODO documentation - - @test(depends_on=[SetupEnvironment.prepare_slaves_5], - groups=["deploy_neutron_tun_ha", "ha_neutron_tun"]) - @log_snapshot_after_test - def deploy_neutron_tun_ha(self): - """Deploy cluster in HA mode with Neutron VXLAN - - Scenario: - 1. Create cluster - 2. Add 3 nodes with controller role - 3. Add 2 nodes with compute role - 4. Deploy the cluster - 5. Run network verification - 6. Run OSTF - - Duration 80m - Snapshot deploy_neutron_tun_ha - - """ - self.env.revert_snapshot("ready_with_5_slaves") - - cluster_id = self.fuel_web.create_cluster( - name=self.__class__.__name__, - mode=DEPLOYMENT_MODE, - settings={ - "net_provider": 'neutron', - "net_segment_type": NEUTRON_SEGMENT['tun'], - 'tenant': 'haTun', - 'user': 'haTun', - 'password': 'haTun' - } - ) - self.fuel_web.update_nodes( - cluster_id, - { - 'slave-01': ['controller'], - 'slave-02': ['controller'], - 'slave-03': ['controller'], - 'slave-04': ['compute'], - 'slave-05': ['compute'] - } - ) - self.fuel_web.deploy_cluster_wait(cluster_id) - - cluster = self.fuel_web.client.get_cluster(cluster_id) - assert_equal(str(cluster['net_provider']), 'neutron') - - self.fuel_web.verify_network(cluster_id) - devops_node = self.fuel_web.get_nailgun_primary_node( - self.env.d_env.nodes().slaves[0]) - logger.debug("devops node name is {0}".format(devops_node.name)) - with self.fuel_web.get_ssh_for_node(devops_node.name) as remote: - for i in range(5): - try: - checkers.check_swift_ring(remote) - break - except AssertionError: - result = remote.execute( - "/usr/local/bin/swift-rings-rebalance.sh") - logger.debug("command execution result is {0}" - .format(result)) - else: - checkers.check_swift_ring(remote) - - self.fuel_web.run_ostf( - cluster_id=cluster_id, - test_sets=['ha', 'smoke', 'sanity']) - - self.env.make_snapshot("deploy_neutron_tun_ha") - - @test(groups=["neutron", "ha", "ha_neutron", "classic_provisioning"]) class NeutronGreHa(TestBasic): """NeutronGreHa.""" # TODO documentation @@ -297,77 +156,12 @@ class NeutronGreHa(TestBasic): self.env.make_snapshot("deploy_neutron_gre_ha") -@test(groups=["thread_6", "neutron", "ha", "ha_neutron"]) -class NeutronTunHaPublicNetwork(TestBasic): - """NeutronTunHaPublicNetwork.""" # TODO documentation - - @test(depends_on=[SetupEnvironment.prepare_slaves_5], - groups=["deploy_neutron_tun_ha_public_network"]) - @log_snapshot_after_test - def deploy_neutron_tun_ha_with_public_network(self): - """Deploy cluster in HA mode with Neutron VXLAN and public network - assigned to all nodes - - Scenario: - 1. Create cluster - 2. Add 3 nodes with controller role - 3. Add 2 nodes with compute role - 4. Enable assign public networks to all nodes option - 5. Deploy the cluster - 6. Check that public network was assigned to all nodes - 7. Run network verification - 8. Run OSTF - - Duration 80m - Snapshot deploy_neutron_tun_ha_public_network - - """ - self.env.revert_snapshot("ready_with_5_slaves") - - cluster_id = self.fuel_web.create_cluster( - name=self.__class__.__name__, - mode=DEPLOYMENT_MODE, - settings={ - "net_provider": 'neutron', - "net_segment_type": NEUTRON_SEGMENT['tun'], - 'tenant': 'haTun', - 'user': 'haTun', - 'password': 'haTun', - 'assign_to_all_nodes': True - } - ) - self.fuel_web.update_nodes( - cluster_id, - { - 'slave-01': ['controller'], - 'slave-02': ['controller'], - 'slave-03': ['controller'], - 'slave-04': ['compute'], - 'slave-05': ['compute'] - } - ) - self.fuel_web.deploy_cluster_wait(cluster_id) - - cluster = self.fuel_web.client.get_cluster(cluster_id) - assert_equal(str(cluster['net_provider']), 'neutron') - - self.fuel_web.verify_network(cluster_id) - - self.fuel_web.security.verify_firewall(cluster_id) - - self.fuel_web.run_ostf( - cluster_id=cluster_id, - test_sets=['ha', 'smoke', 'sanity']) - - self.env.make_snapshot("deploy_neutron_tun_ha_public_network") - - @test(groups=["neutron", "ha", "ha_neutron"]) class NeutronVlanHa(TestBasic): """NeutronVlanHa.""" # TODO documentation @test(depends_on=[SetupEnvironment.prepare_slaves_5], - groups=["deploy_neutron_vlan_ha", "ha_neutron_vlan"]) + groups=["deploy_neutron_vlan_ha", "neutron_vlan_ha"]) @log_snapshot_after_test def deploy_neutron_vlan_ha(self): """Deploy cluster in HA mode with Neutron VLAN @@ -437,71 +231,3 @@ class NeutronVlanHa(TestBasic): cluster_id=cluster_id, test_sets=['ha', 'smoke', 'sanity']) self.env.make_snapshot("deploy_neutron_vlan_ha") - - -@test(groups=["thread_6", "neutron", "ha", "ha_neutron"]) -class NeutronVlanHaPublicNetwork(TestBasic): - """NeutronVlanHaPublicNetwork.""" # TODO documentation - - @test(depends_on=[SetupEnvironment.prepare_slaves_5], - groups=["deploy_neutron_vlan_ha_public_network"]) - @log_snapshot_after_test - def deploy_neutron_vlan_ha_with_public_network(self): - """Deploy cluster in HA mode with Neutron VLAN and public network - assigned to all nodes - - Scenario: - 1. Create cluster - 2. Add 3 nodes with controller role - 3. Add 2 nodes with compute role - 4. Enable assign public networks to all nodes option - 5. Deploy the cluster - 6. Check that public network was assigned to all nodes - 7. Run network verification - 8. Run OSTF - - Duration 80m - Snapshot deploy_neutron_vlan_ha_public_network - - """ - self.env.revert_snapshot("ready_with_5_slaves") - - cluster_id = self.fuel_web.create_cluster( - name=self.__class__.__name__, - mode=DEPLOYMENT_MODE, - settings={ - "net_provider": 'neutron', - "net_segment_type": NEUTRON_SEGMENT['vlan'], - 'assign_to_all_nodes': True - } - ) - self.fuel_web.update_nodes( - cluster_id, - { - 'slave-01': ['controller'], - 'slave-02': ['controller'], - 'slave-03': ['controller'], - 'slave-04': ['compute'], - 'slave-05': ['compute'] - } - ) - self.fuel_web.update_internal_network(cluster_id, '192.168.196.0/22', - '192.168.196.1') - self.fuel_web.deploy_cluster_wait(cluster_id) - - cluster = self.fuel_web.client.get_cluster(cluster_id) - assert_equal(str(cluster['net_provider']), 'neutron') - # assert_equal(str(cluster['net_segment_type']), segment_type) - os_conn = os_actions.OpenStackActions( - self.fuel_web.get_public_vip(cluster_id)) - self.fuel_web.check_fixed_network_cidr( - cluster_id, os_conn) - - self.fuel_web.verify_network(cluster_id) - - self.fuel_web.security.verify_firewall(cluster_id) - - self.fuel_web.run_ostf( - cluster_id=cluster_id, test_sets=['ha', 'smoke', 'sanity']) - - self.env.make_snapshot("deploy_neutron_vlan_ha_public_network") diff --git a/fuelweb_test/tests/test_neutron_public.py b/fuelweb_test/tests/test_neutron_public.py new file mode 100644 index 000000000..994d605ad --- /dev/null +++ b/fuelweb_test/tests/test_neutron_public.py @@ -0,0 +1,155 @@ +# Copyright 2015 Mirantis, Inc. +# +# 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 proboscis.asserts import assert_equal +from proboscis import test + +from fuelweb_test.helpers import os_actions +from fuelweb_test.helpers.decorators import log_snapshot_after_test +from fuelweb_test.settings import DEPLOYMENT_MODE +from fuelweb_test.settings import NEUTRON_SEGMENT +from fuelweb_test.tests.base_test_case import SetupEnvironment +from fuelweb_test.tests.base_test_case import TestBasic + + +@test(groups=["neutron", "ha", "ha_neutron_public"]) +class NeutronTunHaPublicNetwork(TestBasic): + """NeutronTunHaPublicNetwork.""" # TODO documentation + + @test(depends_on=[SetupEnvironment.prepare_slaves_5], + groups=["deploy_neutron_tun_ha_public_network"]) + @log_snapshot_after_test + def deploy_neutron_tun_ha_with_public_network(self): + """Deploy cluster in HA mode with Neutron VXLAN and public network + assigned to all nodes + + Scenario: + 1. Create cluster + 2. Add 3 nodes with controller role + 3. Add 2 nodes with compute role + 4. Enable assign public networks to all nodes option + 5. Deploy the cluster + 6. Check that public network was assigned to all nodes + 7. Run network verification + 8. Run OSTF + + Duration 80m + Snapshot deploy_neutron_tun_ha_public_network + + """ + self.env.revert_snapshot("ready_with_5_slaves") + + cluster_id = self.fuel_web.create_cluster( + name=self.__class__.__name__, + mode=DEPLOYMENT_MODE, + settings={ + "net_provider": 'neutron', + "net_segment_type": NEUTRON_SEGMENT['tun'], + 'tenant': 'haTun', + 'user': 'haTun', + 'password': 'haTun', + 'assign_to_all_nodes': True + } + ) + self.fuel_web.update_nodes( + cluster_id, + { + 'slave-01': ['controller'], + 'slave-02': ['controller'], + 'slave-03': ['controller'], + 'slave-04': ['compute'], + 'slave-05': ['compute'] + } + ) + self.fuel_web.deploy_cluster_wait(cluster_id) + + cluster = self.fuel_web.client.get_cluster(cluster_id) + assert_equal(str(cluster['net_provider']), 'neutron') + + self.fuel_web.verify_network(cluster_id) + + self.fuel_web.security.verify_firewall(cluster_id) + + self.fuel_web.run_ostf( + cluster_id=cluster_id, + test_sets=['ha', 'smoke', 'sanity']) + + self.env.make_snapshot("deploy_neutron_tun_ha_public_network") + + +@test(groups=["neutron", "ha", "ha_neutron_public"]) +class NeutronVlanHaPublicNetwork(TestBasic): + """NeutronVlanHaPublicNetwork.""" # TODO documentation + + @test(depends_on=[SetupEnvironment.prepare_slaves_5], + groups=["deploy_neutron_vlan_ha_public_network"]) + @log_snapshot_after_test + def deploy_neutron_vlan_ha_with_public_network(self): + """Deploy cluster in HA mode with Neutron VLAN and public network + assigned to all nodes + + Scenario: + 1. Create cluster + 2. Add 3 nodes with controller role + 3. Add 2 nodes with compute role + 4. Enable assign public networks to all nodes option + 5. Deploy the cluster + 6. Check that public network was assigned to all nodes + 7. Run network verification + 8. Run OSTF + + Duration 80m + Snapshot deploy_neutron_vlan_ha_public_network + + """ + self.env.revert_snapshot("ready_with_5_slaves") + + cluster_id = self.fuel_web.create_cluster( + name=self.__class__.__name__, + mode=DEPLOYMENT_MODE, + settings={ + "net_provider": 'neutron', + "net_segment_type": NEUTRON_SEGMENT['vlan'], + 'assign_to_all_nodes': True + } + ) + self.fuel_web.update_nodes( + cluster_id, + { + 'slave-01': ['controller'], + 'slave-02': ['controller'], + 'slave-03': ['controller'], + 'slave-04': ['compute'], + 'slave-05': ['compute'] + } + ) + self.fuel_web.update_internal_network(cluster_id, '192.168.196.0/22', + '192.168.196.1') + self.fuel_web.deploy_cluster_wait(cluster_id) + + cluster = self.fuel_web.client.get_cluster(cluster_id) + assert_equal(str(cluster['net_provider']), 'neutron') + # assert_equal(str(cluster['net_segment_type']), segment_type) + os_conn = os_actions.OpenStackActions( + self.fuel_web.get_public_vip(cluster_id)) + self.fuel_web.check_fixed_network_cidr( + cluster_id, os_conn) + + self.fuel_web.verify_network(cluster_id) + + self.fuel_web.security.verify_firewall(cluster_id) + + self.fuel_web.run_ostf( + cluster_id=cluster_id, test_sets=['ha', 'smoke', 'sanity']) + + self.env.make_snapshot("deploy_neutron_vlan_ha_public_network") diff --git a/fuelweb_test/tests/test_neutron_tun.py b/fuelweb_test/tests/test_neutron_tun.py new file mode 100644 index 000000000..0da85df87 --- /dev/null +++ b/fuelweb_test/tests/test_neutron_tun.py @@ -0,0 +1,489 @@ +# Copyright 2015 Mirantis, Inc. +# +# 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 re + +from proboscis.asserts import assert_equal +from proboscis.asserts import assert_true +from proboscis import test + +from fuelweb_test.helpers import checkers +from fuelweb_test.helpers import os_actions +from fuelweb_test.helpers.decorators import log_snapshot_after_test +from fuelweb_test.settings import DEPLOYMENT_MODE +from fuelweb_test.settings import NEUTRON_SEGMENT +from fuelweb_test.tests.base_test_case import SetupEnvironment +from fuelweb_test.tests.base_test_case import TestBasic +from fuelweb_test import logger +from fuelweb_test import quiet_logger + + +@test(groups=["ha_neutron_tun", "neutron", "smoke_neutron", "deployment"]) +class NeutronTun(TestBasic): + """NeutronTun.""" # TODO documentation + + @test(depends_on=[SetupEnvironment.prepare_slaves_3], + groups=["deploy_neutron_tun", "ha_one_controller_neutron_tun", + "cinder", "swift", "glance", "neutron", "deployment"]) + @log_snapshot_after_test + def deploy_neutron_tun(self): + """Deploy cluster in ha mode with 1 controller and Neutron VXLAN + + Scenario: + 1. Create cluster + 2. Add 1 node with controller role + 3. Add 2 nodes with compute role + 4. Deploy the cluster + 5. Run network verification + 6. Run OSTF + + Duration 35m + Snapshot deploy_neutron_tun + + """ + self.env.revert_snapshot("ready_with_3_slaves") + + data = { + "net_provider": 'neutron', + "net_segment_type": NEUTRON_SEGMENT['tun'], + 'tenant': 'simpleTun', + 'user': 'simpleTun', + 'password': 'simpleTun' + } + cluster_id = self.fuel_web.create_cluster( + name=self.__class__.__name__, + mode=DEPLOYMENT_MODE, + settings=data + ) + self.fuel_web.update_nodes( + cluster_id, + { + 'slave-01': ['controller'], + 'slave-02': ['compute', 'cinder'], + 'slave-03': ['compute', 'cinder'] + } + ) + self.fuel_web.update_internal_network(cluster_id, '192.168.196.0/26', + '192.168.196.1') + self.fuel_web.deploy_cluster_wait(cluster_id) + os_conn = os_actions.OpenStackActions( + self.fuel_web.get_public_vip(cluster_id), + data['user'], data['password'], data['tenant']) + + cluster = self.fuel_web.client.get_cluster(cluster_id) + assert_equal(str(cluster['net_provider']), 'neutron') + # assert_equal(str(cluster['net_segment_type']), segment_type) + self.fuel_web.check_fixed_network_cidr( + cluster_id, os_conn) + + self.fuel_web.verify_network(cluster_id) + + self.fuel_web.run_ostf( + cluster_id=cluster_id) + + self.env.make_snapshot("deploy_neutron_tun") + + +@test(groups=["neutron", "ha", "ha_neutron_tun"]) +class NeutronTunHa(TestBasic): + """NeutronTunHa.""" # TODO documentation + + @test(depends_on=[SetupEnvironment.prepare_slaves_5], + groups=["deploy_neutron_tun_ha", "ha_neutron_tun"]) + @log_snapshot_after_test + def deploy_neutron_tun_ha(self): + """Deploy cluster in HA mode with Neutron VXLAN + + Scenario: + 1. Create cluster + 2. Add 3 nodes with controller role + 3. Add 2 nodes with compute role + 4. Deploy the cluster + 5. Run network verification + 6. Run OSTF + + Duration 80m + Snapshot deploy_neutron_tun_ha + + """ + self.env.revert_snapshot("ready_with_5_slaves") + + cluster_id = self.fuel_web.create_cluster( + name=self.__class__.__name__, + mode=DEPLOYMENT_MODE, + settings={ + "net_provider": 'neutron', + "net_segment_type": NEUTRON_SEGMENT['tun'], + 'tenant': 'haTun', + 'user': 'haTun', + 'password': 'haTun' + } + ) + self.fuel_web.update_nodes( + cluster_id, + { + 'slave-01': ['controller'], + 'slave-02': ['controller'], + 'slave-03': ['controller'], + 'slave-04': ['compute'], + 'slave-05': ['compute'] + } + ) + self.fuel_web.deploy_cluster_wait(cluster_id) + + cluster = self.fuel_web.client.get_cluster(cluster_id) + assert_equal(str(cluster['net_provider']), 'neutron') + + self.fuel_web.verify_network(cluster_id) + devops_node = self.fuel_web.get_nailgun_primary_node( + self.env.d_env.nodes().slaves[0]) + logger.debug("devops node name is {0}".format(devops_node.name)) + with self.fuel_web.get_ssh_for_node(devops_node.name) as remote: + for i in range(5): + try: + checkers.check_swift_ring(remote) + break + except AssertionError: + result = remote.execute( + "/usr/local/bin/swift-rings-rebalance.sh") + logger.debug("command execution result is {0}" + .format(result)) + else: + checkers.check_swift_ring(remote) + + self.fuel_web.run_ostf( + cluster_id=cluster_id, + test_sets=['ha', 'smoke', 'sanity']) + + self.env.make_snapshot("deploy_neutron_tun_ha") + + +@test(groups=["ha", "ha_neutron_tun"]) +class TestHaNeutronAddCompute(TestBasic): + """TestHaNeutronAddCompute.""" # TODO documentation + + @test(depends_on_groups=['deploy_neutron_tun_ha'], + groups=["neutron_tun_ha_add_compute"]) + @log_snapshot_after_test + def neutron_tun_ha_add_compute(self): + """Add compute node to cluster in HA mode with Neutron VXLAN network + + Scenario: + 1. Revert snapshot deploy_neutron_tun_ha with 3 controller + and 2 compute nodes + 2. Add 1 node with compute role + 3. Deploy the cluster + 4. Run network verification + 5. Run OSTF + + Duration 10m + Snapshot neutron_tun_ha_add_compute + + """ + self.env.revert_snapshot("deploy_neutron_tun_ha") + cluster_id = self.fuel_web.get_last_created_cluster() + + self.env.bootstrap_nodes( + self.env.d_env.nodes().slaves[5:6]) + self.fuel_web.update_nodes( + cluster_id, {'slave-06': ['compute']}, True, False + ) + self.fuel_web.deploy_cluster_wait(cluster_id) + + self.fuel_web.verify_network(cluster_id) + + self.fuel_web.run_ostf( + cluster_id=cluster_id, + test_sets=['ha', 'smoke', 'sanity']) + + self.env.make_snapshot("neutron_tun_ha_add_compute") + + @test(depends_on_groups=['deploy_neutron_tun_ha'], + groups=["neutron_tun_ha_addremove"]) + @log_snapshot_after_test + def neutron_tun_ha_addremove(self): + """Add and re-add cinder / compute + cinder to HA cluster + + Scenario: + 1. Revert snapshot deploy_neutron_tun_ha with 3 controller + and 2 compute nodes + 2. Add 'cinder' role to a new slave + 3. Deploy changes + 4. Remove the 'cinder' node + Remove a 'controller' node + Add 'controller'+'cinder' multirole to a new slave + 5. Deploy changes + 6. Run verify networks + 7. Run OSTF + + Duration 50m + """ + + self.env.revert_snapshot("deploy_neutron_tun_ha") + cluster_id = self.fuel_web.get_last_created_cluster() + + self.env.bootstrap_nodes( + self.env.d_env.nodes().slaves[5:7]) + + self.fuel_web.update_nodes( + cluster_id, + {'slave-06': ['cinder']}) + self.fuel_web.deploy_cluster_wait(cluster_id) + self.fuel_web.verify_network(cluster_id) + + self.fuel_web.update_nodes( + cluster_id, + {'slave-06': ['cinder']}, False, True,) + + self.fuel_web.update_nodes( + cluster_id, + {'slave-03': ['controller']}, False, True,) + + self.fuel_web.update_nodes( + cluster_id, + {'slave-07': ['controller', 'cinder']}) + + self.fuel_web.deploy_cluster_wait(cluster_id, check_services=False) + self.fuel_web.verify_network(cluster_id) + self.fuel_web.run_ostf( + cluster_id=cluster_id, + test_sets=['ha', 'smoke', 'sanity'], + should_fail=1) + + +@test(groups=["ha", "ha_neutron_tun"]) +class TestHaNeutronScalability(TestBasic): + """TestHaNeutronScalability.""" # TODO documentation + + @test(depends_on=[SetupEnvironment.prepare_slaves_9], + groups=["neutron_tun_scalability"]) + @log_snapshot_after_test + def neutron_tun_scalability(self): + """Check HA mode on scalability + + Scenario: + 1. Create cluster + 2. Add 1 controller node + 3. Deploy the cluster + 4. Add 2 controller nodes + 5. Deploy changes + 6. Run network verification + 7. Add 2 controller 1 compute nodes + 8. Deploy changes + 9. Run network verification + 10. Run OSTF + 11. Delete the primary and the last added controller. + 12. Deploy changes + 13. Run OSTF ha, sanity, smoke + 14. Run sync_time() to check that NTPD daemon is operational + + Duration 110m + Snapshot neutron_tun_scalabilit + + """ + self.env.revert_snapshot("ready_with_9_slaves") + + cluster_id = self.fuel_web.create_cluster( + name=self.__class__.__name__, + mode=DEPLOYMENT_MODE, + settings={ + "net_provider": 'neutron', + "net_segment_type": NEUTRON_SEGMENT['tun'] + } + ) + + nodes = {'slave-01': ['controller']} + logger.info("Adding new node to the cluster: {0}".format(nodes)) + self.fuel_web.update_nodes( + cluster_id, nodes) + self.fuel_web.deploy_cluster_wait(cluster_id) + devops_node = self.fuel_web.get_nailgun_primary_node( + self.env.d_env.nodes().slaves[0]) + logger.debug("devops node name is {0}".format(devops_node.name)) + + def _check_swift(remote): + with self.fuel_web.get_ssh_for_remote(devops_node.name) as remote: + for i in range(5): + try: + checkers.check_swift_ring(remote) + break + except AssertionError: + result = remote.execute( + "/usr/local/bin/swift-rings-rebalance.sh") + logger.debug( + "command execution result is {0}".format(result)) + else: + checkers.check_swift_ring(remote) + + _check_swift() + + def _check_pacemarker(devops_nodes): + for devops_node in devops_nodes: + with quiet_logger(): + self.fuel_web.assert_pacemaker( + devops_node.name, + self.env.d_env.nodes().slaves[:5], []) + ret = self.fuel_web.get_pacemaker_status(devops_node.name) + assert_true( + re.search('vip__management\s+\(ocf::fuel:ns_IPaddr2\):' + '\s+Started node', ret), + 'vip management started') + assert_true( + re.search('vip__public\s+\(ocf::fuel:ns_IPaddr2\):' + '\s+Started node', ret), + 'vip public started') + + nodes = {'slave-02': ['controller'], + 'slave-03': ['controller']} + logger.info("Adding new nodes to the cluster: {0}".format(nodes)) + self.fuel_web.update_nodes( + cluster_id, nodes, + True, False + ) + + _check_pacemarker(self.env.d_env.nodes().slaves[:3]) + + devops_node = self.fuel_web.get_nailgun_primary_node( + self.env.d_env.nodes().slaves[0]) + logger.debug("devops node name is {0}".format(devops_node.name)) + + _check_swift() + + nodes = {'slave-04': ['controller'], + 'slave-05': ['controller'], + 'slave-06': ['compute']} + logger.info("Adding new nodes to the cluster: {0}".format(nodes)) + self.fuel_web.update_nodes( + cluster_id, nodes, + True, False + ) + + _check_pacemarker(self.env.d_env.nodes().slaves[:5]) + + self.fuel_web.security.verify_firewall(cluster_id) + devops_node = self.fuel_web.get_nailgun_primary_node( + self.env.d_env.nodes().slaves[0]) + logger.debug("devops node name is {0}".format(devops_node.name))\ + + _check_swift() + + self.fuel_web.run_ostf( + cluster_id=cluster_id, + test_sets=['ha', 'sanity']) + + nodes = {devops_node.name: ['controller'], + 'slave-05': ['controller']} + logger.info("Deleting nodes from the cluster: {0}".format(nodes)) + self.fuel_web.update_nodes( + cluster_id, nodes, + False, True + ) + self.fuel_web.deploy_cluster_wait(cluster_id, check_services=False) + + nodes = self.fuel_web.get_nailgun_cluster_nodes_by_roles( + cluster_id, ['controller']) + devops_nodes = [self.fuel_web.get_devops_node_by_nailgun_node(node) + for node in nodes] + + _check_pacemarker(devops_nodes) + + self.fuel_web.security.verify_firewall(cluster_id) + devops_node = self.fuel_web.get_nailgun_primary_node( + devops_nodes[0]) + logger.debug("devops node name is {0}".format(devops_node.name))\ + + _check_swift() + + self.fuel_web.run_ostf( + cluster_id=cluster_id, + test_sets=['sanity', 'smoke', 'ha'], should_fail=1) + self.env.sync_time() + self.env.make_snapshot("neutron_vlan_ha_scalability") + + +@test(groups=["known_issues", "ha", "ha_neutron_tun"]) +class BackupRestoreHa(TestBasic): + """BackupRestoreHa.""" # TODO documentation + + @test(depends_on_groups=['deploy_neutron_tun_ha'], + groups=["known_issues", "backup_restore_neutron_tun_ha"]) + @log_snapshot_after_test + def backup_restore_neutron_tun_ha(self): + """Backup/restore master node with cluster in ha mode + + Scenario: + 1. Revert snapshot "deploy_neutron_tun_ha" + 2. Backup master + 3. Check backup + 4. Run OSTF + 5. Add 1 node with compute role + 6. Restore master + 7. Check restore + 8. Run OSTF + + Duration 50m + + """ + self.env.revert_snapshot("deploy_neutron_tun_ha") + + cluster_id = self.fuel_web.get_last_created_cluster() + cluster = self.fuel_web.client.get_cluster(cluster_id) + assert_equal(str(cluster['net_provider']), 'neutron') + os_conn = os_actions.OpenStackActions( + self.fuel_web.get_public_vip(cluster_id)) + # assert_equal(str(cluster['net_segment_type']), segment_type) + self.fuel_web.check_fixed_network_cidr( + cluster_id, os_conn) + + with self.env.d_env.get_admin_remote() as remote: + self.fuel_web.backup_master(remote) + + with self.env.d_env.get_admin_remote() as remote: + checkers.backup_check(remote) + + self.env.bootstrap_nodes( + self.env.d_env.nodes().slaves[5:6]) + self.fuel_web.update_nodes( + cluster_id, {'slave-06': ['compute']}, True, False + ) + + assert_equal( + 6, len(self.fuel_web.client.list_cluster_nodes(cluster_id))) + + with self.env.d_env.get_admin_remote() as remote: + self.fuel_web.restore_master(remote) + + with self.env.d_env.get_admin_remote() as remote: + checkers.restore_check_sum(remote) + + with self.env.d_env.get_admin_remote() as remote: + self.fuel_web.restore_check_nailgun_api(remote) + + with self.env.d_env.get_admin_remote() as remote: + checkers.iptables_check(remote) + + assert_equal( + 5, len(self.fuel_web.client.list_cluster_nodes(cluster_id))) + + self.env.bootstrap_nodes( + self.env.d_env.nodes().slaves[5:6]) + self.fuel_web.update_nodes( + cluster_id, {'slave-06': ['compute']}, True, False + ) + self.fuel_web.deploy_cluster_wait(cluster_id) + + self.fuel_web.run_ostf( + cluster_id=cluster_id, + test_sets=['ha', 'smoke', 'sanity']) + + self.env.make_snapshot("backup_restore_neutron_tun_ha")