2
2
import pytest
3
3
4
4
from .conf import TlsTestConf
5
+ from pyhttpd .env import HttpdTestEnv
5
6
6
7
7
8
class TestProxySSL :
8
9
9
10
@pytest .fixture (autouse = True , scope = 'class' )
10
11
def _class_scope (self , env ):
11
12
# add vhosts a+b and a ssl proxy from a to b
13
+ if not HttpdTestEnv .has_shared_module ("tls" ):
14
+ myoptions = "SSLOptions +StdEnvVars"
15
+ myssl = "mod_ssl"
16
+ else :
17
+ myoptions = "TLSOptions +StdEnvVars"
18
+ myssl = "mod_tls"
12
19
conf = TlsTestConf (env = env , extras = {
13
20
'base' : [
14
21
"LogLevel proxy:trace1 proxy_http:trace1 ssl:trace1 proxy_http2:trace1" ,
@@ -33,10 +40,10 @@ def _class_scope(self, env):
33
40
f'ProxyPass /proxy-ssl/ https://127.0.0.1:{ env .https_port } /' ,
34
41
f'ProxyPass /proxy-local/ https://localhost:{ env .https_port } /' ,
35
42
f'ProxyPass /proxy-h2-ssl/ h2://127.0.0.1:{ env .https_port } /' ,
36
- "TLSOptions +StdEnvVars" ,
43
+ myoptions ,
37
44
],
38
45
})
39
- conf .add_tls_vhosts (domains = [env .domain_a , env .domain_b ])
46
+ conf .add_tls_vhosts (domains = [env .domain_a , env .domain_b ], ssl_module = myssl )
40
47
conf .install ()
41
48
assert env .apache_restart () == 0
42
49
@@ -69,7 +76,24 @@ def test_tls_14_proxy_ssl_h2_get(self, env):
69
76
("SSL_CIPHER_EXPORT" , "false" ),
70
77
("SSL_CLIENT_VERIFY" , "NONE" ),
71
78
])
79
+ def test_tls_14_proxy_tsl_vars_const (self , env , name : str , value : str ):
80
+ if not HttpdTestEnv .has_shared_module ("tls" ):
81
+ return
82
+ r = env .tls_get (env .domain_b , f"/proxy-ssl/vars.py?name={ name } " )
83
+ assert r .exit_code == 0 , r .stderr
84
+ assert r .json == {name : value }, r .stdout
85
+
86
+ @pytest .mark .parametrize ("name, value" , [
87
+ ("SERVER_NAME" , "b.mod-tls.test" ),
88
+ ("SSL_SESSION_RESUMED" , "Initial" ),
89
+ ("SSL_SECURE_RENEG" , "true" ),
90
+ ("SSL_COMPRESS_METHOD" , "NULL" ),
91
+ ("SSL_CIPHER_EXPORT" , "false" ),
92
+ ("SSL_CLIENT_VERIFY" , "NONE" ),
93
+ ])
72
94
def test_tls_14_proxy_ssl_vars_const (self , env , name : str , value : str ):
95
+ if HttpdTestEnv .has_shared_module ("tls" ):
96
+ return
73
97
r = env .tls_get (env .domain_b , f"/proxy-ssl/vars.py?name={ name } " )
74
98
assert r .exit_code == 0 , r .stderr
75
99
assert r .json == {name : value }, r .stdout
@@ -78,7 +102,21 @@ def test_tls_14_proxy_ssl_vars_const(self, env, name: str, value: str):
78
102
("SSL_VERSION_INTERFACE" , r'mod_tls/\d+\.\d+\.\d+' ),
79
103
("SSL_VERSION_LIBRARY" , r'rustls-ffi/\d+\.\d+\.\d+/rustls/\d+\.\d+\.\d+' ),
80
104
])
105
+ def test_tls_14_proxy_tsl_vars_match (self , env , name : str , pattern : str ):
106
+ if not HttpdTestEnv .has_shared_module ("tls" ):
107
+ return
108
+ r = env .tls_get (env .domain_b , f"/proxy-ssl/vars.py?name={ name } " )
109
+ assert r .exit_code == 0 , r .stderr
110
+ assert name in r .json
111
+ assert re .match (pattern , r .json [name ]), r .json
112
+
113
+ @pytest .mark .parametrize ("name, pattern" , [
114
+ ("SSL_VERSION_INTERFACE" , r'mod_ssl/\d+\.\d+\.\d+' ),
115
+ ("SSL_VERSION_LIBRARY" , r'OpenSSL/\d+\.\d+\.\d+' ),
116
+ ])
81
117
def test_tls_14_proxy_ssl_vars_match (self , env , name : str , pattern : str ):
118
+ if HttpdTestEnv .has_shared_module ("tls" ):
119
+ return
82
120
r = env .tls_get (env .domain_b , f"/proxy-ssl/vars.py?name={ name } " )
83
121
assert r .exit_code == 0 , r .stderr
84
122
assert name in r .json
0 commit comments