From 3e758ee22bdaeb99cc6430eefd96e15ea07fca45 Mon Sep 17 00:00:00 2001 From: ghanshyam Date: Thu, 7 Apr 2016 09:29:02 +0900 Subject: [PATCH] Move keypair client to lib interfaces For microversion testing framework, keypair client was kept in tempest and modified for 2.2 and 2.10 microversion tests. Now microversion stuff is all merged and we can move modified keypair clients along with its schema files to lib folder. Note- There is no backward compatibility changes in this interface. Change-Id: Id8012ae123997142f645bcca8f250659fe73bb8e --- .../api_schema/response/compute/__init__.py | 0 .../response/compute/v2_1/__init__.py | 0 .../response/compute/v2_1/keypairs.py | 107 ------------------ .../response/compute/v2_2/__init__.py | 0 tempest/clients.py | 2 +- .../response/compute/v2_2}/__init__.py | 0 .../response/compute/v2_2/keypairs.py | 2 +- .../lib/services/compute/keypairs_client.py | 32 ++++-- tempest/services/compute/__init__.py | 0 tempest/services/compute/json/__init__.py | 0 .../services/compute/json/keypairs_client.py | 65 ----------- tempest/tests/services/compute/base.py | 43 ------- .../services/compute/test_keypairs_client.py | 94 --------------- 13 files changed, 27 insertions(+), 318 deletions(-) delete mode 100644 tempest/api_schema/response/compute/__init__.py delete mode 100644 tempest/api_schema/response/compute/v2_1/__init__.py delete mode 100644 tempest/api_schema/response/compute/v2_1/keypairs.py delete mode 100644 tempest/api_schema/response/compute/v2_2/__init__.py rename tempest/{api_schema/response => lib/api_schema/response/compute/v2_2}/__init__.py (100%) rename tempest/{ => lib}/api_schema/response/compute/v2_2/keypairs.py (95%) delete mode 100644 tempest/services/compute/__init__.py delete mode 100644 tempest/services/compute/json/__init__.py delete mode 100644 tempest/services/compute/json/keypairs_client.py delete mode 100644 tempest/tests/services/compute/base.py delete mode 100644 tempest/tests/services/compute/test_keypairs_client.py diff --git a/tempest/api_schema/response/compute/__init__.py b/tempest/api_schema/response/compute/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tempest/api_schema/response/compute/v2_1/__init__.py b/tempest/api_schema/response/compute/v2_1/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tempest/api_schema/response/compute/v2_1/keypairs.py b/tempest/api_schema/response/compute/v2_1/keypairs.py deleted file mode 100644 index 9c04c79b49..0000000000 --- a/tempest/api_schema/response/compute/v2_1/keypairs.py +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright 2014 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. - -get_keypair = { - 'status_code': [200], - 'response_body': { - 'type': 'object', - 'properties': { - 'keypair': { - 'type': 'object', - 'properties': { - 'public_key': {'type': 'string'}, - 'name': {'type': 'string'}, - 'fingerprint': {'type': 'string'}, - 'user_id': {'type': 'string'}, - 'deleted': {'type': 'boolean'}, - 'created_at': {'type': 'string'}, - 'updated_at': {'type': ['string', 'null']}, - 'deleted_at': {'type': ['string', 'null']}, - 'id': {'type': 'integer'} - - }, - 'additionalProperties': False, - # When we run the get keypair API, response body includes - # all the above mentioned attributes. - # But in Nova API sample file, response body includes only - # 'public_key', 'name' & 'fingerprint'. So only 'public_key', - # 'name' & 'fingerprint' are defined as 'required'. - 'required': ['public_key', 'name', 'fingerprint'] - } - }, - 'additionalProperties': False, - 'required': ['keypair'] - } -} - -create_keypair = { - 'status_code': [200], - 'response_body': { - 'type': 'object', - 'properties': { - 'keypair': { - 'type': 'object', - 'properties': { - 'fingerprint': {'type': 'string'}, - 'name': {'type': 'string'}, - 'public_key': {'type': 'string'}, - 'user_id': {'type': 'string'}, - 'private_key': {'type': 'string'} - }, - 'additionalProperties': False, - # When create keypair API is being called with 'Public key' - # (Importing keypair) then, response body does not contain - # 'private_key' So it is not defined as 'required' - 'required': ['fingerprint', 'name', 'public_key', 'user_id'] - } - }, - 'additionalProperties': False, - 'required': ['keypair'] - } -} - -delete_keypair = { - 'status_code': [202], -} - -list_keypairs = { - 'status_code': [200], - 'response_body': { - 'type': 'object', - 'properties': { - 'keypairs': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'keypair': { - 'type': 'object', - 'properties': { - 'public_key': {'type': 'string'}, - 'name': {'type': 'string'}, - 'fingerprint': {'type': 'string'} - }, - 'additionalProperties': False, - 'required': ['public_key', 'name', 'fingerprint'] - } - }, - 'additionalProperties': False, - 'required': ['keypair'] - } - } - }, - 'additionalProperties': False, - 'required': ['keypairs'] - } -} diff --git a/tempest/api_schema/response/compute/v2_2/__init__.py b/tempest/api_schema/response/compute/v2_2/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tempest/clients.py b/tempest/clients.py index fc0cc896e3..2a084d5def 100644 --- a/tempest/clients.py +++ b/tempest/clients.py @@ -46,6 +46,7 @@ from tempest.lib.services.compute.images_client import ImagesClient \ from tempest.lib.services.compute.instance_usage_audit_log_client import \ InstanceUsagesAuditLogClient from tempest.lib.services.compute.interfaces_client import InterfacesClient +from tempest.lib.services.compute.keypairs_client import KeyPairsClient from tempest.lib.services.compute.limits_client import LimitsClient from tempest.lib.services.compute.migrations_client import MigrationsClient from tempest.lib.services.compute.networks_client import NetworksClient \ @@ -96,7 +97,6 @@ from tempest.lib.services.network.subnets_client import SubnetsClient from tempest import manager from tempest.services.baremetal.v1.json.baremetal_client import \ BaremetalClient -from tempest.services.compute.json.keypairs_client import KeyPairsClient from tempest.services.data_processing.v1_1.data_processing_client import \ DataProcessingClient from tempest.services.database.json.flavors_client import \ diff --git a/tempest/api_schema/response/__init__.py b/tempest/lib/api_schema/response/compute/v2_2/__init__.py similarity index 100% rename from tempest/api_schema/response/__init__.py rename to tempest/lib/api_schema/response/compute/v2_2/__init__.py diff --git a/tempest/api_schema/response/compute/v2_2/keypairs.py b/tempest/lib/api_schema/response/compute/v2_2/keypairs.py similarity index 95% rename from tempest/api_schema/response/compute/v2_2/keypairs.py rename to tempest/lib/api_schema/response/compute/v2_2/keypairs.py index 5d8d24d3e4..0bb7771c97 100644 --- a/tempest/api_schema/response/compute/v2_2/keypairs.py +++ b/tempest/lib/api_schema/response/compute/v2_2/keypairs.py @@ -14,7 +14,7 @@ import copy -from tempest.api_schema.response.compute.v2_1 import keypairs +from tempest.lib.api_schema.response.compute.v2_1 import keypairs get_keypair = copy.deepcopy(keypairs.get_keypair) get_keypair['response_body']['properties']['keypair'][ diff --git a/tempest/lib/services/compute/keypairs_client.py b/tempest/lib/services/compute/keypairs_client.py index 0361b9daba..7b8e6b2b3a 100644 --- a/tempest/lib/services/compute/keypairs_client.py +++ b/tempest/lib/services/compute/keypairs_client.py @@ -14,23 +14,36 @@ # under the License. from oslo_serialization import jsonutils as json +from six.moves.urllib import parse as urllib -from tempest.lib.api_schema.response.compute.v2_1 import keypairs as schema +from tempest.lib.api_schema.response.compute.v2_1 import keypairs as schemav21 +from tempest.lib.api_schema.response.compute.v2_2 import keypairs as schemav22 from tempest.lib.common import rest_client from tempest.lib.services.compute import base_compute_client class KeyPairsClient(base_compute_client.BaseComputeClient): - def list_keypairs(self): - resp, body = self.get("os-keypairs") + schema_versions_info = [{'min': None, 'max': '2.1', 'schema': schemav21}, + {'min': '2.2', 'max': None, 'schema': schemav22}] + + def list_keypairs(self, **params): + url = 'os-keypairs' + if params: + url += '?%s' % urllib.urlencode(params) + resp, body = self.get(url) body = json.loads(body) + schema = self.get_schema(self.schema_versions_info) self.validate_response(schema.list_keypairs, resp, body) return rest_client.ResponseBody(resp, body) - def show_keypair(self, keypair_name): - resp, body = self.get("os-keypairs/%s" % keypair_name) + def show_keypair(self, keypair_name, **params): + url = "os-keypairs/%s" % keypair_name + if params: + url += '?%s' % urllib.urlencode(params) + resp, body = self.get(url) body = json.loads(body) + schema = self.get_schema(self.schema_versions_info) self.validate_response(schema.get_keypair, resp, body) return rest_client.ResponseBody(resp, body) @@ -43,10 +56,15 @@ class KeyPairsClient(base_compute_client.BaseComputeClient): post_body = json.dumps({'keypair': kwargs}) resp, body = self.post("os-keypairs", body=post_body) body = json.loads(body) + schema = self.get_schema(self.schema_versions_info) self.validate_response(schema.create_keypair, resp, body) return rest_client.ResponseBody(resp, body) - def delete_keypair(self, keypair_name): - resp, body = self.delete("os-keypairs/%s" % keypair_name) + def delete_keypair(self, keypair_name, **params): + url = "os-keypairs/%s" % keypair_name + if params: + url += '?%s' % urllib.urlencode(params) + resp, body = self.delete(url) + schema = self.get_schema(self.schema_versions_info) self.validate_response(schema.delete_keypair, resp, body) return rest_client.ResponseBody(resp, body) diff --git a/tempest/services/compute/__init__.py b/tempest/services/compute/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tempest/services/compute/json/__init__.py b/tempest/services/compute/json/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tempest/services/compute/json/keypairs_client.py b/tempest/services/compute/json/keypairs_client.py deleted file mode 100644 index fcb4f2ac15..0000000000 --- a/tempest/services/compute/json/keypairs_client.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2012 OpenStack Foundation -# 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 oslo_serialization import jsonutils as json -from six.moves.urllib import parse as urllib - -from tempest.api_schema.response.compute.v2_1 import keypairs as schemav21 -from tempest.api_schema.response.compute.v2_2 import keypairs as schemav22 -from tempest.lib.common import rest_client -from tempest.lib.services.compute import base_compute_client - - -class KeyPairsClient(base_compute_client.BaseComputeClient): - - schema_versions_info = [{'min': None, 'max': '2.1', 'schema': schemav21}, - {'min': '2.2', 'max': None, 'schema': schemav22}] - - def list_keypairs(self, **params): - url = 'os-keypairs' - if params: - url += '?%s' % urllib.urlencode(params) - resp, body = self.get(url) - body = json.loads(body) - schema = self.get_schema(self.schema_versions_info) - self.validate_response(schema.list_keypairs, resp, body) - return rest_client.ResponseBody(resp, body) - - def show_keypair(self, keypair_name, **params): - url = "os-keypairs/%s" % keypair_name - if params: - url += '?%s' % urllib.urlencode(params) - resp, body = self.get(url) - body = json.loads(body) - schema = self.get_schema(self.schema_versions_info) - self.validate_response(schema.get_keypair, resp, body) - return rest_client.ResponseBody(resp, body) - - def create_keypair(self, **kwargs): - post_body = json.dumps({'keypair': kwargs}) - resp, body = self.post("os-keypairs", body=post_body) - body = json.loads(body) - schema = self.get_schema(self.schema_versions_info) - self.validate_response(schema.create_keypair, resp, body) - return rest_client.ResponseBody(resp, body) - - def delete_keypair(self, keypair_name, **params): - url = "os-keypairs/%s" % keypair_name - if params: - url += '?%s' % urllib.urlencode(params) - resp, body = self.delete(url) - schema = self.get_schema(self.schema_versions_info) - self.validate_response(schema.delete_keypair, resp, body) - return rest_client.ResponseBody(resp, body) diff --git a/tempest/tests/services/compute/base.py b/tempest/tests/services/compute/base.py deleted file mode 100644 index a35a87cc9b..0000000000 --- a/tempest/tests/services/compute/base.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2015 Deutsche Telekom AG. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import httplib2 - -from oslo_serialization import jsonutils as json -from oslotest import mockpatch - -from tempest.tests import base - - -class BaseComputeServiceTest(base.TestCase): - def create_response(self, body, to_utf=False, status=200): - json_body = {} - if body: - json_body = json.dumps(body) - if to_utf: - json_body = json_body.encode('utf-8') - response = (httplib2.Response({'status': status}), json_body) - return response - - def check_service_client_function(self, function, function2mock, - body, to_utf=False, status=200, - **kwargs): - mocked_response = self.create_response(body, to_utf, status) - self.useFixture(mockpatch.Patch( - function2mock, return_value=mocked_response)) - if kwargs: - resp = function(**kwargs) - else: - resp = function() - self.assertEqual(body, resp) diff --git a/tempest/tests/services/compute/test_keypairs_client.py b/tempest/tests/services/compute/test_keypairs_client.py deleted file mode 100644 index e8f828014b..0000000000 --- a/tempest/tests/services/compute/test_keypairs_client.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright 2015 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. - -import copy - -from tempest.services.compute.json import keypairs_client -from tempest.tests.lib import fake_auth_provider -from tempest.tests.services.compute import base - - -class TestKeyPairsClient(base.BaseComputeServiceTest): - - FAKE_KEYPAIR = {"keypair": { - "public_key": "ssh-rsa foo Generated-by-Nova", - "name": u'\u2740(*\xb4\u25e1`*)\u2740', - "user_id": "525d55f98980415ba98e634972fa4a10", - "fingerprint": "76:24:66:49:d7:ca:6e:5c:77:ea:8e:bb:9c:15:5f:98" - }} - - def setUp(self): - super(TestKeyPairsClient, self).setUp() - fake_auth = fake_auth_provider.FakeAuthProvider() - self.client = keypairs_client.KeyPairsClient( - fake_auth, 'compute', 'regionOne') - - def _test_list_keypairs(self, bytes_body=False): - self.check_service_client_function( - self.client.list_keypairs, - 'tempest.lib.common.rest_client.RestClient.get', - {"keypairs": []}, - bytes_body) - - def test_list_keypairs_with_str_body(self): - self._test_list_keypairs() - - def test_list_keypairs_with_bytes_body(self): - self._test_list_keypairs(bytes_body=True) - - def _test_show_keypair(self, bytes_body=False): - fake_keypair = copy.deepcopy(self.FAKE_KEYPAIR) - fake_keypair["keypair"].update({ - "deleted": False, - "created_at": "2015-07-22T04:53:52.000000", - "updated_at": None, - "deleted_at": None, - "id": 1 - }) - - self.check_service_client_function( - self.client.show_keypair, - 'tempest.lib.common.rest_client.RestClient.get', - fake_keypair, - bytes_body, - keypair_name="test") - - def test_show_keypair_with_str_body(self): - self._test_show_keypair() - - def test_show_keypair_with_bytes_body(self): - self._test_show_keypair(bytes_body=True) - - def _test_create_keypair(self, bytes_body=False): - fake_keypair = copy.deepcopy(self.FAKE_KEYPAIR) - fake_keypair["keypair"].update({"private_key": "foo"}) - - self.check_service_client_function( - self.client.create_keypair, - 'tempest.lib.common.rest_client.RestClient.post', - fake_keypair, - bytes_body, - name="test") - - def test_create_keypair_with_str_body(self): - self._test_create_keypair() - - def test_create_keypair_with_bytes_body(self): - self._test_create_keypair(bytes_body=True) - - def test_delete_keypair(self): - self.check_service_client_function( - self.client.delete_keypair, - 'tempest.lib.common.rest_client.RestClient.delete', - {}, status=202, keypair_name='test')