Author: icing
Date: Wed Jul 10 10:55:23 2024
New Revision: 1919087
URL: http://svn.apache.org/viewvc?rev=1919087&view=rev
Log:
sync test code with mod-h2
- shutdown server at end of h2 tests
- adapt minimum httpd versions for some tests
- add test_700_20 for load on blocked connections,
disabled for now until mpm_event improves
- build websocket client automatically
Modified:
httpd/httpd/trunk/test/modules/http2/conftest.py
httpd/httpd/trunk/test/modules/http2/env.py
httpd/httpd/trunk/test/modules/http2/test_103_upgrade.py
httpd/httpd/trunk/test/modules/http2/test_600_h2proxy.py
httpd/httpd/trunk/test/modules/http2/test_700_load_get.py
httpd/httpd/trunk/test/modules/http2/test_800_websockets.py
httpd/httpd/trunk/test/pyhttpd/env.py
Modified: httpd/httpd/trunk/test/modules/http2/conftest.py
URL:
http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/http2/conftest.py?rev=1919087&r1=1919086&r2=1919087&view=diff
==============================================================================
--- httpd/httpd/trunk/test/modules/http2/conftest.py (original)
+++ httpd/httpd/trunk/test/modules/http2/conftest.py Wed Jul 10 10:55:23 2024
@@ -35,3 +35,5 @@ def _h2_package_scope(env):
'AH10400', # warning that 'enablereuse' has not effect in certain
configs
'AH00045', # child did not exit in time, SIGTERM was sent
])
+ yield
+ assert env.apache_stop() == 0
Modified: httpd/httpd/trunk/test/modules/http2/env.py
URL:
http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/http2/env.py?rev=1919087&r1=1919086&r2=1919087&view=diff
==============================================================================
--- httpd/httpd/trunk/test/modules/http2/env.py (original)
+++ httpd/httpd/trunk/test/modules/http2/env.py Wed Jul 10 10:55:23 2024
@@ -2,6 +2,7 @@ import inspect
import logging
import os
import subprocess
+from shutil import copyfile
from typing import Dict, Any
from pyhttpd.certs import CertificateSpec
@@ -52,6 +53,12 @@ class H2TestSetup(HttpdTestSetup):
with open(os.path.join(self.env.gen_dir, "data-1m"), 'w') as f:
for i in range(10000):
f.write(f"{i:09d}-{s90}")
+ test1_docs = os.path.join(self.env.server_docs_dir, 'test1')
+ self.env.mkpath(test1_docs)
+ for fname in ["data-1k", "data-10k", "data-100k", "data-1m"]:
+ src = os.path.join(self.env.gen_dir, fname)
+ dest = os.path.join(test1_docs, fname)
+ copyfile(src, dest)
class H2TestEnv(HttpdTestEnv):
Modified: httpd/httpd/trunk/test/modules/http2/test_103_upgrade.py
URL:
http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/http2/test_103_upgrade.py?rev=1919087&r1=1919086&r2=1919087&view=diff
==============================================================================
--- httpd/httpd/trunk/test/modules/http2/test_103_upgrade.py (original)
+++ httpd/httpd/trunk/test/modules/http2/test_103_upgrade.py Wed Jul 10
10:55:23 2024
@@ -90,6 +90,9 @@ class TestUpgrade:
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
Modified: httpd/httpd/trunk/test/modules/http2/test_600_h2proxy.py
URL:
http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/http2/test_600_h2proxy.py?rev=1919087&r1=1919086&r2=1919087&view=diff
==============================================================================
--- httpd/httpd/trunk/test/modules/http2/test_600_h2proxy.py (original)
+++ httpd/httpd/trunk/test/modules/http2/test_600_h2proxy.py Wed Jul 10
10:55:23 2024
@@ -79,7 +79,7 @@ class TestH2Proxy:
assert env.apache_restart() == 0
url = env.mkurl("https", "cgi", f"/h2proxy/{env.http_port}/hello.py")
# httpd 2.5.0 disables reuse, not matter the config
- if enable_reuse == "on" and not env.httpd_is_at_least("2.5.0"):
+ if enable_reuse == "on" and not env.httpd_is_at_least("2.4.60"):
# reuse is not guaranteed for each request, but we expect some
# to do it and run on a h2 stream id > 1
reused = False
@@ -132,7 +132,7 @@ class TestH2Proxy:
assert int(r.json[0]["port"]) == env.http_port
assert r.response["status"] == 200
exp_port = env.http_port if enable_reuse == "on" \
- and not env.httpd_is_at_least("2.5.0")\
+ and not env.httpd_is_at_least("2.4.60")\
else env.http_port2
assert int(r.json[1]["port"]) == exp_port
Modified: httpd/httpd/trunk/test/modules/http2/test_700_load_get.py
URL:
http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/http2/test_700_load_get.py?rev=1919087&r1=1919086&r2=1919087&view=diff
==============================================================================
--- httpd/httpd/trunk/test/modules/http2/test_700_load_get.py (original)
+++ httpd/httpd/trunk/test/modules/http2/test_700_load_get.py Wed Jul 10
10:55:23 2024
@@ -61,3 +61,37 @@ class TestLoadGet:
args.append(env.mkurl("https", "cgi",
("/mnot164.py?count=%d&text=%s" % (start+(n*chunk)+i, text))))
r = env.run(args)
self.check_h2load_ok(env, r, chunk)
+
+ # test window sizes, connection and stream
+ @pytest.mark.parametrize("connbits,streambits", [
+ [10, 16], # 1k connection window, 64k stream windows
+ [10, 30], # 1k connection window, huge stream windows
+ [30, 8], # huge conn window, 256 bytes stream windows
+ ])
+ @pytest.mark.skip('awaiting mpm_event improvements')
+ def test_h2_700_20(self, env, connbits, streambits):
+ if not env.httpd_is_at_least("2.5.0"):
+ pytest.skip(f'need at least httpd 2.5.0 for this')
+ conf = H2Conf(env, extras={
+ 'base': [
+ 'StartServers 1',
+ ]
+ })
+ conf.add_vhost_cgi().add_vhost_test1().install()
+ assert env.apache_restart() == 0
+ assert env.is_live()
+ n = 2000
+ conns = 50
+ parallel = 10
+ args = [
+ env.h2load,
+ '-n', f'{n}', '-t', '1',
+ '-c', f'{conns}', '-m', f'{parallel}',
+ '-W', f'{connbits}', # connection window bits
+ '-w', f'{streambits}', # stream window bits
+ f'--connect-to=localhost:{env.https_port}',
+ f'--base-uri={env.mkurl("https", "test1", "/")}',
+ "/data-100k"
+ ]
+ r = env.run(args)
+ self.check_h2load_ok(env, r, n)
\ No newline at end of file
Modified: httpd/httpd/trunk/test/modules/http2/test_800_websockets.py
URL:
http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/http2/test_800_websockets.py?rev=1919087&r1=1919086&r2=1919087&view=diff
==============================================================================
--- httpd/httpd/trunk/test/modules/http2/test_800_websockets.py (original)
+++ httpd/httpd/trunk/test/modules/http2/test_800_websockets.py Wed Jul 10
10:55:23 2024
@@ -84,8 +84,8 @@ def ws_run(env: H2TestEnv, path, authori
@pytest.mark.skipif(condition=H2TestEnv.is_unsupported, reason="mod_http2 not supported here")
-@pytest.mark.skipif(condition=not H2TestEnv().httpd_is_at_least("2.5.0"),
- reason=f'need at least httpd 2.5.0 for this')
+@pytest.mark.skipif(condition=not H2TestEnv().httpd_is_at_least("2.4.60"),
+ reason=f'need at least httpd 2.4.60 for this')
@pytest.mark.skipif(condition=ws_version < ws_version_min,
reason=f'websockets is {ws_version}, need at least
{ws_version_min}')
class TestWebSockets:
Modified: httpd/httpd/trunk/test/pyhttpd/env.py
URL:
http://svn.apache.org/viewvc/httpd/httpd/trunk/test/pyhttpd/env.py?rev=1919087&r1=1919086&r2=1919087&view=diff
==============================================================================
--- httpd/httpd/trunk/test/pyhttpd/env.py (original)
+++ httpd/httpd/trunk/test/pyhttpd/env.py Wed Jul 10 10:55:23 2024
@@ -93,6 +93,7 @@ class HttpdTestSetup:
self._make_modules_conf()
self._make_htdocs()
self._add_aptest()
+ self._build_clients()
self.env.clear_curl_headerfiles()
def _make_dirs(self):
@@ -196,6 +197,16 @@ class HttpdTestSetup:
# load our test module which is not installed
fd.write(f"LoadModule aptest_module
\"{local_dir}/mod_aptest/.libs/mod_aptest.so\"\n")
+ def _build_clients(self):
+ clients_dir = os.path.join(
+ os.path.dirname(os.path.dirname(inspect.getfile(HttpdTestSetup))),
+ 'clients')
+ p = subprocess.run(['make'], capture_output=True, cwd=clients_dir)
+ rv = p.returncode
+ if rv != 0:
+ log.error(f"compiling test clients failed: {p.stderr}")
+ raise Exception(f"compiling test clients failed: {p.stderr}")
+
class HttpdTestEnv: