From bcb7117f0977ecba4489cd60cd3f61e8858ed4d0 Mon Sep 17 00:00:00 2001 From: zhufl Date: Thu, 29 Mar 2018 13:49:31 +0800 Subject: [PATCH] Do not check flavor.id after Microversion 2.46 flavor.id is longer included in server info after Microversion 2.46, so change to checking flavor info if 'id' is not in flavor. Note: We needn't check whether 'id' should be in flavor or not in different microversions because schema check already covers it. Besides, this is to make resize_server in base.py instance method, because it's not likely to be used in resource_setup, and so we can use assert check in it. Ref: https://developer.openstack.org/api-ref/compute/#rebuild-server-rebuild-action Implements blueprint: clear-deprecated-api Change-Id: Id376de39662a4799909b56ec1148c85910d95814 --- tempest/api/compute/admin/test_migrations.py | 2 +- tempest/api/compute/admin/test_servers.py | 2 +- tempest/api/compute/base.py | 42 +++++++++++++------ .../api/compute/servers/test_create_server.py | 2 +- .../compute/servers/test_server_actions.py | 8 ++-- .../test_network_advanced_server_ops.py | 9 +++- 6 files changed, 44 insertions(+), 21 deletions(-) diff --git a/tempest/api/compute/admin/test_migrations.py b/tempest/api/compute/admin/test_migrations.py index a6b71b235d..e030575bf9 100644 --- a/tempest/api/compute/admin/test_migrations.py +++ b/tempest/api/compute/admin/test_migrations.py @@ -106,7 +106,7 @@ class MigrationsAdminTest(base.BaseV2ComputeAdminTest): 'ACTIVE') server = self.servers_client.show_server(server['id'])['server'] - self.assertEqual(flavor['id'], server['flavor']['id']) + self.assert_flavor_equal(flavor['id'], server['flavor']) def _test_cold_migrate_server(self, revert=False): if CONF.compute.min_compute_nodes < 2: diff --git a/tempest/api/compute/admin/test_servers.py b/tempest/api/compute/admin/test_servers.py index cdfc44adc1..170b2cc64a 100644 --- a/tempest/api/compute/admin/test_servers.py +++ b/tempest/api/compute/admin/test_servers.py @@ -176,7 +176,7 @@ class ServersAdminTestJSON(base.BaseV2ComputeAdminTest): self.assertEqual(self.s1_id, rebuilt_server['id']) rebuilt_image_id = rebuilt_server['image']['id'] self.assertEqual(self.image_ref_alt, rebuilt_image_id) - self.assertEqual(self.flavor_ref, rebuilt_server['flavor']['id']) + self.assert_flavor_equal(self.flavor_ref, rebuilt_server['flavor']) waiters.wait_for_server_status(self.non_admin_client, rebuilt_server['id'], 'ACTIVE', raise_on_error=False) diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py index 975728c533..e09e3bcb63 100644 --- a/tempest/api/compute/base.py +++ b/tempest/api/compute/base.py @@ -399,21 +399,16 @@ class BaseV2ComputeTest(api_version_utils.BaseMicroversionTest, except Exception: LOG.exception('Failed to delete server %s', server_id) - @classmethod - def resize_server(cls, server_id, new_flavor_id, **kwargs): + def resize_server(self, server_id, new_flavor_id, **kwargs): """resize and confirm_resize an server, waits for it to be ACTIVE.""" - cls.servers_client.resize_server(server_id, new_flavor_id, **kwargs) - waiters.wait_for_server_status(cls.servers_client, server_id, + self.servers_client.resize_server(server_id, new_flavor_id, **kwargs) + waiters.wait_for_server_status(self.servers_client, server_id, 'VERIFY_RESIZE') - cls.servers_client.confirm_resize_server(server_id) - waiters.wait_for_server_status(cls.servers_client, server_id, 'ACTIVE') - server = cls.servers_client.show_server(server_id)['server'] - # Nova API > 2.46 no longer includes flavor.id - if server['flavor'].get('id'): - if new_flavor_id != server['flavor']['id']: - msg = ('Flavor id of %s is not equal to new_flavor_id.' - % server_id) - raise lib_exc.TempestException(msg) + self.servers_client.confirm_resize_server(server_id) + waiters.wait_for_server_status( + self.servers_client, server_id, 'ACTIVE') + server = self.servers_client.show_server(server_id)['server'] + self.assert_flavor_equal(new_flavor_id, server['flavor']) @classmethod def delete_volume(cls, volume_id): @@ -528,6 +523,27 @@ class BaseV2ComputeTest(api_version_utils.BaseMicroversionTest, volume['id'], 'in-use') return attachment + def assert_flavor_equal(self, flavor_id, server_flavor): + """Check whether server_flavor equals to flavor. + + :param flavor_id: flavor id + :param server_flavor: flavor info returned by show_server. + """ + # Nova API > 2.46 no longer includes flavor.id, and schema check + # will cover whether 'id' should be in flavor + if server_flavor.get('id'): + msg = ('server flavor is not same as flavor!') + self.assertEqual(flavor_id, server_flavor['id'], msg) + else: + flavor = self.flavors_client.show_flavor(flavor_id)['flavor'] + self.assertEqual(flavor['name'], server_flavor['original_name'], + "original_name in server flavor is not same as " + "flavor name!") + for key in ['ram', 'vcpus', 'disk']: + msg = ('attribute %s in server flavor is not same as ' + 'flavor!' % key) + self.assertEqual(flavor[key], server_flavor[key], msg) + class BaseV2ComputeAdminTest(BaseV2ComputeTest): """Base test case class for Compute Admin API tests.""" diff --git a/tempest/api/compute/servers/test_create_server.py b/tempest/api/compute/servers/test_create_server.py index 122c4f5848..4f0dbaddac 100644 --- a/tempest/api/compute/servers/test_create_server.py +++ b/tempest/api/compute/servers/test_create_server.py @@ -80,7 +80,7 @@ class ServersTestJSON(base.BaseV2ComputeTest): self.assertEqual("", self.server['image']) else: self.assertEqual(self.image_ref, self.server['image']['id']) - self.assertEqual(self.flavor_ref, self.server['flavor']['id']) + self.assert_flavor_equal(self.flavor_ref, self.server['flavor']) self.assertEqual(self.meta, self.server['metadata']) @decorators.attr(type='smoke') diff --git a/tempest/api/compute/servers/test_server_actions.py b/tempest/api/compute/servers/test_server_actions.py index bbec30ca50..2ae2883c67 100644 --- a/tempest/api/compute/servers/test_server_actions.py +++ b/tempest/api/compute/servers/test_server_actions.py @@ -197,7 +197,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest): self.assertEqual(self.server_id, rebuilt_server['id']) rebuilt_image_id = rebuilt_server['image']['id'] self.assertTrue(self.image_ref_alt.endswith(rebuilt_image_id)) - self.assertEqual(self.flavor_ref, rebuilt_server['flavor']['id']) + self.assert_flavor_equal(self.flavor_ref, rebuilt_server['flavor']) # Verify the server properties after the rebuild completes waiters.wait_for_server_status(self.client, @@ -251,7 +251,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest): self.assertEqual(self.server_id, rebuilt_server['id']) rebuilt_image_id = rebuilt_server['image']['id'] self.assertEqual(new_image, rebuilt_image_id) - self.assertEqual(self.flavor_ref, rebuilt_server['flavor']['id']) + self.assert_flavor_equal(self.flavor_ref, rebuilt_server['flavor']) # Verify the server properties after the rebuild completes waiters.wait_for_server_status(self.client, @@ -303,7 +303,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest): expected_status) server = self.client.show_server(server_id)['server'] - self.assertEqual(self.flavor_ref_alt, server['flavor']['id']) + self.assert_flavor_equal(self.flavor_ref_alt, server['flavor']) if stop: # NOTE(mriedem): tearDown requires the server to be started. @@ -367,7 +367,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest): waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE') server = self.client.show_server(self.server_id)['server'] - self.assertEqual(self.flavor_ref, server['flavor']['id']) + self.assert_flavor_equal(self.flavor_ref, server['flavor']) @decorators.idempotent_id('b963d4f1-94b3-4c40-9e97-7b583f46e470') @testtools.skipUnless(CONF.compute_feature_enabled.snapshot, diff --git a/tempest/scenario/test_network_advanced_server_ops.py b/tempest/scenario/test_network_advanced_server_ops.py index 87ce951e2f..b6c3bbca5f 100644 --- a/tempest/scenario/test_network_advanced_server_ops.py +++ b/tempest/scenario/test_network_advanced_server_ops.py @@ -196,7 +196,14 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest): 'VERIFY_RESIZE') self.servers_client.confirm_resize_server(server['id']) server = self.servers_client.show_server(server['id'])['server'] - self.assertEqual(resize_flavor, server['flavor']['id']) + # Nova API > 2.46 no longer includes flavor.id, and schema check + # will cover whether 'id' should be in flavor + if server['flavor'].get('id'): + self.assertEqual(resize_flavor, server['flavor']['id']) + else: + flavor = self.flavors_client.show_flavor(resize_flavor)['flavor'] + for key in ['original_name', 'ram', 'vcpus', 'disk']: + self.assertEqual(flavor[key], server['flavor'][key]) self._wait_server_status_and_check_network_connectivity( server, keypair, floating_ip)