Merge "Use LOG.warning instead of deprecated LOG.warn"
diff --git a/neutron_tempest_plugin/api/test_security_groups.py b/neutron_tempest_plugin/api/test_security_groups.py
index 0970d83..d251f8c 100644
--- a/neutron_tempest_plugin/api/test_security_groups.py
+++ b/neutron_tempest_plugin/api/test_security_groups.py
@@ -143,6 +143,47 @@
' is: {}'.format(same_name_sg_number))
+class StatelessSecGroupTest(base.BaseAdminNetworkTest):
+
+ required_extensions = ['security-group', 'stateful-security-group']
+
+ @decorators.idempotent_id('0a6c1476-3d1a-11ec-b0ec-0800277ac3d9')
+ def test_stateless_security_group_update(self):
+ security_group = self.create_security_group(stateful=True)
+
+ # List security groups and verify if created group is there in response
+ security_groups = self.client.list_security_groups()['security_groups']
+ found = False
+ for sg in security_groups:
+ if sg['id'] == security_group['id']:
+ found = True
+ break
+ self.assertTrue(found)
+ self.assertTrue(sg['stateful'])
+
+ # Switch to stateless
+ updated_security_group = self.client.update_security_group(
+ security_group['id'], stateful=False)['security_group']
+
+ # Verify if security group is updated
+ self.assertFalse(updated_security_group['stateful'])
+
+ observed_security_group = self.client.show_security_group(
+ security_group['id'])['security_group']
+ self.assertFalse(observed_security_group['stateful'])
+
+ # Switch back to stateful
+ updated_security_group = self.client.update_security_group(
+ security_group['id'], stateful=True)['security_group']
+
+ # Verify if security group is stateful again
+ self.assertTrue(updated_security_group['stateful'])
+
+ observed_security_group = self.client.show_security_group(
+ security_group['id'])['security_group']
+ self.assertTrue(observed_security_group['stateful'])
+
+
class BaseSecGroupQuota(base.BaseAdminNetworkTest):
def _create_max_allowed_sg_amount(self):
diff --git a/neutron_tempest_plugin/scenario/admin/test_floatingip.py b/neutron_tempest_plugin/scenario/admin/test_floatingip.py
index a08acc3..d9abaf5 100644
--- a/neutron_tempest_plugin/scenario/admin/test_floatingip.py
+++ b/neutron_tempest_plugin/scenario/admin/test_floatingip.py
@@ -28,6 +28,14 @@
credentials = ['primary', 'admin']
@classmethod
+ def setup_clients(cls):
+ super(FloatingIpTestCasesAdmin, cls).setup_clients()
+ # admin_client set in BaseAdminNetworkTest but here we inherit from
+ # BaseNetworkTest
+ if not cls.admin_client:
+ cls.admin_client = cls.os_admin.network_client
+
+ @classmethod
@utils.requires_ext(extension="router", service="network")
def resource_setup(cls):
super(FloatingIpTestCasesAdmin, cls).resource_setup()
@@ -75,7 +83,7 @@
waiters.wait_for_server_status(
self.os_admin.servers_client, server['server']['id'],
const.SERVER_STATUS_ACTIVE)
- port = self.client.list_ports(
+ port = self.admin_client.list_ports(
network_id=self.network['id'],
device_id=server['server']['id']
)['ports'][0]
diff --git a/neutron_tempest_plugin/scenario/test_mac_learning.py b/neutron_tempest_plugin/scenario/test_mac_learning.py
index 736d46c..6cd894f 100644
--- a/neutron_tempest_plugin/scenario/test_mac_learning.py
+++ b/neutron_tempest_plugin/scenario/test_mac_learning.py
@@ -14,8 +14,10 @@
# under the License.
from oslo_log import log
+from paramiko import ssh_exception as ssh_exc
from tempest.lib.common.utils import data_utils
from tempest.lib import decorators
+from tempest.lib import exceptions as lib_exc
from neutron_tempest_plugin.common import ssh
from neutron_tempest_plugin.common import utils
@@ -116,17 +118,22 @@
pkey=self.keypair['private_key'])
return server
- def _check_cmd_installed_on_server(self, ssh_client, server_id, cmd):
+ def _check_cmd_installed_on_server(self, ssh_client, server, cmd):
try:
ssh_client.execute_script('which %s' % cmd)
+ except (lib_exc.SSHTimeout, ssh_exc.AuthenticationException) as ssh_e:
+ LOG.debug(ssh_e)
+ self._log_console_output([server])
+ self._log_local_network_status()
+ raise
except exceptions.SSHScriptFailed:
raise self.skipException(
- "%s is not available on server %s" % (cmd, server_id))
+ "%s is not available on server %s" % (cmd, server['id']))
def _prepare_sender(self, server, address):
check_script = get_sender_script(self.sender_output_file, address,
self.completed_message)
- self._check_cmd_installed_on_server(server['ssh_client'], server['id'],
+ self._check_cmd_installed_on_server(server['ssh_client'], server,
'tcpdump')
server['ssh_client'].execute_script(
'echo "%s" > %s' % (check_script, self.sender_script_file))
@@ -135,7 +142,7 @@
check_script = get_receiver_script(
result_file=self.output_file,
packets_expected=n_packets)
- self._check_cmd_installed_on_server(server['ssh_client'], server['id'],
+ self._check_cmd_installed_on_server(server['ssh_client'], server,
'tcpdump')
server['ssh_client'].execute_script(
'echo "%s" > %s' % (check_script, self.receiver_script_file))
diff --git a/neutron_tempest_plugin/scenario/test_multicast.py b/neutron_tempest_plugin/scenario/test_multicast.py
index 726d1e0..acfb75c 100644
--- a/neutron_tempest_plugin/scenario/test_multicast.py
+++ b/neutron_tempest_plugin/scenario/test_multicast.py
@@ -16,8 +16,10 @@
import netaddr
from neutron_lib import constants
from oslo_log import log
+from paramiko import ssh_exception as ssh_exc
from tempest.lib.common.utils import data_utils
from tempest.lib import decorators
+from tempest.lib import exceptions as lib_exc
from neutron_tempest_plugin.common import ip
from neutron_tempest_plugin.common import ssh
@@ -210,15 +212,20 @@
self.username,
pkey=self.keypair['private_key'])
self._check_cmd_installed_on_server(server['ssh_client'],
- server['id'], PYTHON3_BIN)
+ server, PYTHON3_BIN)
return server
- def _check_cmd_installed_on_server(self, ssh_client, server_id, cmd):
+ def _check_cmd_installed_on_server(self, ssh_client, server, cmd):
try:
ssh_client.execute_script('which %s' % cmd)
+ except (lib_exc.SSHTimeout, ssh_exc.AuthenticationException) as ssh_e:
+ LOG.debug(ssh_e)
+ self._log_console_output([server])
+ self._log_local_network_status()
+ raise
except exceptions.SSHScriptFailed:
raise self.skipException(
- "%s is not available on server %s" % (cmd, server_id))
+ "%s is not available on server %s" % (cmd, server['id']))
def _prepare_sender(self, server, mcast_address):
check_script = get_sender_script(
@@ -237,7 +244,7 @@
server['fip']['floating_ip_address'],
self.username,
pkey=self.keypair['private_key'])
- self._check_cmd_installed_on_server(ssh_client, server['id'],
+ self._check_cmd_installed_on_server(ssh_client, server,
PYTHON3_BIN)
server['ssh_client'].execute_script(
'echo "%s" > /tmp/multicast_traffic_receiver.py' % check_script)
@@ -253,7 +260,7 @@
check_script = get_unregistered_script(
interface=port_iface, group=mcast_address,
result_file=self.unregistered_output_file)
- self._check_cmd_installed_on_server(ssh_client, server['id'],
+ self._check_cmd_installed_on_server(ssh_client, server,
'tcpdump')
server['ssh_client'].execute_script(
'echo "%s" > /tmp/unregistered_traffic_receiver.sh' % check_script)
diff --git a/neutron_tempest_plugin/scenario/test_trunk.py b/neutron_tempest_plugin/scenario/test_trunk.py
index b86c019..b994775 100644
--- a/neutron_tempest_plugin/scenario/test_trunk.py
+++ b/neutron_tempest_plugin/scenario/test_trunk.py
@@ -114,11 +114,6 @@
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,
@@ -197,6 +192,10 @@
self._wait_for_trunk(trunk=vm.trunk)
self._wait_for_port(port=vm.port)
self._wait_for_port(port=vm.subport)
+ self.check_connectivity(
+ host=vm.floating_ip['floating_ip_address'],
+ ssh_client=vm.ssh_client,
+ servers=[vm.server])
ip_command = ip.IPCommand(ssh_client=vm.ssh_client)
for address in ip_command.list_addresses(port=vm.port):
diff --git a/zuul.d/master_jobs.yaml b/zuul.d/master_jobs.yaml
index b167689..0139f8e 100644
--- a/zuul.d/master_jobs.yaml
+++ b/zuul.d/master_jobs.yaml
@@ -74,6 +74,7 @@
- standard-attr-segment
- standard-attr-tag
- standard-attr-timestamp
+ - stateful-security-group
- subnet_allocation
- subnet-dns-publish-fixed-ip
- subnet-service-types
diff --git a/zuul.d/rocky_jobs.yaml b/zuul.d/rocky_jobs.yaml
index 4043535..0c968c3 100644
--- a/zuul.d/rocky_jobs.yaml
+++ b/zuul.d/rocky_jobs.yaml
@@ -200,9 +200,21 @@
neutron_plugin_options:
available_type_drivers: flat,vlan,local,vxlan
firewall_driver: openvswitch
- tempest_black_regex: "\
+ # NOTE(bcafarel): filtering out unstable tests or tests with known
+ # issues in the used pinned version for this EM branch
+ tempest_black_regex: &rocky_tempest_exclude "\
+ (^neutron_tempest_plugin.scenario.admin.test_floatingip.FloatingIpTestCasesAdmin.test_two_vms_fips)|\
+ (^neutron_tempest_plugin.scenario.test_floatingip.FloatingIPQosTest.test_qos)|\
+ (^neutron_tempest_plugin.scenario.test_internal_dns.InternalDNSTest.test_dns_domain_and_name)|\
(^neutron_tempest_plugin.scenario.test_port_forwardings.PortForwardingTestJSON.test_port_forwarding_to_2_servers)|\
- (^neutron_tempest_plugin.scenario.test_security_groups.NetworkSecGroupTest.test_multiple_ports_portrange_remote)"
+ (^neutron_tempest_plugin.scenario.test_ports.PortsTest.test_previously_used_port)|\
+ (^neutron_tempest_plugin.scenario.test_security_groups.NetworkSecGroupTest.test_ip_prefix)|\
+ (^neutron_tempest_plugin.scenario.test_security_groups.NetworkSecGroupTest.test_multiple_ports_portrange_remote)|\
+ (^neutron_tempest_plugin.scenario.test_security_groups.NetworkSecGroupTest.test_multiple_ports_secgroup_inheritance)|\
+ (^neutron_tempest_plugin.scenario.test_security_groups.NetworkSecGroupTest.test_remote_group)|\
+ (^neutron_tempest_plugin.scenario.test_trunk.TrunkTest.test_subport_connectivity)|\
+ (^tempest.api.compute.servers.test_attach_interfaces.AttachInterfacesTestJSON.test_reassign_port_between_servers)|\
+ (^tempest.api.compute.servers.test_attach_interfaces.AttachInterfacesUnderV243Test.test_add_remove_fixed_ip)"
branches:
- stable/rocky
irrelevant-files: &openvswitch-scenario-irrelevant-files
@@ -306,13 +318,7 @@
neutron_plugin_options:
available_type_drivers: flat,vlan,local,vxlan
firewall_driver: iptables_hybrid
- # TODO(bcafarel): remove trunks subport_connectivity test from blacklist
- # when bug https://bugs.launchpad.net/neutron/+bug/1838760 will be fixed
- # NOTE(bcafarel): other are newer tests, unstable on rocky branch
- tempest_black_regex: "\
- (^neutron_tempest_plugin.scenario.test_trunk.TrunkTest.test_subport_connectivity)|\
- (^neutron_tempest_plugin.scenario.test_port_forwardings.PortForwardingTestJSON.test_port_forwarding_to_2_servers)|\
- (^neutron_tempest_plugin.scenario.test_security_groups.NetworkSecGroupTest.test_multiple_ports_portrange_remote)"
+ tempest_black_regex: *rocky_tempest_exclude
branches:
- stable/rocky
irrelevant-files: &iptables_hybrid_irrelevant_files
@@ -400,10 +406,7 @@
neutron_plugin_options:
available_type_drivers: flat,vlan,local,vxlan
q_agent: None
- # NOTE(bcafarel): newer tests, unstable on rocky branch
- tempest_black_regex: "\
- (^neutron_tempest_plugin.scenario.test_port_forwardings.PortForwardingTestJSON.test_port_forwarding_to_2_servers)|\
- (^neutron_tempest_plugin.scenario.test_security_groups.NetworkSecGroupTest.test_multiple_ports_portrange_remote)"
+ tempest_black_regex: *rocky_tempest_exclude
branches:
- stable/rocky
@@ -543,10 +546,7 @@
l3_agent_mode: dvr_snat
firewall_driver: openvswitch
branch_override: stable/rocky
- # NOTE(bcafarel): newer tests, unstable on rocky branch
- tempest_black_regex: "\
- (^neutron_tempest_plugin.scenario.test_port_forwardings.PortForwardingTestJSON.test_port_forwarding_to_2_servers)|\
- (^neutron_tempest_plugin.scenario.test_security_groups.NetworkSecGroupTest.test_multiple_ports_portrange_remote)"
+ tempest_black_regex: *rocky_tempest_exclude
branches:
- stable/rocky
group-vars: &multinode_scenario_group_vars_rocky
@@ -634,6 +634,9 @@
USE_PYTHON3: false
TEMPEST_PLUGINS: '"/opt/stack/designate-tempest-plugin /opt/stack/neutron-tempest-plugin"'
ADVANCED_INSTANCE_TYPE: ds512M
+ # NOTE(bcafarel): filtering out unstable tests or tests with known
+ # issues in the used pinned version for this EM branch
+ tempest_black_regex: "(^neutron_tempest_plugin.scenario.test_dns_integration.DNSIntegrationAdminTests.test_port_on_special_network)"
branches:
- stable/rocky