| import pytest |
| |
| from .env import H2Conf, H2TestEnv |
| |
| |
| @pytest.mark.skipif(condition=H2TestEnv.is_unsupported, reason="mod_http2 not supported here") |
| class TestRequire: |
| |
| @pytest.fixture(autouse=True, scope='class') |
| def _class_scope(self, env): |
| domain = f"ssl.{env.http_tld}" |
| conf = H2Conf(env) |
| conf.start_vhost(domains=[domain], port=env.https_port) |
| conf.add(""" |
| Protocols h2 http/1.1 |
| SSLOptions +StdEnvVars |
| <Location /h2only.html> |
| Require expr \"%{HTTP2} == 'on'\" |
| </Location> |
| <Location /noh2.html> |
| Require expr \"%{HTTP2} == 'off'\" |
| </Location>""") |
| conf.end_vhost() |
| conf.install() |
| # the dir needs to exists for the configuration to have effect |
| env.mkpath(f"{env.server_dir}/htdocs/ssl-client-verify") |
| assert env.apache_restart() == 0 |
| |
| def test_h2_102_01(self, env): |
| url = env.mkurl("https", "ssl", "/h2only.html") |
| r = env.curl_get(url) |
| assert 0 == r.exit_code |
| assert r.response |
| assert 404 == r.response["status"] |
| |
| def test_h2_102_02(self, env): |
| url = env.mkurl("https", "ssl", "/noh2.html") |
| r = env.curl_get(url) |
| assert 0 == r.exit_code |
| assert r.response |
| assert 403 == r.response["status"] |
| # |
| env.httpd_error_log.ignore_recent( |
| lognos = [ |
| "AH01630" # client denied by server configuration |
| ] |
| ) |