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 d0c19737f1..7fbb9941ef 100644 --- a/tempest/api/compute/base.py +++ b/tempest/api/compute/base.py @@ -428,21 +428,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): @@ -561,6 +556,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 961b2b79f7..896abbb285 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('fbbf075f-a812-4022-bc5c-ccb8047eef12') @decorators.related_bug('1737599') diff --git a/tempest/scenario/test_network_advanced_server_ops.py b/tempest/scenario/test_network_advanced_server_ops.py index b0e466925b..7452ee6a1c 100644 --- a/tempest/scenario/test_network_advanced_server_ops.py +++ b/tempest/scenario/test_network_advanced_server_ops.py @@ -197,7 +197,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)