80 lines
3.0 KiB
Python
80 lines
3.0 KiB
Python
import pytest
|
|
|
|
from .env import H2Conf, H2TestEnv
|
|
|
|
|
|
@pytest.mark.skipif(condition=H2TestEnv.is_unsupported, reason="mod_http2 not supported here")
|
|
class TestProxyFwd:
|
|
|
|
@classmethod
|
|
def config_fwd_proxy(cls, env, h2_enabled=False):
|
|
conf = H2Conf(env, extras={
|
|
'base': [
|
|
f'Listen {env.proxy_port}',
|
|
'Protocols h2c http/1.1',
|
|
'LogLevel proxy_http2:trace2 proxy:trace2',
|
|
],
|
|
})
|
|
conf.add_vhost_cgi(proxy_self=False, h2proxy_self=False)
|
|
conf.start_vhost(domains=[f"test1.{env.http_tld}"],
|
|
port=env.proxy_port, with_ssl=True)
|
|
conf.add([
|
|
'Protocols h2c http/1.1',
|
|
'ProxyRequests on',
|
|
f'H2ProxyRequests {"on" if h2_enabled else "off"}',
|
|
])
|
|
conf.end_vhost()
|
|
conf.install()
|
|
assert env.apache_restart() == 0
|
|
|
|
@pytest.fixture(autouse=True, scope='class')
|
|
def _class_scope(cls, env):
|
|
cls.config_fwd_proxy(env)
|
|
|
|
# test the HTTP/1.1 setup working
|
|
def test_h2_503_01_proxy_fwd_h1(self, env):
|
|
url = f'http://localhost:{env.http_port}/hello.py'
|
|
proxy_host = f'test1.{env.http_tld}'
|
|
options = [
|
|
'--proxy', f'https://{proxy_host}:{env.proxy_port}',
|
|
'--resolve', f'{proxy_host}:{env.proxy_port}:127.0.0.1',
|
|
'--proxy-cacert', f'{env.get_ca_pem_file(proxy_host)}',
|
|
]
|
|
r = env.curl_get(url, 5, options=options)
|
|
assert r.exit_code == 0, f'{r}'
|
|
assert r.response['status'] == 200
|
|
assert r.json['port'] == f'{env.http_port}'
|
|
|
|
def test_h2_503_02_fwd_proxy_h2_off(self, env):
|
|
if not env.curl_is_at_least('8.1.0'):
|
|
pytest.skip(f'need at least curl v8.1.0 for this')
|
|
url = f'http://localhost:{env.http_port}/hello.py'
|
|
proxy_host = f'test1.{env.http_tld}'
|
|
options = [
|
|
'--proxy-http2', '-v',
|
|
'--proxy', f'https://{proxy_host}:{env.proxy_port}',
|
|
'--resolve', f'{proxy_host}:{env.proxy_port}:127.0.0.1',
|
|
'--proxy-cacert', f'{env.get_ca_pem_file(proxy_host)}',
|
|
]
|
|
r = env.curl_get(url, 5, options=options)
|
|
assert r.exit_code == 0, f'{r}'
|
|
assert r.response['status'] == 404
|
|
|
|
# test the HTTP/2 setup working
|
|
def test_h2_503_03_proxy_fwd_h2_on(self, env):
|
|
if not env.curl_is_at_least('8.1.0'):
|
|
pytest.skip(f'need at least curl v8.1.0 for this')
|
|
self.config_fwd_proxy(env, h2_enabled=True)
|
|
url = f'http://localhost:{env.http_port}/hello.py'
|
|
proxy_host = f'test1.{env.http_tld}'
|
|
options = [
|
|
'--proxy-http2', '-v',
|
|
'--proxy', f'https://{proxy_host}:{env.proxy_port}',
|
|
'--resolve', f'{proxy_host}:{env.proxy_port}:127.0.0.1',
|
|
'--proxy-cacert', f'{env.get_ca_pem_file(proxy_host)}',
|
|
]
|
|
r = env.curl_get(url, 5, options=options)
|
|
assert r.exit_code == 0, f'{r}'
|
|
assert r.response['status'] == 200
|
|
assert r.json['port'] == f'{env.http_port}'
|