Add tests for Nova microversion v2.2

In Nova microversion v2.2, keypair APIs have been changed.
It allow to specify the keypair type in request and same will
be return in response. Along with there are status code changes
also.
Ref-
http://docs.openstack.org/developer/nova/api_microversion_history.html#id2

This commit add Tempest tests for Nova version v2.2 and version
the required schema also.

Partially implements blueprint api-microversions-testing-support

Change-Id: I7917865ab5abb703049160c695550e15441c55e0
This commit is contained in:
ghanshyam 2015-11-13 14:49:27 +09:00 committed by Ghanshyam Mann
parent 0dd1c7bb5d
commit a1f8713596
6 changed files with 108 additions and 3 deletions

View File

@ -27,10 +27,12 @@ class BaseKeypairTest(base.BaseV2ComputeTest):
def _delete_keypair(self, keypair_name):
self.client.delete_keypair(keypair_name)
def _create_keypair(self, keypair_name, pub_key=None):
def _create_keypair(self, keypair_name, pub_key=None, keypair_type=None):
kwargs = {'name': keypair_name}
if pub_key:
kwargs.update({'public_key': pub_key})
if keypair_type:
kwargs.update({'type': keypair_type})
body = self.client.create_keypair(**kwargs)['keypair']
self.addCleanup(self._delete_keypair, keypair_name)
return body

View File

@ -19,6 +19,8 @@ from tempest import test
class KeyPairsV2TestJSON(base.BaseKeypairTest):
max_microversion = '2.1'
@test.idempotent_id('1d1dbedb-d7a0-432a-9d09-83f543c3c19b')
def test_keypairs_create_list_delete(self):
# Keypairs created should be available in the response list

View File

@ -0,0 +1,51 @@
# 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.api.compute.keypairs import test_keypairs
from tempest.common.utils import data_utils
from tempest import test
class KeyPairsV22TestJSON(test_keypairs.KeyPairsV2TestJSON):
min_microversion = '2.2'
max_microversion = 'latest'
def _check_keypair_type(self, keypair, keypair_type):
if keypair_type is None:
keypair_type = 'ssh'
self.assertEqual(keypair_type, keypair['type'])
def _test_keypairs_create_list_show(self, keypair_type=None):
k_name = data_utils.rand_name('keypair')
keypair = self._create_keypair(k_name, keypair_type=keypair_type)
# Verify whether 'type' is present in keypair create response of
# version 2.2 and it is with default value 'ssh'.
self._check_keypair_type(keypair, keypair_type)
keypair_detail = self.client.show_keypair(k_name)['keypair']
self._check_keypair_type(keypair_detail, keypair_type)
fetched_list = self.client.list_keypairs()['keypairs']
for keypair in fetched_list:
# Verify whether 'type' is present in keypair list response of
# version 2.2 and it is with default value 'ssh'.
if keypair['keypair']['name'] == k_name:
self._check_keypair_type(keypair['keypair'], keypair_type)
@test.idempotent_id('8726fa85-7f98-4b20-af9e-f710a4f3391c')
def test_keypairsv22_create_list_show(self):
self._test_keypairs_create_list_show()
@test.idempotent_id('89d59d43-f735-441a-abcf-0601727f47b6')
def test_keypairsv22_create_list_show_with_type(self):
keypair_type = 'x509'
self._test_keypairs_create_list_show(keypair_type=keypair_type)

View File

@ -0,0 +1,41 @@
# 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.
import copy
from tempest.api_schema.response.compute.v2_1 import keypairs
get_keypair = copy.deepcopy(keypairs.get_keypair)
get_keypair['response_body']['properties']['keypair'][
'properties'].update({'type': {'type': 'string'}})
get_keypair['response_body']['properties']['keypair'][
'required'].append('type')
create_keypair = copy.deepcopy(keypairs.create_keypair)
create_keypair['status_code'] = [201]
create_keypair['response_body']['properties']['keypair'][
'properties'].update({'type': {'type': 'string'}})
create_keypair['response_body']['properties']['keypair'][
'required'].append('type')
delete_keypair = {
'status_code': [204],
}
list_keypairs = copy.deepcopy(keypairs.list_keypairs)
list_keypairs['response_body']['properties']['keypairs'][
'items']['properties']['keypair'][
'properties'].update({'type': {'type': 'string'}})
list_keypairs['response_body']['properties']['keypairs'][
'items']['properties']['keypair']['required'].append('type')

View File

@ -15,21 +15,28 @@
from oslo_serialization import jsonutils as json
from tempest.api_schema.response.compute.v2_1 import keypairs as schema
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.common import service_client
from tempest.services.compute.json import base
class KeyPairsClient(service_client.ServiceClient):
class KeyPairsClient(base.BaseComputeClient):
schema_versions_info = [{'min': None, 'max': '2.1', 'schema': schemav21},
{'min': '2.2', 'max': None, 'schema': schemav22}]
def list_keypairs(self):
resp, body = self.get("os-keypairs")
body = json.loads(body)
schema = self.get_schema(self.schema_versions_info)
self.validate_response(schema.list_keypairs, resp, body)
return service_client.ResponseBody(resp, body)
def show_keypair(self, keypair_name):
resp, body = self.get("os-keypairs/%s" % keypair_name)
body = json.loads(body)
schema = self.get_schema(self.schema_versions_info)
self.validate_response(schema.get_keypair, resp, body)
return service_client.ResponseBody(resp, body)
@ -37,10 +44,12 @@ class KeyPairsClient(service_client.ServiceClient):
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 service_client.ResponseBody(resp, body)
def delete_keypair(self, keypair_name):
resp, body = self.delete("os-keypairs/%s" % keypair_name)
schema = self.get_schema(self.schema_versions_info)
self.validate_response(schema.delete_keypair, resp, body)
return service_client.ResponseBody(resp, body)