| import pytest |
| |
| from .env import H2Conf, H2TestEnv |
| |
| |
| @pytest.mark.skipif(condition=H2TestEnv.is_unsupported, reason="mod_http2 not supported here") |
| class TestUpgrade: |
| |
| @pytest.fixture(autouse=True, scope='class') |
| def _class_scope(self, env): |
| H2Conf(env).add_vhost_test1().add_vhost_test2().add_vhost_noh2( |
| ).start_vhost(domains=[f"test3.{env.http_tld}"], port=env.https_port, doc_root="htdocs/test1" |
| ).add( |
| """ |
| Protocols h2 http/1.1 |
| Header unset Upgrade""" |
| ).end_vhost( |
| ).start_vhost(domains=[f"test1b.{env.http_tld}"], port=env.http_port, doc_root="htdocs/test1" |
| ).add( |
| """ |
| Protocols h2c http/1.1 |
| H2Upgrade off |
| <Location /006.html> |
| H2Upgrade on |
| </Location>""" |
| ).end_vhost( |
| ).install() |
| assert env.apache_restart() == 0 |
| |
| # accessing http://test1, will not try h2 and advertise h2 in the response |
| def test_h2_103_01(self, env): |
| url = env.mkurl("http", "test1", "/index.html") |
| r = env.curl_get(url) |
| assert 0 == r.exit_code |
| assert r.response |
| assert "upgrade" in r.response["header"] |
| assert "h2c" == r.response["header"]["upgrade"] |
| |
| # accessing http://noh2, will not advertise, because noh2 host does not have it enabled |
| def test_h2_103_02(self, env): |
| url = env.mkurl("http", "noh2", "/index.html") |
| r = env.curl_get(url) |
| assert 0 == r.exit_code |
| assert r.response |
| assert "upgrade" not in r.response["header"] |
| |
| # accessing http://test2, will not advertise, because h2 has less preference than http/1.1 |
| def test_h2_103_03(self, env): |
| url = env.mkurl("http", "test2", "/index.html") |
| r = env.curl_get(url) |
| assert 0 == r.exit_code |
| assert r.response |
| assert "upgrade" not in r.response["header"] |
| |
| # accessing https://noh2, will not advertise, because noh2 host does not have it enabled |
| def test_h2_103_04(self, env): |
| url = env.mkurl("https", "noh2", "/index.html") |
| r = env.curl_get(url) |
| assert 0 == r.exit_code |
| assert r.response |
| assert "upgrade" not in r.response["header"] |
| |
| # accessing https://test2, will not advertise, because h2 has less preference than http/1.1 |
| def test_h2_103_05(self, env): |
| url = env.mkurl("https", "test2", "/index.html") |
| r = env.curl_get(url) |
| assert 0 == r.exit_code |
| assert r.response |
| assert "upgrade" not in r.response["header"] |
| |
| # accessing https://test1, will advertise h2 in the response |
| def test_h2_103_06(self, env): |
| url = env.mkurl("https", "test1", "/index.html") |
| r = env.curl_get(url, options=["--http1.1"]) |
| assert 0 == r.exit_code |
| assert r.response |
| assert "upgrade" in r.response["header"] |
| assert "h2" == r.response["header"]["upgrade"] |
| |
| # accessing https://test3, will not send Upgrade since it is suppressed |
| def test_h2_103_07(self, env): |
| url = env.mkurl("https", "test3", "/index.html") |
| r = env.curl_get(url, options=["--http1.1"]) |
| assert 0 == r.exit_code |
| assert r.response |
| assert "upgrade" not in r.response["header"] |
| |
| # upgrade to h2c for a request, where h2c is preferred |
| def test_h2_103_20(self, env): |
| url = env.mkurl("http", "test1", "/index.html") |
| r = env.nghttp().get(url, options=["-u"]) |
| assert r.response["status"] == 200 |
| # check issue #272 |
| assert 'date' in r.response["header"], f'{r.response}' |
| assert r.response["header"]["date"] != 'Sun, 00 Jan 1900 00:00:00 GMT', f'{r.response}' |
| |
| # upgrade to h2c for a request where http/1.1 is preferred, but the clients upgrade |
| # wish is honored nevertheless |
| def test_h2_103_21(self, env): |
| url = env.mkurl("http", "test2", "/index.html") |
| r = env.nghttp().get(url, options=["-u"]) |
| assert 404 == r.response["status"] |
| |
| # ugrade to h2c on a host where h2c is not enabled will fail |
| def test_h2_103_22(self, env): |
| url = env.mkurl("http", "noh2", "/index.html") |
| r = env.nghttp().get(url, options=["-u"]) |
| assert not r.response |
| |
| # ugrade to h2c on a host where h2c is preferred, but Upgrade is disabled |
| def test_h2_103_23(self, env): |
| url = env.mkurl("http", "test1b", "/index.html") |
| r = env.nghttp().get(url, options=["-u"]) |
| assert not r.response |
| |
| # ugrade to h2c on a host where h2c is preferred, but Upgrade is disabled on the server, |
| # but allowed for a specific location |
| def test_h2_103_24(self, env): |
| url = env.mkurl("http", "test1b", "/006.html") |
| r = env.nghttp().get(url, options=["-u"]) |
| assert r.response["status"] == 200 |