Fix schema for Nova microversion 2.96 and 2.98
Nova 2.96 and 2.98 microversions change the response schema for
update server also but we missed to add the schema change for
update server APIs. Adding test for update server for both
microversion.
Also, 2.96 microversion adds new field 'pinned_availability_zone'
as mandatory in response, adding same in tempest schema.
Change-Id: I4d0fcca3224e65fdc92e60eb88c8850c5de795e7
diff --git a/tempest/api/compute/servers/test_servers.py b/tempest/api/compute/servers/test_servers.py
index af88a15..76cf01d 100644
--- a/tempest/api/compute/servers/test_servers.py
+++ b/tempest/api/compute/servers/test_servers.py
@@ -276,12 +276,14 @@
max_microversion = 'latest'
@decorators.idempotent_id('4eee1ffe-9e00-4c99-a431-0d3e0f323a8f')
- def test_list_show_server_296(self):
+ def test_list_show_update_rebuild_server_296(self):
server = self.create_test_server(wait_until='ACTIVE')
# Checking list API response schema.
self.servers_client.list_servers(detail=True)
# Checking show API response schema
self.servers_client.show_server(server['id'])
+ # Checking update API response schema
+ self.servers_client.update_server(server['id'])
# Check rebuild API response schema
self.servers_client.rebuild_server(server['id'], self.image_ref_alt)
waiters.wait_for_server_status(self.servers_client,
@@ -295,12 +297,14 @@
max_microversion = 'latest'
@decorators.idempotent_id('3981e496-3bf7-4015-b807-63ffee7c520c')
- def test_list_show_rebuild_server_298(self):
+ def test_list_show_update_rebuild_server_298(self):
server = self.create_test_server(wait_until='ACTIVE')
# Check list details API response schema
self.servers_client.list_servers(detail=True)
# Check show API response schema
self.servers_client.show_server(server['id'])
+ # Checking update API response schema
+ self.servers_client.update_server(server['id'])
# Check rebuild API response schema
self.servers_client.rebuild_server(server['id'], self.image_ref_alt)
waiters.wait_for_server_status(self.servers_client,
diff --git a/tempest/lib/api_schema/response/compute/v2_96/servers.py b/tempest/lib/api_schema/response/compute/v2_96/servers.py
index 2e24192..8a4ed9f 100644
--- a/tempest/lib/api_schema/response/compute/v2_96/servers.py
+++ b/tempest/lib/api_schema/response/compute/v2_96/servers.py
@@ -26,28 +26,45 @@
#
# - GET /servers/detail
# - GET /servers/{server_id}
+# - PUT /servers/{server_id}
+# - POST /servers/{server_id}/action (rebuild)
###########################################################################
get_server = copy.deepcopy(servers289.get_server)
get_server['response_body']['properties']['server'][
'properties'].update(
{'pinned_availability_zone': {'type': ['string', 'null']}})
+get_server['response_body']['properties']['server'][
+ 'required'].append('pinned_availability_zone')
list_servers_detail = copy.deepcopy(servers289.list_servers_detail)
list_servers_detail['response_body']['properties']['servers']['items'][
'properties'].update(
{'pinned_availability_zone': {'type': ['string', 'null']}})
+list_servers_detail['response_body']['properties']['servers']['items'][
+ 'required'].append('pinned_availability_zone')
+
+update_server = copy.deepcopy(servers289.update_server)
+update_server['response_body']['properties']['server'][
+ 'properties'].update(
+ {'pinned_availability_zone': {'type': ['string', 'null']}})
+update_server['response_body']['properties']['server'][
+ 'required'].append('pinned_availability_zone')
rebuild_server = copy.deepcopy(servers289.rebuild_server)
rebuild_server['response_body']['properties']['server'][
'properties'].update(
{'pinned_availability_zone': {'type': ['string', 'null']}})
+rebuild_server['response_body']['properties']['server'][
+ 'required'].append('pinned_availability_zone')
rebuild_server_with_admin_pass = copy.deepcopy(
servers289.rebuild_server_with_admin_pass)
rebuild_server_with_admin_pass['response_body']['properties']['server'][
'properties'].update(
{'pinned_availability_zone': {'type': ['string', 'null']}})
+rebuild_server_with_admin_pass['response_body']['properties']['server'][
+ 'required'].append('pinned_availability_zone')
# NOTE(zhufl): Below are the unchanged schema in this microversion. We
# need to keep this schema in this file to have the generic way to select the
@@ -56,7 +73,6 @@
attach_volume = copy.deepcopy(servers289.attach_volume)
show_volume_attachment = copy.deepcopy(servers289.show_volume_attachment)
list_volume_attachments = copy.deepcopy(servers289.list_volume_attachments)
-update_server = copy.deepcopy(servers289.update_server)
list_servers = copy.deepcopy(servers289.list_servers)
show_server_diagnostics = copy.deepcopy(servers289.show_server_diagnostics)
get_remote_consoles = copy.deepcopy(servers289.get_remote_consoles)
diff --git a/tempest/lib/api_schema/response/compute/v2_98/servers.py b/tempest/lib/api_schema/response/compute/v2_98/servers.py
index 5c96d8b..2fca3eb 100644
--- a/tempest/lib/api_schema/response/compute/v2_98/servers.py
+++ b/tempest/lib/api_schema/response/compute/v2_98/servers.py
@@ -24,6 +24,7 @@
#
# - GET /servers/detail
# - GET /servers/{server_id}
+# - PUT /servers/{server_id}
# - POST /servers/{server_id}/action (rebuild)
#
###########################################################################
@@ -50,6 +51,10 @@
'properties']['image']['oneOf'][0]['properties'].update(
{'properties': image_properties})
+update_server = copy.deepcopy(servers296.update_server)
+update_server['response_body']['properties']['server']['properties'][
+ 'image']['oneOf'][0]['properties'].update({'properties': image_properties})
+
rebuild_server = copy.deepcopy(servers296.rebuild_server)
rebuild_server['response_body']['properties']['server']['properties'][
'image']['oneOf'][0]['properties'].update({'properties': image_properties})
@@ -67,7 +72,6 @@
attach_volume = copy.deepcopy(servers296.attach_volume)
show_volume_attachment = copy.deepcopy(servers296.show_volume_attachment)
list_volume_attachments = copy.deepcopy(servers296.list_volume_attachments)
-update_server = copy.deepcopy(servers296.update_server)
list_servers = copy.deepcopy(servers296.list_servers)
show_server_diagnostics = copy.deepcopy(servers296.show_server_diagnostics)
get_remote_consoles = copy.deepcopy(servers296.get_remote_consoles)