Minimize the tests footprint in multinode job

multinode job run all the tests including multinode and
non multinode tests. But we do not need to run all the
non multinode tests in this job instead smoke tests along
with multinode tests should be enough to run. This make
multinode jobs to run only smoke and multinode tests. For
that, we need to tag the multinode tests with 'multinode' attr.

Relavant-Bug: #2004780
Change-Id: I7e87d1db3ef3a00b3d27f0904d0af6a270e03837
This commit is contained in:
Ghanshyam Mann 2023-02-10 19:31:52 -06:00 committed by Ghanshyam
parent 6bb98c2aa4
commit e2183ca8f6
10 changed files with 42 additions and 10 deletions

View File

@ -140,6 +140,7 @@ class LiveMigrationTest(LiveMigrationTestBase):
LOG.info("Live migrate back to source %s", source_host)
self._live_migrate(server_id, source_host, state, volume_backed)
@decorators.attr(type='multinode')
@decorators.idempotent_id('1dce86b8-eb04-4c03-a9d8-9c1dc3ee0c7b')
@testtools.skipUnless(CONF.compute_feature_enabled.
block_migration_for_live_migration,
@ -148,6 +149,7 @@ class LiveMigrationTest(LiveMigrationTestBase):
"""Test live migrating an active server"""
self._test_live_migration()
@decorators.attr(type='multinode')
@decorators.idempotent_id('1e107f21-61b2-4988-8f22-b196e938ab88')
@testtools.skipUnless(CONF.compute_feature_enabled.
block_migration_for_live_migration,
@ -158,6 +160,7 @@ class LiveMigrationTest(LiveMigrationTestBase):
"""Test live migrating a paused server"""
self._test_live_migration(state='PAUSED')
@decorators.attr(type='multinode')
@testtools.skipUnless(CONF.compute_feature_enabled.
volume_backed_live_migration,
'Volume-backed live migration not available')
@ -167,6 +170,7 @@ class LiveMigrationTest(LiveMigrationTestBase):
"""Test live migrating an active server booted from volume"""
self._test_live_migration(volume_backed=True)
@decorators.attr(type='multinode')
@decorators.idempotent_id('e19c0cc6-6720-4ed8-be83-b6603ed5c812')
@testtools.skipIf(not CONF.compute_feature_enabled.
block_migration_for_live_migration,
@ -253,6 +257,7 @@ class LiveMigrationTest(LiveMigrationTestBase):
port = self.ports_client.show_port(port_id)['port']
return port['status'] == 'ACTIVE'
@decorators.attr(type='multinode')
@decorators.idempotent_id('0022c12e-a482-42b0-be2d-396b5f0cffe3')
@utils.requires_ext(service='network', extension='trunk')
@utils.services('network')
@ -297,6 +302,7 @@ class LiveMigrationRemoteConsolesV26Test(LiveMigrationTestBase):
min_microversion = '2.6'
max_microversion = 'latest'
@decorators.attr(type='multinode')
@decorators.idempotent_id('6190af80-513e-4f0f-90f2-9714e84955d7')
@testtools.skipUnless(CONF.compute_feature_enabled.serial_console,
'Serial console not supported.')

View File

@ -158,6 +158,7 @@ class MigrationsAdminTest(base.BaseV2ComputeAdminTest):
dst_host = self.get_host_for_server(server['id'])
assert_func(src_host, dst_host)
@decorators.attr(type='multinode')
@decorators.idempotent_id('4bf0be52-3b6f-4746-9a27-3143636fe30d')
@testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
'Cold migration not available.')
@ -165,6 +166,7 @@ class MigrationsAdminTest(base.BaseV2ComputeAdminTest):
"""Test cold migrating server and then confirm the migration"""
self._test_cold_migrate_server(revert=False)
@decorators.attr(type='multinode')
@decorators.idempotent_id('caa1aa8b-f4ef-4374-be0d-95f001c2ac2d')
@testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
'Cold migration not available.')

View File

@ -61,6 +61,7 @@ class ServersOnMultiNodesTest(base.BaseV2ComputeAdminTest):
return hosts
@decorators.attr(type='multinode')
@decorators.idempotent_id('26a9d5df-6890-45f2-abc4-a659290cb130')
@testtools.skipUnless(
compute.is_scheduler_filter_enabled("SameHostFilter"),
@ -73,6 +74,7 @@ class ServersOnMultiNodesTest(base.BaseV2ComputeAdminTest):
host02 = self.get_host_for_server(server02)
self.assertEqual(self.host01, host02)
@decorators.attr(type='multinode')
@decorators.idempotent_id('cc7ca884-6e3e-42a3-a92f-c522fcf25e8e')
@testtools.skipUnless(
compute.is_scheduler_filter_enabled("DifferentHostFilter"),
@ -85,6 +87,7 @@ class ServersOnMultiNodesTest(base.BaseV2ComputeAdminTest):
host02 = self.get_host_for_server(server02)
self.assertNotEqual(self.host01, host02)
@decorators.attr(type='multinode')
@decorators.idempotent_id('7869cc84-d661-4e14-9f00-c18cdc89cf57')
@testtools.skipUnless(
compute.is_scheduler_filter_enabled("DifferentHostFilter"),
@ -97,6 +100,7 @@ class ServersOnMultiNodesTest(base.BaseV2ComputeAdminTest):
host02 = self.get_host_for_server(server02)
self.assertNotEqual(self.host01, host02)
@decorators.attr(type='multinode')
@decorators.idempotent_id('f8bd0867-e459-45f5-ba53-59134552fe04')
@testtools.skipUnless(
compute.is_scheduler_filter_enabled("ServerGroupAntiAffinityFilter"),
@ -112,6 +116,7 @@ class ServersOnMultiNodesTest(base.BaseV2ComputeAdminTest):
self.assertNotEqual(hostnames[0], hostnames[1],
'Servers are on the same host: %s' % hosts)
@decorators.attr(type='multinode')
@decorators.idempotent_id('9d2e924a-baf4-11e7-b856-fa163e65f5ce')
@testtools.skipUnless(
compute.is_scheduler_filter_enabled("ServerGroupAffinityFilter"),
@ -152,6 +157,7 @@ class UnshelveToHostMultiNodesTest(base.BaseV2ComputeAdminTest):
waiters.wait_for_server_status(self.servers_client, server['id'],
'ACTIVE')
@decorators.attr(type='multinode')
@decorators.idempotent_id('b5cc0889-50c2-46a0-b8ff-b5fb4c3a6e20')
def test_unshelve_to_specific_host(self):
"""Test unshelve to a specific host, new behavior introduced in

View File

@ -218,7 +218,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
@testtools.skipUnless(CONF.compute.min_compute_nodes > 1,
'Less than 2 compute nodes, skipping multinode '
'tests.')
@decorators.attr(type='slow')
@decorators.attr(type=['slow', 'multinode'])
@utils.services('compute', 'network')
def test_server_connectivity_cold_migration(self):
keypair = self.create_keypair()
@ -244,7 +244,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
@testtools.skipUnless(CONF.compute.min_compute_nodes > 1,
'Less than 2 compute nodes, skipping multinode '
'tests.')
@decorators.attr(type='slow')
@decorators.attr(type=['slow', 'multinode'])
@utils.services('compute', 'network')
def test_server_connectivity_live_migration(self):
keypair = self.create_keypair()
@ -289,7 +289,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
@testtools.skipUnless(CONF.compute.min_compute_nodes > 1,
'Less than 2 compute nodes, skipping multinode '
'tests.')
@decorators.attr(type='slow')
@decorators.attr(type=['slow', 'multinode'])
@utils.services('compute', 'network')
def test_server_connectivity_cold_migration_revert(self):
keypair = self.create_keypair()

View File

@ -278,6 +278,7 @@ class MinBwAllocationPlacementTest(NetworkQoSPlacementTestBase):
port = self.os_admin.ports_client.show_port(not_valid_port['id'])
self.assertEqual(0, len(port['port']['binding:profile']))
@decorators.attr(type='multinode')
@decorators.idempotent_id('8a98150c-a506-49a5-96c6-73a5e7b04ada')
@testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
'Cold migration is not available.')
@ -851,6 +852,7 @@ class QoSBandwidthAndPacketRateTests(NetworkQoSPlacementTestBase):
self.assert_allocations(server, port, min_kbps, min_kpps)
@decorators.attr(type='multinode')
@decorators.idempotent_id('bdd0b31c-c8b0-4b7b-b80a-545a46b32abe')
@testtools.skipUnless(
CONF.compute_feature_enabled.cold_migration,
@ -1033,6 +1035,7 @@ class QoSBandwidthAndPacketRateTests(NetworkQoSPlacementTestBase):
self.assert_allocations(server, port2, 0, 0)
@decorators.attr(type='multinode')
@decorators.idempotent_id('36ffdb85-6cc2-4cc9-a426-cad5bac8626b')
@testtools.skipUnless(
CONF.compute.min_compute_nodes > 1,

View File

@ -480,6 +480,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
direction='ingress')
return ruleset
@decorators.attr(type='multinode')
@decorators.idempotent_id('e79f879e-debb-440c-a7e4-efeda05b6848')
@utils.services('compute', 'network')
def test_cross_tenant_traffic(self):
@ -510,6 +511,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
self._log_console_output_for_all_tenants()
raise
@decorators.attr(type='multinode')
@decorators.idempotent_id('63163892-bbf6-4249-aa12-d5ea1f8f421b')
@utils.services('compute', 'network')
def test_in_tenant_traffic(self):
@ -524,7 +526,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
raise
@decorators.idempotent_id('f4d556d7-1526-42ad-bafb-6bebf48568f6')
@decorators.attr(type='slow')
@decorators.attr(type=['slow', 'multinode'])
@utils.services('compute', 'network')
def test_port_update_new_security_group(self):
"""Verifies the traffic after updating the vm port
@ -578,7 +580,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
raise
@decorators.idempotent_id('d2f77418-fcc4-439d-b935-72eca704e293')
@decorators.attr(type='slow')
@decorators.attr(type=['slow', 'multinode'])
@utils.services('compute', 'network')
def test_multiple_security_groups(self):
"""Verify multiple security groups and checks that rules
@ -610,7 +612,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
private_key=private_key,
should_connect=True)
@decorators.attr(type='slow')
@decorators.attr(type=['slow', 'multinode'])
@utils.requires_ext(service='network', extension='port-security')
@decorators.idempotent_id('7c811dcc-263b-49a3-92d2-1b4d8405f50c')
@utils.services('compute', 'network')
@ -650,7 +652,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
self._log_console_output_for_all_tenants()
raise
@decorators.attr(type='slow')
@decorators.attr(type=['slow', 'multinode'])
@utils.requires_ext(service='network', extension='port-security')
@decorators.idempotent_id('13ccf253-e5ad-424b-9c4a-97b88a026699')
# TODO(mriedem): We shouldn't actually need to check this since neutron

View File

@ -35,7 +35,7 @@ class TestServerMultinode(manager.ScenarioTest):
"Less than 2 compute nodes, skipping multinode tests.")
@decorators.idempotent_id('9cecbe35-b9d4-48da-a37e-7ce70aa43d30')
@decorators.attr(type='smoke')
@decorators.attr(type=['smoke', 'multinode'])
@utils.services('compute', 'network')
def test_schedule_to_all_nodes(self):
available_zone = \

View File

@ -119,7 +119,7 @@ class TestShelveInstance(manager.ScenarioTest):
def test_shelve_volume_backed_instance(self):
self._create_server_then_shelve_and_unshelve(boot_from_volume=True)
@decorators.attr(type='slow')
@decorators.attr(type=['slow', 'multinode'])
@decorators.idempotent_id('1295fd9e-193a-4cf8-b211-55358e021bae')
@testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.')

12
tox.ini
View File

@ -301,6 +301,18 @@ commands =
find . -type f -name "*.pyc" -delete
tempest run --regex {[testenv:slow]regex} {posargs}
[testenv:multinode]
envdir = .tox/tempest
sitepackages = {[tempestenv]sitepackages}
basepython = {[tempestenv]basepython}
setenv = {[tempestenv]setenv}
deps = {[tempestenv]deps}
# The regex below is used to select the multinode and smoke tagged tests
regex = '\[.*\bsmoke|multinode\b.*\]'
commands =
find . -type f -name "*.pyc" -delete
tempest run --regex {[testenv:multinode]regex} {posargs}
[testenv:ipv6-only]
envdir = .tox/tempest
sitepackages = {[tempestenv]sitepackages}

View File

@ -72,7 +72,8 @@
and a tempest one exist.
timeout: 10800
vars:
tox_envlist: full
# This job run multinode and smoke tests.
tox_envlist: multinode
devstack_localrc:
FORCE_CONFIG_DRIVE: false
NOVA_ALLOW_MOVE_TO_SAME_HOST: false