From baf14a5d92ed87656444d2d55d1f7622e9640805 Mon Sep 17 00:00:00 2001 From: Alex Katz Date: Thu, 5 Mar 2020 11:31:19 +0200 Subject: [PATCH] Test connectivity after migration of the server with trunk Verify that server with VLAN aware port can be correctly migrated to another compute node. The original issue has been mentioned in the following bugzilla + Fixed the issue when security group rule that allows icmp traffic is not removed after the test https://bugzilla.redhat.com/show_bug.cgi?id=1694624 Change-Id: I519e2685dbc9d0ae0011b7b9f8a04c705f31ef3b --- neutron_tempest_plugin/scenario/test_trunk.py | 70 ++++++++++++++++++- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/neutron_tempest_plugin/scenario/test_trunk.py b/neutron_tempest_plugin/scenario/test_trunk.py index 7fd6c52d..585af063 100644 --- a/neutron_tempest_plugin/scenario/test_trunk.py +++ b/neutron_tempest_plugin/scenario/test_trunk.py @@ -39,7 +39,7 @@ ServerWithTrunkPort = collections.namedtuple( class TrunkTest(base.BaseTempestTestCase): - credentials = ['primary'] + credentials = ['primary', 'admin'] force_tenant_isolation = False @classmethod @@ -279,12 +279,73 @@ class TrunkTest(base.BaseTempestTestCase): should_succeed=False) # allow intra-security-group traffic - self.create_pingable_secgroup_rule(self.security_group['id']) + sg_rule = self.create_pingable_secgroup_rule(self.security_group['id']) + self.addCleanup( + self.os_primary.network_client.delete_security_group_rule, + sg_rule['id']) self.check_remote_connectivity( vm1.ssh_client, vm2.subport['fixed_ips'][0]['ip_address'], servers=[vm1, vm2]) + @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration, + 'Cold migration is not available.') + @testtools.skipUnless(CONF.compute.min_compute_nodes > 1, + 'Less than 2 compute nodes, skipping multinode ' + 'tests.') + @testtools.skipUnless( + (CONF.neutron_plugin_options.advanced_image_ref or + CONF.neutron_plugin_options.default_image_is_advanced), + "Advanced image is required to run this test.") + @decorators.attr(type='slow') + @decorators.idempotent_id('ecd7de30-1c90-4280-b97c-1bed776d5d07') + def test_trunk_vm_migration(self): + '''Test connectivity after migration of the server with trunk + + A successfully migrated server shows a VERIFY_RESIZE status that + requires confirmation. Need to reconfigure VLAN interface on server + side after migration is finished as the configuration doesn't survive + the reboot. + ''' + vlan_tag = 10 + vlan_network = self.create_network() + vlan_subnet = self.create_subnet(vlan_network) + sg_rule = self.create_pingable_secgroup_rule(self.security_group['id']) + self.addCleanup( + self.os_primary.network_client.delete_security_group_rule, + sg_rule['id']) + + use_advanced_image = ( + not CONF.neutron_plugin_options.default_image_is_advanced) + servers = {} + for role in ['migrate', 'connection_test']: + servers[role] = self._create_server_with_trunk_port( + subport_network=vlan_network, + segmentation_id=vlan_tag, + use_advanced_image=use_advanced_image) + for role in ['migrate', 'connection_test']: + self.wait_for_server_active(servers[role].server) + self._configure_vlan_subport(vm=servers[role], + vlan_tag=vlan_tag, + vlan_subnet=vlan_subnet) + + self.check_remote_connectivity( + servers['connection_test'].ssh_client, + servers['migrate'].subport['fixed_ips'][0]['ip_address']) + + client = self.os_admin.compute.ServersClient() + client.migrate_server(servers['migrate'].server['id']) + self.wait_for_server_status(servers['migrate'].server, + 'VERIFY_RESIZE') + client.confirm_resize_server(servers['migrate'].server['id']) + self._configure_vlan_subport(vm=servers['migrate'], + vlan_tag=vlan_tag, + vlan_subnet=vlan_subnet) + + self.check_remote_connectivity( + servers['connection_test'].ssh_client, + servers['migrate'].subport['fixed_ips'][0]['ip_address']) + @testtools.skipUnless( (CONF.neutron_plugin_options.advanced_image_ref or CONF.neutron_plugin_options.default_image_is_advanced), @@ -318,7 +379,10 @@ class TrunkTest(base.BaseTempestTestCase): self.wait_for_server_active(vm.server) # allow ICMP traffic - self.create_pingable_secgroup_rule(self.security_group['id']) + sg_rule = self.create_pingable_secgroup_rule(self.security_group['id']) + self.addCleanup( + self.os_primary.network_client.delete_security_group_rule, + sg_rule['id']) # Ping from trunk_network_server to normal_network_server # via parent port