You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ic...@apache.org on 2022/04/14 11:09:51 UTC

svn commit: r1899845 - in /httpd/httpd/trunk/test/modules/core: conftest.py env.py htdocs/ htdocs/cgi/ htdocs/cgi/delay.py test_002_restarts.py

Author: icing
Date: Thu Apr 14 11:09:50 2022
New Revision: 1899845

URL: http://svn.apache.org/viewvc?rev=1899845&view=rev
Log:
  *) test/core: start of a stress test case, skipped unless
     environment variable STRESS_TEST is present.


Added:
    httpd/httpd/trunk/test/modules/core/env.py
    httpd/httpd/trunk/test/modules/core/htdocs/
    httpd/httpd/trunk/test/modules/core/htdocs/cgi/
    httpd/httpd/trunk/test/modules/core/htdocs/cgi/delay.py
    httpd/httpd/trunk/test/modules/core/test_002_restarts.py
Modified:
    httpd/httpd/trunk/test/modules/core/conftest.py

Modified: httpd/httpd/trunk/test/modules/core/conftest.py
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/core/conftest.py?rev=1899845&r1=1899844&r2=1899845&view=diff
==============================================================================
--- httpd/httpd/trunk/test/modules/core/conftest.py (original)
+++ httpd/httpd/trunk/test/modules/core/conftest.py Thu Apr 14 11:09:50 2022
@@ -4,25 +4,26 @@ import os
 import pytest
 import sys
 
+from .env import CoreTestEnv
 from pyhttpd.env import HttpdTestEnv
 
 sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
 
 
 def pytest_report_header(config, startdir):
-    env = HttpdTestEnv()
+    env = CoreTestEnv()
     return f"core [apache: {env.get_httpd_version()}, mpm: {env.mpm_module}, {env.prefix}]"
 
 
 @pytest.fixture(scope="package")
-def env(pytestconfig) -> HttpdTestEnv:
+def env(pytestconfig) -> CoreTestEnv:
     level = logging.INFO
     console = logging.StreamHandler()
     console.setLevel(level)
     console.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
     logging.getLogger('').addHandler(console)
     logging.getLogger('').setLevel(level=level)
-    env = HttpdTestEnv(pytestconfig=pytestconfig)
+    env = CoreTestEnv(pytestconfig=pytestconfig)
     env.setup_httpd()
     env.apache_access_log_clear()
     env.httpd_error_log.clear_log()

Added: httpd/httpd/trunk/test/modules/core/env.py
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/core/env.py?rev=1899845&view=auto
==============================================================================
--- httpd/httpd/trunk/test/modules/core/env.py (added)
+++ httpd/httpd/trunk/test/modules/core/env.py Thu Apr 14 11:09:50 2022
@@ -0,0 +1,25 @@
+import inspect
+import logging
+import os
+
+from pyhttpd.env import HttpdTestEnv, HttpdTestSetup
+
+log = logging.getLogger(__name__)
+
+
+class CoreTestSetup(HttpdTestSetup):
+
+    def __init__(self, env: 'HttpdTestEnv'):
+        super().__init__(env=env)
+        self.add_source_dir(os.path.dirname(inspect.getfile(CoreTestSetup)))
+        self.add_modules(["cgid"])
+
+
+class CoreTestEnv(HttpdTestEnv):
+
+    def __init__(self, pytestconfig=None):
+        super().__init__(pytestconfig=pytestconfig)
+        self.add_httpd_log_modules(["http", "core"])
+
+    def setup_httpd(self, setup: HttpdTestSetup = None):
+        super().setup_httpd(setup=CoreTestSetup(env=self))

Added: httpd/httpd/trunk/test/modules/core/htdocs/cgi/delay.py
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/core/htdocs/cgi/delay.py?rev=1899845&view=auto
==============================================================================
--- httpd/httpd/trunk/test/modules/core/htdocs/cgi/delay.py (added)
+++ httpd/httpd/trunk/test/modules/core/htdocs/cgi/delay.py Thu Apr 14 11:09:50 2022
@@ -0,0 +1,11 @@
+#!/usr/bin/env python3
+import sys, time
+
+content="A delayed response.\n"
+
+print("Status: 200")
+print(f"Request-Length: {len(content)}")
+print("Content-Type: text/plain\n")
+time.sleep(1)
+sys.stdout.write(content)
+

Added: httpd/httpd/trunk/test/modules/core/test_002_restarts.py
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/test/modules/core/test_002_restarts.py?rev=1899845&view=auto
==============================================================================
--- httpd/httpd/trunk/test/modules/core/test_002_restarts.py (added)
+++ httpd/httpd/trunk/test/modules/core/test_002_restarts.py Thu Apr 14 11:09:50 2022
@@ -0,0 +1,51 @@
+import os
+
+import pytest
+
+from .env import CoreTestEnv
+from pyhttpd.conf import HttpdConf
+
+
+@pytest.mark.skipif(condition='STRESS_TEST' not in os.environ,
+                    reason="STRESS_TEST not set in env")
+@pytest.mark.skipif(condition=not CoreTestEnv().h2load_is_at_least('1.41.0'),
+                    reason="h2load unavailable or misses --connect-to option")
+class TestRestarts:
+
+    @pytest.fixture(autouse=True, scope='class')
+    def _class_scope(self, env):
+        conf = HttpdConf(env, extras={
+            'base': f"""
+StartServers 1
+ServerLimit 4
+ThreadLimit 2
+ThreadsPerChild 2
+MinSpareThreads 2
+MaxSpareThreads 4
+MaxRequestWorkers 8
+MaxConnectionsPerChild 0
+        """,
+        })
+        conf.add_vhost_cgi()
+        conf.install()
+        assert env.apache_restart() == 0
+
+    def test_core_002_01(self, env):
+        connections = 8
+        n = connections * 10
+        url = env.mkurl("https", "cgi", "/delay.py")
+        args = [env.h2load, f"--connect-to=localhost:{env.https_port}", "--h1",
+                "-n", str(n), "-c", str(connections),
+                url,
+                ]
+        r = env.run(args)
+        assert 0 == r.exit_code
+        r = env.h2load_status(r)
+        assert r.results["h2load"]["requests"] == {
+            "total": n, "started": n, "done": n, "succeeded": n
+        }, f"{r.stdout}"
+        assert n == r.results["h2load"]["status"]["2xx"]
+        assert 0 == r.results["h2load"]["status"]["3xx"]
+        assert 0 == r.results["h2load"]["status"]["4xx"]
+        assert 0 == r.results["h2load"]["status"]["5xx"]
+