81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
import inspect
|
|
import logging
|
|
import os
|
|
import subprocess
|
|
from typing import Dict, Any
|
|
|
|
from pyhttpd.certs import CertificateSpec
|
|
from pyhttpd.conf import HttpdConf
|
|
from pyhttpd.env import HttpdTestEnv, HttpdTestSetup
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class H1TestSetup(HttpdTestSetup):
|
|
|
|
def __init__(self, env: 'HttpdTestEnv'):
|
|
super().__init__(env=env)
|
|
self.add_source_dir(os.path.dirname(inspect.getfile(H1TestSetup)))
|
|
self.add_modules(["cgid", "autoindex", "ssl"])
|
|
|
|
def make(self):
|
|
super().make()
|
|
self._add_h1test()
|
|
self._setup_data_1k_1m()
|
|
|
|
def _add_h1test(self):
|
|
local_dir = os.path.dirname(inspect.getfile(H1TestSetup))
|
|
p = subprocess.run([self.env.apxs, '-c', 'mod_h1test.c'],
|
|
capture_output=True,
|
|
cwd=os.path.join(local_dir, 'mod_h1test'))
|
|
rv = p.returncode
|
|
if rv != 0:
|
|
log.error(f"compiling md_h1test failed: {p.stderr}")
|
|
raise Exception(f"compiling md_h1test failed: {p.stderr}")
|
|
|
|
modules_conf = os.path.join(self.env.server_dir, 'conf/modules.conf')
|
|
with open(modules_conf, 'a') as fd:
|
|
# load our test module which is not installed
|
|
fd.write(f"LoadModule h1test_module \"{local_dir}/mod_h1test/.libs/mod_h1test.so\"\n")
|
|
|
|
def _setup_data_1k_1m(self):
|
|
s90 = "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678\n"
|
|
with open(os.path.join(self.env.gen_dir, "data-1k"), 'w') as f:
|
|
for i in range(10):
|
|
f.write(f"{i:09d}-{s90}")
|
|
with open(os.path.join(self.env.gen_dir, "data-10k"), 'w') as f:
|
|
for i in range(100):
|
|
f.write(f"{i:09d}-{s90}")
|
|
with open(os.path.join(self.env.gen_dir, "data-100k"), 'w') as f:
|
|
for i in range(1000):
|
|
f.write(f"{i:09d}-{s90}")
|
|
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}")
|
|
|
|
|
|
class H1TestEnv(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=H1TestSetup(env=self))
|
|
|
|
|
|
class H1Conf(HttpdConf):
|
|
|
|
def __init__(self, env: HttpdTestEnv, extras: Dict[str, Any] = None):
|
|
super().__init__(env=env, extras=HttpdConf.merge_extras(extras, {
|
|
"base": [
|
|
"LogLevel http:trace4",
|
|
],
|
|
f"cgi.{env.http_tld}": [
|
|
"SSLOptions +StdEnvVars",
|
|
"AddHandler cgi-script .py",
|
|
"<Location \"/h1test/echo\">",
|
|
" SetHandler h1test-echo",
|
|
"</Location>",
|
|
]
|
|
}))
|