diff --git a/tempest/api/compute/admin/test_live_migration.py b/tempest/api/compute/admin/test_live_migration.py index 2826f56bce..1cb8004f57 100644 --- a/tempest/api/compute/admin/test_live_migration.py +++ b/tempest/api/compute/admin/test_live_migration.py @@ -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.') diff --git a/tempest/api/compute/admin/test_migrations.py b/tempest/api/compute/admin/test_migrations.py index 89152d6bab..b3d283330f 100644 --- a/tempest/api/compute/admin/test_migrations.py +++ b/tempest/api/compute/admin/test_migrations.py @@ -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.') diff --git a/tempest/api/compute/admin/test_servers_on_multinodes.py b/tempest/api/compute/admin/test_servers_on_multinodes.py index 90823062cf..013e7d8197 100644 --- a/tempest/api/compute/admin/test_servers_on_multinodes.py +++ b/tempest/api/compute/admin/test_servers_on_multinodes.py @@ -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 diff --git a/tempest/scenario/test_network_advanced_server_ops.py b/tempest/scenario/test_network_advanced_server_ops.py index e630e29405..f4f37b0871 100644 --- a/tempest/scenario/test_network_advanced_server_ops.py +++ b/tempest/scenario/test_network_advanced_server_ops.py @@ -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() diff --git a/tempest/scenario/test_network_qos_placement.py b/tempest/scenario/test_network_qos_placement.py index 365eb1b7f9..0b2cfcb6bd 100644 --- a/tempest/scenario/test_network_qos_placement.py +++ b/tempest/scenario/test_network_qos_placement.py @@ -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, diff --git a/tempest/scenario/test_security_groups_basic_ops.py b/tempest/scenario/test_security_groups_basic_ops.py index aff7509811..2fc5f328f2 100644 --- a/tempest/scenario/test_security_groups_basic_ops.py +++ b/tempest/scenario/test_security_groups_basic_ops.py @@ -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 diff --git a/tempest/scenario/test_server_multinode.py b/tempest/scenario/test_server_multinode.py index fdf875c4a0..9285da2531 100644 --- a/tempest/scenario/test_server_multinode.py +++ b/tempest/scenario/test_server_multinode.py @@ -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 = \ diff --git a/tempest/scenario/test_shelve_instance.py b/tempest/scenario/test_shelve_instance.py index 29612ec530..204471e367 100644 --- a/tempest/scenario/test_shelve_instance.py +++ b/tempest/scenario/test_shelve_instance.py @@ -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.') diff --git a/tox.ini b/tox.ini index d5b41afbfb..972c05e782 100644 --- a/tox.ini +++ b/tox.ini @@ -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} diff --git a/zuul.d/base.yaml b/zuul.d/base.yaml index 3deb944d4b..2d978c04ed 100644 --- a/zuul.d/base.yaml +++ b/zuul.d/base.yaml @@ -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