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"]
+