]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Refactor the subnetpools API tests
authorNuman Siddique <nusiddiq@redhat.com>
Thu, 16 Jul 2015 07:35:06 +0000 (13:05 +0530)
committerNuman Siddique <nusiddiq@redhat.com>
Thu, 17 Dec 2015 16:21:40 +0000 (21:51 +0530)
test_create_dual_stack_subnets_from_subnetpools
was not cleaning the created subnetpool.
In order to address this issue, this patch
  - adds the cleanup of subnetpools in base.resource_cleanup
  - and removes the calls to the function addCleanup in the
    subnetpools tests.

This patch also removes the CRUD subnetpools functions
from network_client.py as it is not required.

Change-Id: I7ad902dbb303ab9e5d01caceb59cc16f7902aaf9
Closes-bug: #1475176

neutron/tests/api/base.py
neutron/tests/api/test_address_scopes_negative.py
neutron/tests/api/test_subnetpools.py
neutron/tests/api/test_subnetpools_negative.py
neutron/tests/tempest/services/network/json/network_client.py

index 0f31a9a2a84a7eb437177fff424b35e6d0c312de..3a5a8246eadc814e7c6c75c078252ed02bcbba8a 100644 (file)
@@ -93,6 +93,8 @@ class BaseNetworkTest(neutron.tests.tempest.test.BaseTestCase):
         cls.ethertype = "IPv" + str(cls._ip_version)
         cls.address_scopes = []
         cls.admin_address_scopes = []
+        cls.subnetpools = []
+        cls.admin_subnetpools = []
 
     @classmethod
     def resource_cleanup(cls):
@@ -188,6 +190,14 @@ class BaseNetworkTest(neutron.tests.tempest.test.BaseTestCase):
                 cls._try_delete_resource(cls.admin_client.delete_network,
                                          network['id'])
 
+            for subnetpool in cls.subnetpools:
+                cls._try_delete_resource(cls.client.delete_subnetpool,
+                                         subnetpool['id'])
+
+            for subnetpool in cls.admin_subnetpools:
+                cls._try_delete_resource(cls.admin_client.delete_subnetpool,
+                                         subnetpool['id'])
+
             for address_scope in cls.address_scopes:
                 cls._try_delete_resource(cls.client.delete_address_scope,
                                          address_scope['id'])
@@ -490,6 +500,16 @@ class BaseNetworkTest(neutron.tests.tempest.test.BaseTestCase):
             cls.address_scopes.append(body['address_scope'])
         return body['address_scope']
 
+    @classmethod
+    def create_subnetpool(cls, name, is_admin=False, **kwargs):
+        if is_admin:
+            body = cls.admin_client.create_subnetpool(name=name, **kwargs)
+            cls.admin_subnetpools.append(body['subnetpool'])
+        else:
+            body = cls.client.create_subnetpool(name=name, **kwargs)
+            cls.subnetpools.append(body['subnetpool'])
+        return body['subnetpool']
+
 
 class BaseAdminNetworkTest(BaseNetworkTest):
 
index e84a84a06031512a00bb50ce38377c994292abf1..feed39bc8ce2bf84ae4aaab0f44809dd5cdda31d 100644 (file)
@@ -83,12 +83,10 @@ class AddressScopeTestNegative(test_address_scopes.AddressScopeTestBase):
     def test_delete_address_scope_associated_with_subnetpool(self):
         address_scope = self._create_address_scope(ip_version=4)
         prefixes = [u'10.11.12.0/24']
-        subnetpool_data = {'subnetpool': {
+        subnetpool_data = {
             'name': 'foo-subnetpool',
             'min_prefixlen': '29', 'prefixes': prefixes,
-            'address_scope_id': address_scope['id']}}
-        body = self.client.create_subnetpool(subnetpool_data)
-        subnetpool = body['subnetpool']
-        self.addCleanup(self.client.delete_subnetpool, subnetpool['id'])
+            'address_scope_id': address_scope['id']}
+        self.create_subnetpool(**subnetpool_data)
         self.assertRaises(lib_exc.Conflict, self.client.delete_address_scope,
                           address_scope['id'])
index 0025205c7b15daffe2550ac3d90f838699991bd1..252071d4d2a396d1d866b85861f4112cce61dc6e 100644 (file)
@@ -13,8 +13,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import copy
-
 from tempest_lib.common.utils import data_utils
 
 from neutron.tests.api import base
@@ -27,7 +25,40 @@ SUBNETPOOL_NAME = 'smoke-subnetpool'
 SUBNET_NAME = 'smoke-subnet'
 
 
-class SubnetPoolsTest(base.BaseNetworkTest):
+class SubnetPoolsTestBase(base.BaseNetworkTest):
+
+    @classmethod
+    def resource_setup(cls):
+        super(SubnetPoolsTestBase, cls).resource_setup()
+        min_prefixlen = '29'
+        prefixes = [u'10.11.12.0/24']
+        cls._subnetpool_data = {'prefixes': prefixes,
+                                'min_prefixlen': min_prefixlen}
+        try:
+            creds = cls.isolated_creds.get_admin_creds()
+            cls.os_adm = clients.Manager(credentials=creds)
+        except NotImplementedError:
+            msg = ("Missing Administrative Network API credentials "
+                   "in configuration.")
+            raise cls.skipException(msg)
+        cls.admin_client = cls.os_adm.network_client
+
+    def _create_subnetpool(self, is_admin=False, **kwargs):
+        if 'name' not in kwargs:
+            name = data_utils.rand_name(SUBNETPOOL_NAME)
+        else:
+            name = kwargs.pop('name')
+
+        if 'prefixes' not in kwargs:
+            kwargs['prefixes'] = self._subnetpool_data['prefixes']
+
+        if 'min_prefixlen' not in kwargs:
+            kwargs['min_prefixlen'] = self._subnetpool_data['min_prefixlen']
+
+        return self.create_subnetpool(name=name, is_admin=is_admin, **kwargs)
+
+
+class SubnetPoolsTest(SubnetPoolsTestBase):
 
     min_prefixlen = '28'
     max_prefixlen = '31'
@@ -52,38 +83,10 @@ class SubnetPoolsTest(base.BaseNetworkTest):
 
     """
 
-    @classmethod
-    def resource_setup(cls):
-        super(SubnetPoolsTest, cls).resource_setup()
-        prefixes = [u'10.11.12.0/24']
-        cls._subnetpool_data = {'subnetpool': {'min_prefixlen': '29',
-                                               'prefixes': prefixes}}
-        try:
-            creds = cls.isolated_creds.get_admin_creds()
-            cls.os_adm = clients.Manager(credentials=creds)
-        except NotImplementedError:
-            msg = ("Missing Administrative Network API credentials "
-                   "in configuration.")
-            raise cls.skipException(msg)
-        cls.admin_client = cls.os_adm.network_client
-
-    def _create_subnetpool(self, client, pool_values=None):
-        name = data_utils.rand_name(SUBNETPOOL_NAME)
-        subnetpool_data = copy.deepcopy(self._subnetpool_data)
-        if pool_values:
-            subnetpool_data['subnetpool'].update(pool_values)
-        subnetpool_data['subnetpool']['name'] = name
-        body = client.create_subnetpool(subnetpool_data)
-        created_subnetpool = body['subnetpool']
-        subnetpool_id = created_subnetpool['id']
-        return name, subnetpool_id
-
     def _new_subnetpool_attributes(self):
         new_name = data_utils.rand_name(SUBNETPOOL_NAME)
-        subnetpool_data = {'subnetpool': {'name': new_name,
-                                          'min_prefixlen': self.min_prefixlen,
-                                          'max_prefixlen': self.max_prefixlen}}
-        return subnetpool_data
+        return {'name': new_name, 'min_prefixlen': self.min_prefixlen,
+                'max_prefixlen': self.max_prefixlen}
 
     def _check_equality_updated_subnetpool(self, expected_values,
                                            updated_pool):
@@ -101,25 +104,25 @@ class SubnetPoolsTest(base.BaseNetworkTest):
     @test.attr(type='smoke')
     @test.idempotent_id('6e1781ec-b45b-4042-aebe-f485c022996e')
     def test_create_list_subnetpool(self):
-        name, pool_id = self._create_subnetpool(self.client)
+        created_subnetpool = self._create_subnetpool()
         body = self.client.list_subnetpools()
         subnetpools = body['subnetpools']
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        self.assertIn(pool_id, [sp['id'] for sp in subnetpools],
+        self.assertIn(created_subnetpool['id'],
+                      [sp['id'] for sp in subnetpools],
                       "Created subnetpool id should be in the list")
-        self.assertIn(name, [sp['name'] for sp in subnetpools],
+        self.assertIn(created_subnetpool['name'],
+                      [sp['name'] for sp in subnetpools],
                       "Created subnetpool name should be in the list")
 
     @test.attr(type='smoke')
     @test.idempotent_id('741d08c2-1e3f-42be-99c7-0ea93c5b728c')
     def test_get_subnetpool(self):
-        name, pool_id = self._create_subnetpool(self.client)
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        prefixlen = self._subnetpool_data['subnetpool']['min_prefixlen']
-        body = self.client.get_subnetpool(pool_id)
+        created_subnetpool = self._create_subnetpool()
+        prefixlen = self._subnetpool_data['min_prefixlen']
+        body = self.client.show_subnetpool(created_subnetpool['id'])
         subnetpool = body['subnetpool']
-        self.assertEqual(name, subnetpool['name'])
-        self.assertEqual(pool_id, subnetpool['id'])
+        self.assertEqual(created_subnetpool['name'], subnetpool['name'])
+        self.assertEqual(created_subnetpool['id'], subnetpool['id'])
         self.assertEqual(prefixlen, subnetpool['min_prefixlen'])
         self.assertEqual(prefixlen, subnetpool['default_prefixlen'])
         self.assertFalse(subnetpool['shared'])
@@ -127,14 +130,15 @@ class SubnetPoolsTest(base.BaseNetworkTest):
     @test.attr(type='smoke')
     @test.idempotent_id('764f1b93-1c4a-4513-9e7b-6c2fc5e9270c')
     def test_tenant_update_subnetpool(self):
-        name, pool_id = self._create_subnetpool(self.client)
+        created_subnetpool = self._create_subnetpool()
+        pool_id = created_subnetpool['id']
         subnetpool_data = self._new_subnetpool_attributes()
-        self.client.update_subnetpool(pool_id, subnetpool_data)
+        self.client.update_subnetpool(created_subnetpool['id'],
+                                      **subnetpool_data)
 
-        body = self.client.get_subnetpool(pool_id)
+        body = self.client.show_subnetpool(pool_id)
         subnetpool = body['subnetpool']
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        self._check_equality_updated_subnetpool(subnetpool_data['subnetpool'],
+        self._check_equality_updated_subnetpool(subnetpool_data,
                                                 subnetpool)
         self.assertFalse(subnetpool['shared'])
 
@@ -142,14 +146,14 @@ class SubnetPoolsTest(base.BaseNetworkTest):
     @test.idempotent_id('4b496082-c992-4319-90be-d4a7ce646290')
     def test_update_subnetpool_prefixes_append(self):
         # We can append new prefixes to subnetpool
-        name, pool_id = self._create_subnetpool(self.client)
-        old_prefixes = self._subnetpool_data['subnetpool']['prefixes']
+        create_subnetpool = self._create_subnetpool()
+        pool_id = create_subnetpool['id']
+        old_prefixes = self._subnetpool_data['prefixes']
         new_prefixes = old_prefixes[:]
         new_prefixes.append(self.new_prefix)
-        subnetpool_data = {'subnetpool': {'prefixes': new_prefixes}}
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        self.client.update_subnetpool(pool_id, subnetpool_data)
-        body = self.client.get_subnetpool(pool_id)
+        subnetpool_data = {'prefixes': new_prefixes}
+        self.client.update_subnetpool(pool_id, **subnetpool_data)
+        body = self.client.show_subnetpool(pool_id)
         prefixes = body['subnetpool']['prefixes']
         self.assertIn(self.new_prefix, prefixes)
         self.assertIn(old_prefixes[0], prefixes)
@@ -158,12 +162,12 @@ class SubnetPoolsTest(base.BaseNetworkTest):
     @test.idempotent_id('2cae5d6a-9d32-42d8-8067-f13970ae13bb')
     def test_update_subnetpool_prefixes_extend(self):
         # We can extend current subnetpool prefixes
-        name, pool_id = self._create_subnetpool(self.client)
-        old_prefixes = self._subnetpool_data['subnetpool']['prefixes']
-        subnetpool_data = {'subnetpool': {'prefixes': [self.larger_prefix]}}
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        self.client.update_subnetpool(pool_id, subnetpool_data)
-        body = self.client.get_subnetpool(pool_id)
+        created_subnetpool = self._create_subnetpool()
+        pool_id = created_subnetpool['id']
+        old_prefixes = self._subnetpool_data['prefixes']
+        subnetpool_data = {'prefixes': [self.larger_prefix]}
+        self.client.update_subnetpool(pool_id, **subnetpool_data)
+        body = self.client.show_subnetpool(pool_id)
         prefixes = body['subnetpool']['prefixes']
         self.assertIn(self.larger_prefix, prefixes)
         self.assertNotIn(old_prefixes[0], prefixes)
@@ -171,39 +175,43 @@ class SubnetPoolsTest(base.BaseNetworkTest):
     @test.attr(type='smoke')
     @test.idempotent_id('d70c6c35-913b-4f24-909f-14cd0d29b2d2')
     def test_admin_create_shared_subnetpool(self):
-        pool_values = {'shared': 'True'}
-        name, pool_id = self._create_subnetpool(self.admin_client,
-                                                pool_values)
+        created_subnetpool = self._create_subnetpool(is_admin=True,
+                                                     shared=True)
+        pool_id = created_subnetpool['id']
         # Shared subnetpool can be retrieved by tenant user.
-        body = self.client.get_subnetpool(pool_id)
-        self.addCleanup(self.admin_client.delete_subnetpool, pool_id)
+        body = self.client.show_subnetpool(pool_id)
         subnetpool = body['subnetpool']
-        self.assertEqual(name, subnetpool['name'])
+        self.assertEqual(created_subnetpool['name'], subnetpool['name'])
         self.assertTrue(subnetpool['shared'])
 
     def _create_subnet_from_pool(self, subnet_values=None, pool_values=None):
-        pool_name, pool_id = self._create_subnetpool(self.client, pool_values)
+        if pool_values is None:
+            pool_values = {}
+
+        created_subnetpool = self._create_subnetpool(**pool_values)
+        pool_id = created_subnetpool['id']
         subnet_name = data_utils.rand_name(SUBNETPOOL_NAME)
         network = self.create_network()
-        network_id = network['id']
-        kwargs = {'name': subnet_name,
-                  'subnetpool_id': pool_id}
+        subnet_kwargs = {'name': subnet_name,
+                         'subnetpool_id': pool_id}
         if subnet_values:
-            kwargs.update(subnet_values)
+            subnet_kwargs.update(subnet_values)
+        # not creating the subnet using the base.create_subnet because
+        # that function needs to be enhanced to support subnet_create when
+        # prefixlen and subnetpool_id is specified.
         body = self.client.create_subnet(
-            network_id=network_id,
+            network_id=network['id'],
             ip_version=self._ip_version,
-            **kwargs)
+            **subnet_kwargs)
         subnet = body['subnet']
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        self.addCleanup(self.client.delete_network, network_id)
         return pool_id, subnet
 
     @test.attr(type='smoke')
     @test.idempotent_id('1362ed7d-3089-42eb-b3a5-d6cb8398ee77')
     def test_create_subnet_from_pool_with_prefixlen(self):
         subnet_values = {"prefixlen": self.max_prefixlen}
-        pool_id, subnet = self._create_subnet_from_pool(subnet_values)
+        pool_id, subnet = self._create_subnet_from_pool(
+            subnet_values=subnet_values)
         cidr = str(subnet['cidr'])
         self.assertEqual(pool_id, subnet['subnetpool_id'])
         self.assertTrue(cidr.endswith(str(self.max_prefixlen)))
@@ -212,7 +220,8 @@ class SubnetPoolsTest(base.BaseNetworkTest):
     @test.idempotent_id('86b86189-9789-4582-9c3b-7e2bfe5735ee')
     def test_create_subnet_from_pool_with_subnet_cidr(self):
         subnet_values = {"cidr": self.subnet_cidr}
-        pool_id, subnet = self._create_subnet_from_pool(subnet_values)
+        pool_id, subnet = self._create_subnet_from_pool(
+            subnet_values=subnet_values)
         cidr = str(subnet['cidr'])
         self.assertEqual(pool_id, subnet['subnetpool_id'])
         self.assertEqual(cidr, self.subnet_cidr)
@@ -225,7 +234,7 @@ class SubnetPoolsTest(base.BaseNetworkTest):
         pool_id, subnet = self._create_subnet_from_pool()
         cidr = str(subnet['cidr'])
         self.assertEqual(pool_id, subnet['subnetpool_id'])
-        prefixlen = self._subnetpool_data['subnetpool']['min_prefixlen']
+        prefixlen = self._subnetpool_data['min_prefixlen']
         self.assertTrue(cidr.endswith(str(prefixlen)))
 
     @test.attr(type='smoke')
@@ -233,8 +242,8 @@ class SubnetPoolsTest(base.BaseNetworkTest):
     def test_create_subnet_from_pool_with_quota(self):
         pool_values = {'default_quota': 4}
         subnet_values = {"prefixlen": self.max_prefixlen}
-        pool_id, subnet = self._create_subnet_from_pool(subnet_values,
-                                                        pool_values)
+        pool_id, subnet = self._create_subnet_from_pool(
+            subnet_values=subnet_values, pool_values=pool_values)
         cidr = str(subnet['cidr'])
         self.assertEqual(pool_id, subnet['subnetpool_id'])
         self.assertTrue(cidr.endswith(str(self.max_prefixlen)))
@@ -246,10 +255,9 @@ class SubnetPoolsTest(base.BaseNetworkTest):
         address_scope = self.create_address_scope(
             name=data_utils.rand_name('smoke-address-scope'),
             ip_version=self._ip_version)
-        name, pool_id = self._create_subnetpool(
-            self.client, pool_values={'address_scope_id': address_scope['id']})
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        body = self.client.get_subnetpool(pool_id)
+        created_subnetpool = self._create_subnetpool(
+            address_scope_id=address_scope['id'])
+        body = self.client.show_subnetpool(created_subnetpool['id'])
         self.assertEqual(address_scope['id'],
                          body['subnetpool']['address_scope_id'])
 
@@ -260,14 +268,13 @@ class SubnetPoolsTest(base.BaseNetworkTest):
         address_scope = self.create_address_scope(
             name=data_utils.rand_name('smoke-address-scope'),
             ip_version=self._ip_version)
-        name, pool_id = self._create_subnetpool(self.client)
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        body = self.client.get_subnetpool(pool_id)
+        created_subnetpool = self._create_subnetpool()
+        pool_id = created_subnetpool['id']
+        body = self.client.show_subnetpool(pool_id)
         self.assertIsNone(body['subnetpool']['address_scope_id'])
-        subnetpool_data = {'subnetpool': {'address_scope_id':
-                                          address_scope['id']}}
-        self.client.update_subnetpool(pool_id, subnetpool_data)
-        body = self.client.get_subnetpool(pool_id)
+        self.client.update_subnetpool(pool_id,
+                                      address_scope_id=address_scope['id'])
+        body = self.client.show_subnetpool(pool_id)
         self.assertEqual(address_scope['id'],
                          body['subnetpool']['address_scope_id'])
 
@@ -281,18 +288,15 @@ class SubnetPoolsTest(base.BaseNetworkTest):
         another_address_scope = self.create_address_scope(
             name=data_utils.rand_name('smoke-address-scope'),
             ip_version=self._ip_version)
-        name, pool_id = self._create_subnetpool(
-            self.client, pool_values={'address_scope_id':
-                                      address_scope['id']})
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-
-        body = self.client.get_subnetpool(pool_id)
+        created_subnetpool = self._create_subnetpool(
+            address_scope_id=address_scope['id'])
+        pool_id = created_subnetpool['id']
+        body = self.client.show_subnetpool(pool_id)
         self.assertEqual(address_scope['id'],
                          body['subnetpool']['address_scope_id'])
-        subnetpool_data = {'subnetpool': {'address_scope_id':
-                                          another_address_scope['id']}}
-        self.client.update_subnetpool(pool_id, subnetpool_data)
-        body = self.client.get_subnetpool(pool_id)
+        self.client.update_subnetpool(
+            pool_id, address_scope_id=another_address_scope['id'])
+        body = self.client.show_subnetpool(pool_id)
         self.assertEqual(another_address_scope['id'],
                          body['subnetpool']['address_scope_id'])
 
@@ -303,15 +307,15 @@ class SubnetPoolsTest(base.BaseNetworkTest):
         address_scope = self.create_address_scope(
             name=data_utils.rand_name('smoke-address-scope'),
             ip_version=self._ip_version)
-        name, pool_id = self._create_subnetpool(
-            self.client, pool_values={'address_scope_id': address_scope['id']})
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        body = self.client.get_subnetpool(pool_id)
+        created_subnetpool = self._create_subnetpool(
+            address_scope_id=address_scope['id'])
+        pool_id = created_subnetpool['id']
+        body = self.client.show_subnetpool(pool_id)
         self.assertEqual(address_scope['id'],
                          body['subnetpool']['address_scope_id'])
-        subnetpool_data = {'subnetpool': {'address_scope_id': None}}
-        self.client.update_subnetpool(pool_id, subnetpool_data)
-        body = self.client.get_subnetpool(pool_id)
+        self.client.update_subnetpool(pool_id,
+                                      address_scope_id=None)
+        body = self.client.show_subnetpool(pool_id)
         self.assertIsNone(body['subnetpool']['address_scope_id'])
 
 
@@ -329,22 +333,19 @@ class SubnetPoolsTestV6(SubnetPoolsTest):
         super(SubnetPoolsTestV6, cls).resource_setup()
         min_prefixlen = '64'
         prefixes = [u'2001:db8:3::/48']
-        cls._subnetpool_data = {'subnetpool': {'min_prefixlen': min_prefixlen,
-                                               'prefixes': prefixes}}
+        cls._subnetpool_data = {'min_prefixlen': min_prefixlen,
+                                'prefixes': prefixes}
 
     @test.attr(type='smoke')
     @test.idempotent_id('f62d73dc-cf6f-4879-b94b-dab53982bf3b')
     def test_create_dual_stack_subnets_from_subnetpools(self):
         pool_id_v6, subnet_v6 = self._create_subnet_from_pool()
-        self.addCleanup(self.client.delete_subnet, subnet_v6['id'])
         pool_values_v4 = {'prefixes': ['192.168.0.0/16'],
                           'min_prefixlen': 21,
                           'max_prefixlen': 32}
-        pool_name_v4, pool_id_v4 = self._create_subnetpool(self.client,
-                                                  pool_values=pool_values_v4)
+        create_v4_subnetpool = self._create_subnetpool(**pool_values_v4)
+        pool_id_v4 = create_v4_subnetpool['id']
         subnet_v4 = self.client.create_subnet(
-                                network_id=subnet_v6['network_id'],
-                                ip_version=4,
-                                subnetpool_id=pool_id_v4)['subnet']
-        self.addCleanup(self.client.delete_subnet, subnet_v4['id'])
+            network_id=subnet_v6['network_id'], ip_version=4,
+            subnetpool_id=pool_id_v4)['subnet']
         self.assertEqual(subnet_v4['network_id'], subnet_v6['network_id'])
index b5945fae2114177cbd049ee2f2241834618f8e9a..9d94086d58eda337a4d0a4a5984f21d31412b36f 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import copy
+import netaddr
 import uuid
 
 from tempest_lib.common.utils import data_utils
 from tempest_lib import exceptions as lib_exc
 
-from neutron.tests.api import base
-from neutron.tests.api import clients
+from neutron.tests.api import test_subnetpools
 from neutron.tests.tempest import config
 from neutron.tests.tempest import test
 
@@ -28,52 +27,24 @@ CONF = config.CONF
 SUBNETPOOL_NAME = 'smoke-subnetpool'
 
 
-class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
+class SubnetPoolsNegativeTestJSON(test_subnetpools.SubnetPoolsTestBase):
 
     smaller_prefix = u'10.11.12.0/26'
 
-    @classmethod
-    def resource_setup(cls):
-        super(SubnetPoolsNegativeTestJSON, cls).resource_setup()
-        min_prefixlen = '29'
-        prefixes = [u'10.11.12.0/24']
-        name = data_utils.rand_name(SUBNETPOOL_NAME)
-        cls._subnetpool_data = {'subnetpool': {'name': name,
-                                               'prefixes': prefixes,
-                                               'min_prefixlen': min_prefixlen}}
-        try:
-            creds = cls.isolated_creds.get_admin_creds()
-            cls.os_adm = clients.Manager(credentials=creds)
-        except NotImplementedError:
-            msg = ("Missing Administrative Network API credentials "
-                   "in configuration.")
-            raise cls.skipException(msg)
-        cls.admin_client = cls.os_adm.network_client
-
-    def _create_subnetpool(self, client, pool_values=None):
-        subnetpool_data = copy.deepcopy(self._subnetpool_data)
-        if pool_values:
-            subnetpool_data['subnetpool'].update(pool_values)
-        body = client.create_subnetpool(subnetpool_data)
-        created_subnetpool = body['subnetpool']
-        subnetpool_id = created_subnetpool['id']
-        return subnetpool_id
-
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('0212a042-603a-4f46-99e0-e37de9374d30')
     def test_get_non_existent_subnetpool(self):
         non_exist_id = data_utils.rand_name('subnetpool')
-        self.assertRaises(lib_exc.NotFound, self.client.get_subnetpool,
+        self.assertRaises(lib_exc.NotFound, self.client.show_subnetpool,
                           non_exist_id)
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('dc9336e5-f28f-4658-a0b0-cc79e607007d')
     def test_tenant_get_not_shared_admin_subnetpool(self):
-        pool_id = self._create_subnetpool(self.admin_client)
-        self.addCleanup(self.admin_client.delete_subnetpool, pool_id)
+        created_subnetpool = self._create_subnetpool(is_admin=True)
         # None-shared admin subnetpool cannot be retrieved by tenant user.
-        self.assertRaises(lib_exc.NotFound, self.client.get_subnetpool,
-                          pool_id)
+        self.assertRaises(lib_exc.NotFound, self.client.show_subnetpool,
+                          created_subnetpool['id'])
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('5e1f2f86-d81a-498c-82ed-32a49f4dc4d3')
@@ -86,80 +57,66 @@ class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
     @test.idempotent_id('d1143fe2-212b-4e23-a308-d18f7d8d78d6')
     def test_tenant_create_shared_subnetpool(self):
         # 'shared' subnetpool can only be created by admin.
-        subnetpool_data = copy.deepcopy(self._subnetpool_data)
-        subnetpool_data['subnetpool']['shared'] = 'True'
-        self.assertRaises(lib_exc.Forbidden, self.client.create_subnetpool,
-                          subnetpool_data)
+        self.assertRaises(lib_exc.Forbidden, self._create_subnetpool,
+                          is_admin=False, shared=True)
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('4be84d30-60ca-4bd3-8512-db5b36ce1378')
     def test_update_non_existent_subnetpool(self):
         non_exist_id = data_utils.rand_name('subnetpool')
         self.assertRaises(lib_exc.NotFound, self.client.update_subnetpool,
-                          non_exist_id, self._subnetpool_data)
+                          non_exist_id, name='foo-name')
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('e6cd6d87-6173-45dd-bf04-c18ea7ec7537')
     def test_update_subnetpool_not_modifiable_shared(self):
         # 'shared' attributes can be specified during creation.
         # But this attribute is not modifiable after creation.
-        pool_id = self._create_subnetpool(self.admin_client)
-        self.addCleanup(self.admin_client.delete_subnetpool, pool_id)
-        subnetpool_data = {'subnetpool': {'shared': True}}
+        created_subnetpool = self._create_subnetpool(is_admin=True)
+        pool_id = created_subnetpool['id']
         self.assertRaises(lib_exc.BadRequest, self.client.update_subnetpool,
-                          pool_id, subnetpool_data)
+                          pool_id, shared=True)
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('62f7c43b-bff1-4def-8bb7-4754b840aaad')
     def test_update_subnetpool_prefixes_shrink(self):
         # Shrink current subnetpool prefixes is not supported
-        pool_id = self._create_subnetpool(self.client)
-        subnetpool_data = {'subnetpool': {'prefixes': [self.smaller_prefix]}}
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
+        created_subnetpool = self._create_subnetpool()
         self.assertRaises(lib_exc.BadRequest,
                           self.client.update_subnetpool,
-                          pool_id, subnetpool_data)
+                          created_subnetpool['id'],
+                          prefixes=[self.smaller_prefix])
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('fc011824-153e-4469-97ad-9808eb88cae1')
     def test_create_subnet_different_pools_same_network(self):
         network = self.create_network(network_name='smoke-network')
-        subnetpool_data = {'prefixes': ['192.168.0.0/16'],
-                           'name': 'test-pool'}
-        pool_id = self._create_subnetpool(self.admin_client, subnetpool_data)
-        subnet = self.admin_client.create_subnet(
-                    network_id=network['id'],
-                    cidr='10.10.10.0/24',
-                    ip_version=4,
-                    gateway_ip=None)
-        subnet_id = subnet['subnet']['id']
-        self.addCleanup(self.admin_client.delete_subnet, subnet_id)
-        self.addCleanup(self.admin_client.delete_subnetpool, pool_id)
-        self.assertRaises(lib_exc.BadRequest,
-                          self.admin_client.create_subnet,
-                          network_id=network['id'],
+        created_subnetpool = self._create_subnetpool(
+            is_admin=True, prefixes=['192.168.0.0/16'])
+        subnet = self.create_subnet(
+            network, cidr=netaddr.IPNetwork('10.10.10.0/24'), ip_version=4,
+            gateway=None, client=self.admin_client)
+        # add the subnet created by admin to the cleanUp because the
+        # the base.py doesn't delete it using the admin client
+        self.addCleanup(self.admin_client.delete_subnet, subnet['id'])
+        self.assertRaises(lib_exc.BadRequest, self.create_subnet, network,
                           ip_version=4,
-                          subnetpool_id=pool_id)
+                          subnetpool_id=created_subnetpool['id'],
+                          client=self.admin_client)
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('9589e332-638e-476e-81bd-013d964aa3cb')
     @test.requires_ext(extension='address-scope', service='network')
     def test_create_subnetpool_associate_invalid_address_scope(self):
-        subnetpool_data = copy.deepcopy(self._subnetpool_data)
-        subnetpool_data['subnetpool']['address_scope_id'] = 'foo-addr-scope'
-        self.assertRaises(lib_exc.BadRequest, self.client.create_subnetpool,
-                          subnetpool_data)
+        self.assertRaises(lib_exc.BadRequest, self._create_subnetpool,
+                          address_scope_id='foo-addr-scope')
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('3b6c5942-485d-4964-a560-55608af020b5')
     @test.requires_ext(extension='address-scope', service='network')
     def test_create_subnetpool_associate_non_exist_address_scope(self):
-        subnetpool_data = copy.deepcopy(self._subnetpool_data)
-        non_exist_address_scope_id = str(uuid.uuid4())
-        subnetpool_data['subnetpool']['address_scope_id'] = (
-            non_exist_address_scope_id)
-        self.assertRaises(lib_exc.NotFound, self.client.create_subnetpool,
-                          subnetpool_data)
+        self.assertRaises(lib_exc.NotFound, self._create_subnetpool,
+                          address_scope_id=str(uuid.uuid4()))
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('2dfb4269-8657-485a-a053-b022e911456e')
@@ -169,15 +126,13 @@ class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
             name=data_utils.rand_name('smoke-address-scope'),
             ip_version=4)
         addr_scope_id = address_scope['id']
-        pool_id = self._create_subnetpool(
-            self.client, pool_values={'address_scope_id': addr_scope_id})
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        subnetpool_data = {'subnetpool': {'name': 'foo-subnetpool',
-                                          'prefixes': [u'10.11.12.13/24'],
-                                          'min_prefixlen': '29',
-                                          'address_scope_id': addr_scope_id}}
-        self.assertRaises(lib_exc.Conflict, self.client.create_subnetpool,
-                          subnetpool_data)
+        self._create_subnetpool(address_scope_id=addr_scope_id)
+        subnetpool_data = {'name': 'foo-subnetpool',
+                           'prefixes': [u'10.11.12.13/24'],
+                           'min_prefixlen': '29',
+                           'address_scope_id': addr_scope_id}
+        self.assertRaises(lib_exc.Conflict, self._create_subnetpool,
+                          **subnetpool_data)
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('83a19a13-5384-42e2-b579-43fc69c80914')
@@ -187,19 +142,15 @@ class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
             name=data_utils.rand_name('smoke-address-scope'),
             ip_version=4)
         addr_scope_id = address_scope['id']
-        pool_values = {'address_scope_id': addr_scope_id,
-                       'prefixes': [u'20.0.0.0/18', u'30.0.0.0/18']}
-
-        pool_id = self._create_subnetpool(
-            self.client, pool_values=pool_values)
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
+        self._create_subnetpool(prefixes=[u'20.0.0.0/18', u'30.0.0.0/18'],
+                                address_scope_id=addr_scope_id)
         prefixes = [u'40.0.0.0/18', u'50.0.0.0/18', u'30.0.0.0/12']
-        subnetpool_data = {'subnetpool': {'name': 'foo-subnetpool',
-                                          'prefixes': prefixes,
-                                          'min_prefixlen': '29',
-                                          'address_scope_id': addr_scope_id}}
-        self.assertRaises(lib_exc.Conflict, self.client.create_subnetpool,
-                          subnetpool_data)
+        subnetpool_data = {'name': 'foo-subnetpool',
+                           'prefixes': prefixes,
+                           'min_prefixlen': '29',
+                           'address_scope_id': addr_scope_id}
+        self.assertRaises(lib_exc.Conflict, self._create_subnetpool,
+                          **subnetpool_data)
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('f06d8e7b-908b-4e94-b570-8156be6a4bf1')
@@ -208,11 +159,8 @@ class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
         address_scope = self.create_address_scope(
             name=data_utils.rand_name('smoke-address-scope'), is_admin=True,
             ip_version=4)
-        address_scope_id = address_scope['id']
-        subnetpool_data = copy.deepcopy(self._subnetpool_data)
-        subnetpool_data['subnetpool']['address_scope_id'] = address_scope_id
-        self.assertRaises(lib_exc.NotFound, self.client.create_subnetpool,
-                          subnetpool_data)
+        self.assertRaises(lib_exc.NotFound, self._create_subnetpool,
+                          address_scope_id=address_scope['id'])
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('3396ec6c-cb80-4ebe-b897-84e904580bdf')
@@ -221,11 +169,8 @@ class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
         address_scope = self.create_address_scope(
             name=data_utils.rand_name('smoke-address-scope'), is_admin=True,
             shared=True, ip_version=4)
-        subnetpool_data = copy.deepcopy(self._subnetpool_data)
-        subnetpool_data['subnetpool']['address_scope_id'] = (
-            address_scope['id'])
-        self.assertRaises(lib_exc.BadRequest, self.client.create_subnetpool,
-                          subnetpool_data)
+        self.assertRaises(lib_exc.BadRequest, self._create_subnetpool,
+                          address_scope_id=address_scope['id'])
 
     @test.attr(type='smoke')
     @test.idempotent_id('6d3d9ad5-32d4-4d63-aa00-8c62f73e2881')
@@ -235,12 +180,10 @@ class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
             name=data_utils.rand_name('smoke-address-scope'), is_admin=True,
             ip_version=4)
         address_scope_id = address_scope['id']
-        pool_id = self._create_subnetpool(self.client)
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        subnetpool_data = {'subnetpool': {'address_scope_id':
-                                          address_scope_id}}
+        created_subbnetpool = self._create_subnetpool(self.client)
         self.assertRaises(lib_exc.NotFound, self.client.update_subnetpool,
-                          pool_id, subnetpool_data)
+                          created_subbnetpool['id'],
+                          address_scope_id=address_scope_id)
 
     def _test_update_subnetpool_prefix_intersect_helper(
             self, pool_1_prefixes, pool_2_prefixes, pool_1_updated_prefixes):
@@ -252,22 +195,15 @@ class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
         addr_scope_id = address_scope['id']
         pool_values = {'address_scope_id': addr_scope_id,
                        'prefixes': pool_1_prefixes}
-        pool_id_1 = self._create_subnetpool(self.client,
-                                            pool_values=pool_values)
-        self.addCleanup(self.client.delete_subnetpool, pool_id_1)
+        created_subnetpool_1 = self._create_subnetpool(**pool_values)
+        pool_id_1 = created_subnetpool_1['id']
         pool_values = {'address_scope_id': addr_scope_id,
                        'prefixes': pool_2_prefixes}
-        pool_id_2 = self._create_subnetpool(self.client,
-                                            pool_values=pool_values)
-
-        self.addCleanup(self.client.delete_subnetpool, pool_id_2)
-
+        self._create_subnetpool(**pool_values)
         # now update the pool_id_1 with the prefix intersecting with
         # pool_id_2
-        subnetpool_data = {'subnetpool': {'prefixes':
-                                          pool_1_updated_prefixes}}
         self.assertRaises(lib_exc.Conflict, self.client.update_subnetpool,
-                          pool_id_1, subnetpool_data)
+                          pool_id_1, prefixes=pool_1_updated_prefixes)
 
     @test.attr(type=['negative', 'smoke'])
     @test.idempotent_id('96006292-7214-40e0-a471-153fb76e6b31')
@@ -300,28 +236,24 @@ class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
         addr_scope_id = address_scope['id']
         pool_values = {'prefixes': [u'20.0.0.0/18', u'30.0.0.0/18']}
 
-        pool_id = self._create_subnetpool(
-            self.client, pool_values=pool_values)
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-
+        created_subnetpool = self._create_subnetpool(**pool_values)
+        pool_id = created_subnetpool['id']
         # associate the subnetpool to the address scope as an admin
-        subnetpool_data = {'subnetpool': {'address_scope_id':
-                                          addr_scope_id}}
-        self.admin_client.update_subnetpool(pool_id, subnetpool_data)
-        body = self.admin_client.get_subnetpool(pool_id)
+        self.admin_client.update_subnetpool(pool_id,
+                                            address_scope_id=addr_scope_id)
+        body = self.admin_client.show_subnetpool(pool_id)
         self.assertEqual(addr_scope_id,
                          body['subnetpool']['address_scope_id'])
 
         # updating the subnetpool prefix by the tenant user should fail
         # since the tenant is not the owner of address scope
         update_prefixes = [u'20.0.0.0/18', u'30.0.0.0/18', u'40.0.0.0/18']
-        subnetpool_data = {'subnetpool': {'prefixes': update_prefixes}}
         self.assertRaises(lib_exc.BadRequest, self.client.update_subnetpool,
-                          pool_id, subnetpool_data)
+                          pool_id, prefixes=update_prefixes)
 
         # admin can update the prefixes
-        self.admin_client.update_subnetpool(pool_id, subnetpool_data)
-        body = self.admin_client.get_subnetpool(pool_id)
+        self.admin_client.update_subnetpool(pool_id, prefixes=update_prefixes)
+        body = self.admin_client.show_subnetpool(pool_id)
         self.assertEqual(update_prefixes,
                          body['subnetpool']['prefixes'])
 
@@ -331,9 +263,7 @@ class SubnetPoolsNegativeTestJSON(base.BaseNetworkTest):
         address_scope = self.create_address_scope(
             name=data_utils.rand_name('smoke-address-scope'),
             ip_version=6)
-        pool_id = self._create_subnetpool(self.client)
-        self.addCleanup(self.client.delete_subnetpool, pool_id)
-        subnetpool_data = {'subnetpool': {'address_scope_id':
-                                          address_scope['id']}}
+        created_subnetpool = self._create_subnetpool()
         self.assertRaises(lib_exc.BadRequest, self.client.update_subnetpool,
-                          pool_id, subnetpool_data)
+                          created_subnetpool['id'],
+                          address_scope_id=address_scope['id'])
index 25400ca2a84d902167a8c34174bd3d84c6c6bd49..862afbee686909bcd5dcf5ab62ebba6971202a7a 100644 (file)
@@ -177,46 +177,6 @@ class NetworkClientJSON(service_client.ServiceClient):
                 return method_functors[index](name[prefix_len:])
         raise AttributeError(name)
 
-    # Subnetpool methods
-    def create_subnetpool(self, post_data):
-        body = self.serialize_list(post_data, "subnetpools", "subnetpool")
-        uri = self.get_uri("subnetpools")
-        resp, body = self.post(uri, body)
-        body = {'subnetpool': self.deserialize_list(body)}
-        self.expected_success(201, resp.status)
-        return service_client.ResponseBody(resp, body)
-
-    def get_subnetpool(self, id):
-        uri = self.get_uri("subnetpools")
-        subnetpool_uri = '%s/%s' % (uri, id)
-        resp, body = self.get(subnetpool_uri)
-        body = {'subnetpool': self.deserialize_list(body)}
-        self.expected_success(200, resp.status)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_subnetpool(self, id):
-        uri = self.get_uri("subnetpools")
-        subnetpool_uri = '%s/%s' % (uri, id)
-        resp, body = self.delete(subnetpool_uri)
-        self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
-
-    def list_subnetpools(self):
-        uri = self.get_uri("subnetpools")
-        resp, body = self.get(uri)
-        body = {'subnetpools': self.deserialize_list(body)}
-        self.expected_success(200, resp.status)
-        return service_client.ResponseBody(resp, body)
-
-    def update_subnetpool(self, id, post_data):
-        body = self.serialize_list(post_data, "subnetpools", "subnetpool")
-        uri = self.get_uri("subnetpools")
-        subnetpool_uri = '%s/%s' % (uri, id)
-        resp, body = self.put(subnetpool_uri, body)
-        body = {'subnetpool': self.deserialize_list(body)}
-        self.expected_success(200, resp.status)
-        return service_client.ResponseBody(resp, body)
-
     # Common methods that are hard to automate
     def create_bulk_network(self, names, shared=False):
         network_list = [{'name': name, 'shared': shared} for name in names]