Merge "Add HTTP/2 tempest scenario tests for listeners"
diff --git a/octavia_tempest_plugin/tests/barbican_scenario/v2/test_tls_barbican.py b/octavia_tempest_plugin/tests/barbican_scenario/v2/test_tls_barbican.py
index 9e32b80..10c264b 100644
--- a/octavia_tempest_plugin/tests/barbican_scenario/v2/test_tls_barbican.py
+++ b/octavia_tempest_plugin/tests/barbican_scenario/v2/test_tls_barbican.py
@@ -19,6 +19,7 @@
import tempfile
from cryptography.hazmat.primitives import serialization
+import httpx
from OpenSSL.crypto import X509
from OpenSSL import SSL
@@ -1164,3 +1165,49 @@
selected_proto = ssl_sock.selected_alpn_protocol()
self.assertEqual(expected_proto, selected_proto)
+
+ def _test_http_versions_tls_traffic(self, http_version, alpn_protos):
+ if not self.mem_listener_client.is_version_supported(
+ self.api_version, '2.20'):
+ raise self.skipException('ALPN protocols are only available on '
+ 'Octavia API version 2.20 or newer.')
+ listener_name = data_utils.rand_name("lb_member_listener1-tls-alpn")
+ listener_kwargs = {
+ const.NAME: listener_name,
+ const.PROTOCOL: const.TERMINATED_HTTPS,
+ const.PROTOCOL_PORT: '443',
+ const.LOADBALANCER_ID: self.lb_id,
+ const.DEFAULT_POOL_ID: self.pool_id,
+ const.DEFAULT_TLS_CONTAINER_REF: self.server_secret_ref,
+ const.ALPN_PROTOCOLS: alpn_protos,
+ }
+ listener = self.mem_listener_client.create_listener(**listener_kwargs)
+ self.listener_id = listener[const.ID]
+ self.addCleanup(
+ self.mem_listener_client.cleanup_listener,
+ self.listener_id,
+ lb_client=self.mem_lb_client, lb_id=self.lb_id)
+
+ waiters.wait_for_status(self.mem_lb_client.show_loadbalancer,
+ self.lb_id, const.PROVISIONING_STATUS,
+ const.ACTIVE,
+ CONF.load_balancer.build_interval,
+ CONF.load_balancer.build_timeout)
+
+ context = ssl.create_default_context(cadata=self.ca_cert.public_bytes(
+ serialization.Encoding.PEM).decode('utf-8'))
+ context.check_hostname = False
+
+ url = 'https://%s:%s' % (self.lb_vip_address, 443)
+ client = httpx.Client(http2=(http_version == 'HTTP/2'), verify=context)
+ r = client.get(url)
+ self.assertEqual(http_version, r.http_version)
+
+ @decorators.idempotent_id('9965828d-24af-4fa0-91ae-21c6bc47ab4c')
+ def test_http_2_tls_traffic(self):
+ self._test_http_versions_tls_traffic('HTTP/2', ['h2', 'http/1.1'])
+
+ @decorators.idempotent_id('a0dff0f2-d53e-497c-9ded-dca64e82991f')
+ def test_http_1_1_tls_traffic(self):
+ self._test_http_versions_tls_traffic(
+ 'HTTP/1.1', ['http/1.1', 'http/1.0'])
diff --git a/requirements.txt b/requirements.txt
index 8376df6..7b2f0a2 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -17,3 +17,4 @@
tenacity>=4.4.0 # Apache-2.0
testtools>=2.2.0 # MIT
keystoneauth1>=3.3.0 # Apache-2.0
+httpx[http2]>=0.14.2 # BSD