diff --git a/tempest_lib/api_schema/response/compute/v2_1/extensions.py b/tempest_lib/api_schema/response/compute/v2_1/extensions.py new file mode 100644 index 0000000..a6a455c --- /dev/null +++ b/tempest_lib/api_schema/response/compute/v2_1/extensions.py @@ -0,0 +1,47 @@ +# 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. + +list_extensions = { + 'status_code': [200], + 'response_body': { + 'type': 'object', + 'properties': { + 'extensions': { + 'type': 'array', + 'items': { + 'type': 'object', + 'properties': { + 'updated': { + 'type': 'string', + 'format': 'data-time' + }, + 'name': {'type': 'string'}, + 'links': {'type': 'array'}, + 'namespace': { + 'type': 'string', + 'format': 'uri' + }, + 'alias': {'type': 'string'}, + 'description': {'type': 'string'} + }, + 'additionalProperties': False, + 'required': ['updated', 'name', 'links', 'namespace', + 'alias', 'description'] + } + } + }, + 'additionalProperties': False, + 'required': ['extensions'] + } +} diff --git a/tempest_lib/services/compute/extensions_client.py b/tempest_lib/services/compute/extensions_client.py new file mode 100644 index 0000000..4a3435f --- /dev/null +++ b/tempest_lib/services/compute/extensions_client.py @@ -0,0 +1,34 @@ +# 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 tempest_lib.api_schema.response.compute.v2_1 import extensions as schema +from tempest_lib.common import rest_client + + +class ExtensionsClient(rest_client.RestClient): + + def list_extensions(self): + url = 'extensions' + resp, body = self.get(url) + body = json.loads(body) + self.validate_response(schema.list_extensions, resp, body) + return rest_client.ResponseBody(resp, body) + + def show_extension(self, extension_alias): + resp, body = self.get('extensions/%s' % extension_alias) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) diff --git a/tempest_lib/tests/services/compute/test_extensions_client.py b/tempest_lib/tests/services/compute/test_extensions_client.py new file mode 100644 index 0000000..084300f --- /dev/null +++ b/tempest_lib/tests/services/compute/test_extensions_client.py @@ -0,0 +1,65 @@ +# 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. + +from tempest_lib.services.compute import extensions_client +from tempest_lib.tests import fake_auth_provider +from tempest_lib.tests.services.compute import base + + +class TestExtensionsClient(base.BaseComputeServiceTest): + + FAKE_SHOW_EXTENSION = { + "extension": { + "updated": "2011-06-09T00:00:00Z", + "name": "Multinic", + "links": [], + "namespace": + "http://docs.openstack.org/compute/ext/multinic/api/v1.1", + "alias": "NMN", + "description": u'\u2740(*\xb4\u25e1`*)\u2740' + } + } + + def setUp(self): + super(TestExtensionsClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.client = extensions_client.ExtensionsClient( + fake_auth, 'compute', 'regionOne') + + def _test_list_extensions(self, bytes_body=False): + self.check_service_client_function( + self.client.list_extensions, + 'tempest_lib.common.rest_client.RestClient.get', + {"extensions": []}, + bytes_body) + + def test_list_extensions_with_str_body(self): + self._test_list_extensions() + + def test_list_extensions_with_bytes_body(self): + self._test_list_extensions(bytes_body=True) + + def _test_show_extension(self, bytes_body=False): + self.check_service_client_function( + self.client.show_extension, + 'tempest_lib.common.rest_client.RestClient.get', + self.FAKE_SHOW_EXTENSION, + bytes_body, + extension_alias="NMN") + + def test_show_extension_with_str_body(self): + self._test_show_extension() + + def test_show_extension_with_bytes_body(self): + self._test_show_extension(bytes_body=True)