Merge "Verify list_hypervisors_detail Nova V2/V3 API"
diff --git a/tempest/api_schema/compute/hypervisors.py b/tempest/api_schema/compute/hypervisors.py
index 0cbafb3..3c24a38 100644
--- a/tempest/api_schema/compute/hypervisors.py
+++ b/tempest/api_schema/compute/hypervisors.py
@@ -43,3 +43,57 @@
         'required': ['hypervisor_statistics']
     }
 }
+
+common_list_hypervisors_detail = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'hypervisors': {
+                'type': 'array',
+                'items': {
+                    'type': 'object',
+                    'properties': {
+                        'cpu_info': {'type': 'string'},
+                        'current_workload': {'type': 'integer'},
+                        'disk_available_least': {'type': ['integer', 'null']},
+                        'host_ip': {
+                            'type': 'string',
+                            'format': 'ip-address'
+                        },
+                        'free_disk_gb': {'type': 'integer'},
+                        'free_ram_mb': {'type': 'integer'},
+                        'hypervisor_hostname': {'type': 'string'},
+                        'hypervisor_type': {'type': 'string'},
+                        'hypervisor_version': {'type': 'integer'},
+                        'id': {'type': ['integer', 'string']},
+                        'local_gb': {'type': 'integer'},
+                        'local_gb_used': {'type': 'integer'},
+                        'memory_mb': {'type': 'integer'},
+                        'memory_mb_used': {'type': 'integer'},
+                        'running_vms': {'type': 'integer'},
+                        'service': {
+                            'type': 'object',
+                            'properties': {
+                                'host': {'type': 'string'},
+                                'id': {'type': ['integer', 'string']}
+                            },
+                            'required': ['host', 'id']
+                        },
+                        'vcpus': {'type': 'integer'},
+                        'vcpus_used': {'type': 'integer'}
+                    },
+                    'required': ['cpu_info', 'current_workload',
+                                 'disk_available_least', 'host_ip',
+                                 'free_disk_gb', 'free_ram_mb',
+                                 'hypervisor_hostname', 'hypervisor_type',
+                                 'hypervisor_version', 'id', 'local_gb',
+                                 'local_gb_used', 'memory_mb',
+                                 'memory_mb_used', 'running_vms', 'service',
+                                 'vcpus', 'vcpus_used']
+                }
+            }
+        },
+        'required': ['hypervisors']
+    }
+}
diff --git a/tempest/api_schema/compute/v3/hypervisors.py b/tempest/api_schema/compute/v3/hypervisors.py
new file mode 100644
index 0000000..0a6ec76
--- /dev/null
+++ b/tempest/api_schema/compute/v3/hypervisors.py
@@ -0,0 +1,22 @@
+# 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.
+
+import copy
+from tempest.api_schema.compute import hypervisors
+
+list_hypervisors_detail = copy.deepcopy(
+    hypervisors.common_list_hypervisors_detail)
+# Defining extra attributes for V3 show hypervisor schema
+list_hypervisors_detail['response_body']['properties']['hypervisors'][
+    'items']['properties']['os-pci:pci_stats'] = {'type': 'array'}
diff --git a/tempest/services/compute/json/hypervisor_client.py b/tempest/services/compute/json/hypervisor_client.py
index be704e7..3fcc879 100644
--- a/tempest/services/compute/json/hypervisor_client.py
+++ b/tempest/services/compute/json/hypervisor_client.py
@@ -38,6 +38,8 @@
         """Show detailed hypervisors information."""
         resp, body = self.get('os-hypervisors/detail')
         body = json.loads(body)
+        self.validate_response(common_schema.common_list_hypervisors_detail,
+                               resp, body)
         return resp, body['hypervisors']
 
     def get_hypervisor_show_details(self, hyper_id):
diff --git a/tempest/services/compute/v3/json/hypervisor_client.py b/tempest/services/compute/v3/json/hypervisor_client.py
index 54a6e17..c02f75c 100644
--- a/tempest/services/compute/v3/json/hypervisor_client.py
+++ b/tempest/services/compute/v3/json/hypervisor_client.py
@@ -16,6 +16,7 @@
 import json
 
 from tempest.api_schema.compute import hypervisors as common_schema
+from tempest.api_schema.compute.v3 import hypervisors as v3schema
 from tempest.common import rest_client
 from tempest import config
 
@@ -38,6 +39,7 @@
         """Show detailed hypervisors information."""
         resp, body = self.get('os-hypervisors/detail')
         body = json.loads(body)
+        self.validate_response(v3schema.list_hypervisors_detail, resp, body)
         return resp, body['hypervisors']
 
     def get_hypervisor_show_details(self, hyper_id):