From 8a7e0ddf0ddc631a1271319cd97f43773012e3ca Mon Sep 17 00:00:00 2001 From: spisarski Date: Mon, 26 Feb 2018 09:51:45 -0700 Subject: Ensure project for routers are handled properly. Routers should be able to be created by admin users to other projects. Routers without admin users should only be able to create ones to their default project. JIRA: SNAPS-266 Change-Id: I5ecfbcc2ed94bbab211751da9521f3ec1d4ff66d Signed-off-by: spisarski --- docs/how-to-use/IntegrationTests.rst | 29 +++ snaps/config/network.py | 5 +- snaps/openstack/create_instance.py | 3 +- snaps/openstack/create_router.py | 14 +- snaps/openstack/tests/create_network_tests.py | 12 +- snaps/openstack/tests/create_router_tests.py | 247 +++++++++++++++++++-- snaps/openstack/utils/neutron_utils.py | 20 +- snaps/openstack/utils/tests/neutron_utils_tests.py | 35 ++- snaps/test_suite_builder.py | 20 +- 9 files changed, 337 insertions(+), 48 deletions(-) diff --git a/docs/how-to-use/IntegrationTests.rst b/docs/how-to-use/IntegrationTests.rst index 4329120..43c5b5b 100644 --- a/docs/how-to-use/IntegrationTests.rst +++ b/docs/how-to-use/IntegrationTests.rst @@ -285,6 +285,35 @@ create_router_tests.py - CreateRouterNegativeTests | test_create_router_invalid_gateway_name| 2 | Ensures that an exception is raised when attempting to | | | | create a router to an external network that does not exist| +----------------------------------------+---------------+-----------------------------------------------------------+ +| test_create_router_admin_ports | 2 | Ensures that an exception is raised when attempting to | +| | | create a router with ports to networks owned by another | +| | | project | ++----------------------------------------+---------------+-----------------------------------------------------------+ + +create_router_tests.py - CreateMultipleRouterTests +-------------------------------------------------- + ++---------------------------------------+---------------+-----------------------------------------------------------+ +| Test Name | Neutron API | Description | ++=======================================+===============+===========================================================+ +| test_router_same_name_diff_proj | 2 | Ensures that a router with the same name can be created | +| | | against different projects | ++---------------------------------------+---------------+-----------------------------------------------------------+ +| test_router_create_by_admin_to | 2 | Ensures that a router can be created by the admin user | +| _different_project | | to another project and that a creator with the credentials| +| | | to the other project will not create a new router with | +| | | the same name | ++---------------------------------------+---------------+-----------------------------------------------------------+ + +create_router_tests.py - CreateRouterSecurityGroupTests +------------------------------------------------------- + ++---------------------------------------+---------------+-----------------------------------------------------------+ +| Test Name | Neutron API | Description | ++=======================================+===============+===========================================================+ +| test_create_router_secure_port | 2 | Ensures that a router's port can have a security group | +| | | applied to it | ++---------------------------------------+---------------+-----------------------------------------------------------+ create_qos_tests.py - CreateQoSTests ------------------------------------ diff --git a/snaps/config/network.py b/snaps/config/network.py index 6805b30..5f18c6b 100644 --- a/snaps/config/network.py +++ b/snaps/config/network.py @@ -447,7 +447,8 @@ class PortConfig(object): project_name=self.project_name) if not network: raise PortConfigError( - 'Cannot locate network with name - ' + self.network_name) + 'Cannot locate network with name - ' + self.network_name + + ' in project - ' + str(self.project_name)) out['network_id'] = network.id @@ -478,7 +479,7 @@ class PortConfig(object): sec_grp_ids = list() for sec_grp_name in self.security_groups: sec_grp = neutron_utils.get_security_group( - neutron, sec_grp_name=sec_grp_name, + neutron, keystone, sec_grp_name=sec_grp_name, project_name=self.project_name) if sec_grp: sec_grp_ids.append(sec_grp.id) diff --git a/snaps/openstack/create_instance.py b/snaps/openstack/create_instance.py index 18f5d1a..eb4ade3 100644 --- a/snaps/openstack/create_instance.py +++ b/snaps/openstack/create_instance.py @@ -239,7 +239,8 @@ class OpenStackVmInstance(OpenStackComputeObject): :return: the external network name or None """ router = neutron_utils.get_router( - self.__neutron, router_name=router_name) + self.__neutron, self.__keystone, router_name=router_name, + project_name=self._os_creds.project_name) if router and router.external_network_id: network = neutron_utils.get_network_by_id( self.__neutron, router.external_network_id) diff --git a/snaps/openstack/create_router.py b/snaps/openstack/create_router.py index f0ccb5d..50c0b28 100644 --- a/snaps/openstack/create_router.py +++ b/snaps/openstack/create_router.py @@ -43,6 +43,8 @@ class OpenStackRouter(OpenStackNetworkObject): if not router_settings: raise RouterCreationError('router_settings is required') + self.__keystone = None + self.router_settings = router_settings # Attributes instantiated on create() @@ -61,9 +63,13 @@ class OpenStackRouter(OpenStackNetworkObject): """ super(self.__class__, self).initialize() + self.__keystone = keystone_utils.keystone_client(self._os_creds) + try: self.__router = neutron_utils.get_router( - self._neutron, router_settings=self.router_settings) + self._neutron, self.__keystone, + router_settings=self.router_settings, + project_name=self._os_creds.project_name) except Unauthorized as e: logger.warn('Unable to lookup router with name %s - %s', self.router_settings.name, e) @@ -78,10 +84,9 @@ class OpenStackRouter(OpenStackNetworkObject): raise RouterCreationError( 'Subnet not found with name ' + internal_subnet_name) - keystone = keystone_utils.keystone_client(self._os_creds) for port_setting in self.router_settings.port_settings: port = neutron_utils.get_port( - self._neutron, keystone, port_settings=port_setting, + self._neutron, self.__keystone, port_settings=port_setting, project_name=self._os_creds.project_name) if port: self.__ports.append(port) @@ -114,10 +119,9 @@ class OpenStackRouter(OpenStackNetworkObject): raise RouterCreationError( 'Subnet not found with name ' + internal_subnet_name) - keystone = keystone_utils.keystone_client(self._os_creds) for port_setting in self.router_settings.port_settings: port = neutron_utils.get_port( - self._neutron, keystone, port_settings=port_setting, + self._neutron, self.__keystone, port_settings=port_setting, project_name=self._os_creds.project_name) logger.info( 'Retrieved port %s for router - %s', port_setting.name, diff --git a/snaps/openstack/tests/create_network_tests.py b/snaps/openstack/tests/create_network_tests.py index c0accc5..a863a05 100644 --- a/snaps/openstack/tests/create_network_tests.py +++ b/snaps/openstack/tests/create_network_tests.py @@ -461,7 +461,9 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase): # Validate routers neutron_utils_tests.validate_router( - self.neutron, self.router_creator.router_settings.name, True) + self.neutron, self.keystone, + self.router_creator.router_settings.name, + self.os_creds.project_name, True) neutron_utils_tests.validate_interface_router( self.router_creator.get_internal_router_interface(), @@ -520,7 +522,9 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase): self.router_creator.create() retrieved_router = neutron_utils.get_router( - self.neutron, router_settings=self.router_creator.router_settings) + self.neutron, self.keystone, + router_settings=self.router_creator.router_settings, + project_name=self.os_creds.project_name) self.assertEqual( self.router_creator.get_router().id, retrieved_router.id) @@ -552,7 +556,9 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase): self.router_creator.create() retrieved_router = neutron_utils.get_router( - self.neutron, router_settings=self.router_creator.router_settings) + self.neutron, self.keystone, + router_settings=self.router_creator.router_settings, + project_name=self.os_creds.project_name) self.assertEqual( self.router_creator.get_router().id, retrieved_router.id) diff --git a/snaps/openstack/tests/create_router_tests.py b/snaps/openstack/tests/create_router_tests.py index 4e47f6d..d605916 100644 --- a/snaps/openstack/tests/create_router_tests.py +++ b/snaps/openstack/tests/create_router_tests.py @@ -15,12 +15,14 @@ import unittest import uuid -from snaps.config.network import PortConfig, NetworkConfig +from snaps.config.network import PortConfig, NetworkConfig, PortConfigError from snaps.config.router import RouterConfigError, RouterConfig +from snaps.config.security_group import SecurityGroupConfig from snaps.openstack import create_network from snaps.openstack import create_router from snaps.openstack.create_network import OpenStackNetwork -from snaps.openstack.create_router import RouterSettings +from snaps.openstack.create_router import RouterSettings, OpenStackRouter +from snaps.openstack.create_security_group import OpenStackSecurityGroup from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase from snaps.openstack.utils import neutron_utils, settings_utils @@ -152,12 +154,13 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): router_settings = RouterConfig( name=self.guid + '-pub-router', external_gateway=self.ext_net_name) - self.router_creator = create_router.OpenStackRouter(self.os_creds, - router_settings) + self.router_creator = create_router.OpenStackRouter( + self.os_creds, router_settings) self.router_creator.create() - router = neutron_utils.get_router(self.neutron, - router_settings=router_settings) + router = neutron_utils.get_router( + self.neutron, self.keystone, router_settings=router_settings, + project_name=self.os_creds.project_name) self.assertIsNotNone(router) self.assertEqual(self.router_creator.get_router(), router) @@ -178,7 +181,8 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): self.router_creator.create() router = neutron_utils.get_router( - self.neutron, router_settings=router_settings) + self.neutron, self.keystone, router_settings=router_settings, + project_name=self.os_creds.project_name) self.assertIsNotNone(router) self.assertEqual(self.router_creator.get_router().id, router.id) @@ -199,7 +203,8 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): self.router_creator.create() router = neutron_utils.get_router( - self.neutron, router_settings=router_settings) + self.neutron, self.keystone, router_settings=router_settings, + project_name=self.os_creds.project_name) self.assertIsNotNone(router) self.assertEqual(self.router_creator.get_router().id, router.id) @@ -219,13 +224,15 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): created_router = self.router_creator.create() self.assertIsNotNone(created_router) retrieved_router = neutron_utils.get_router( - self.neutron, router_settings=self.router_settings) + self.neutron, self.keystone, router_settings=self.router_settings, + project_name=self.os_creds.project_name) self.assertIsNotNone(retrieved_router) neutron_utils.delete_router(self.neutron, created_router) retrieved_router = neutron_utils.get_router( - self.neutron, router_settings=self.router_settings) + self.neutron, self.keystone, router_settings=self.router_settings, + project_name=self.os_creds.project_name) self.assertIsNone(retrieved_router) # Should not raise an exception @@ -242,8 +249,9 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): router_settings) self.router_creator.create() - router = neutron_utils.get_router(self.neutron, - router_settings=router_settings) + router = neutron_utils.get_router( + self.neutron, self.keystone, router_settings=router_settings, + project_name=self.os_creds.project_name) self.assertIsNotNone(router) self.assertEqual(self.router_creator.get_router(), router) @@ -262,7 +270,8 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): self.router_creator.create() router = neutron_utils.get_router( - self.neutron, router_settings=router_settings) + self.neutron, self.keystone, router_settings=router_settings, + project_name=self.os_creds.project_name) self.assertIsNotNone(router) self.assertEqual(self.router_creator.get_router(), router) @@ -319,7 +328,8 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): self.router_creator.create() router = neutron_utils.get_router( - self.neutron, router_settings=router_settings) + self.neutron, self.keystone, router_settings=router_settings, + project_name=self.os_creds.project_name) self.assertEqual(router, self.router_creator.get_router()) @@ -363,7 +373,8 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): self.router_creator.create() router = neutron_utils.get_router( - self.neutron, router_settings=router_settings) + self.neutron, self.keystone, router_settings=router_settings, + project_name=self.os_creds.project_name) self.assertEquals(router, self.router_creator.get_router()) @@ -418,6 +429,7 @@ class CreateRouterNegativeTests(OSIntegrationTestCase): super(self.__class__, self).__start__() self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4()) + self.network_creator = None self.router_creator = None def tearDown(self): @@ -427,6 +439,9 @@ class CreateRouterNegativeTests(OSIntegrationTestCase): if self.router_creator: self.router_creator.clean() + if self.network_creator: + self.network_creator.clean() + super(self.__class__, self).__clean__() def test_create_router_noname(self): @@ -451,3 +466,205 @@ class CreateRouterNegativeTests(OSIntegrationTestCase): self.router_creator = create_router.OpenStackRouter( self.os_creds, router_settings) self.router_creator.create() + + def test_create_router_admin_ports(self): + """ + Test creation of a router with ports to subnets owned by the admin + project + """ + network_settings = NetworkConfig( + name=self.guid + '-pub-net1', + subnet_settings=[ + create_network.SubnetConfig( + cidr=cidr1, name=self.guid + '-pub-subnet1', + gateway_ip=static_gateway_ip1)]) + self.network_creator = OpenStackNetwork( + self.admin_os_creds, network_settings) + self.network_creator.create() + + port_settings = [ + create_network.PortConfig( + name=self.guid + '-port1', + ip_addrs=[{ + 'subnet_name': network_settings.subnet_settings[0].name, + 'ip': static_gateway_ip1}], + network_name=network_settings.name)] + + router_settings = RouterConfig( + name=self.guid + '-pub-router', external_gateway=self.ext_net_name, + port_settings=port_settings) + self.router_creator = create_router.OpenStackRouter( + self.os_creds, router_settings) + + with self.assertRaises(PortConfigError): + self.router_creator.create() + + +class CreateMultipleRouterTests(OSIntegrationTestCase): + """ + Test for the OpenStackRouter class and how it interacts with routers + groups within other projects with the same name + """ + + def setUp(self): + """ + Initializes objects used for router testing + """ + super(self.__class__, self).__start__() + + self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4()) + self.admin_router_creator = None + self.proj_router_creator = None + self.neutron = neutron_utils.neutron_client(self.os_creds) + + network_settings = NetworkConfig( + name=self.guid + '-pub-net', shared=True, + subnet_settings=[ + create_network.SubnetConfig( + cidr=cidr1, name=self.guid + '-pub-subnet', + gateway_ip=static_gateway_ip1)]) + + self.network_creator = OpenStackNetwork( + self.admin_os_creds, network_settings) + self.network_creator.create() + + def tearDown(self): + """ + Cleans the remote OpenStack objects used for router testing + """ + if self.admin_router_creator: + self.admin_router_creator.clean() + + if self.proj_router_creator: + self.proj_router_creator.clean() + + if self.network_creator: + self.network_creator.clean() + + super(self.__class__, self).__clean__() + + def test_router_same_name_diff_proj(self): + """ + Tests the creation of an OpenStackNetwork with the same name + within a different project/tenant when not configured but implied by + the OSCreds. + """ + # Create Router + + router_config = RouterConfig(name=self.guid + '-router') + self.admin_router_creator = OpenStackRouter( + self.admin_os_creds, router_config) + self.admin_router_creator.create() + + self.proj_router_creator = OpenStackRouter( + self.os_creds, router_config) + self.proj_router_creator.create() + + self.assertNotEqual( + self.admin_router_creator.get_router().id, + self.proj_router_creator.get_router().id) + + admin_creator2 = OpenStackRouter( + self.admin_os_creds, router_config) + admin_creator2.create() + self.assertEqual( + self.admin_router_creator.get_router(), + admin_creator2.get_router()) + + proj_creator2 = OpenStackRouter(self.os_creds, router_config) + proj_creator2.create() + self.assertEqual(self.proj_router_creator.get_router(), + proj_creator2.get_router()) + + def test_router_create_by_admin_to_different_project(self): + """ + Tests the creation of an OpenStackRouter by the admin user and + initialize again with tenant credentials. + """ + # Create Network + + admin_router_config = RouterConfig( + name=self.guid + '-router', + project_name=self.os_creds.project_name) + + self.admin_router_creator = OpenStackRouter( + self.admin_os_creds, admin_router_config) + self.admin_router_creator.create() + + proj_router_config = RouterConfig( + name=self.guid + '-router', + project_name=self.os_creds.project_name) + + self.proj_router_creator = OpenStackRouter( + self.os_creds, proj_router_config) + self.proj_router_creator.create() + + self.assertEqual( + self.admin_router_creator.get_router().id, + self.proj_router_creator.get_router().id) + + +class CreateRouterSecurityGroupTests(OSIntegrationTestCase): + """ + Class for testing routers with ports containing security groups + """ + + def setUp(self): + """ + Initializes objects used for router testing + """ + super(self.__class__, self).__start__() + + self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4()) + self.router_creator = None + self.network_creator = None + + self.sec_grp_creator = OpenStackSecurityGroup( + self.os_creds, SecurityGroupConfig(name=self.guid + '-sec_grp')) + self.sec_grp_creator.create() + + self.neutron = neutron_utils.neutron_client(self.os_creds) + + def tearDown(self): + """ + Cleans the remote OpenStack objects used for router testing + """ + if self.router_creator: + self.router_creator.clean() + + if self.network_creator: + self.network_creator.clean() + + if self.sec_grp_creator: + self.sec_grp_creator.clean() + + super(self.__class__, self).__clean__() + + def test_create_router_secure_port(self): + """ + Test creation of a router with a port that has a security group. + """ + network_settings = NetworkConfig( + name=self.guid + '-pub-net1', + subnet_settings=[ + create_network.SubnetConfig( + cidr=cidr1, name=self.guid + '-pub-subnet1')]) + self.network_creator = OpenStackNetwork( + self.os_creds, network_settings) + self.network_creator.create() + + port_settings = [ + create_network.PortConfig( + name=self.guid + '-port1', + ip_addrs=[{ + 'subnet_name': network_settings.subnet_settings[0].name, + 'ip': static_gateway_ip1}], + network_name=network_settings.name, + security_groups=[self.sec_grp_creator.sec_grp_settings.name])] + + router_settings = RouterConfig( + name=self.guid + '-pub-router', external_gateway=self.ext_net_name, + port_settings=port_settings) + self.router_creator = create_router.OpenStackRouter( + self.os_creds, router_settings) + self.router_creator.create() diff --git a/snaps/openstack/utils/neutron_utils.py b/snaps/openstack/utils/neutron_utils.py index f2ee648..8685d14 100644 --- a/snaps/openstack/utils/neutron_utils.py +++ b/snaps/openstack/utils/neutron_utils.py @@ -325,14 +325,17 @@ def get_router_by_id(neutron, router_id): return __map_router(neutron, router['router']) -def get_router(neutron, router_settings=None, router_name=None): +def get_router(neutron, keystone, router_settings=None, router_name=None, + project_name=None): """ Returns the first router object (dictionary) found the given the settings values if not None, else finds the first with the value of the router_name parameter, else None - :param neutron: the client + :param neutron: the Neutron client + :param keystone: the Keystone client :param router_settings: the RouterConfig object :param router_name: the name of the network to retrieve + :param project_name: the name of the router's project :return: a SNAPS-OO Router domain object """ router_filter = dict() @@ -345,12 +348,13 @@ def get_router(neutron, router_settings=None, router_name=None): else: return None - routers = neutron.list_routers(**router_filter) - - for routerInst in routers['routers']: - return __map_router(neutron, routerInst) - - return None + os_routers = neutron.list_routers(**router_filter) + for os_router in os_routers['routers']: + if project_name: + project = keystone_utils.get_project_by_id( + keystone, os_router['project_id']) + if project and project.name == project_name: + return __map_router(neutron, os_router) def __map_router(neutron, os_router): diff --git a/snaps/openstack/utils/tests/neutron_utils_tests.py b/snaps/openstack/utils/tests/neutron_utils_tests.py index 925bd06..2583a96 100644 --- a/snaps/openstack/utils/tests/neutron_utils_tests.py +++ b/snaps/openstack/utils/tests/neutron_utils_tests.py @@ -518,7 +518,9 @@ class NeutronUtilsRouterTests(OSComponentTestCase): if self.router: try: neutron_utils.delete_router(self.neutron, self.router) - validate_router(self.neutron, self.router.name, False) + validate_router( + self.neutron, self.keystone, self.router.name, + self.os_creds.project_name, False) except: pass @@ -537,8 +539,9 @@ class NeutronUtilsRouterTests(OSComponentTestCase): """ self.router = neutron_utils.create_router( self.neutron, self.os_creds, self.net_config.router_settings) - validate_router(self.neutron, self.net_config.router_settings.name, - True) + validate_router( + self.neutron, self.keystone, self.net_config.router_settings.name, + self.os_creds.project_name, True) def test_create_router_with_public_interface(self): """ @@ -552,7 +555,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase): self.router = neutron_utils.create_router( self.neutron, self.os_creds, self.net_config.router_settings) validate_router( - self.neutron, self.net_config.router_settings.name, True) + self.neutron, self.keystone, self.net_config.router_settings.name, + self.os_creds.project_name, True) ext_net = neutron_utils.get_network( self.neutron, self.keystone, network_name=self.ext_net_name) @@ -577,8 +581,9 @@ class NeutronUtilsRouterTests(OSComponentTestCase): self.router = neutron_utils.create_router( self.neutron, self.os_creds, self.net_config.router_settings) - validate_router(self.neutron, self.net_config.router_settings.name, - True) + validate_router( + self.neutron, self.keystone, self.net_config.router_settings.name, + self.os_creds.project_name, True) self.interface_router = neutron_utils.add_interface_router( self.neutron, self.router, self.network.subnets[0]) @@ -623,8 +628,9 @@ class NeutronUtilsRouterTests(OSComponentTestCase): self.router = neutron_utils.create_router( self.neutron, self.os_creds, self.net_config.router_settings) - validate_router(self.neutron, self.net_config.router_settings.name, - True) + validate_router( + self.neutron, self.keystone, self.net_config.router_settings.name, + self.os_creds.project_name, True) with self.assertRaises(NeutronException): self.interface_router = neutron_utils.add_interface_router( @@ -646,8 +652,9 @@ class NeutronUtilsRouterTests(OSComponentTestCase): self.router = neutron_utils.create_router( self.neutron, self.os_creds, self.net_config.router_settings) - validate_router(self.neutron, self.net_config.router_settings.name, - True) + validate_router( + self.neutron, self.keystone, self.net_config.router_settings.name, + self.os_creds.project_name, True) for subnet in self.network.subnets: neutron_utils.delete_subnet(self.neutron, subnet) @@ -1071,17 +1078,21 @@ def validate_subnet(neutron, name, cidr, exists): return False -def validate_router(neutron, name, exists): +def validate_router(neutron, keystone, name, project_name, exists): """ Returns true if a router for a given name DOES NOT exist if the exists parameter is false conversely true. Returns false if a router for a given name DOES exist if the exists parameter is true conversely false. :param neutron: The neutron client + :param keystone: The keystone client :param name: The expected router name + :param project_name: The name of the project in which the router should + exist :param exists: Whether or not the network name should exist or not :return: True/False """ - router = neutron_utils.get_router(neutron, router_name=name) + router = neutron_utils.get_router( + neutron, keystone, router_name=name, project_name=project_name) if exists and router: return True return False diff --git a/snaps/test_suite_builder.py b/snaps/test_suite_builder.py index 29429be..143c5f0 100644 --- a/snaps/test_suite_builder.py +++ b/snaps/test_suite_builder.py @@ -77,7 +77,7 @@ from snaps.openstack.tests.create_keypairs_tests import ( from snaps.openstack.tests.create_network_tests import ( CreateNetworkSuccessTests, NetworkSettingsUnitTests, PortSettingsUnitTests, SubnetSettingsUnitTests, CreateNetworkTypeTests, CreateNetworkIPv6Tests, - CreateNetworkGatewayTests) + CreateMultipleNetworkTests, CreateNetworkGatewayTests) from snaps.openstack.tests.create_project_tests import ( CreateProjectSuccessTests, ProjectSettingsUnitTests, CreateProjectUserTests) @@ -85,7 +85,8 @@ from snaps.openstack.tests.create_qos_tests import ( QoSSettingsUnitTests, CreateQoSTests) from snaps.openstack.tests.create_router_tests import ( CreateRouterSuccessTests, CreateRouterNegativeTests, - RouterSettingsUnitTests) + RouterSettingsUnitTests, CreateMultipleRouterTests, + CreateRouterSecurityGroupTests) from snaps.openstack.tests.create_security_group_tests import ( CreateSecurityGroupTests, SecurityGroupRuleSettingsUnitTests, SecurityGroupSettingsUnitTests, CreateMultipleSecurityGroupTests) @@ -514,6 +515,11 @@ def add_openstack_integration_tests(suite, os_creds, ext_net_name, ext_net_name=ext_net_name, use_keystone=use_keystone, flavor_metadata=flavor_metadata, image_metadata=image_metadata, log_level=log_level)) + suite.addTest(OSIntegrationTestCase.parameterize( + CreateMultipleNetworkTests, os_creds=os_creds, + ext_net_name=ext_net_name, use_keystone=use_keystone, + flavor_metadata=flavor_metadata, image_metadata=image_metadata, + log_level=log_level)) suite.addTest(OSIntegrationTestCase.parameterize( CreateRouterSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name, use_keystone=use_keystone, @@ -524,6 +530,16 @@ def add_openstack_integration_tests(suite, os_creds, ext_net_name, ext_net_name=ext_net_name, use_keystone=use_keystone, flavor_metadata=flavor_metadata, image_metadata=image_metadata, log_level=log_level)) + suite.addTest(OSIntegrationTestCase.parameterize( + CreateMultipleRouterTests, os_creds=os_creds, + ext_net_name=ext_net_name, use_keystone=use_keystone, + flavor_metadata=flavor_metadata, image_metadata=image_metadata, + log_level=log_level)) + suite.addTest(OSIntegrationTestCase.parameterize( + CreateRouterSecurityGroupTests, os_creds=os_creds, + ext_net_name=ext_net_name, use_keystone=use_keystone, + flavor_metadata=flavor_metadata, image_metadata=image_metadata, + log_level=log_level)) suite.addTest(OSIntegrationTestCase.parameterize( CreateQoSTests, os_creds=os_creds, ext_net_name=ext_net_name, use_keystone=use_keystone, -- cgit 1.2.3-korg