From 8b0fe8bc5a8a960c5d7bc8699676a559b94f43bf Mon Sep 17 00:00:00 2001 From: ghanshyam Date: Fri, 25 Sep 2015 13:52:14 +0900 Subject: [PATCH] Migrated fixed_ips_client.py from tempest This migrates the above files from tempest. This includes tempest commits: * fixed_ips_client.py: I2fd54092d3638886c636454a2488de48f0a80f61 * fixed_ips.py: I64883306235dc3b90a3a878674532f77d825d5c4 * test_fixedIPs_client.py: I3ad6761651cec5e66012d08e6b63322f53286a5c * parameter_types.py: I64883306235dc3b90a3a878674532f77d825d5c4 to see the commit history for these files refer to the above sha1s in the tempest repository Partially implements blueprint migrate-service-clients-to-tempest-lib Change-Id: I5cad7d45b3be330ebcfb063315ff29b06cf0688c --- .../response/compute/v2_1/fixed_ips.py | 42 ++++++++ .../response/compute/v2_1/parameter_types.py | 96 +++++++++++++++++++ .../services/compute/fixed_ips_client.py | 36 +++++++ .../services/compute/test_fixedIPs_client.py | 45 +++++++++ 4 files changed, 219 insertions(+) create mode 100644 tempest_lib/api_schema/response/compute/v2_1/fixed_ips.py create mode 100644 tempest_lib/api_schema/response/compute/v2_1/parameter_types.py create mode 100644 tempest_lib/services/compute/fixed_ips_client.py create mode 100644 tempest_lib/tests/services/compute/test_fixedIPs_client.py diff --git a/tempest_lib/api_schema/response/compute/v2_1/fixed_ips.py b/tempest_lib/api_schema/response/compute/v2_1/fixed_ips.py new file mode 100644 index 0000000..580faba --- /dev/null +++ b/tempest_lib/api_schema/response/compute/v2_1/fixed_ips.py @@ -0,0 +1,42 @@ +# 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. + +from tempest_lib.api_schema.response.compute.v2_1 import parameter_types + +get_fixed_ip = { + 'status_code': [200], + 'response_body': { + 'type': 'object', + 'properties': { + 'fixed_ip': { + 'type': 'object', + 'properties': { + 'address': parameter_types.ip_address, + 'cidr': {'type': 'string'}, + 'host': {'type': 'string'}, + 'hostname': {'type': 'string'} + }, + 'additionalProperties': False, + 'required': ['address', 'cidr', 'host', 'hostname'] + } + }, + 'additionalProperties': False, + 'required': ['fixed_ip'] + } +} + +reserve_fixed_ip = { + 'status_code': [202], + 'response_body': {'type': 'string'} +} diff --git a/tempest_lib/api_schema/response/compute/v2_1/parameter_types.py b/tempest_lib/api_schema/response/compute/v2_1/parameter_types.py new file mode 100644 index 0000000..07cc890 --- /dev/null +++ b/tempest_lib/api_schema/response/compute/v2_1/parameter_types.py @@ -0,0 +1,96 @@ +# 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. + +links = { + 'type': 'array', + 'items': { + 'type': 'object', + 'properties': { + 'href': { + 'type': 'string', + 'format': 'uri' + }, + 'rel': {'type': 'string'} + }, + 'additionalProperties': False, + 'required': ['href', 'rel'] + } +} + +mac_address = { + 'type': 'string', + 'pattern': '(?:[a-f0-9]{2}:){5}[a-f0-9]{2}' +} + +ip_address = { + 'oneOf': [ + { + 'type': 'string', + 'oneOf': [ + {'format': 'ipv4'}, + {'format': 'ipv6'} + ] + }, + {'type': 'null'} + ] +} + +access_ip_v4 = { + 'type': 'string', + 'oneOf': [{'format': 'ipv4'}, {'enum': ['']}] +} + +access_ip_v6 = { + 'type': 'string', + 'oneOf': [{'format': 'ipv6'}, {'enum': ['']}] +} + +addresses = { + 'type': 'object', + 'patternProperties': { + # NOTE: Here is for 'private' or something. + '^[a-zA-Z0-9-_.]+$': { + 'type': 'array', + 'items': { + 'type': 'object', + 'properties': { + 'version': {'type': 'integer'}, + 'addr': { + 'type': 'string', + 'oneOf': [ + {'format': 'ipv4'}, + {'format': 'ipv6'} + ] + } + }, + 'additionalProperties': False, + 'required': ['version', 'addr'] + } + } + } +} + +response_header = { + 'connection': {'type': 'string'}, + 'content-length': {'type': 'string'}, + 'content-type': {'type': 'string'}, + 'status': {'type': 'string'}, + 'x-compute-request-id': {'type': 'string'}, + 'vary': {'type': 'string'}, + 'x-openstack-nova-api-version': {'type': 'string'}, + 'date': { + 'type': 'string', + 'format': 'data-time' + } +} diff --git a/tempest_lib/services/compute/fixed_ips_client.py b/tempest_lib/services/compute/fixed_ips_client.py new file mode 100644 index 0000000..b2ea25b --- /dev/null +++ b/tempest_lib/services/compute/fixed_ips_client.py @@ -0,0 +1,36 @@ +# Copyright 2013 IBM Corp +# 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 fixed_ips as schema +from tempest_lib.common import rest_client + + +class FixedIPsClient(rest_client.RestClient): + + def show_fixed_ip(self, fixed_ip): + url = "os-fixed-ips/%s" % fixed_ip + resp, body = self.get(url) + body = json.loads(body) + self.validate_response(schema.get_fixed_ip, resp, body) + return rest_client.ResponseBody(resp, body) + + def reserve_fixed_ip(self, fixed_ip, **kwargs): + """This reserves and unreserves fixed ips.""" + url = "os-fixed-ips/%s/action" % fixed_ip + resp, body = self.post(url, json.dumps(kwargs)) + self.validate_response(schema.reserve_fixed_ip, resp, body) + return rest_client.ResponseBody(resp) diff --git a/tempest_lib/tests/services/compute/test_fixedIPs_client.py b/tempest_lib/tests/services/compute/test_fixedIPs_client.py new file mode 100644 index 0000000..4c98274 --- /dev/null +++ b/tempest_lib/tests/services/compute/test_fixedIPs_client.py @@ -0,0 +1,45 @@ +# 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 fixed_ips_client +from tempest_lib.tests import fake_auth_provider +from tempest_lib.tests.services.compute import base + + +class TestFixedIPsClient(base.BaseComputeServiceTest): + FIXED_IP_INFO = {"fixed_ip": {"address": "10.0.0.1", + "cidr": "10.11.12.0/24", + "host": "localhost", + "hostname": "OpenStack"}} + + def setUp(self): + super(TestFixedIPsClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.fixedIPsClient = (fixed_ips_client. + FixedIPsClient + (fake_auth, 'compute', + 'regionOne')) + + def _test_show_fixed_ip(self, bytes_body=False): + self.check_service_client_function( + self.fixedIPsClient.show_fixed_ip, + 'tempest_lib.common.rest_client.RestClient.get', + self.FIXED_IP_INFO, bytes_body, + status=200, fixed_ip='Identifier') + + def test_show_fixed_ip_with_str_body(self): + self._test_show_fixed_ip() + + def test_show_fixed_ip_with_bytes_body(self): + self._test_show_fixed_ip(True)