Merge "Add extension "subnet-external-network""
diff --git a/neutron_tempest_plugin/api/admin/test_logging.py b/neutron_tempest_plugin/api/admin/test_logging.py
index b76377d..dda31b4 100644
--- a/neutron_tempest_plugin/api/admin/test_logging.py
+++ b/neutron_tempest_plugin/api/admin/test_logging.py
@@ -15,12 +15,9 @@
from tempest.lib.common.utils import data_utils
from tempest.lib import decorators
from tempest.lib import exceptions
-import testscenarios
from neutron_tempest_plugin.api import base
-load_tests = testscenarios.load_tests_apply_scenarios
-
class LoggingTestJSON(base.BaseAdminNetworkTest):
diff --git a/neutron_tempest_plugin/api/test_qos.py b/neutron_tempest_plugin/api/test_qos.py
index 448f391..f1867d1 100644
--- a/neutron_tempest_plugin/api/test_qos.py
+++ b/neutron_tempest_plugin/api/test_qos.py
@@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+
+import ddt
from neutron_lib.api.definitions import qos as qos_apidef
from neutron_lib import constants as n_constants
from neutron_lib.services.qos import constants as qos_consts
@@ -20,14 +22,11 @@
from tempest.lib.common.utils import test_utils
from tempest.lib import decorators
from tempest.lib import exceptions
-
-import testscenarios
import testtools
from neutron_tempest_plugin.api import base
from neutron_tempest_plugin import config
-load_tests = testscenarios.load_tests_apply_scenarios
CONF = config.CONF
@@ -484,15 +483,6 @@
policy_id, rule['id'])
return rule
- @property
- def opposite_direction(self):
- if self.direction == "ingress":
- return "egress"
- elif self.direction == "egress":
- return "ingress"
- else:
- return None
-
@decorators.idempotent_id('8a59b00b-3e9c-4787-92f8-93a5cdf5e378')
def test_rule_create(self):
policy = self.create_qos_policy(name=self.policy_name,
@@ -544,17 +534,20 @@
@decorators.idempotent_id('149a6988-2568-47d2-931e-2dbc858943b3')
def test_rule_update(self):
+ self._test_rule_update(opposite_direction=None)
+
+ def _test_rule_update(self, opposite_direction=None):
policy = self.create_qos_policy(name=self.policy_name,
description='test policy',
shared=False)
rule = self._create_qos_bw_limit_rule(
policy['id'], {'max_kbps': 1, 'max_burst_kbps': 1})
- if self.opposite_direction:
+ if opposite_direction:
self.qos_bw_limit_rule_client.update_limit_bandwidth_rule(
policy['id'], rule['id'],
**{'max_kbps': 200, 'max_burst_kbps': 1337,
- 'direction': self.opposite_direction})
+ 'direction': opposite_direction})
else:
self.qos_bw_limit_rule_client.update_limit_bandwidth_rule(
policy['id'], rule['id'],
@@ -564,8 +557,8 @@
retrieved_policy = retrieved_policy['bandwidth_limit_rule']
self.assertEqual(200, retrieved_policy['max_kbps'])
self.assertEqual(1337, retrieved_policy['max_burst_kbps'])
- if self.opposite_direction:
- self.assertEqual(self.opposite_direction,
+ if opposite_direction:
+ self.assertEqual(opposite_direction,
retrieved_policy['direction'])
@decorators.idempotent_id('67ee6efd-7b33-4a68-927d-275b4f8ba958')
@@ -697,16 +690,13 @@
policy['id'])
+@ddt.ddt
class QosBandwidthLimitRuleWithDirectionTestJSON(
QosBandwidthLimitRuleTestJSON):
required_extensions = (
QosBandwidthLimitRuleTestJSON.required_extensions +
['qos-bw-limit-direction']
)
- scenarios = [
- ('ingress', {'direction': 'ingress'}),
- ('egress', {'direction': 'egress'}),
- ]
@classmethod
@base.require_qos_rule_type(qos_consts.RULE_TYPE_BANDWIDTH_LIMIT)
@@ -753,6 +743,13 @@
{'max_kbps': 1025, 'max_burst_kbps': 1025,
'direction': n_constants.INGRESS_DIRECTION})
+ @decorators.idempotent_id('7ca7c83b-0555-4a0f-a422-4338f77f79e5')
+ @ddt.unpack
+ @ddt.data({'opposite_direction': 'ingress'},
+ {'opposite_direction': 'egress'})
+ def test_rule_update(self, opposite_direction):
+ self._test_rule_update(opposite_direction=opposite_direction)
+
class RbacSharedQosPoliciesTest(base.BaseAdminNetworkTest):
diff --git a/neutron_tempest_plugin/fwaas/scenario/test_fwaas_v2.py b/neutron_tempest_plugin/fwaas/scenario/test_fwaas_v2.py
index 4d5fdac..9896073 100644
--- a/neutron_tempest_plugin/fwaas/scenario/test_fwaas_v2.py
+++ b/neutron_tempest_plugin/fwaas/scenario/test_fwaas_v2.py
@@ -14,8 +14,6 @@
# under the License.
-import testscenarios
-
from oslo_log import log as logging
from tempest.common import utils
from tempest import config
@@ -28,7 +26,6 @@
CONF = config.CONF
LOG = logging.getLogger(__name__)
-load_tests = testscenarios.load_tests_apply_scenarios
class TestFWaaS_v2(base.FWaaSScenarioTest_V2):
diff --git a/neutron_tempest_plugin/scenario/base.py b/neutron_tempest_plugin/scenario/base.py
index 9d53f79..72139de 100644
--- a/neutron_tempest_plugin/scenario/base.py
+++ b/neutron_tempest_plugin/scenario/base.py
@@ -236,7 +236,7 @@
@classmethod
def _wait_for_router_ha_active(cls, router_id):
router = cls.os_admin.network_client.show_router(router_id)['router']
- if not router.get('ha'):
+ if not router.get('ha') or cls.is_driver_ovn:
return
def _router_active_on_l3_agent():
@@ -285,7 +285,8 @@
client.delete_interface(server_id, port_id=port_id)
def setup_network_and_server(self, router=None, server_name=None,
- network=None, **kwargs):
+ network=None, use_stateless_sg=False,
+ **kwargs):
"""Create network resources and a server.
Creating a network, subnet, router, keypair, security group
@@ -296,8 +297,13 @@
self.subnet = self.create_subnet(self.network)
LOG.debug("Created subnet %s", self.subnet['id'])
+ sg_args = {
+ 'name': data_utils.rand_name('secgroup')
+ }
+ if use_stateless_sg:
+ sg_args['stateful'] = False
secgroup = self.os_primary.network_client.create_security_group(
- name=data_utils.rand_name('secgroup'))
+ **sg_args)
LOG.debug("Created security group %s",
secgroup['security_group']['name'])
self.security_groups.append(secgroup['security_group'])
@@ -307,6 +313,9 @@
self.keypair = self.create_keypair()
self.create_loginable_secgroup_rule(
secgroup_id=secgroup['security_group']['id'])
+ if use_stateless_sg:
+ self.create_ingress_metadata_secgroup_rule(
+ secgroup_id=secgroup['security_group']['id'])
server_kwargs = {
'flavor_ref': CONF.compute.flavor_ref,
diff --git a/neutron_tempest_plugin/scenario/test_floatingip.py b/neutron_tempest_plugin/scenario/test_floatingip.py
index 804683d..f222396 100644
--- a/neutron_tempest_plugin/scenario/test_floatingip.py
+++ b/neutron_tempest_plugin/scenario/test_floatingip.py
@@ -15,6 +15,7 @@
import time
+import ddt
from neutron_lib import constants as lib_constants
from neutron_lib.services.qos import constants as qos_consts
from neutron_lib.utils import test
@@ -24,8 +25,6 @@
from tempest.lib.common.utils import data_utils
from tempest.lib import decorators
from tempest.lib import exceptions
-import testscenarios
-from testscenarios.scenarios import multiply_scenarios
import testtools
from neutron_tempest_plugin.api import base as base_api
@@ -41,9 +40,6 @@
LOG = log.getLogger(__name__)
-load_tests = testscenarios.load_tests_apply_scenarios
-
-
class FloatingIpTestCasesMixin(object):
credentials = ['primary', 'admin']
@@ -104,10 +100,10 @@
constants.SERVER_STATUS_ACTIVE)
return {'port': port, 'fip': fip, 'server': server}
- def _test_east_west(self):
+ def _test_east_west(self, src_has_fip, dest_has_fip):
# The proxy VM is used to control the source VM when it doesn't
# have a floating-ip.
- if self.src_has_fip:
+ if src_has_fip:
proxy = None
proxy_client = None
else:
@@ -117,7 +113,7 @@
pkey=self.keypair['private_key'])
# Source VM
- if self.src_has_fip:
+ if src_has_fip:
src_server = self._create_server()
src_server_ip = src_server['fip']['floating_ip_address']
else:
@@ -129,7 +125,7 @@
proxy_client=proxy_client)
# Destination VM
- if self.dest_has_fip:
+ if dest_has_fip:
dest_server = self._create_server(network=self._dest_network)
else:
dest_server = self._create_server(create_floating_ip=False,
@@ -139,46 +135,46 @@
self.check_remote_connectivity(ssh_client,
dest_server['port']['fixed_ips'][0]['ip_address'],
servers=[src_server, dest_server])
- if self.dest_has_fip:
+ if dest_has_fip:
self.check_remote_connectivity(ssh_client,
dest_server['fip']['floating_ip_address'],
servers=[src_server, dest_server])
+@ddt.ddt
class FloatingIpSameNetwork(FloatingIpTestCasesMixin,
base.BaseTempestTestCase):
- scenarios = multiply_scenarios([
- ('SRC with FIP', dict(src_has_fip=True)),
- ('SRC without FIP', dict(src_has_fip=False)),
- ], [
- ('DEST with FIP', dict(dest_has_fip=True)),
- ('DEST without FIP', dict(dest_has_fip=False)),
- ])
same_network = True
@test.unstable_test("bug 1717302")
@decorators.idempotent_id('05c4e3b3-7319-4052-90ad-e8916436c23b')
- def test_east_west(self):
- self._test_east_west()
+ @ddt.unpack
+ @ddt.data({'src_has_fip': True, 'dest_has_fip': True},
+ {'src_has_fip': True, 'dest_has_fip': False},
+ {'src_has_fip': False, 'dest_has_fip': True},
+ {'src_has_fip': True, 'dest_has_fip': False})
+ def test_east_west(self, src_has_fip, dest_has_fip):
+ self._test_east_west(src_has_fip=src_has_fip,
+ dest_has_fip=dest_has_fip)
+@ddt.ddt
class FloatingIpSeparateNetwork(FloatingIpTestCasesMixin,
base.BaseTempestTestCase):
- scenarios = multiply_scenarios([
- ('SRC with FIP', dict(src_has_fip=True)),
- ('SRC without FIP', dict(src_has_fip=False)),
- ], [
- ('DEST with FIP', dict(dest_has_fip=True)),
- ('DEST without FIP', dict(dest_has_fip=False)),
- ])
same_network = False
@test.unstable_test("bug 1717302")
@decorators.idempotent_id('f18f0090-3289-4783-b956-a0f8ac511e8b')
- def test_east_west(self):
- self._test_east_west()
+ @ddt.unpack
+ @ddt.data({'src_has_fip': True, 'dest_has_fip': True},
+ {'src_has_fip': True, 'dest_has_fip': False},
+ {'src_has_fip': False, 'dest_has_fip': True},
+ {'src_has_fip': True, 'dest_has_fip': False})
+ def test_east_west(self, src_has_fip, dest_has_fip):
+ self._test_east_west(src_has_fip=src_has_fip,
+ dest_has_fip=dest_has_fip)
class DefaultSnatToExternal(FloatingIpTestCasesMixin,
@@ -243,9 +239,13 @@
self.os_primary.interfaces_client, server['server']['id'],
port['id'], lib_constants.PORT_STATUS_ACTIVE)
fip = self.client.show_floatingip(fip['id'])['floatingip']
+ server_data = self.os_admin.servers_client.show_server(
+ server['server']['id'])['server']
+ zone = 'compute:' + server_data['OS-EXT-AZ:availability_zone']
self._check_port_details(
fip, port, status=lib_constants.PORT_STATUS_ACTIVE,
- device_id=server['server']['id'], device_owner='compute:nova')
+ device_id=server['server']['id'],
+ device_owner=zone)
LOG.debug('Port check for server %s and FIP %s finished, '
'lets detach port %s from server!',
server['server']['id'], fip['id'], port['id'])
diff --git a/neutron_tempest_plugin/scenario/test_portsecurity.py b/neutron_tempest_plugin/scenario/test_portsecurity.py
index c90db08..db0a056 100644
--- a/neutron_tempest_plugin/scenario/test_portsecurity.py
+++ b/neutron_tempest_plugin/scenario/test_portsecurity.py
@@ -11,7 +11,9 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
+import testtools
+from tempest.common import utils
from tempest.lib import decorators
from neutron_tempest_plugin import config
@@ -24,15 +26,14 @@
credentials = ['primary', 'admin']
required_extensions = ['port-security']
- @decorators.idempotent_id('61ab176e-d48b-42b7-b38a-1ba571ecc033')
- def test_port_security_removed_added(self):
+ def _test_port_security_removed_added(self, use_stateless_sg):
"""Test connection works after port security has been removed
Initial test that vm is accessible. Then port security is removed,
checked connectivity. Port security is added back and checked
connectivity again.
"""
- self.setup_network_and_server()
+ self.setup_network_and_server(use_stateless_sg=use_stateless_sg)
self.check_connectivity(self.fip['floating_ip_address'],
CONF.validation.image_ssh_user,
self.keypair['private_key'])
@@ -51,3 +52,18 @@
self.check_connectivity(self.fip['floating_ip_address'],
CONF.validation.image_ssh_user,
self.keypair['private_key'])
+
+ @decorators.idempotent_id('61ab176e-d48b-42b7-b38a-1ba571ecc033')
+ def test_port_security_removed_added_stateful_sg(self):
+ self._test_port_security_removed_added(use_stateless_sg=False)
+
+ @decorators.idempotent_id('2f4005e1-cee1-40e5-adbd-b3e3cf218065')
+ @testtools.skipUnless(
+ utils.is_extension_enabled('stateful-security-group', 'network'),
+ "'stateful-security-group' API extension not available")
+ @testtools.skipIf(
+ CONF.neutron_plugin_options.firewall_driver in ['openvswitch', 'None'],
+ "Firewall driver other than 'openvswitch' is required to use "
+ "stateless security groups.")
+ def test_port_security_removed_added_stateless_sg(self):
+ self._test_port_security_removed_added(use_stateless_sg=True)
diff --git a/requirements.txt b/requirements.txt
index 34531e9..9423079 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -16,6 +16,5 @@
tenacity>=3.2.1 # Apache-2.0
ddt>=1.0.1 # MIT
testtools>=2.2.0 # MIT
-testscenarios>=0.4 # Apache-2.0/BSD
eventlet!=0.18.3,!=0.20.1,>=0.18.2 # MIT
debtcollector>=1.2.0 # Apache-2.0
diff --git a/zuul.d/2023_1_jobs.yaml b/zuul.d/2023_1_jobs.yaml
index b9f293f..6bf7027 100644
--- a/zuul.d/2023_1_jobs.yaml
+++ b/zuul.d/2023_1_jobs.yaml
@@ -214,6 +214,9 @@
(^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
devstack_localrc:
NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_ovn) | join(',') }}"
+ devstack_services:
+ q-ovn-metadata-agent: true
+ q-ovn-agent: false
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
diff --git a/zuul.d/2023_2_jobs.yaml b/zuul.d/2023_2_jobs.yaml
index f5ece3d..87092a9 100644
--- a/zuul.d/2023_2_jobs.yaml
+++ b/zuul.d/2023_2_jobs.yaml
@@ -209,6 +209,9 @@
(^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
devstack_localrc:
NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_ovn) | join(',') }}"
+ devstack_services:
+ q-ovn-metadata-agent: true
+ q-ovn-agent: false
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
diff --git a/zuul.d/2024_1_jobs.yaml b/zuul.d/2024_1_jobs.yaml
new file mode 100644
index 0000000..022e439
--- /dev/null
+++ b/zuul.d/2024_1_jobs.yaml
@@ -0,0 +1,271 @@
+- job:
+ name: neutron-tempest-plugin-openvswitch-2024-1
+ parent: neutron-tempest-plugin-openvswitch
+ override-checkout: stable/2024.1
+ vars:
+ network_api_extensions_openvswitch: &api_extensions_openvswitch
+ - dhcp_agent_scheduler
+ - local_ip
+ - qos-bw-minimum-ingress
+ tempest_test_regex: "\
+ (^neutron_tempest_plugin.api)|\
+ (^neutron_tempest_plugin.scenario)|\
+ (^tempest.api.compute.servers.test_attach_interfaces)|\
+ (^tempest.api.compute.servers.test_multiple_create)"
+ network_available_features: &available_features
+ - ipv6_metadata
+ network_api_extensions_common: &api_extensions
+ - address-group
+ - address-scope
+ - agent
+ - allowed-address-pairs
+ - auto-allocated-topology
+ - availability_zone
+ - binding
+ - default-subnetpools
+ - dns-domain-ports
+ - dns-integration
+ - dns-integration-domain-keywords
+ - empty-string-filtering
+ - expose-port-forwarding-in-fip
+ - expose-l3-conntrack-helper
+ - ext-gw-mode
+ - external-net
+ - extra_dhcp_opt
+ - extraroute
+ - extraroute-atomic
+ - filter-validation
+ - fip-port-details
+ - flavors
+ - floating-ip-port-forwarding
+ - floating-ip-port-forwarding-detail
+ - floatingip-pools
+ - ip-substring-filtering
+ - l3-conntrack-helper
+ - l3-ext-ndp-proxy
+ - l3-flavors
+ - l3-ha
+ - l3-ndp-proxy
+ - l3_agent_scheduler
+ - metering
+ - multi-provider
+ - net-mtu
+ - net-mtu-writable
+ - network-ip-availability
+ - network_availability_zone
+ - network-segment-range
+ - pagination
+ - port-device-profile
+ - port-mac-address-regenerate
+ - port-resource-request
+ - port-resource-request-groups
+ - port-security
+ - port-security-groups-filtering
+ - project-id
+ - provider
+ - qos
+ - qos-fip
+ - quotas
+ - quota_details
+ - rbac-address-group
+ - rbac-address-scope
+ - rbac-policies
+ - rbac-security-groups
+ - rbac-subnetpool
+ - router
+ - router_availability_zone
+ - security-group
+ - security-groups-default-rules
+ - security-groups-normalized-cidr
+ - security-groups-remote-address-group
+ - segment
+ - service-type
+ - sorting
+ - standard-attr-description
+ - standard-attr-revisions
+ - standard-attr-segment
+ - standard-attr-tag
+ - standard-attr-timestamp
+ - stateful-security-group
+ - subnet_allocation
+ - subnet-dns-publish-fixed-ip
+ - subnet-service-types
+ - subnetpool-prefix-ops
+ - tag-ports-during-bulk-creation
+ - trunk
+ - trunk-details
+ - uplink-status-propagation
+ devstack_localrc:
+ NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_openvswitch) | join(',') }}"
+ devstack_local_conf:
+ test-config:
+ $TEMPEST_CONFIG:
+ network-feature-enabled:
+ available_features: "{{ network_available_features | join(',') }}"
+
+- job:
+ name: neutron-tempest-plugin-openvswitch-iptables_hybrid-2024-1
+ parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
+ override-checkout: stable/2024.1
+ vars:
+ network_api_extensions_common: *api_extensions
+ network_api_extensions_openvswitch: *api_extensions_openvswitch
+ network_available_features: *available_features
+ tempest_test_regex: "\
+ (^neutron_tempest_plugin.api)|\
+ (^neutron_tempest_plugin.scenario)|\
+ (^tempest.api.compute.servers.test_attach_interfaces)|\
+ (^tempest.api.compute.servers.test_multiple_create)"
+ # TODO(slaweq): remove trunks subport_connectivity test from blacklist
+ # when bug https://bugs.launchpad.net/neutron/+bug/1838760 will be fixed
+ # TODO(akatz): remove established tcp session verification test when the
+ # bug https://bugzilla.redhat.com/show_bug.cgi?id=1965036 will be fixed
+ tempest_exclude_regex: "\
+ (^neutron_tempest_plugin.scenario.test_trunk.TrunkTest.test_subport_connectivity)|\
+ (^neutron_tempest_plugin.scenario.test_security_groups.StatefulNetworkSecGroupTest.test_established_tcp_session_after_re_attachinging_sg)|\
+ (^neutron_tempest_plugin.scenario.test_security_groups.StatelessNetworkSecGroupTest.test_established_tcp_session_after_re_attachinging_sg)"
+ devstack_localrc:
+ NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_openvswitch) | join(',') }}"
+ devstack_local_conf:
+ test-config:
+ $TEMPEST_CONFIG:
+ network-feature-enabled:
+ available_features: "{{ network_available_features | join(',') }}"
+ neutron_plugin_options:
+ available_type_drivers: flat,vlan,local,vxlan
+ firewall_driver: iptables_hybrid
+
+- job:
+ name: neutron-tempest-plugin-openvswitch-enforce-scope-new-defaults-2024-1
+ parent: neutron-tempest-plugin-openvswitch-2024-1
+ override-checkout: stable/2024.1
+ vars:
+ devstack_localrc:
+ # Enabeling the scope and new defaults for services.
+ # NOTE: (gmann) We need to keep keystone scope check disable as
+ # services (except ironic) does not support the system scope and
+ # they need keystone to continue working with project scope. Until
+ # Keystone policies are changed to work for both system as well as
+ # for project scoped, we need to keep scope check disable for
+ # keystone.
+ NOVA_ENFORCE_SCOPE: true
+ GLANCE_ENFORCE_SCOPE: true
+ NEUTRON_ENFORCE_SCOPE: true
+
+- job:
+ name: neutron-tempest-plugin-linuxbridge-2024-1
+ parent: neutron-tempest-plugin-linuxbridge
+ override-checkout: stable/2024.1
+ vars:
+ network_api_extensions_common: *api_extensions
+ network_api_extensions_linuxbridge:
+ - dhcp_agent_scheduler
+ - vlan-transparent
+ network_available_features: *available_features
+ tempest_test_regex: "\
+ (^neutron_tempest_plugin.api)|\
+ (^neutron_tempest_plugin.scenario)|\
+ (^tempest.api.compute.servers.test_attach_interfaces)|\
+ (^tempest.api.compute.servers.test_multiple_create)"
+ # TODO(eolivare): remove VLAN Transparency tests from blacklist
+ # when bug https://bugs.launchpad.net/neutron/+bug/1907548 will be fixed
+ # TODO(slaweq): remove
+ # test_established_tcp_session_after_re_attachinging_sg from the
+ # exclude regex when bug https://bugs.launchpad.net/neutron/+bug/1936911
+ # will be fixed
+ # TODO(slaweq) remove test_floatingip_port_details from the exclude
+ # regex when bug https://bugs.launchpad.net/neutron/+bug/1799790 will be
+ # fixed
+ tempest_exclude_regex: "\
+ (^neutron_tempest_plugin.scenario.test_vlan_transparency.VlanTransparencyTest)|\
+ (^neutron_tempest_plugin.scenario.test_security_groups.StatefulNetworkSecGroupTest.test_established_tcp_session_after_re_attachinging_sg)|\
+ (^neutron_tempest_plugin.scenario.test_security_groups.StatelessNetworkSecGroupTest.test_established_tcp_session_after_re_attachinging_sg)|\
+ (^neutron_tempest_plugin.scenario.test_floatingip.FloatingIPPortDetailsTest.test_floatingip_port_details)"
+ devstack_localrc:
+ NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_linuxbridge) | join(',') }}"
+ devstack_local_conf:
+ test-config:
+ $TEMPEST_CONFIG:
+ network-feature-enabled:
+ available_features: "{{ network_available_features | join(',') }}"
+ neutron_plugin_options:
+ available_type_drivers: flat,vlan,local,vxlan
+ q_agent: linuxbridge
+ firewall_driver: iptables
+
+- job:
+ name: neutron-tempest-plugin-ovn-2024-1
+ parent: neutron-tempest-plugin-ovn
+ override-checkout: stable/2024.1
+ vars:
+ network_api_extensions_ovn:
+ - vlan-transparent
+ tempest_test_regex: "\
+ (^neutron_tempest_plugin.api)|\
+ (^neutron_tempest_plugin.scenario)|\
+ (^tempest.api.compute.servers.test_attach_interfaces)|\
+ (^tempest.api.compute.servers.test_multiple_create)"
+ # TODO(jlibosva): Remove the NetworkWritableMtuTest test from the list
+ # once east/west fragmentation is supported in core OVN
+ tempest_exclude_regex: "\
+ (^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
+ devstack_localrc:
+ NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_ovn) | join(',') }}"
+ devstack_local_conf:
+ test-config:
+ $TEMPEST_CONFIG:
+ network-feature-enabled:
+ available_features: ""
+ neutron_plugin_options:
+ available_type_drivers: local,flat,vlan,geneve
+ is_igmp_snooping_enabled: True
+ firewall_driver: ovn
+
+- job:
+ name: neutron-tempest-plugin-dvr-multinode-scenario-2024-1
+ parent: neutron-tempest-plugin-dvr-multinode-scenario
+ override-checkout: stable/2024.1
+ vars:
+ network_api_extensions_common: *api_extensions
+ network_api_extensions_dvr:
+ - dhcp_agent_scheduler
+ - dvr
+ devstack_localrc:
+ NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_dvr) | join(',') }}"
+
+- job:
+ name: neutron-tempest-plugin-designate-scenario-2024-1
+ parent: neutron-tempest-plugin-designate-scenario
+ override-checkout: stable/2024.1
+ vars:
+ network_api_extensions_common: *api_extensions
+
+- job:
+ name: neutron-tempest-plugin-sfc-2024-1
+ parent: neutron-tempest-plugin-sfc
+ override-checkout: stable/2024.1
+
+- job:
+ name: neutron-tempest-plugin-bgpvpn-bagpipe-2024-1
+ parent: neutron-tempest-plugin-bgpvpn-bagpipe
+ override-checkout: stable/2024.1
+
+- job:
+ name: neutron-tempest-plugin-dynamic-routing-2024-1
+ parent: neutron-tempest-plugin-dynamic-routing
+ override-checkout: stable/2024.1
+
+- job:
+ name: neutron-tempest-plugin-fwaas-2024-1
+ parent: neutron-tempest-plugin-fwaas
+ override-checkout: stable/2024.1
+
+- job:
+ name: neutron-tempest-plugin-vpnaas-2024-1
+ parent: neutron-tempest-plugin-vpnaas
+ override-checkout: stable/2024.1
+
+- job:
+ name: neutron-tempest-plugin-tap-as-a-service-2024-1
+ parent: neutron-tempest-plugin-tap-as-a-service
+ override-checkout: stable/2024.1
diff --git a/zuul.d/master_jobs.yaml b/zuul.d/master_jobs.yaml
index adfa5b0..d47ff64 100644
--- a/zuul.d/master_jobs.yaml
+++ b/zuul.d/master_jobs.yaml
@@ -606,6 +606,7 @@
(^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
devstack_localrc:
Q_AGENT: ovn
+ OVN_AGENT_EXTENSIONS: 'metadata'
NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_ovn) | join(',') }}"
Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn,logger
Q_ML2_PLUGIN_TYPE_DRIVERS: local,flat,vlan,geneve
@@ -627,7 +628,8 @@
devstack_services:
br-ex-tcpdump: true
br-int-flows: true
- q-ovn-metadata-agent: true
+ q-ovn-metadata-agent: false
+ q-ovn-agent: true
ovn-controller: true
ovn-northd: true
ovs-vswitchd: true
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index 494e652..35a3e7f 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -155,6 +155,24 @@
- neutron-tempest-plugin-linuxbridge-2023-2
- neutron-tempest-plugin-dvr-multinode-scenario-2023-2
+- project-template:
+ name: neutron-tempest-plugin-jobs-2024-1
+ check:
+ jobs:
+ - neutron-tempest-plugin-openvswitch-2024-1
+ - neutron-tempest-plugin-openvswitch-iptables_hybrid-2024-1
+ - neutron-tempest-plugin-ovn-2024-1
+ - neutron-tempest-plugin-designate-scenario-2024-1
+ gate:
+ jobs:
+ - neutron-tempest-plugin-ovn-2024-1
+ #TODO(slaweq): Move neutron-tempest-plugin-dvr-multinode-scenario out of
+ # the experimental queue when it will be more stable
+ experimental:
+ jobs:
+ - neutron-tempest-plugin-linuxbridge-2024-1
+ - neutron-tempest-plugin-dvr-multinode-scenario-2024-1
+
- project:
templates:
- build-openstack-docs-pti
@@ -162,6 +180,7 @@
- neutron-tempest-plugin-jobs-zed
- neutron-tempest-plugin-jobs-2023-1
- neutron-tempest-plugin-jobs-2023-2
+ - neutron-tempest-plugin-jobs-2024-1
- check-requirements
- tempest-plugin-jobs
- release-notes-jobs-python3
@@ -171,27 +190,33 @@
- neutron-tempest-plugin-sfc-zed
- neutron-tempest-plugin-sfc-2023-1
- neutron-tempest-plugin-sfc-2023-2
+ - neutron-tempest-plugin-sfc-2024-1
- neutron-tempest-plugin-bgpvpn-bagpipe
- neutron-tempest-plugin-bgpvpn-bagpipe-zed
- neutron-tempest-plugin-bgpvpn-bagpipe-2023-1
- neutron-tempest-plugin-bgpvpn-bagpipe-2023-2
+ - neutron-tempest-plugin-bgpvpn-bagpipe-2024-1
- neutron-tempest-plugin-dynamic-routing
- neutron-tempest-plugin-dynamic-routing-zed
- neutron-tempest-plugin-dynamic-routing-2023-1
- neutron-tempest-plugin-dynamic-routing-2023-2
+ - neutron-tempest-plugin-dynamic-routing-2024-1
- neutron-tempest-plugin-fwaas
- neutron-tempest-plugin-fwaas-zed
- neutron-tempest-plugin-fwaas-2023-1
- neutron-tempest-plugin-fwaas-2023-2
+ - neutron-tempest-plugin-fwaas-2024-1
- neutron-tempest-plugin-vpnaas
- neutron-tempest-plugin-vpnaas-ovn
- neutron-tempest-plugin-vpnaas-zed
- neutron-tempest-plugin-vpnaas-2023-1
- neutron-tempest-plugin-vpnaas-2023-2
+ - neutron-tempest-plugin-vpnaas-2024-1
- neutron-tempest-plugin-tap-as-a-service
- neutron-tempest-plugin-tap-as-a-service-zed
- neutron-tempest-plugin-tap-as-a-service-2023-1
- neutron-tempest-plugin-tap-as-a-service-2023-2
+ - neutron-tempest-plugin-tap-as-a-service-2024-1
gate:
jobs:
diff --git a/zuul.d/victoria_jobs.yaml b/zuul.d/victoria_jobs.yaml
index 1f611db..7e2549f 100644
--- a/zuul.d/victoria_jobs.yaml
+++ b/zuul.d/victoria_jobs.yaml
@@ -240,6 +240,9 @@
CUSTOMIZE_IMAGE: false
OVN_BRANCH: "v21.06.0"
OVS_BRANCH: "a4b04276ab5934d087669ff2d191a23931335c87"
+ devstack_services:
+ q-ovn-metadata-agent: true
+ q-ovn-agent: false
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
diff --git a/zuul.d/wallaby_jobs.yaml b/zuul.d/wallaby_jobs.yaml
index 92a3e50..8a771b8 100644
--- a/zuul.d/wallaby_jobs.yaml
+++ b/zuul.d/wallaby_jobs.yaml
@@ -177,6 +177,9 @@
NETWORK_API_EXTENSIONS: "{{ network_api_extensions | join(',') }}"
OVN_BRANCH: "v21.06.0"
OVS_BRANCH: "a4b04276ab5934d087669ff2d191a23931335c87"
+ devstack_services:
+ q-ovn-metadata-agent: true
+ q-ovn-agent: false
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
diff --git a/zuul.d/xena_jobs.yaml b/zuul.d/xena_jobs.yaml
index 25d63a9..9f8e960 100644
--- a/zuul.d/xena_jobs.yaml
+++ b/zuul.d/xena_jobs.yaml
@@ -170,6 +170,9 @@
network_api_extensions: *api_extensions
devstack_localrc:
NETWORK_API_EXTENSIONS: "{{ network_api_extensions | join(',') }}"
+ devstack_services:
+ q-ovn-metadata-agent: true
+ q-ovn-agent: false
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
diff --git a/zuul.d/yoga_jobs.yaml b/zuul.d/yoga_jobs.yaml
index 8951943..76cac3e 100644
--- a/zuul.d/yoga_jobs.yaml
+++ b/zuul.d/yoga_jobs.yaml
@@ -180,6 +180,9 @@
- vlan-transparent
devstack_localrc:
NETWORK_API_EXTENSIONS: "{{ (network_api_extensions + network_api_extensions_ovn) | join(',') }}"
+ devstack_services:
+ q-ovn-metadata-agent: true
+ q-ovn-agent: false
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
diff --git a/zuul.d/zed_jobs.yaml b/zuul.d/zed_jobs.yaml
index 8c70a66..7d8b2e1 100644
--- a/zuul.d/zed_jobs.yaml
+++ b/zuul.d/zed_jobs.yaml
@@ -183,6 +183,9 @@
- vlan-transparent
devstack_localrc:
NETWORK_API_EXTENSIONS: "{{ (network_api_extensions + network_api_extensions_ovn) | join(',') }}"
+ devstack_services:
+ q-ovn-metadata-agent: true
+ q-ovn-agent: false
devstack_local_conf:
test-config:
$TEMPEST_CONFIG: