Hi Stefan,

is some of this test stuff ready for 2.4.x?

Thanks and regards,

Rainer

Am 10.07.24 um 12:55 schrieb ic...@apache.org:
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:

Reply via email to