]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Add address scope API tests
authorNuman Siddique <nusiddiq@redhat.com>
Mon, 6 Jul 2015 18:49:03 +0000 (00:19 +0530)
committerNuman Siddique <nusiddiq@redhat.com>
Wed, 22 Jul 2015 15:18:16 +0000 (20:48 +0530)
This patch adds the address scope api tests and
also returns the address scope resource attr map
in the get_extended_resources() function which was
missed in the previous patch

Co-Authored-By: vikram.choudhary <vikram.choudhary@huawei.com>
Co-Authored-By: Ryan Tidwell <rktidwell85@gmail.com>
Change-Id: I819f08dfb78346f92ba73e11daa7294518e7452a
Partially-implements:  blueprint address-scopes

neutron/extensions/address_scope.py
neutron/tests/api/base.py
neutron/tests/api/test_address_scopes.py [new file with mode: 0644]
neutron/tests/api/test_address_scopes_negative.py [new file with mode: 0644]

index eb323796ebd54fc65361862648ecdf7124dd32ec..e63ac7ff90edd2c76ab2e3d164e78c559d40a1fb 100644 (file)
@@ -106,7 +106,10 @@ class Address_scope(extensions.ExtensionDescriptor):
         return [ex]
 
     def get_extended_resources(self, version):
-        return {}
+        if version == "2.0":
+            return RESOURCE_ATTRIBUTE_MAP
+        else:
+            return {}
 
 
 @six.add_metaclass(abc.ABCMeta)
index bf71a56c34e4a22f1801131f4d71ad72f213a287..2790240eb5fcdce17ab6ac4218c97d810f84a49a 100644 (file)
@@ -89,6 +89,8 @@ class BaseNetworkTest(neutron.tests.tempest.test.BaseTestCase):
         cls.fw_policies = []
         cls.ipsecpolicies = []
         cls.ethertype = "IPv" + str(cls._ip_version)
+        cls.address_scopes = []
+        cls.admin_address_scopes = []
 
     @classmethod
     def resource_cleanup(cls):
@@ -176,6 +178,15 @@ class BaseNetworkTest(neutron.tests.tempest.test.BaseTestCase):
                 cls._try_delete_resource(cls.admin_client.delete_network,
                                          network['id'])
 
+            for address_scope in cls.address_scopes:
+                cls._try_delete_resource(cls.client.delete_address_scope,
+                                         address_scope['id'])
+
+            for address_scope in cls.admin_address_scopes:
+                cls._try_delete_resource(
+                    cls.admin_client.delete_address_scope,
+                    address_scope['id'])
+
             cls.clear_isolated_creds()
         super(BaseNetworkTest, cls).resource_cleanup()
 
@@ -440,6 +451,16 @@ class BaseNetworkTest(neutron.tests.tempest.test.BaseTestCase):
         cls.ipsecpolicies.append(ipsecpolicy)
         return ipsecpolicy
 
+    @classmethod
+    def create_address_scope(cls, name, is_admin=False, **kwargs):
+        if is_admin:
+            body = cls.admin_client.create_address_scope(name=name, **kwargs)
+            cls.admin_address_scopes.append(body['address_scope'])
+        else:
+            body = cls.client.create_address_scope(name=name, **kwargs)
+            cls.address_scopes.append(body['address_scope'])
+        return body['address_scope']
+
 
 class BaseAdminNetworkTest(BaseNetworkTest):
 
diff --git a/neutron/tests/api/test_address_scopes.py b/neutron/tests/api/test_address_scopes.py
new file mode 100644 (file)
index 0000000..a80319b
--- /dev/null
@@ -0,0 +1,121 @@
+# Copyright (c) 2015 Red Hat, 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 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.tempest import config
+from neutron.tests.tempest import test
+
+CONF = config.CONF
+ADDRESS_SCOPE_NAME = 'smoke-address-scope'
+
+
+class AddressScopeTestBase(base.BaseNetworkTest):
+
+    @classmethod
+    def resource_setup(cls):
+        super(AddressScopeTestBase, cls).resource_setup()
+        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_address_scope(self, is_admin=False, **kwargs):
+        name = data_utils.rand_name(ADDRESS_SCOPE_NAME)
+        return self.create_address_scope(name=name, is_admin=is_admin,
+                                         **kwargs)
+
+    def _test_update_address_scope_helper(self, is_admin=False, shared=None):
+        address_scope = self._create_address_scope(is_admin=is_admin)
+
+        if is_admin:
+            client = self.admin_client
+        else:
+            client = self.client
+
+        kwargs = {'name': 'new_name'}
+        if shared is not None:
+            kwargs['shared'] = shared
+
+        client.update_address_scope(address_scope['id'], **kwargs)
+        body = client.show_address_scope(address_scope['id'])
+        address_scope = body['address_scope']
+        self.assertEqual('new_name', address_scope['name'])
+        return address_scope
+
+
+class AddressScopeTest(AddressScopeTestBase):
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('045f9294-8b1a-4848-b6a8-edf1b41e9d06')
+    def test_tenant_create_list_address_scope(self):
+        address_scope = self._create_address_scope()
+        body = self.client.list_address_scopes()
+        returned_address_scopes = body['address_scopes']
+        self.assertIn(address_scope['id'],
+                      [a_s['id'] for a_s in returned_address_scopes],
+                      "Created address scope id should be in the list")
+        self.assertIn(address_scope['name'],
+                      [a_s['name'] for a_s in returned_address_scopes],
+                      "Created address scope name should be in the list")
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('85e0326b-4c75-4b92-bd6e-7c7de6aaf05c')
+    def test_show_address_scope(self):
+        address_scope = self._create_address_scope()
+        body = self.client.show_address_scope(
+            address_scope['id'])
+        returned_address_scope = body['address_scope']
+        self.assertEqual(address_scope['id'], returned_address_scope['id'])
+        self.assertEqual(address_scope['name'],
+                         returned_address_scope['name'])
+        self.assertFalse(returned_address_scope['shared'])
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('85a259b2-ace6-4e32-9657-a9a392b452aa')
+    def test_tenant_update_address_scope(self):
+        self._test_update_address_scope_helper()
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('22b3b600-72a8-4b60-bc94-0f29dd6271df')
+    def test_delete_address_scope(self):
+        address_scope = self._create_address_scope()
+        self.client.delete_address_scope(address_scope['id'])
+        self.assertRaises(lib_exc.NotFound, self.client.show_address_scope,
+                          address_scope['id'])
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('5a06c287-8036-4d04-9d78-def8e06d43df')
+    def test_admin_create_shared_address_scope(self):
+        address_scope = self._create_address_scope(is_admin=True, shared=True)
+        body = self.admin_client.show_address_scope(
+            address_scope['id'])
+        returned_address_scope = body['address_scope']
+        self.assertEqual(address_scope['name'],
+                         returned_address_scope['name'])
+        self.assertTrue(returned_address_scope['shared'])
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('e9e1ccdd-9ccd-4076-9503-71820529508b')
+    def test_admin_update_shared_address_scope(self):
+        address_scope = self._test_update_address_scope_helper(is_admin=True,
+                                                               shared=True)
+        self.assertTrue(address_scope['shared'])
diff --git a/neutron/tests/api/test_address_scopes_negative.py b/neutron/tests/api/test_address_scopes_negative.py
new file mode 100644 (file)
index 0000000..872650b
--- /dev/null
@@ -0,0 +1,77 @@
+# Copyright (c) 2015 Red Hat, 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 tempest_lib.common.utils import data_utils
+from tempest_lib import exceptions as lib_exc
+
+from neutron.tests.api import test_address_scopes
+from neutron.tests.tempest import test
+
+
+class AddressScopeTestNegative(test_address_scopes.AddressScopeTestBase):
+
+    @test.attr(type=['negative', 'smoke'])
+    @test.idempotent_id('9c92ec34-0c50-4104-aa47-9ce98d5088df')
+    def test_tenant_create_shared_address_scope(self):
+        self.assertRaises(lib_exc.Forbidden, self._create_address_scope,
+                          shared=True)
+
+    @test.attr(type=['negative', 'smoke'])
+    @test.idempotent_id('a857b61e-bf53-4fab-b21a-b0daaf81b5bd')
+    def test_tenant_update_address_scope_shared_true(self):
+        self.assertRaises(lib_exc.Forbidden,
+                          self._test_update_address_scope_helper, shared=True)
+
+    @test.attr(type=['negative', 'smoke'])
+    @test.idempotent_id('a859ef2f-9c76-4e2e-ba0f-e0339a489e8c')
+    def test_tenant_update_address_scope_shared_false(self):
+        self.assertRaises(lib_exc.Forbidden,
+                          self._test_update_address_scope_helper, shared=False)
+
+    @test.attr(type=['negative', 'smoke'])
+    @test.idempotent_id('9b6dd7ad-cabb-4f55-bd5e-e61176ef41f6')
+    def test_get_non_existent_address_scope(self):
+        non_exist_id = data_utils.rand_name('address_scope')
+        self.assertRaises(lib_exc.NotFound, self.client.show_address_scope,
+                          non_exist_id)
+
+    @test.attr(type=['negative', 'smoke'])
+    @test.idempotent_id('ef213552-f2da-487d-bf4a-e1705d115ff1')
+    def test_tenant_get_not_shared_admin_address_scope(self):
+        address_scope = self._create_address_scope(is_admin=True)
+        # None-shared admin address scope cannot be retrieved by tenant user.
+        self.assertRaises(lib_exc.NotFound, self.client.show_address_scope,
+                          address_scope['id'])
+
+    @test.attr(type=['negative', 'smoke'])
+    @test.idempotent_id('5c25dc6a-1e92-467a-9cc7-cda74b6003db')
+    def test_delete_non_existent_address_scope(self):
+        non_exist_id = data_utils.rand_name('address_scope')
+        self.assertRaises(lib_exc.NotFound, self.client.delete_address_scope,
+                          non_exist_id)
+
+    @test.attr(type=['negative', 'smoke'])
+    @test.idempotent_id('47c25dc5-e886-4a84-88c3-ac5031969661')
+    def test_update_non_existent_address_scope(self):
+        non_exist_id = data_utils.rand_name('address_scope')
+        self.assertRaises(lib_exc.NotFound, self.client.update_address_scope,
+                          non_exist_id, name='foo-name')
+
+    @test.attr(type=['negative', 'smoke'])
+    @test.idempotent_id('702d0515-82cb-4207-b0d9-703336e54665')
+    def test_update_shared_address_scope_to_unshare(self):
+        address_scope = self._create_address_scope(is_admin=True, shared=True)
+        self.assertRaises(lib_exc.BadRequest,
+                          self.admin_client.update_address_scope,
+                          address_scope['id'], name='new-name', shared=False)