From 11b689299722e75a2c1f2fb15cce52f05b2e4cd3 Mon Sep 17 00:00:00 2001 From: Yarboa Date: Thu, 7 Jan 2021 13:03:35 +0200 Subject: [PATCH] New test, extends test_subport_connectivity Related-Bug: #1869244 Adding new test, test_subport_connectivity_soft_reboot The test is checking trunks and ports are recreated during server reboots, especialy in ovs_dpdk ports, Since test flow is variant of test_subport_connectivity Two methods added and used in the tests: _create_servers_with_trunk_port _check_servers_remote_connectivity Change-Id: Ia5fbe680bb904680f52e0e15056d629717a643af --- neutron_tempest_plugin/config.py | 3 + neutron_tempest_plugin/scenario/test_trunk.py | 103 +++++++++++++----- 2 files changed, 80 insertions(+), 26 deletions(-) diff --git a/neutron_tempest_plugin/config.py b/neutron_tempest_plugin/config.py index 38123836..36fec308 100644 --- a/neutron_tempest_plugin/config.py +++ b/neutron_tempest_plugin/config.py @@ -97,6 +97,9 @@ NeutronPluginOptions = [ cfg.IntOpt('ssh_proxy_jump_port', default=22, help='Port used to connect to "ssh_proxy_jump_host".'), + cfg.IntOpt('reboots_in_test', + default=1, + help='Number of reboots to apply if tests requires reboots'), # Options for special, "advanced" image like e.g. Ubuntu. Such image can be # used in tests which require some more advanced tool than available in diff --git a/neutron_tempest_plugin/scenario/test_trunk.py b/neutron_tempest_plugin/scenario/test_trunk.py index 8f260eae..b86c0191 100644 --- a/neutron_tempest_plugin/scenario/test_trunk.py +++ b/neutron_tempest_plugin/scenario/test_trunk.py @@ -97,6 +97,37 @@ class TrunkTest(base.BaseTempestTestCase): floating_ip=floating_ip, server=server, ssh_client=ssh_client) + def _create_advanced_servers_with_trunk_port(self, num_servers=1, + subport_network=None, + segmentation_id=None, + vlan_subnet=None, + use_advanced_image=False): + server_list = [] + for _ in range(0, num_servers): + vm = self._create_server_with_trunk_port( + subport_network, + segmentation_id, + use_advanced_image) + server_list.append(vm) + self._configure_vlan_subport( + vm=vm, + vlan_tag=segmentation_id, + vlan_subnet=vlan_subnet) + + for server in server_list: + self.check_connectivity( + host=vm.floating_ip['floating_ip_address'], + ssh_client=vm.ssh_client) + + return server_list + + def _check_servers_remote_connectivity(self, vms=None, + should_succeed=True): + self.check_remote_connectivity( + vms[0].ssh_client, + vms[1].subport['fixed_ips'][0]['ip_address'], + should_succeed=should_succeed) + def _create_server_port(self, network=None, **params): network = network or self.network return self.create_port(network=network, name=self.rand_name, @@ -247,53 +278,73 @@ class TrunkTest(base.BaseTempestTestCase): self._wait_for_trunk(vm.trunk) self._assert_has_ssh_connectivity(vm1.ssh_client) + @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.") + @testtools.skipUnless( + (CONF.neutron_plugin_options.reboots_in_test > 0), + "Number of reboots > 0 is reqired for this test") + @decorators.idempotent_id('a8a02c9b-b453-49b5-89a2-cce7da6680fb') + def test_subport_connectivity_soft_reboot(self): + vlan_tag = 10 + vlan_network = self.create_network() + vlan_subnet = self.create_subnet(network=vlan_network, gateway=None) + use_advanced_image = ( + not CONF.neutron_plugin_options.default_image_is_advanced) + + # allow intra-security-group traffic + 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']) + + vms = self._create_advanced_servers_with_trunk_port( + num_servers=2, + subport_network=vlan_network, + segmentation_id=vlan_tag, + vlan_subnet=vlan_subnet, + use_advanced_image=use_advanced_image) + # check remote connectivity true before reboots + self._check_servers_remote_connectivity(vms=vms) + client = self.os_tempest.compute.ServersClient() + for _ in range(CONF.neutron_plugin_options.reboots_in_test): + client.reboot_server(vms[1].server['id'], + **{'type': 'SOFT'}) + self.wait_for_server_active(vms[1].server) + self._configure_vlan_subport(vm=vms[1], + vlan_tag=vlan_tag, + vlan_subnet=vlan_subnet) + self._check_servers_remote_connectivity(vms=vms) + @test.unstable_test("bug 1897796") @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.idempotent_id('a8a02c9b-b453-49b5-89a2-cce7da66aafb') + @decorators.idempotent_id('a8a02c9b-b453-49b5-89a2-cce7da66bbcb') def test_subport_connectivity(self): vlan_tag = 10 vlan_network = self.create_network() vlan_subnet = self.create_subnet(network=vlan_network, gateway=None) - use_advanced_image = ( not CONF.neutron_plugin_options.default_image_is_advanced) - - vm1 = self._create_server_with_trunk_port( + vms = self._create_advanced_servers_with_trunk_port( + num_servers=2, subport_network=vlan_network, segmentation_id=vlan_tag, + vlan_subnet=vlan_subnet, use_advanced_image=use_advanced_image) - vm2 = self._create_server_with_trunk_port( - subport_network=vlan_network, - segmentation_id=vlan_tag, - use_advanced_image=use_advanced_image) - - for vm in [vm1, vm2]: - self.check_connectivity( - host=vm.floating_ip['floating_ip_address'], - ssh_client=vm.ssh_client) - self._configure_vlan_subport(vm=vm, - vlan_tag=vlan_tag, - vlan_subnet=vlan_subnet) - # Ping from server1 to server2 via VLAN interface should fail because # we haven't allowed ICMP - self.check_remote_connectivity( - vm1.ssh_client, - vm2.subport['fixed_ips'][0]['ip_address'], - should_succeed=False) - + self._check_servers_remote_connectivity(vms=vms, + should_succeed=False) # allow intra-security-group traffic 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]) + self._check_servers_remote_connectivity(vms=vms) @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration, 'Cold migration is not available.')