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
This commit is contained in:
parent
eda607cb1c
commit
3e758ee22b
@ -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']
|
|
||||||
}
|
|
||||||
}
|
|
@ -46,6 +46,7 @@ from tempest.lib.services.compute.images_client import ImagesClient \
|
|||||||
from tempest.lib.services.compute.instance_usage_audit_log_client import \
|
from tempest.lib.services.compute.instance_usage_audit_log_client import \
|
||||||
InstanceUsagesAuditLogClient
|
InstanceUsagesAuditLogClient
|
||||||
from tempest.lib.services.compute.interfaces_client import InterfacesClient
|
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.limits_client import LimitsClient
|
||||||
from tempest.lib.services.compute.migrations_client import MigrationsClient
|
from tempest.lib.services.compute.migrations_client import MigrationsClient
|
||||||
from tempest.lib.services.compute.networks_client import NetworksClient \
|
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 import manager
|
||||||
from tempest.services.baremetal.v1.json.baremetal_client import \
|
from tempest.services.baremetal.v1.json.baremetal_client import \
|
||||||
BaremetalClient
|
BaremetalClient
|
||||||
from tempest.services.compute.json.keypairs_client import KeyPairsClient
|
|
||||||
from tempest.services.data_processing.v1_1.data_processing_client import \
|
from tempest.services.data_processing.v1_1.data_processing_client import \
|
||||||
DataProcessingClient
|
DataProcessingClient
|
||||||
from tempest.services.database.json.flavors_client import \
|
from tempest.services.database.json.flavors_client import \
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
import copy
|
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 = copy.deepcopy(keypairs.get_keypair)
|
||||||
get_keypair['response_body']['properties']['keypair'][
|
get_keypair['response_body']['properties']['keypair'][
|
@ -14,23 +14,36 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from oslo_serialization import jsonutils as json
|
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.common import rest_client
|
||||||
from tempest.lib.services.compute import base_compute_client
|
from tempest.lib.services.compute import base_compute_client
|
||||||
|
|
||||||
|
|
||||||
class KeyPairsClient(base_compute_client.BaseComputeClient):
|
class KeyPairsClient(base_compute_client.BaseComputeClient):
|
||||||
|
|
||||||
def list_keypairs(self):
|
schema_versions_info = [{'min': None, 'max': '2.1', 'schema': schemav21},
|
||||||
resp, body = self.get("os-keypairs")
|
{'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)
|
body = json.loads(body)
|
||||||
|
schema = self.get_schema(self.schema_versions_info)
|
||||||
self.validate_response(schema.list_keypairs, resp, body)
|
self.validate_response(schema.list_keypairs, resp, body)
|
||||||
return rest_client.ResponseBody(resp, body)
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
def show_keypair(self, keypair_name):
|
def show_keypair(self, keypair_name, **params):
|
||||||
resp, body = self.get("os-keypairs/%s" % keypair_name)
|
url = "os-keypairs/%s" % keypair_name
|
||||||
|
if params:
|
||||||
|
url += '?%s' % urllib.urlencode(params)
|
||||||
|
resp, body = self.get(url)
|
||||||
body = json.loads(body)
|
body = json.loads(body)
|
||||||
|
schema = self.get_schema(self.schema_versions_info)
|
||||||
self.validate_response(schema.get_keypair, resp, body)
|
self.validate_response(schema.get_keypair, resp, body)
|
||||||
return rest_client.ResponseBody(resp, body)
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
@ -43,10 +56,15 @@ class KeyPairsClient(base_compute_client.BaseComputeClient):
|
|||||||
post_body = json.dumps({'keypair': kwargs})
|
post_body = json.dumps({'keypair': kwargs})
|
||||||
resp, body = self.post("os-keypairs", body=post_body)
|
resp, body = self.post("os-keypairs", body=post_body)
|
||||||
body = json.loads(body)
|
body = json.loads(body)
|
||||||
|
schema = self.get_schema(self.schema_versions_info)
|
||||||
self.validate_response(schema.create_keypair, resp, body)
|
self.validate_response(schema.create_keypair, resp, body)
|
||||||
return rest_client.ResponseBody(resp, body)
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
def delete_keypair(self, keypair_name):
|
def delete_keypair(self, keypair_name, **params):
|
||||||
resp, body = self.delete("os-keypairs/%s" % keypair_name)
|
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)
|
self.validate_response(schema.delete_keypair, resp, body)
|
||||||
return rest_client.ResponseBody(resp, body)
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
@ -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)
|
|
@ -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)
|
|
@ -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')
|
|
Loading…
Reference in New Issue
Block a user