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')