From 131799e6314159d0228a8ab21d8aeda9a731053e Mon Sep 17 00:00:00 2001 From: Ken'ichi Ohmichi Date: Mon, 6 Jun 2016 12:06:41 -0700 Subject: [PATCH] Define routers_client as library interface Current routers_client has good interfaces, so we can define it as library interface now. Change-Id: I37f805065e52c7351279c4503719817c2271a13e --- ...rs-client-as-library-25a363379da351f6.yaml | 6 + tempest/clients.py | 2 +- tempest/cmd/account_generator.py | 2 +- tempest/cmd/javelin.py | 2 +- tempest/hacking/ignored_list_T110.txt | 1 - .../services/network}/routers_client.py | 0 tempest/services/network/json/__init__.py | 0 tempest/tests/common/test_dynamic_creds.py | 12 +- .../lib}/services/network/__init__.py | 0 .../services/network/test_routers_client.py | 109 ++++++++++++++++++ 10 files changed, 124 insertions(+), 10 deletions(-) create mode 100644 releasenotes/notes/routers-client-as-library-25a363379da351f6.yaml rename tempest/{services/network/json => lib/services/network}/routers_client.py (100%) delete mode 100644 tempest/services/network/json/__init__.py rename tempest/{ => tests/lib}/services/network/__init__.py (100%) create mode 100644 tempest/tests/lib/services/network/test_routers_client.py diff --git a/releasenotes/notes/routers-client-as-library-25a363379da351f6.yaml b/releasenotes/notes/routers-client-as-library-25a363379da351f6.yaml new file mode 100644 index 0000000000..35cf2c4874 --- /dev/null +++ b/releasenotes/notes/routers-client-as-library-25a363379da351f6.yaml @@ -0,0 +1,6 @@ +--- +features: + - Define routers_client as stable library interface. + The routers_client module is defined as library interface, + so the other projects can use the module as stable library + without any maintenance changes. diff --git a/tempest/clients.py b/tempest/clients.py index 19f1a2a4fa..bc56710614 100644 --- a/tempest/clients.py +++ b/tempest/clients.py @@ -88,6 +88,7 @@ from tempest.lib.services.network.networks_client import NetworksClient from tempest.lib.services.network.ports_client import PortsClient from tempest.lib.services.network.quotas_client import QuotasClient \ as NetworkQuotasClient +from tempest.lib.services.network.routers_client import RoutersClient from tempest.lib.services.network.security_group_rules_client import \ SecurityGroupRulesClient from tempest.lib.services.network.security_groups_client import \ @@ -133,7 +134,6 @@ from tempest.services.identity.v3.json.users_clients import \ from tempest.services.image.v1.json.images_client import ImagesClient from tempest.services.image.v2.json.images_client import \ ImagesClient as ImagesV2Client -from tempest.services.network.json.routers_client import RoutersClient from tempest.services.object_storage.account_client import AccountClient from tempest.services.object_storage.container_client import ContainerClient from tempest.services.object_storage.object_client import ObjectClient diff --git a/tempest/cmd/account_generator.py b/tempest/cmd/account_generator.py index 5fab961647..94a646a651 100755 --- a/tempest/cmd/account_generator.py +++ b/tempest/cmd/account_generator.py @@ -98,12 +98,12 @@ import tempest.lib.auth from tempest.lib.common.utils import data_utils import tempest.lib.exceptions from tempest.lib.services.network import networks_client +from tempest.lib.services.network import routers_client from tempest.lib.services.network import subnets_client from tempest.services.identity.v2.json import identity_client from tempest.services.identity.v2.json import roles_client from tempest.services.identity.v2.json import tenants_client from tempest.services.identity.v2.json import users_client -from tempest.services.network.json import routers_client LOG = None CONF = config.CONF diff --git a/tempest/cmd/javelin.py b/tempest/cmd/javelin.py index f2a69c7586..6a65fcbf71 100755 --- a/tempest/cmd/javelin.py +++ b/tempest/cmd/javelin.py @@ -128,13 +128,13 @@ from tempest.lib.services.compute import security_groups_client from tempest.lib.services.compute import servers_client from tempest.lib.services.network import networks_client from tempest.lib.services.network import ports_client +from tempest.lib.services.network import routers_client from tempest.lib.services.network import subnets_client from tempest.services.identity.v2.json import identity_client from tempest.services.identity.v2.json import roles_client from tempest.services.identity.v2.json import tenants_client from tempest.services.identity.v2.json import users_client from tempest.services.image.v2.json import images_client -from tempest.services.network.json import routers_client from tempest.services.object_storage import container_client from tempest.services.object_storage import object_client from tempest.services.volume.v1.json import volumes_client diff --git a/tempest/hacking/ignored_list_T110.txt b/tempest/hacking/ignored_list_T110.txt index 4ef9012bfc..be875ee07e 100644 --- a/tempest/hacking/ignored_list_T110.txt +++ b/tempest/hacking/ignored_list_T110.txt @@ -2,4 +2,3 @@ ./tempest/services/volume/base/base_qos_client.py ./tempest/services/volume/base/base_backups_client.py ./tempest/services/baremetal/base.py -./tempest/services/network/json/routers_client.py diff --git a/tempest/services/network/json/routers_client.py b/tempest/lib/services/network/routers_client.py similarity index 100% rename from tempest/services/network/json/routers_client.py rename to tempest/lib/services/network/routers_client.py diff --git a/tempest/services/network/json/__init__.py b/tempest/services/network/json/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tempest/tests/common/test_dynamic_creds.py b/tempest/tests/common/test_dynamic_creds.py index f025418c85..a7a3a22ba3 100644 --- a/tempest/tests/common/test_dynamic_creds.py +++ b/tempest/tests/common/test_dynamic_creds.py @@ -23,6 +23,7 @@ from tempest import exceptions from tempest.lib.common import rest_client from tempest.lib.services.identity.v2 import token_client as v2_token_client from tempest.lib.services.identity.v3 import token_client as v3_token_client +from tempest.lib.services.network import routers_client from tempest.services.identity.v2.json import identity_client as v2_iden_client from tempest.services.identity.v2.json import roles_client as v2_roles_client from tempest.services.identity.v2.json import tenants_client as \ @@ -34,7 +35,6 @@ from tempest.services.identity.v3.json import projects_client as \ v3_projects_client from tempest.services.identity.v3.json import roles_client as v3_roles_client from tempest.services.identity.v3.json import users_clients as v3_users_client -from tempest.services.network.json import routers_client from tempest.tests import base from tempest.tests import fake_config from tempest.tests.lib import fake_http @@ -333,7 +333,7 @@ class TestDynamicCredentialProvider(base.TestCase): self._mock_subnet_create(creds, '1234', 'fake_subnet') self._mock_router_create('1234', 'fake_router') router_interface_mock = self.patch( - 'tempest.services.network.json.routers_client.RoutersClient.' + 'tempest.lib.services.network.routers_client.RoutersClient.' 'add_router_interface') primary_creds = creds.get_primary_creds() router_interface_mock.assert_called_once_with('1234', subnet_id='1234') @@ -365,7 +365,7 @@ class TestDynamicCredentialProvider(base.TestCase): self._mock_subnet_create(creds, '1234', 'fake_subnet') self._mock_router_create('1234', 'fake_router') router_interface_mock = self.patch( - 'tempest.services.network.json.routers_client.RoutersClient.' + 'tempest.lib.services.network.routers_client.RoutersClient.' 'add_router_interface') creds.get_primary_creds() router_interface_mock.assert_called_once_with('1234', subnet_id='1234') @@ -397,7 +397,7 @@ class TestDynamicCredentialProvider(base.TestCase): router = mock.patch.object(creds.routers_admin_client, 'delete_router') router_mock = router.start() remove_router_interface_mock = self.patch( - 'tempest.services.network.json.routers_client.RoutersClient.' + 'tempest.lib.services.network.routers_client.RoutersClient.' 'remove_router_interface') return_values = ({'status': 200}, {'ports': []}) port_list_mock = mock.patch.object(creds.ports_admin_client, @@ -468,7 +468,7 @@ class TestDynamicCredentialProvider(base.TestCase): self._mock_subnet_create(creds, '1234', 'fake_alt_subnet') self._mock_router_create('1234', 'fake_alt_router') router_interface_mock = self.patch( - 'tempest.services.network.json.routers_client.RoutersClient.' + 'tempest.lib.services.network.routers_client.RoutersClient.' 'add_router_interface') alt_creds = creds.get_alt_creds() router_interface_mock.assert_called_once_with('1234', subnet_id='1234') @@ -492,7 +492,7 @@ class TestDynamicCredentialProvider(base.TestCase): self._mock_subnet_create(creds, '1234', 'fake_admin_subnet') self._mock_router_create('1234', 'fake_admin_router') router_interface_mock = self.patch( - 'tempest.services.network.json.routers_client.RoutersClient.' + 'tempest.lib.services.network.routers_client.RoutersClient.' 'add_router_interface') self._mock_list_roles('123456', 'admin') admin_creds = creds.get_admin_creds() diff --git a/tempest/services/network/__init__.py b/tempest/tests/lib/services/network/__init__.py similarity index 100% rename from tempest/services/network/__init__.py rename to tempest/tests/lib/services/network/__init__.py diff --git a/tempest/tests/lib/services/network/test_routers_client.py b/tempest/tests/lib/services/network/test_routers_client.py new file mode 100644 index 0000000000..2fa599343e --- /dev/null +++ b/tempest/tests/lib/services/network/test_routers_client.py @@ -0,0 +1,109 @@ +# Copyright 2016 NEC Corporation. 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. + +from tempest.lib.services.network import routers_client +from tempest.tests.lib import fake_auth_provider +from tempest.tests.lib.services import base + + +class TestRoutersClient(base.BaseServiceTest): + FAKE_CREATE_ROUTER = { + "router": { + "name": u'\u2740(*\xb4\u25e1`*)\u2740', + "external_gateway_info": { + "network_id": "8ca37218-28ff-41cb-9b10-039601ea7e6b", + "enable_snat": True, + "external_fixed_ips": [ + { + "subnet_id": "255.255.255.0", + "ip": "192.168.10.1" + } + ] + }, + "admin_state_up": True, + "id": "8604a0de-7f6b-409a-a47c-a1cc7bc77b2e" + } + } + + FAKE_UPDATE_ROUTER = { + "router": { + "name": u'\u2740(*\xb4\u25e1`*)\u2740', + "external_gateway_info": { + "network_id": "8ca37218-28ff-41cb-9b10-039601ea7e6b", + "enable_snat": True, + "external_fixed_ips": [ + { + "subnet_id": "255.255.255.0", + "ip": "192.168.10.1" + } + ] + }, + "admin_state_up": False, + "id": "8604a0de-7f6b-409a-a47c-a1cc7bc77b2e" + } + } + + def setUp(self): + super(TestRoutersClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.client = routers_client.RoutersClient(fake_auth, + 'network', 'regionOne') + + def _test_list_routers(self, bytes_body=False): + self.check_service_client_function( + self.client.list_routers, + 'tempest.lib.common.rest_client.RestClient.get', + {"routers": []}, + bytes_body) + + def _test_create_router(self, bytes_body=False): + self.check_service_client_function( + self.client.create_router, + 'tempest.lib.common.rest_client.RestClient.post', + self.FAKE_CREATE_ROUTER, + bytes_body, + name="another_router", admin_state_up="true", status=201) + + def _test_update_router(self, bytes_body=False): + self.check_service_client_function( + self.client.update_router, + 'tempest.lib.common.rest_client.RestClient.put', + self.FAKE_UPDATE_ROUTER, + bytes_body, + router_id="8604a0de-7f6b-409a-a47c-a1cc7bc77b2e", + admin_state_up=False) + + def test_list_routers_with_str_body(self): + self._test_list_routers() + + def test_list_routers_with_bytes_body(self): + self._test_list_routers(bytes_body=True) + + def test_create_router_with_str_body(self): + self._test_create_router() + + def test_create_router_with_bytes_body(self): + self._test_create_router(bytes_body=True) + + def test_delete_router(self): + self.check_service_client_function( + self.client.delete_router, + 'tempest.lib.common.rest_client.RestClient.delete', + {}, router_id="1", status=204) + + def test_update_router_with_str_body(self): + self._test_update_router() + + def test_update_router_with_bytes_body(self): + self._test_update_router(bytes_body=True)