From 0eb6747e3cfe01feaf03fdc2c17986421b888d17 Mon Sep 17 00:00:00 2001 From: Ken'ichi Ohmichi Date: Mon, 28 Sep 2015 06:30:25 +0000 Subject: [PATCH] Migrated migrations_client.py from tempest This migrates the above files from tempest. This includes tempest commits: * migrations_client.py : Ice3665e91ff34409f6f105303213303d1fca1816 * migrations.py : I5e81dadd5dee4ecd85f309c34dae0d3ba0733a0d * test_migrations_client.py: I3ad6761651cec5e66012d08e6b63322f53286a5c to see the commit history for these files refer to the above Change-Ids in the tempest repository. Partially implements blueprint migrate-service-clients-to-tempest-lib Change-Id: I0dbae04c479b9d742a3e51d1d60c372093c2c027 --- .../response/compute/v2_1/migrations.py | 51 ++++++++++++++++++ .../services/compute/migrations_client.py | 34 ++++++++++++ .../compute/test_migrations_client.py | 52 +++++++++++++++++++ 3 files changed, 137 insertions(+) create mode 100644 tempest_lib/api_schema/response/compute/v2_1/migrations.py create mode 100644 tempest_lib/services/compute/migrations_client.py create mode 100644 tempest_lib/tests/services/compute/test_migrations_client.py diff --git a/tempest_lib/api_schema/response/compute/v2_1/migrations.py b/tempest_lib/api_schema/response/compute/v2_1/migrations.py new file mode 100644 index 0000000..b7d66ea --- /dev/null +++ b/tempest_lib/api_schema/response/compute/v2_1/migrations.py @@ -0,0 +1,51 @@ +# 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_migrations = { + 'status_code': [200], + 'response_body': { + 'type': 'object', + 'properties': { + 'migrations': { + 'type': 'array', + 'items': { + 'type': 'object', + 'properties': { + 'id': {'type': 'integer'}, + 'status': {'type': ['string', 'null']}, + 'instance_uuid': {'type': ['string', 'null']}, + 'source_node': {'type': ['string', 'null']}, + 'source_compute': {'type': ['string', 'null']}, + 'dest_node': {'type': ['string', 'null']}, + 'dest_compute': {'type': ['string', 'null']}, + 'dest_host': {'type': ['string', 'null']}, + 'old_instance_type_id': {'type': ['integer', 'null']}, + 'new_instance_type_id': {'type': ['integer', 'null']}, + 'created_at': {'type': 'string'}, + 'updated_at': {'type': ['string', 'null']} + }, + 'additionalProperties': False, + 'required': [ + 'id', 'status', 'instance_uuid', 'source_node', + 'source_compute', 'dest_node', 'dest_compute', + 'dest_host', 'old_instance_type_id', + 'new_instance_type_id', 'created_at', 'updated_at' + ] + } + } + }, + 'additionalProperties': False, + 'required': ['migrations'] + } +} diff --git a/tempest_lib/services/compute/migrations_client.py b/tempest_lib/services/compute/migrations_client.py new file mode 100644 index 0000000..1629a4e --- /dev/null +++ b/tempest_lib/services/compute/migrations_client.py @@ -0,0 +1,34 @@ +# Copyright 2014 NEC Corporation. +# +# 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_lib.api_schema.response.compute.v2_1 import migrations as schema +from tempest_lib.common import rest_client + + +class MigrationsClient(rest_client.RestClient): + + def list_migrations(self, **params): + """Lists all migrations.""" + + url = 'os-migrations' + if params: + url += '?%s' % urllib.urlencode(params) + + resp, body = self.get(url) + body = json.loads(body) + self.validate_response(schema.list_migrations, resp, body) + return rest_client.ResponseBody(resp, body) diff --git a/tempest_lib/tests/services/compute/test_migrations_client.py b/tempest_lib/tests/services/compute/test_migrations_client.py new file mode 100644 index 0000000..a949d67 --- /dev/null +++ b/tempest_lib/tests/services/compute/test_migrations_client.py @@ -0,0 +1,52 @@ +# 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 migrations_client +from tempest_lib.tests import fake_auth_provider +from tempest_lib.tests.services.compute import base + + +class TestMigrationsClient(base.BaseComputeServiceTest): + FAKE_MIGRATION_INFO = {"migrations": [{ + "created_at": "2012-10-29T13:42:02", + "dest_compute": "compute2", + "dest_host": "1.2.3.4", + "dest_node": "node2", + "id": 1234, + "instance_uuid": "e9e4fdd7-f956-44ff-bfeb-d654a96ab3a2", + "new_instance_type_id": 2, + "old_instance_type_id": 1, + "source_compute": "compute1", + "source_node": "node1", + "status": "finished", + "updated_at": "2012-10-29T13:42:02"}]} + + def setUp(self): + super(TestMigrationsClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.mg_client_obj = migrations_client.MigrationsClient( + fake_auth, 'compute', 'regionOne') + + def _test_list_migrations(self, bytes_body=False): + self.check_service_client_function( + self.mg_client_obj.list_migrations, + 'tempest_lib.common.rest_client.RestClient.get', + self.FAKE_MIGRATION_INFO, + bytes_body) + + def test_list_migration_with_str_body(self): + self._test_list_migrations() + + def test_list_migration_with_bytes_body(self): + self._test_list_migrations(True)