diff --git a/tempest/api_schema/compute/migrations.py b/tempest/api_schema/compute/migrations.py new file mode 100644 index 0000000000..6723869b6d --- /dev/null +++ b/tempest/api_schema/compute/migrations.py @@ -0,0 +1,56 @@ +# 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': { + # NOTE: Now the type of 'id' is integer, but here + # allows 'string' also because we will be able to + # change it to 'uuid' in the future. + 'id': {'type': ['integer', 'string']}, + 'status': {'type': 'string'}, + 'instance_uuid': {'type': 'string'}, + 'source_node': {'type': 'string'}, + 'source_compute': {'type': 'string'}, + 'dest_node': {'type': 'string'}, + 'dest_compute': {'type': 'string'}, + 'dest_host': {'type': 'string'}, + 'old_instance_type_id': { + 'type': ['integer', 'string'] + }, + 'new_instance_type_id': { + 'type': ['integer', 'string'] + }, + 'created_at': {'type': 'string'}, + 'updated_at': {'type': ['string', 'null']} + }, + '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' + ] + } + } + }, + 'required': ['migrations'] + } +} diff --git a/tempest/services/compute/json/migrations_client.py b/tempest/services/compute/json/migrations_client.py index a13349e268..beef5d2aed 100644 --- a/tempest/services/compute/json/migrations_client.py +++ b/tempest/services/compute/json/migrations_client.py @@ -15,6 +15,7 @@ import json import urllib +from tempest.api_schema.compute import migrations as schema from tempest.common import rest_client from tempest import config @@ -36,4 +37,5 @@ class MigrationsClientJSON(rest_client.RestClient): resp, body = self.get(url) body = json.loads(body) + self.validate_response(schema.list_migrations, resp, body) return resp, body['migrations'] diff --git a/tempest/services/compute/v3/json/migration_client.py b/tempest/services/compute/v3/json/migration_client.py index efd39b71d3..c8215670e1 100644 --- a/tempest/services/compute/v3/json/migration_client.py +++ b/tempest/services/compute/v3/json/migration_client.py @@ -12,8 +12,10 @@ # License for the specific language governing permissions and limitations # under the License. +import json import urllib +from tempest.api_schema.compute import migrations as schema from tempest.common import rest_client from tempest import config @@ -34,4 +36,6 @@ class MigrationsV3ClientJSON(rest_client.RestClient): url += '?%s' % urllib.urlencode(params) resp, body = self.get(url) - return resp, self._parse_resp(body) + body = json.loads(body) + self.validate_response(schema.list_migrations, resp, body) + return resp, body['migrations']