From 0ff9fccfc9032b00120c450894b6eced6edcf69f Mon Sep 17 00:00:00 2001 From: Puneet Arora <apuneet@vmware.com> Date: Wed, 12 Sep 2018 08:28:58 +0000 Subject: [PATCH] [Tempest]: Added uni-dimenional scale cases - Router - Router downlink ports - security-groups - security-group-rules inside security-group Change-Id: Ie05ef6476e22875c5859380277f8056a8c316867 --- .../test_router_uni_dimensionalscale.py | 129 +++++++++++++++++ .../test_sec_gw_uni_dimensionalscale.py | 135 ++++++++++++++++++ 2 files changed, 264 insertions(+) create mode 100644 vmware_nsx_tempest_plugin/tests/uni-scale/test_router_uni_dimensionalscale.py create mode 100644 vmware_nsx_tempest_plugin/tests/uni-scale/test_sec_gw_uni_dimensionalscale.py diff --git a/vmware_nsx_tempest_plugin/tests/uni-scale/test_router_uni_dimensionalscale.py b/vmware_nsx_tempest_plugin/tests/uni-scale/test_router_uni_dimensionalscale.py new file mode 100644 index 0000000..993e1ec --- /dev/null +++ b/vmware_nsx_tempest_plugin/tests/uni-scale/test_router_uni_dimensionalscale.py @@ -0,0 +1,129 @@ +# Copyright 2018 VMware Inc +# All Rights Reserved +# +# 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 tempest import config +from tempest.lib import decorators + +from vmware_nsx_tempest_plugin.lib import feature_manager +from vmware_nsx_tempest_plugin.services import nsxv3_client +from vmware_nsx_tempest_plugin.services import nsxv_client + +from oslo_log import log as logging + +CONF = config.CONF +LOG = logging.getLogger(__name__) + + +class RouterUnidimensionalScaleTest(feature_manager.FeatureManager): + + """Test Uni Dimesional Case for + Logical-router + Logical-router-ports + + """ + @classmethod + def setup_clients(cls): + super(RouterUnidimensionalScaleTest, cls).setup_clients() + cls.cmgr_adm = cls.get_client_manager('admin') + cls.cmgr_alt = cls.get_client_manager('alt') + cls.cmgr_adm = cls.get_client_manager('admin') + + @classmethod + def resource_setup(cls): + super(RouterUnidimensionalScaleTest, cls).resource_setup() + if CONF.network.backend == "nsxv3": + cls.nsx = nsxv3_client.NSXV3Client(CONF.nsxv3.nsx_manager, + CONF.nsxv3.nsx_user, + CONF.nsxv3.nsx_password) + elif CONF.network.backend == "nsxv": + manager_ip = re.search(r"(\d{1,3}\.){3}\d{1,3}", + CONF.nsxv.manager_uri).group(0) + cls.vsm = nsxv_client.VSMClient( + manager_ip, CONF.nsxv.user, CONF.nsxv.password) + + def _create_scale_logical_router(self, scale): + # Create networks based on scale number + for i in range(scale): + name = 'uniscale-%s-router' % i + router = self.create_topology_router(router_name=name) + routers = self.routers_client.list_routers() + scale_rtrs = [rtr for rtr in routers['routers'] + if router['name'].startswith("tempest-vmw_uniscale-")] + error_msg = "Neutron routers created doesn't match the scale number" + self.assertEqual(len(scale_rtrs), scale, error_msg) + nsx_routers = self.nsx.get_logical_routers() + scale_routers = \ + [lr for lr in nsx_routers + if lr['display_name']. + startswith('tempest-RouterUnidimensionalScaleTest')] + error_msg = ("Logical routers on backend doesn't match the " + "number of routers on OpenStack") + self.assertIsNotNone(len(scale_routers), error_msg) + + def _create_scale_logical_downlink_ports(self, scale): + # Create a network with dhcp enabled subnet + name = 'uniscale-router' + router = self.create_topology_router(router_name=name) + for i in range(scale): + name = 'uniscale-%s-net' % i + network = self.create_topology_network(network_name=name) + sub_name = 'uniscale-%s-sub' % i + self.create_topology_subnet( + sub_name, + network, + router_id=router['id']) + + nsx_routers = self.nsx.get_logical_routers() + lr = [lr for lr in nsx_routers if router.get( + 'name') in lr['display_name']][0] + logical_router_ports = self.nsx.get_logical_router_ports(lr) + self.assertIsNotNone(logical_router_ports) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('123264a2-daab-451f-ad3b-f0713a390f47') + def test_create_500_logical_routers(self): + self._create_scale_logical_router(5) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('45622b0f-4593-4509-8998-a3002ce63406') + def test_create_1k_logical_routers(self): + self._create_scale_logical_router(1000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('7893d789-838a-428a-b4fe-8fe214f0e956') + def test_create_2k_logical_routers(self): + self._create_scale_logical_router(2000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('213441be-a700-45fa-bec1-b1d100acbb73') + def test_create_4k_logical_routers(self): + self._create_scale_logical_router(4000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('546484e3-f9b8-4562-8a4c-d8974a703767') + def test_create_100_router_ports(self): + self._create_scale_logical_downlink_ports(1000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('9788af8c-db3a-4ad2-8954-c41670956c52') + def test_create_256_router_ports(self): + self._create_scale_logical_downlink_ports(256) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('8795db0b-5922-494d-bcd3-9d5b0b10b684') + def test_create_512_router_ports(self): + self._create_scale_logical_downlink_ports(512) diff --git a/vmware_nsx_tempest_plugin/tests/uni-scale/test_sec_gw_uni_dimensionalscale.py b/vmware_nsx_tempest_plugin/tests/uni-scale/test_sec_gw_uni_dimensionalscale.py new file mode 100644 index 0000000..9156bc3 --- /dev/null +++ b/vmware_nsx_tempest_plugin/tests/uni-scale/test_sec_gw_uni_dimensionalscale.py @@ -0,0 +1,135 @@ +# Copyright 2018 VMware Inc +# All Rights Reserved +# +# 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 tempest import config +from tempest.lib import decorators + +from vmware_nsx_tempest_plugin.lib import feature_manager +from vmware_nsx_tempest_plugin.services import nsxv3_client +from vmware_nsx_tempest_plugin.services import nsxv_client + +from oslo_log import log as logging + +CONF = config.CONF +LOG = logging.getLogger(__name__) + + +class SecGroupUnidimensionalScaleTest(feature_manager.FeatureManager): + + """Test Uni Dimesional Case for + Logical-security-groups + Logical-security-group-rules + + """ + @classmethod + def setup_clients(cls): + super(SecGroupUnidimensionalScaleTest, cls).setup_clients() + cls.cmgr_adm = cls.get_client_manager('admin') + cls.cmgr_alt = cls.get_client_manager('alt') + cls.cmgr_adm = cls.get_client_manager('admin') + + @classmethod + def resource_setup(cls): + super(SecGroupUnidimensionalScaleTest, cls).resource_setup() + if CONF.network.backend == "nsxv3": + cls.nsx = nsxv3_client.NSXV3Client(CONF.nsxv3.nsx_manager, + CONF.nsxv3.nsx_user, + CONF.nsxv3.nsx_password) + elif CONF.network.backend == "nsxv": + manager_ip = re.search(r"(\d{1,3}\.){3}\d{1,3}", + CONF.nsxv.manager_uri).group(0) + cls.vsm = nsxv_client.VSMClient( + manager_ip, CONF.nsxv.user, CONF.nsxv.password) + + def _create_scale_logical_security_groups(self, scale): + # Create networks based on scale number + for i in range(scale): + name = 'uniscale-%s-net' % i + self.create_topology_empty_security_group(namestart=name) + + sec_groups = self.security_groups_client.list_security_groups() + error_msg = "Neutron sec group rules doesn't created" + self.assertIsNotNone(len(sec_groups), error_msg) + nsx_firewall = self.nsx.get_firewall_sections() + scale_firewall = \ + [dfw for dfw in nsx_firewall + if dfw['display_name'].startswith('tempest-uniscale-')] + error_msg = ("Logical on backend doesn't match the " + "number of routers on OpenStack") + self.assertIsNotNone(len(scale_firewall), error_msg) + + def _create_scale_logical_security_group_rules(self, scale): + count = int(scale / 1000) + for num in range(count): + sg = self.create_topology_security_group() + for i in range(900): + if i % 2 == 0: + protocol = 'tcp' + else: + protocol = 'udp' + sw_rules = [dict(direction='ingress', protocol=protocol, + port_range_min=i + 1, + port_range_max=i + 1, )] + for rule in sw_rules: + self.add_security_group_rule(sg, rule) + sec_rules = self.security_group_rules_client.list_security_group_rules( + ) + error_msg = "Neutron sec group rules doesn't created" + self.assertIsNotNone(len(sec_rules), error_msg) + nsx_firewall = self.nsx.get_firewall_sections() + sec_group = [dfw for dfw in nsx_firewall + if sg['name'] in dfw['display_name']][0] + self.assertIsNotNone(len(sec_group)) + nsx_firewall = self.nsx.get_firewall_section_rules(sec_group) + scale_firewall_rule = [dfw for dfw in nsx_firewall + if dfw['id'] is not None] + self.assertIsNotNone(len(scale_firewall_rule)) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('a12264a2-daab-451f-ad3b-f0713a390f47') + def test_create_500_dfw_groups(self): + self._create_scale_logical_security_groups(1000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('b1222b0f-4593-4509-8998-a3002ce63406') + def test_create_1k_dfw_groups(self): + self._create_scale_logical_security_groups(1000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('c123d789-838a-428a-b4fe-8fe214f0e956') + def test_create_2k_dfw_groups(self): + self._create_scale_logical_security_groups(2000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('d12441be-a700-45fa-bec1-b1d100acbb73') + def test_create_4k_dfw_groups(self): + self._create_scale_logical_security_groups(4000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('e12484e3-f9b8-4562-8a4c-d8974a703767') + def test_create_1000_dfw_group_ruless(self): + self._create_scale_logical_security_group_rules(1000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('f128af8c-db3a-4ad2-8954-c41670956c52') + def test_create_2000_dfw_group_ruless(self): + self._create_scale_logical_security_group_rules(2000) + + @decorators.attr(type='nsxv3') + @decorators.idempotent_id('1125db0b-5922-494d-bcd3-9d5b0b10b684') + def test_create_4000_dfw_group_ruless(self): + self._create_scale_logical_security_group_rules(4000)