Merge "Add stable/2025.2 job"
diff --git a/octavia_tempest_plugin/common/decorators.py b/octavia_tempest_plugin/common/decorators.py
index b484497..15c3c17 100644
--- a/octavia_tempest_plugin/common/decorators.py
+++ b/octavia_tempest_plugin/common/decorators.py
@@ -52,3 +52,49 @@
message = e.resp_body.get('faultstring', message)
raise testtools.TestCase.skipException(message)
return wrapper
+
+
+def retry_on_port_in_use(start_port, max_retries=3):
+ """Decorator to retry a test function if the specified port is in use.
+
+ This handles cases where a test fails due to a port conflict, typically
+ caused by another service binding the same port on the host. The decorator
+ catches '[Errno 98] Address already in use' errors and retries the test
+ using incrementally higher port numbers.
+
+ The decorated function must accept `port` as its first parameter.
+
+ :param start_port: Initial port to attempt.
+ :param max_retries: Number of retries with incremented port values.
+ """
+ def decorator(func):
+ @wraps(func)
+ def wrapper(self, *args, **kwargs):
+ port = start_port
+ last_exception = None
+
+ for _ in range(max_retries):
+ try:
+ return func(self, port, *args, **kwargs)
+ except exceptions.NotImplemented as e:
+ message = (
+ "The configured provider driver '{driver}' does not "
+ "support a feature required for this test.".format(
+ driver=CONF.load_balancer.provider
+ )
+ )
+ if hasattr(e, 'resp_body'):
+ message = e.resp_body.get('faultstring', message)
+ raise testtools.TestCase.skipException(message)
+
+ except Exception as e:
+ if "Address already in use" in str(e):
+ last_exception = e
+ port += 1
+ else:
+ raise
+
+ raise Exception(f"All port attempts failed after {max_retries} "
+ f"retries. Last error: {last_exception}")
+ return wrapper
+ return decorator
diff --git a/octavia_tempest_plugin/tests/api/v2/test_listener.py b/octavia_tempest_plugin/tests/api/v2/test_listener.py
index 46735a5..249c1ff 100644
--- a/octavia_tempest_plugin/tests/api/v2/test_listener.py
+++ b/octavia_tempest_plugin/tests/api/v2/test_listener.py
@@ -245,14 +245,26 @@
def test_http_listener_create(self):
self._test_listener_create(const.HTTP, 8000)
+ @decorators.idempotent_id('4aaf06a4-a9e0-440d-9ff8-d4be13ddea96')
+ def test_http_listener_create_no_allowed_cidrs(self):
+ self._test_listener_create(const.HTTP, 8100, use_allowed_cidrs=False)
+
@decorators.idempotent_id('2cc89237-fc6b-434d-b38e-b3309823e71f')
def test_https_listener_create(self):
self._test_listener_create(const.HTTPS, 8001)
+ @decorators.idempotent_id('6085be5d-c49c-4275-87a9-2e256dc2ac9b')
+ def test_https_listener_create_no_allowed_cidrs(self):
+ self._test_listener_create(const.HTTPS, 8101, use_allowed_cidrs=False)
+
@decorators.idempotent_id('45580065-5653-436b-aaff-dc465fa0a542')
def test_tcp_listener_create(self):
self._test_listener_create(const.TCP, 8002)
+ @decorators.idempotent_id('f20ab493-d92f-4c86-a053-0d788efaec11')
+ def test_tcp_listener_create_no_allowed_cidrs(self):
+ self._test_listener_create(const.TCP, 8102, use_allowed_cidrs=False)
+
@decorators.idempotent_id('1a6ba0d0-f309-4088-a686-dda0e9ab7e43')
@testtools.skipUnless(
CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
@@ -264,6 +276,18 @@
'on Octavia API version 2.25 or newer.')
self._test_listener_create(const.PROMETHEUS, 8090)
+ @decorators.idempotent_id('bfa264ec-c7dc-487a-9437-cb19d7aec7a3')
+ @testtools.skipUnless(
+ CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
+ 'PROMETHEUS listener tests are disabled in the tempest configuration.')
+ def test_prometheus_listener_create_no_allowed_cidrs(self):
+ if not self.mem_listener_client.is_version_supported(
+ self.api_version, '2.25'):
+ raise self.skipException('PROMETHEUS listeners are only available '
+ 'on Octavia API version 2.25 or newer.')
+ self._test_listener_create(const.PROMETHEUS, 8190,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('df9861c5-4a2a-4122-8d8f-5556156e343e')
@testtools.skipUnless(
CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
@@ -276,15 +300,37 @@
' require the either the barbican service,or running in noop.')
self._test_listener_create(const.TERMINATED_HTTPS, 8095)
+ @decorators.idempotent_id('3f91e0f6-e223-48ad-8c6a-b5a608cc8bb3')
+ @testtools.skipUnless(
+ CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
+ '[loadbalancer-feature-enabled] "terminated_tls_enabled" is '
+ 'False in the tempest configuration. TLS tests will be skipped.')
+ def test_terminated_https_listener_create_no_allowed_cidrs(self):
+ if not self.should_apply_terminated_https():
+ raise self.skipException(
+ f'Listener API tests with {const.TERMINATED_HTTPS} protocol'
+ ' require the either the barbican service,or running in noop.')
+ self._test_listener_create(const.TERMINATED_HTTPS, 8195,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('7b53f336-47bc-45ae-bbd7-4342ef0673fc')
def test_udp_listener_create(self):
self._test_listener_create(const.UDP, 8003)
+ @decorators.idempotent_id('214a837a-7173-46d9-a83b-a6e80f9295da')
+ def test_udp_listener_create_no_allowed_cidrs(self):
+ self._test_listener_create(const.UDP, 8103, use_allowed_cidrs=False)
+
@decorators.idempotent_id('d6d36c32-27ff-4977-9d21-fd71a14e3b20')
def test_sctp_listener_create(self):
self._test_listener_create(const.SCTP, 8004)
- def _test_listener_create(self, protocol, protocol_port):
+ @decorators.idempotent_id('bc38ac9b-7241-4047-b5aa-815f11359cf2')
+ def test_sctp_listener_create_no_allowed_cidrs(self):
+ self._test_listener_create(const.SCTP, 8104, use_allowed_cidrs=False)
+
+ def _test_listener_create(self, protocol, protocol_port,
+ use_allowed_cidrs=True):
"""Tests listener create and basic show APIs.
* Tests that users without the loadbalancer member role cannot
@@ -345,7 +391,7 @@
})
if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ self.api_version, '2.12') and use_allowed_cidrs:
# Test that CIDR IP version matches VIP IP version
bad_cidrs = ['192.0.1.0/24', '2001:db8:a0b:12f0::/64']
listener_kwargs.update({const.ALLOWED_CIDRS: bad_cidrs})
@@ -448,7 +494,7 @@
listener[const.TAGS])
if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ self.api_version, '2.12') and use_allowed_cidrs:
self.assertEqual(self.allowed_cidrs, listener[const.ALLOWED_CIDRS])
@decorators.idempotent_id('cceac303-4db5-4d5a-9f6e-ff33780a5f29')
@@ -679,10 +725,18 @@
def test_http_listener_list(self):
self._test_listener_list(const.HTTP, 8020)
+ @decorators.idempotent_id('3a753098-2b7c-43f9-b3f2-2be5576ec594')
+ def test_http_listener_list_no_allowed_cidrs(self):
+ self._test_listener_list(const.HTTP, 8120, use_allowed_cidrs=False)
+
@decorators.idempotent_id('61b7c643-f5fa-4471-8f9e-2e0ccdaf5ac7')
def test_https_listener_list(self):
self._test_listener_list(const.HTTPS, 8030)
+ @decorators.idempotent_id('e6c05d39-b76a-4245-83c2-0fc889e1e955')
+ def test_https_listener_list_no_allowed_cidrs(self):
+ self._test_listener_list(const.HTTPS, 8130, use_allowed_cidrs=False)
+
@decorators.idempotent_id('5473e071-8277-4ac5-9277-01ecaf46e274')
@testtools.skipUnless(
CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
@@ -694,18 +748,42 @@
'on Octavia API version 2.25 or newer.')
self._test_listener_list(const.PROMETHEUS, 8091)
+ @decorators.idempotent_id('71dd1ab0-b203-468e-9333-690847b848ee')
+ @testtools.skipUnless(
+ CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
+ 'PROMETHEUS listener tests are disabled in the tempest configuration.')
+ def test_prometheus_listener_list_no_allowed_cidrs(self):
+ if not self.mem_listener_client.is_version_supported(
+ self.api_version, '2.25'):
+ raise self.skipException('PROMETHEUS listeners are only available '
+ 'on Octavia API version 2.25 or newer.')
+ self._test_listener_list(const.PROMETHEUS, 8191,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('1cd476e2-7788-415e-bcaf-c377acfc9794')
def test_tcp_listener_list(self):
self._test_listener_list(const.TCP, 8030)
+ @decorators.idempotent_id('bdfe190e-6cee-46ae-a7cf-4acf617339df')
+ def test_tcp_listener_list_no_allowed_cidrs(self):
+ self._test_listener_list(const.TCP, 8130, use_allowed_cidrs=False)
+
@decorators.idempotent_id('c08fb77e-b317-4d6f-b430-91f5b27ebac6')
def test_udp_listener_list(self):
self._test_listener_list(const.UDP, 8040)
+ @decorators.idempotent_id('d2fbaf87-8441-4d66-a1c7-f9e2b246a419')
+ def test_udp_listener_list_no_allowed_cidrs(self):
+ self._test_listener_list(const.UDP, 8140, use_allowed_cidrs=False)
+
@decorators.idempotent_id('0abc3998-aacd-4edd-88f5-c5c35557646f')
def test_sctp_listener_list(self):
self._test_listener_list(const.SCTP, 8041)
+ @decorators.idempotent_id('b8a52d1a-97c9-4356-abe6-2ac9e90eed0c')
+ def test_sctp_listener_list_no_allowed_cidrs(self):
+ self._test_listener_list(const.SCTP, 8141, use_allowed_cidrs=False)
+
@decorators.idempotent_id('aed69f58-fe69-401d-bf07-37b0d6d8437f')
@testtools.skipUnless(
CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
@@ -718,7 +796,21 @@
' require the either the barbican service,or running in noop.')
self._test_listener_list(const.TERMINATED_HTTPS, 8042)
- def _test_listener_list(self, protocol, protocol_port_base):
+ @decorators.idempotent_id('0f0b5021-245e-42bd-84d5-c089c2028cf5')
+ @testtools.skipUnless(
+ CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
+ '[loadbalancer-feature-enabled] "terminated_tls_enabled" is '
+ 'False in the tempest configuration. TLS tests will be skipped.')
+ def test_terminated_https_listener_list_no_allowed_cidrs(self):
+ if not self.should_apply_terminated_https():
+ raise self.skipException(
+ f'Listener API tests with {const.TERMINATED_HTTPS} protocol'
+ ' require the either the barbican service,or running in noop.')
+ self._test_listener_list(const.TERMINATED_HTTPS, 8142,
+ use_allowed_cidrs=False)
+
+ def _test_listener_list(self, protocol, protocol_port_base,
+ use_allowed_cidrs=True):
"""Tests listener list API and field filtering.
* Create a clean loadbalancer.
@@ -1010,7 +1102,7 @@
show_listener_response_fields.append('timeout_member_data')
show_listener_response_fields.append('timeout_tcp_inspect')
if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ self.api_version, '2.12') and use_allowed_cidrs:
show_listener_response_fields.append('allowed_cidrs')
if self.mem_listener_client.is_version_supported(
self.api_version, '2.27'):
@@ -1098,10 +1190,18 @@
def test_http_listener_show(self):
self._test_listener_show(const.HTTP, 8050)
+ @decorators.idempotent_id('f852a76d-f41c-48e4-9c73-6f99d49af581')
+ def test_http_listener_show_no_allowed_cidrs(self):
+ self._test_listener_show(const.HTTP, 8150, use_allowed_cidrs=False)
+
@decorators.idempotent_id('aa838646-435f-4a20-8442-519a7a138e7e')
def test_https_listener_show(self):
self._test_listener_show(const.HTTPS, 8051)
+ @decorators.idempotent_id('00ff83ca-e286-4080-b9ec-850979e676bb')
+ def test_https_listener_show_no_allowed_cidrs(self):
+ self._test_listener_show(const.HTTPS, 8151, use_allowed_cidrs=False)
+
@decorators.idempotent_id('b851b754-4333-4115-9063-a9fce44c2e46')
@testtools.skipUnless(
CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
@@ -1113,18 +1213,42 @@
'on Octavia API version 2.25 or newer.')
self._test_listener_show(const.PROMETHEUS, 8092)
+ @decorators.idempotent_id('6fd0c3ae-d091-4c45-aa72-447581ec7939')
+ @testtools.skipUnless(
+ CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
+ 'PROMETHEUS listener tests are disabled in the tempest configuration.')
+ def test_prometheus_listener_show_no_allowed_cidrs(self):
+ if not self.mem_listener_client.is_version_supported(
+ self.api_version, '2.25'):
+ raise self.skipException('PROMETHEUS listeners are only available '
+ 'on Octavia API version 2.25 or newer.')
+ self._test_listener_show(const.PROMETHEUS, 8192,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('1fcbbee2-b697-4890-b6bf-d308ac1c94cd')
def test_tcp_listener_show(self):
self._test_listener_show(const.TCP, 8052)
+ @decorators.idempotent_id('916d36b8-9211-4a4f-aa84-3ed38477afd3')
+ def test_tcp_listener_show_no_allowed_cidrs(self):
+ self._test_listener_show(const.TCP, 8152, use_allowed_cidrs=False)
+
@decorators.idempotent_id('1dea3a6b-c95b-4e91-b591-1aa9cbcd0d1d')
def test_udp_listener_show(self):
self._test_listener_show(const.UDP, 8053)
+ @decorators.idempotent_id('38201807-28d0-4e29-9796-58db3280484f')
+ def test_udp_listener_show_no_allowed_cidrs(self):
+ self._test_listener_show(const.UDP, 8153, use_allowed_cidrs=False)
+
@decorators.idempotent_id('10992529-1d0a-47a3-855c-3dbcd868db4e')
def test_sctp_listener_show(self):
self._test_listener_show(const.SCTP, 8054)
+ @decorators.idempotent_id('6755f564-c8b1-40a1-8514-4893feb6e54d')
+ def test_sctp_listener_show_no_allowed_cidrs(self):
+ self._test_listener_show(const.SCTP, 8154, use_allowed_cidrs=False)
+
@decorators.idempotent_id('2c2e7146-0efc-44b6-8401-f1c69c2422fe')
@testtools.skipUnless(
CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
@@ -1137,7 +1261,21 @@
' require the either the barbican service,or running in noop.')
self._test_listener_show(const.TERMINATED_HTTPS, 8055)
- def _test_listener_show(self, protocol, protocol_port):
+ @decorators.idempotent_id('9d7bd568-cc8b-49fe-bfed-f612944bd489')
+ @testtools.skipUnless(
+ CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
+ '[loadbalancer-feature-enabled] "terminated_tls_enabled" is '
+ 'False in the tempest configuration. TLS tests will be skipped.')
+ def test_terminated_https_listener_show_no_allowed_cidrs(self):
+ if not self.should_apply_terminated_https():
+ raise self.skipException(
+ f'Listener API tests with {const.TERMINATED_HTTPS} protocol'
+ ' require the either the barbican service,or running in noop.')
+ self._test_listener_show(const.TERMINATED_HTTPS, 8155,
+ use_allowed_cidrs=False)
+
+ def _test_listener_show(self, protocol, protocol_port,
+ use_allowed_cidrs=True):
"""Tests listener show API.
* Create a fully populated listener.
@@ -1199,7 +1337,7 @@
})
if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ self.api_version, '2.12') and use_allowed_cidrs:
listener_kwargs.update({const.ALLOWED_CIDRS: self.allowed_cidrs})
listener = self.mem_listener_client.create_listener(**listener_kwargs)
@@ -1274,7 +1412,7 @@
self.assertEqual(const.ONLINE, listener[const.OPERATING_STATUS])
if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ self.api_version, '2.12') and use_allowed_cidrs:
self.assertEqual(self.allowed_cidrs, listener[const.ALLOWED_CIDRS])
if hsts_supported:
@@ -1299,10 +1437,18 @@
def test_http_listener_update(self):
self._test_listener_update(const.HTTP, 8060)
+ @decorators.idempotent_id('8ee610b6-af92-4a59-8332-370b4d529250')
+ def test_http_listener_update_no_allowed_cidrs(self):
+ self._test_listener_update(const.HTTP, 8160, use_allowed_cidrs=False)
+
@decorators.idempotent_id('9679b061-2b2c-469f-abd9-26ed140ef001')
def test_https_listener_update(self):
self._test_listener_update(const.HTTPS, 8061)
+ @decorators.idempotent_id('cae9f1e2-c395-427a-a150-26ef864d6e83')
+ def test_https_listener_update_no_allowed_cidrs(self):
+ self._test_listener_update(const.HTTPS, 8161, use_allowed_cidrs=False)
+
@decorators.idempotent_id('cbba6bf8-9184-4da5-95e9-5efe1f89ddf0')
@testtools.skipUnless(
CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
@@ -1314,18 +1460,42 @@
'on Octavia API version 2.25 or newer.')
self._test_listener_update(const.PROMETHEUS, 8093)
+ @decorators.idempotent_id('cbc8ffa9-750f-4050-938a-555594f76916')
+ @testtools.skipUnless(
+ CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
+ 'PROMETHEUS listener tests are disabled in the tempest configuration.')
+ def test_prometheus_listener_update_no_allowed_cidrs(self):
+ if not self.mem_listener_client.is_version_supported(
+ self.api_version, '2.25'):
+ raise self.skipException('PROMETHEUS listeners are only available '
+ 'on Octavia API version 2.25 or newer.')
+ self._test_listener_update(const.PROMETHEUS, 8193,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('8d933121-db03-4ccc-8b77-4e879064a9ba')
def test_tcp_listener_update(self):
self._test_listener_update(const.TCP, 8062)
+ @decorators.idempotent_id('64b20147-59f0-4ce5-9390-d03767ae12c4')
+ def test_tcp_listener_update_no_allowed_cidrs(self):
+ self._test_listener_update(const.TCP, 8162, use_allowed_cidrs=False)
+
@decorators.idempotent_id('fd02dbfd-39ce-41c2-b181-54fc7ad91707')
def test_udp_listener_update(self):
self._test_listener_update(const.UDP, 8063)
+ @decorators.idempotent_id('1cf09eeb-c983-4dd6-b5d3-d36fb61830b2')
+ def test_udp_listener_update_no_allowed_cidrs(self):
+ self._test_listener_update(const.UDP, 8163, use_allowed_cidrs=False)
+
@decorators.idempotent_id('c590b485-4e08-4e49-b384-2282b3f6f1b9')
def test_sctp_listener_update(self):
self._test_listener_update(const.SCTP, 8064)
+ @decorators.idempotent_id('818d840a-c1e9-426b-92b9-c5131df2ba4f')
+ def test_sctp_listener_update_no_allowed_cidrs(self):
+ self._test_listener_update(const.SCTP, 8164, use_allowed_cidrs=False)
+
@decorators.idempotent_id('2ae08e10-fbf8-46d8-a073-15f90454d718')
@testtools.skipUnless(
CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
@@ -1338,7 +1508,21 @@
' require the either the barbican service,or running in noop.')
self._test_listener_update(const.TERMINATED_HTTPS, 8065)
- def _test_listener_update(self, protocol, protocol_port):
+ @decorators.idempotent_id('32e88736-6ba1-4d14-83ef-ebdb3e3950e4')
+ @testtools.skipUnless(
+ CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
+ '[loadbalancer-feature-enabled] "terminated_tls_enabled" is '
+ 'False in the tempest configuration. TLS tests will be skipped.')
+ def test_terminated_https_listener_update_no_allowed_cidrs(self):
+ if not self.should_apply_terminated_https():
+ raise self.skipException(
+ f'Listener API tests with {const.TERMINATED_HTTPS} protocol'
+ ' require the either the barbican service,or running in noop.')
+ self._test_listener_update(const.TERMINATED_HTTPS, 8165,
+ use_allowed_cidrs=False)
+
+ def _test_listener_update(self, protocol, protocol_port,
+ use_allowed_cidrs=True):
"""Tests listener update and show APIs.
* Create a fully populated listener.
@@ -1398,7 +1582,7 @@
})
if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ self.api_version, '2.12') and use_allowed_cidrs:
listener_kwargs.update({const.ALLOWED_CIDRS: self.allowed_cidrs})
listener = self.mem_listener_client.create_listener(**listener_kwargs)
@@ -1459,7 +1643,7 @@
listener[const.TAGS])
if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ self.api_version, '2.12') and use_allowed_cidrs:
self.assertEqual(self.allowed_cidrs, listener[const.ALLOWED_CIDRS])
# Test that a user without the loadbalancer role cannot
@@ -1514,7 +1698,7 @@
})
if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ self.api_version, '2.12') and use_allowed_cidrs:
# Test that CIDR IP version matches VIP IP version
bad_cidrs = ['192.0.2.0/24', '2001:db8::/6']
listener_update_kwargs.update({const.ALLOWED_CIDRS: bad_cidrs})
@@ -1592,7 +1776,7 @@
listener[const.TAGS])
if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ self.api_version, '2.12') and use_allowed_cidrs:
expected_cidrs = ['192.0.2.0/24']
if CONF.load_balancer.test_with_ipv6:
expected_cidrs = ['2001:db8::/64']
@@ -1716,22 +1900,47 @@
def test_http_listener_show_stats(self):
self._test_listener_show_stats(const.HTTP, 8080)
+ @decorators.idempotent_id('2a97a5f3-f05c-447c-80a7-326efcf31ab2')
+ def test_http_listener_show_stats_no_allowed_cidrs(self):
+ self._test_listener_show_stats(const.HTTP, 8180,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('f8a43c27-f0a0-496d-a287-1958f337ac04')
def test_https_listener_show_stats(self):
self._test_listener_show_stats(const.HTTPS, 8081)
+ @decorators.idempotent_id('9766962d-6819-4cb7-944a-899fef3fa241')
+ def test_https_listener_show_stats_no_allowed_cidrs(self):
+ self._test_listener_show_stats(const.HTTPS, 8181,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('8a999856-f448-498c-b891-21af449b5208')
def test_tcp_listener_show_stats(self):
self._test_listener_show_stats(const.TCP, 8082)
+ @decorators.idempotent_id('6afaea72-f4ed-4f15-a1c3-57ed16f12068')
+ def test_tcp_listener_show_stats_no_allowed_cidrs(self):
+ self._test_listener_show_stats(const.TCP, 8182,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('a4c1f199-923b-41e4-a134-c91e590e20c4')
def test_udp_listener_show_stats(self):
self._test_listener_show_stats(const.UDP, 8083)
+ @decorators.idempotent_id('45a120c4-9bd1-4032-ae5e-9b6458598b3d')
+ def test_udp_listener_show_stats_no_allowed_cidrs(self):
+ self._test_listener_show_stats(const.UDP, 8183,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('7f6d3906-529c-4b99-8376-b836059df220')
def test_sctp_listener_show_stats(self):
self._test_listener_show_stats(const.SCTP, 8084)
+ @decorators.idempotent_id('460f2308-9411-4ab2-9b9e-23fe87c9dec3')
+ def test_sctp_listener_show_stats_no_allowed_cidrs(self):
+ self._test_listener_show_stats(const.SCTP, 8184,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('c39c996f-9633-4d81-a5f1-e94643f0c650')
@testtools.skipUnless(
CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
@@ -1744,7 +1953,21 @@
' require the either the barbican service,or running in noop.')
self._test_listener_show_stats(const.TERMINATED_HTTPS, 8085)
- def _test_listener_show_stats(self, protocol, protocol_port):
+ @decorators.idempotent_id('a402f84c-a29e-4e24-8ef6-f7eb8b0ffc46')
+ @testtools.skipUnless(
+ CONF.loadbalancer_feature_enabled.terminated_tls_enabled,
+ '[loadbalancer-feature-enabled] "terminated_tls_enabled" is '
+ 'False in the tempest configuration. TLS tests will be skipped.')
+ def test_terminated_https_listener_show_stats_no_allowed_cidrs(self):
+ if not self.should_apply_terminated_https():
+ raise self.skipException(
+ f'Listener API tests with {const.TERMINATED_HTTPS} protocol'
+ ' require the either the barbican service,or running in noop.')
+ self._test_listener_show_stats(const.TERMINATED_HTTPS, 8085,
+ use_allowed_cidrs=False)
+
+ def _test_listener_show_stats(self, protocol, protocol_port,
+ use_allowed_cidrs=True):
"""Tests listener show statistics API.
* Create a listener.
@@ -1776,6 +1999,10 @@
self.SNI2_secret_ref],
})
+ if self.mem_listener_client.is_version_supported(
+ self.api_version, '2.12') and use_allowed_cidrs:
+ listener_kwargs.update({const.ALLOWED_CIDRS: self.allowed_cidrs})
+
listener = self.mem_listener_client.create_listener(**listener_kwargs)
self.addCleanup(
self.mem_listener_client.cleanup_listener,
diff --git a/octavia_tempest_plugin/tests/scenario/v2/test_listener.py b/octavia_tempest_plugin/tests/scenario/v2/test_listener.py
index be997aa..74514f2 100644
--- a/octavia_tempest_plugin/tests/scenario/v2/test_listener.py
+++ b/octavia_tempest_plugin/tests/scenario/v2/test_listener.py
@@ -118,54 +118,117 @@
const.LB_ALGORITHM_LEAST_CONNECTIONS)
self._test_listener_CRUD(const.HTTP, pool1, pool2)
+ @decorators.idempotent_id('d6d729ba-b03f-496c-8e0f-53704cd4994d')
+ def test_http_least_connections_listener_CRUD_no_allowed_cidrs(self):
+ pool1, pool2 = self._create_pools(const.HTTP,
+ const.LB_ALGORITHM_LEAST_CONNECTIONS)
+ self._test_listener_CRUD(const.HTTP, pool1, pool2,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('0681b2ac-8301-4e6c-bf29-b35244864af3')
def test_tcp_least_connections_listener_CRUD(self):
pool1, pool2 = self._create_pools(const.TCP,
const.LB_ALGORITHM_LEAST_CONNECTIONS)
self._test_listener_CRUD(const.TCP, pool1, pool2)
+ @decorators.idempotent_id('10c5ecc8-533d-403c-9eb1-e3ca83586781')
+ def test_tcp_least_connections_listener_CRUD_no_allowed_cidrs(self):
+ pool1, pool2 = self._create_pools(const.TCP,
+ const.LB_ALGORITHM_LEAST_CONNECTIONS)
+ self._test_listener_CRUD(const.TCP, pool1, pool2,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('27a2ba7d-6147-46e4-886a-47c1ba63bf89')
def test_udp_least_connections_listener_CRUD(self):
pool1, pool2 = self._create_pools(const.UDP,
const.LB_ALGORITHM_LEAST_CONNECTIONS)
self._test_listener_CRUD(const.UDP, pool1, pool2)
+ @decorators.idempotent_id('76776488-b38d-418e-9804-e0be4a443b51')
+ def test_udp_least_connections_listener_CRUD_no_allowed_cidrs(self):
+ pool1, pool2 = self._create_pools(const.UDP,
+ const.LB_ALGORITHM_LEAST_CONNECTIONS)
+ self._test_listener_CRUD(const.UDP, pool1, pool2,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('4a874014-b7d1-49a4-ac9a-2400b3434700')
def test_http_round_robin_listener_CRUD(self):
pool1, pool2 = self._create_pools(const.HTTP,
const.LB_ALGORITHM_ROUND_ROBIN)
self._test_listener_CRUD(const.HTTP, pool1, pool2)
+ @decorators.idempotent_id('a2d8e2ca-5104-41b0-b011-819782e01054')
+ def test_http_round_robin_listener_CRUD_no_allowed_cidrs(self):
+ pool1, pool2 = self._create_pools(const.HTTP,
+ const.LB_ALGORITHM_ROUND_ROBIN)
+ self._test_listener_CRUD(const.HTTP, pool1, pool2,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('2b888812-d916-44f0-b620-8d83dbb45975')
def test_tcp_round_robin_listener_CRUD(self):
pool1, pool2 = self._create_pools(const.TCP,
const.LB_ALGORITHM_ROUND_ROBIN)
self._test_listener_CRUD(const.TCP, pool1, pool2)
+ @decorators.idempotent_id('1b2bfce6-29f9-4af6-87f2-329654c03c3d')
+ def test_tcp_round_robin_listener_CRUD_no_allowed_cidrs(self):
+ pool1, pool2 = self._create_pools(const.TCP,
+ const.LB_ALGORITHM_ROUND_ROBIN)
+ self._test_listener_CRUD(const.TCP, pool1, pool2,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('dd913f74-c6a6-4998-9bed-095babb9cb47')
def test_udp_round_robin_listener_CRUD(self):
pool1, pool2 = self._create_pools(const.UDP,
const.LB_ALGORITHM_ROUND_ROBIN)
self._test_listener_CRUD(const.UDP, pool1, pool2)
+ @decorators.idempotent_id('4a938409-eb79-4a9b-b003-44115153163d')
+ def test_udp_round_robin_listener_CRUD_no_allowed_cidrs(self):
+ pool1, pool2 = self._create_pools(const.UDP,
+ const.LB_ALGORITHM_ROUND_ROBIN)
+ self._test_listener_CRUD(const.UDP, pool1, pool2,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('b2ae8604-7a4f-477c-9658-fac27734671a')
def test_http_source_ip_listener_CRUD(self):
pool1, pool2 = self._create_pools(const.HTTP,
const.LB_ALGORITHM_SOURCE_IP)
self._test_listener_CRUD(const.HTTP, pool1, pool2)
+ @decorators.idempotent_id('baa747b1-0b3c-4f56-a1d1-b5550ec69c6e')
+ def test_http_source_ip_listener_CRUD_no_allowed_cidrs(self):
+ pool1, pool2 = self._create_pools(const.HTTP,
+ const.LB_ALGORITHM_SOURCE_IP)
+ self._test_listener_CRUD(const.HTTP, pool1, pool2,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('0ad3fdee-e8c2-4c44-9690-b8a838fbc7a5')
def test_tcp_source_ip_listener_CRUD(self):
pool1, pool2 = self._create_pools(const.TCP,
const.LB_ALGORITHM_SOURCE_IP)
self._test_listener_CRUD(const.TCP, pool1, pool2)
+ @decorators.idempotent_id('3778e729-8c5b-4634-876a-8bacba0976c2')
+ def test_tcp_source_ip_listener_CRUD_no_allowed_cidrs(self):
+ pool1, pool2 = self._create_pools(const.TCP,
+ const.LB_ALGORITHM_SOURCE_IP)
+ self._test_listener_CRUD(const.TCP, pool1, pool2,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('7830aba8-12ca-40d9-9d9b-a63f7a43b287')
def test_udp_source_ip_listener_CRUD(self):
pool1, pool2 = self._create_pools(const.UDP,
const.LB_ALGORITHM_SOURCE_IP)
self._test_listener_CRUD(const.UDP, pool1, pool2)
+ @decorators.idempotent_id('8d98b27b-f775-4f1b-8b74-88ec2e60e39f')
+ def test_udp_source_ip_listener_CRUD_no_allowed_cidrs(self):
+ pool1, pool2 = self._create_pools(const.UDP,
+ const.LB_ALGORITHM_SOURCE_IP)
+ self._test_listener_CRUD(const.UDP, pool1, pool2,
+ use_allowed_cidrs=False)
+
@decorators.idempotent_id('807a421e-5e99-4556-b0eb-512d39b25eac')
def test_http_source_ip_port_listener_CRUD(self):
try:
@@ -180,6 +243,21 @@
message = e.resp_body.get('faultstring', message)
raise testtools.TestCase.skipException(message)
+ @decorators.idempotent_id('1d522a51-4fa0-4b8e-9f72-292e0f145bf1')
+ def test_http_source_ip_port_listener_CRUD_no_allowed_cidrs(self):
+ try:
+ pool1, pool2 = self._create_pools(
+ const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+ self._test_listener_CRUD(const.HTTP, pool1, pool2,
+ use_allowed_cidrs=False)
+ except exceptions.NotImplemented as e:
+ message = ("The configured provider driver '{driver}' "
+ "does not support a feature required for this "
+ "test.".format(driver=CONF.load_balancer.provider))
+ if hasattr(e, 'resp_body'):
+ message = e.resp_body.get('faultstring', message)
+ raise testtools.TestCase.skipException(message)
+
@decorators.idempotent_id('6211f8ad-622d-404d-b199-8c2eb55ab340')
def test_tcp_source_ip_port_listener_CRUD(self):
try:
@@ -194,6 +272,21 @@
message = e.resp_body.get('faultstring', message)
raise testtools.TestCase.skipException(message)
+ @decorators.idempotent_id('a66d32f9-2186-437e-a145-139f5a1b0786')
+ def test_tcp_source_ip_port_listener_CRUD_no_allowed_cidrs(self):
+ try:
+ pool1, pool2 = self._create_pools(
+ const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+ self._test_listener_CRUD(const.TCP, pool1, pool2,
+ use_allowed_cidrs=False)
+ except exceptions.NotImplemented as e:
+ message = ("The configured provider driver '{driver}' "
+ "does not support a feature required for this "
+ "test.".format(driver=CONF.load_balancer.provider))
+ if hasattr(e, 'resp_body'):
+ message = e.resp_body.get('faultstring', message)
+ raise testtools.TestCase.skipException(message)
+
@decorators.idempotent_id('3f9a2de9-5012-437d-a907-a25e1f68ccfb')
def test_udp_source_ip_port_listener_CRUD(self):
try:
@@ -208,7 +301,23 @@
message = e.resp_body.get('faultstring', message)
raise testtools.TestCase.skipException(message)
- def _test_listener_CRUD(self, protocol, pool1_id, pool2_id):
+ @decorators.idempotent_id('dff6d829-9122-47cb-9ce5-f2def7fcf902')
+ def test_udp_source_ip_port_listener_CRUD_no_allowed_cidrs(self):
+ try:
+ pool1, pool2 = self._create_pools(
+ const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+ self._test_listener_CRUD(const.UDP, pool1, pool2,
+ use_allowed_cidrs=False)
+ except exceptions.NotImplemented as e:
+ message = ("The configured provider driver '{driver}' "
+ "does not support a feature required for this "
+ "test.".format(driver=CONF.load_balancer.provider))
+ if hasattr(e, 'resp_body'):
+ message = e.resp_body.get('faultstring', message)
+ raise testtools.TestCase.skipException(message)
+
+ def _test_listener_CRUD(self, protocol, pool1_id, pool2_id,
+ use_allowed_cidrs=True):
"""Tests listener create, read, update, delete
* Create a fully populated listener.
@@ -249,8 +358,9 @@
const.TIMEOUT_MEMBER_DATA: 1000,
const.TIMEOUT_TCP_INSPECT: 50,
})
- if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ if (use_allowed_cidrs and
+ self.mem_listener_client.is_version_supported(
+ self.api_version, '2.12')):
listener_kwargs.update({const.ALLOWED_CIDRS: self.allowed_cidrs})
listener = self.mem_listener_client.create_listener(**listener_kwargs)
@@ -295,8 +405,9 @@
self.assertEqual(1000, listener[const.TIMEOUT_MEMBER_CONNECT])
self.assertEqual(1000, listener[const.TIMEOUT_MEMBER_DATA])
self.assertEqual(50, listener[const.TIMEOUT_TCP_INSPECT])
- if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ if (use_allowed_cidrs and
+ self.mem_listener_client.is_version_supported(
+ self.api_version, '2.12')):
self.assertEqual(self.allowed_cidrs, listener[const.ALLOWED_CIDRS])
# Listener update
@@ -328,9 +439,9 @@
const.TIMEOUT_MEMBER_DATA: 2000,
const.TIMEOUT_TCP_INSPECT: 100,
})
-
- if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ if (use_allowed_cidrs and
+ self.mem_listener_client.is_version_supported(
+ self.api_version, '2.12')):
new_cidrs = ['192.0.2.0/24']
if CONF.load_balancer.test_with_ipv6:
new_cidrs = ['2001:db8::/64']
@@ -382,8 +493,9 @@
self.assertEqual(2000, listener[const.TIMEOUT_MEMBER_CONNECT])
self.assertEqual(2000, listener[const.TIMEOUT_MEMBER_DATA])
self.assertEqual(100, listener[const.TIMEOUT_TCP_INSPECT])
- if self.mem_listener_client.is_version_supported(
- self.api_version, '2.12'):
+ if (use_allowed_cidrs and
+ self.mem_listener_client.is_version_supported(
+ self.api_version, '2.12')):
expected_cidrs = ['192.0.2.0/24']
if CONF.load_balancer.test_with_ipv6:
expected_cidrs = ['2001:db8::/64']
diff --git a/octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py b/octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py
index db92352..9cf77ac 100644
--- a/octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py
+++ b/octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py
@@ -27,6 +27,7 @@
from tempest.lib import exceptions
from octavia_tempest_plugin.common import constants as const
+from octavia_tempest_plugin.common.decorators import retry_on_port_in_use
from octavia_tempest_plugin.tests import test_base
from octavia_tempest_plugin.tests import waiters
@@ -912,17 +913,18 @@
@testtools.skipIf(CONF.load_balancer.test_with_noop,
'Traffic tests will not work in noop mode.')
@decorators.idempotent_id('a446585b-5651-40ce-a4db-cb2ab4d37c03')
- def test_source_ip_port_http_traffic(self):
+ @retry_on_port_in_use(start_port=60091)
+ def test_source_ip_port_http_traffic(self, port):
# This is a special case as the reference driver does not support
# this test. Since it runs with not_implemented_is_error, we must
# handle this test case special.
try:
pool_id = self._listener_pool_create(
- const.HTTP, 60091,
+ const.HTTP, port,
pool_algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)[1]
self._test_basic_traffic(
- const.HTTP, 60091, pool_id,
- traffic_member_count=1, persistent=False, source_port=60091)
+ const.HTTP, port, pool_id,
+ traffic_member_count=1, persistent=False, source_port=port)
except exceptions.NotImplemented as e:
message = ("The configured provider driver '{driver}' "
"does not support a feature required for this "
@@ -934,19 +936,20 @@
@testtools.skipIf(CONF.load_balancer.test_with_noop,
'Traffic tests will not work in noop mode.')
@decorators.idempotent_id('60108f30-d870-487c-ab96-8d8a9b587b94')
- def test_source_ip_port_tcp_traffic(self):
+ @retry_on_port_in_use(start_port=60092)
+ def test_source_ip_port_tcp_traffic(self, port):
# This is a special case as the reference driver does not support
# this test. Since it runs with not_implemented_is_error, we must
# handle this test case special.
try:
listener_id, pool_id = self._listener_pool_create(
- const.TCP, 60092,
+ const.TCP, port,
pool_algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
# Without a delay this can trigger a "Cannot assign requested
# address" warning setting the source port, leading to failure
self._test_basic_traffic(
- const.TCP, 60092, pool_id, traffic_member_count=1,
- persistent=False, source_port=60092, delay=0.2)
+ const.TCP, port, pool_id, traffic_member_count=1,
+ persistent=False, source_port=port, delay=0.2)
except exceptions.NotImplemented as e:
message = ("The configured provider driver '{driver}' "
"does not support a feature required for this "
diff --git a/octavia_tempest_plugin/tests/validators.py b/octavia_tempest_plugin/tests/validators.py
index 5ff7bd5..57ba2e2 100644
--- a/octavia_tempest_plugin/tests/validators.py
+++ b/octavia_tempest_plugin/tests/validators.py
@@ -113,6 +113,8 @@
session.close()
raise
except Exception as e:
+ if "[Errno 98] Address already in use" in str(e):
+ raise e
LOG.info('Validate URL got exception: %s. '
'Retrying.', e)
time.sleep(request_interval)
@@ -410,8 +412,10 @@
response_counts)
time.sleep(1)
return
- except Exception:
+ except Exception as e:
LOG.warning('Server is not passing initial traffic. Waiting.')
+ if "[Errno 98] Address already in use" in str(e):
+ raise e
time.sleep(request_interval)
LOG.debug('Loadbalancer wait for load balancer response totals: %s',
diff --git a/tox.ini b/tox.ini
index d8c77d6..a4649bf 100644
--- a/tox.ini
+++ b/tox.ini
@@ -10,7 +10,7 @@
setenv =
VIRTUAL_ENV={envdir}
PYTHONWARNINGS=default::DeprecationWarning
-deps = -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/test-requirements.txt
commands =
stestr run {posargs}
@@ -43,7 +43,8 @@
[testenv:docs]
deps =
- -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+ -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+ -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
-r{toxinidir}/doc/requirements.txt
allowlist_externals = rm
@@ -63,7 +64,7 @@
[testenv:releasenotes]
deps =
- -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+ -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/requirements.txt
-r{toxinidir}/doc/requirements.txt
commands =
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index e62c5fd..ec5c623 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -1,14 +1,4 @@
- nodeset:
- name: octavia-single-node-ubuntu-bionic
- nodes:
- - name: controller
- label: nested-virt-ubuntu-bionic
- groups:
- - name: tempest
- nodes:
- - controller
-
-- nodeset:
name: octavia-single-node-ubuntu-focal
nodes:
- name: controller
@@ -39,26 +29,6 @@
- controller
- nodeset:
- name: octavia-single-node-centos-8
- nodes:
- - name: controller
- label: nested-virt-centos-8
- groups:
- - name: tempest
- nodes:
- - controller
-
-- nodeset:
- name: octavia-single-node-centos-8-stream
- nodes:
- - name: controller
- label: nested-virt-centos-8-stream
- groups:
- - name: tempest
- nodes:
- - controller
-
-- nodeset:
name: octavia-single-node-centos-9-stream
nodes:
- name: controller
@@ -140,13 +110,6 @@
debug: True
devstack_services:
c-bak: false
- ceilometer-acentral: false
- ceilometer-acompute: false
- ceilometer-alarm-evaluator: false
- ceilometer-alarm-notifier: false
- ceilometer-anotification: false
- ceilometer-api: false
- ceilometer-collector: false
c-sch: false
c-api: false
c-vol: false
@@ -197,13 +160,6 @@
debug: True
devstack_services:
c-bak: false
- ceilometer-acentral: false
- ceilometer-acompute: false
- ceilometer-alarm-evaluator: false
- ceilometer-alarm-notifier: false
- ceilometer-anotification: false
- ceilometer-api: false
- ceilometer-collector: false
c-sch: false
c-api: false
c-vol: false
@@ -583,18 +539,6 @@
RBAC_test_type: advanced
- job:
- name: octavia-v2-dsvm-noop-api-stable-2023-2
- parent: octavia-v2-dsvm-noop-api
- nodeset: octavia-single-node-ubuntu-jammy
- override-checkout: stable/2023.2
- vars:
- devstack_local_conf:
- test-config:
- "$TEMPEST_CONFIG":
- load_balancer:
- RBAC_test_type: advanced
-
-- job:
name: octavia-v2-dsvm-scenario-base
parent: octavia-dsvm-live-base
vars:
@@ -625,14 +569,14 @@
name: octavia-v2-dsvm-scenario
parent: octavia-v2-dsvm-scenario-base
branches:
- regex: ^(unmaintained/|stable/(2023.2|2024.1|2024.2))
+ regex: ^(unmaintained/|stable/(2024.1|2024.2))
negate: true
nodeset: octavia-single-node-ubuntu-noble
- job:
name: octavia-v2-dsvm-scenario
parent: octavia-v2-dsvm-scenario-base
- branches: ^(stable/(2023.2|2024.1|2024.2))
+ branches: ^(stable/(2024.1|2024.2))
nodeset: octavia-single-node-ubuntu-jammy
- job:
@@ -764,30 +708,6 @@
vars:
tempest_test_regex: ^octavia_tempest_plugin.tests.scenario.v2.(?!.*traffic_ops)
-- job:
- name: octavia-v2-dsvm-scenario-stable-2023-2
- parent: octavia-v2-dsvm-scenario
- nodeset: octavia-single-node-ubuntu-jammy
- override-checkout: stable/2023.2
- vars:
- devstack_local_conf:
- test-config:
- "$TEMPEST_CONFIG":
- load_balancer:
- RBAC_test_type: advanced
-
-- job:
- name: octavia-v2-dsvm-scenario-traffic-ops-stable-2023-2
- parent: octavia-v2-dsvm-scenario-stable-2023-2
- vars:
- tempest_test_regex: ^octavia_tempest_plugin.tests.scenario.v2.*traffic_ops
-
-- job:
- name: octavia-v2-dsvm-scenario-non-traffic-ops-stable-2023-2
- parent: octavia-v2-dsvm-scenario-stable-2023-2
- vars:
- tempest_test_regex: ^octavia_tempest_plugin.tests.scenario.v2.(?!.*traffic_ops)
-
# Legacy jobs for the transition to the act-stdby two node jobs
- job:
name: octavia-v2-dsvm-scenario-two-node
@@ -854,26 +774,6 @@
loadbalancer_topology: ACTIVE_STANDBY
- job:
- name: octavia-v2-dsvm-scenario-centos-8
- parent: octavia-v2-dsvm-scenario
- nodeset: octavia-single-node-centos-8
- vars:
- devstack_localrc:
- OCTAVIA_AMP_BASE_OS: centos
- OCTAVIA_AMP_DISTRIBUTION_RELEASE_ID: 8
- OCTAVIA_AMP_IMAGE_SIZE: 3
-
-- job:
- name: octavia-v2-dsvm-scenario-centos-8-stream
- parent: octavia-v2-dsvm-scenario
- nodeset: octavia-single-node-centos-8-stream
- vars:
- devstack_localrc:
- OCTAVIA_AMP_BASE_OS: centos
- OCTAVIA_AMP_DISTRIBUTION_RELEASE_ID: 8-stream
- OCTAVIA_AMP_IMAGE_SIZE: 3
-
-- job:
name: octavia-v2-dsvm-scenario-centos-9-stream
parent: octavia-v2-dsvm-scenario
nodeset: octavia-single-node-centos-9-stream
@@ -975,14 +875,14 @@
name: octavia-v2-dsvm-tls-barbican
parent: octavia-v2-dsvm-tls-barbican-base
branches:
- regex: ^(unmaintained/|stable/(2023.2|2024.1|2024.2))
+ regex: ^(unmaintained/|stable/(2024.1|2024.2))
negate: true
nodeset: octavia-single-node-ubuntu-noble
- job:
name: octavia-v2-dsvm-tls-barbican
parent: octavia-v2-dsvm-tls-barbican-base
- branches: ^(stable/(2023.2|2024.1|2024.2))
+ branches: ^(stable/(2024.1|2024.2))
nodeset: octavia-single-node-ubuntu-jammy
- job:
@@ -1022,18 +922,6 @@
RBAC_test_type: advanced
- job:
- name: octavia-v2-dsvm-tls-barbican-stable-2023-2
- parent: octavia-v2-dsvm-tls-barbican
- nodeset: octavia-single-node-ubuntu-jammy
- override-checkout: stable/2023.2
- vars:
- devstack_local_conf:
- test-config:
- "$TEMPEST_CONFIG":
- load_balancer:
- RBAC_test_type: advanced
-
-- job:
name: octavia-v2-dsvm-spare-pool
parent: octavia-v2-dsvm-scenario
vars:
@@ -1079,13 +967,6 @@
volume_size: 2
devstack_services:
c-bak: true
- ceilometer-acentral: false
- ceilometer-acompute: false
- ceilometer-alarm-evaluator: false
- ceilometer-alarm-notifier: false
- ceilometer-anotification: false
- ceilometer-api: false
- ceilometer-collector: false
c-sch: true
c-api: true
c-vol: true
@@ -1170,14 +1051,14 @@
name: octavia-v2-act-stdby-dsvm-scenario
parent: octavia-v2-act-stdby-dsvm-scenario-base
branches:
- regex: ^(unmaintained/|stable/(2023.2|2024.1|2024.2))
+ regex: ^(unmaintained/|stable/(2024.1|2024.2))
negate: true
nodeset: octavia-single-node-ubuntu-noble
- job:
name: octavia-v2-act-stdby-dsvm-scenario
parent: octavia-v2-act-stdby-dsvm-scenario-base
- branches: ^(stable/(2023.2|2024.1|2024.2))
+ branches: ^(stable/(2024.1|2024.2))
nodeset: octavia-single-node-ubuntu-jammy
- job:
@@ -1216,18 +1097,6 @@
load_balancer:
RBAC_test_type: advanced
-- job:
- name: octavia-v2-act-stdby-dsvm-scenario-stable-2023-2
- parent: octavia-v2-act-stdby-dsvm-scenario
- nodeset: octavia-single-node-ubuntu-jammy
- override-checkout: stable/2023.2
- vars:
- devstack_local_conf:
- test-config:
- "$TEMPEST_CONFIG":
- load_balancer:
- RBAC_test_type: advanced
-
# Temporary job, remove once it is no longer used in octavia gates
- job:
name: octavia-v2-dsvm-noop-api-keystone-default-roles
@@ -1255,7 +1124,7 @@
parent: ovn-octavia-provider-tempest-release
description: Runs the neutron OVN provider driver for Octavia api test.
voting: false
- timeout: 5400
+ timeout: 7800
attempts: 1
tags: ovn-octavia-provider
irrelevant-files:
@@ -1284,7 +1153,7 @@
parent: ovn-octavia-provider-tempest-release
description: Runs the neutron OVN provider driver for Octavia scenario test.
voting: false
- timeout: 5400
+ timeout: 7800
attempts: 1
tags: ovn-octavia-provider
irrelevant-files:
@@ -1301,6 +1170,7 @@
- ^octavia/volume/.*$
- ^octavia/tests/.*$
vars:
+ tempest_test_regex: ^octavia_tempest_plugin.tests.scenario.v2
devstack_local_conf:
test-config:
"$TEMPEST_CONFIG":
diff --git a/zuul.d/projects.yaml b/zuul.d/projects.yaml
index 1801876..f6dff7a 100644
--- a/zuul.d/projects.yaml
+++ b/zuul.d/projects.yaml
@@ -13,7 +13,6 @@
- octavia-v2-dsvm-noop-api-stable-2025-1
- octavia-v2-dsvm-noop-api-stable-2024-2
- octavia-v2-dsvm-noop-api-stable-2024-1
- - octavia-v2-dsvm-noop-api-stable-2023-2
- octavia-v2-dsvm-noop-api-advanced-rbac
- octavia-v2-dsvm-scenario-traffic-ops
- octavia-v2-dsvm-scenario-non-traffic-ops
@@ -25,13 +24,10 @@
- octavia-v2-dsvm-scenario-non-traffic-ops-stable-2024-2
- octavia-v2-dsvm-scenario-traffic-ops-stable-2024-1
- octavia-v2-dsvm-scenario-non-traffic-ops-stable-2024-1
- - octavia-v2-dsvm-scenario-traffic-ops-stable-2023-2
- - octavia-v2-dsvm-scenario-non-traffic-ops-stable-2023-2
- octavia-v2-dsvm-tls-barbican
- octavia-v2-dsvm-tls-barbican-stable-2025-1
- octavia-v2-dsvm-tls-barbican-stable-2024-2
- octavia-v2-dsvm-tls-barbican-stable-2024-1
- - octavia-v2-dsvm-tls-barbican-stable-2023-2
- octavia-v2-dsvm-scenario-ipv6-only:
voting: false
- octavia-v2-dsvm-scenario-centos-9-stream-traffic-ops:
@@ -54,8 +50,6 @@
voting: false
- octavia-v2-act-stdby-dsvm-scenario-stable-2024-1:
voting: false
- - octavia-v2-act-stdby-dsvm-scenario-stable-2023-2:
- voting: false
- octavia-v2-dsvm-cinder-amphora:
voting: false
# Third party provider jobs
@@ -72,7 +66,6 @@
- octavia-v2-dsvm-noop-api-stable-2025-1
- octavia-v2-dsvm-noop-api-stable-2024-2
- octavia-v2-dsvm-noop-api-stable-2024-1
- - octavia-v2-dsvm-noop-api-stable-2023-2
- octavia-v2-dsvm-noop-api-advanced-rbac
- octavia-v2-dsvm-scenario-traffic-ops
- octavia-v2-dsvm-scenario-non-traffic-ops
@@ -84,11 +77,8 @@
- octavia-v2-dsvm-scenario-non-traffic-ops-stable-2024-2
- octavia-v2-dsvm-scenario-traffic-ops-stable-2024-1
- octavia-v2-dsvm-scenario-non-traffic-ops-stable-2024-1
- - octavia-v2-dsvm-scenario-traffic-ops-stable-2023-2
- - octavia-v2-dsvm-scenario-non-traffic-ops-stable-2023-2
- octavia-v2-dsvm-tls-barbican
- octavia-v2-dsvm-tls-barbican-stable-2025-2
- octavia-v2-dsvm-tls-barbican-stable-2025-1
- octavia-v2-dsvm-tls-barbican-stable-2024-2
- octavia-v2-dsvm-tls-barbican-stable-2024-1
- - octavia-v2-dsvm-tls-barbican-stable-2023-2