test
Directory actions
More options
Directory actions
More options
test
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
This directory contains useful test code for testing various bits
of Apache functionality. This stuff is for the developers only,
so we might remove it on public releases.
Python / pytest test suites
===========================
There are two complementary Python (pytest) test suites in this directory.
Both run against an already-built httpd; they are independent of each other.
pyhttpd / modules/ httpd's own test framework. Covers HTTP/2, mod_md
(ACME), HTTP/1, proxy and core behaviour. Drives the
server with external clients (curl, nghttp, h2load) and
is configured via pyhttpd/config.ini (generated by
httpd's configure). Framework code lives in pyhttpd/;
tests live in modules/{core,http1,http2,md,proxy}/.
pytest_suite/ A self-contained port of the classic Perl Apache::Test
suite (core HTTP, per-module tests, security/CVE
regressions, SSL/TLS, PHP). Drives the server with an
in-process Python HTTP client (httpx) and raw sockets.
It is fully self-contained: it ships its own conf
templates, document root, C test modules and helper
framework under pytest_suite/, and reads nothing outside
that directory. See pytest_suite/README.md for details,
including how to add new tests.
The two suites coexist: pytest_suite/ has its own conftest.py and
pyproject.toml, so pytest treats it as its own rootdir and does NOT pick up
this directory's pyhttpd conftest.py. Run pytest_suite from inside
pytest_suite/ (or via the unified runner below) -- do not point pytest at the
top-level test/ directory expecting to run both at once.
Unified runner: run-all-tests.sh
---------------------------------
run-all-tests.sh runs BOTH suites against the same built httpd and reports a
combined result. pytest_suite runs first, then the pyhttpd modules/ tests.
./run-all-tests.sh # run both suites (pytest_suite first)
./run-all-tests.sh --only=pysuite # only the pytest_suite tests
./run-all-tests.sh --only=pyhttpd # only the pyhttpd modules/ tests
./run-all-tests.sh --apxs=/path/to/apxs # point at a specific httpd build
./run-all-tests.sh -k status -v # flags pass through to BOTH suites
How it finds the httpd build:
* pytest_suite is located via apxs -- from --apxs, the $APXS environment
variable, the "prefix" in pyhttpd/config.ini, or apxs on $PATH.
* the pyhttpd tests use pyhttpd/config.ini (built by httpd's configure), via
the system "pytest".
Selecting tests:
* Flag arguments (-v, -k NAME, -x, ...) are passed to both suites.
* Positional test paths are passed only to pytest_suite (they are
pytest_suite paths). Select pyhttpd tests with the PYHTTPD_TARGETS
environment variable, e.g.
PYHTTPD_TARGETS="modules/http2" ./run-all-tests.sh --only=pyhttpd
By default the pyhttpd side runs every modules/* directory whose conftest
imports successfully in your environment; a directory whose optional
dependency is missing (e.g. modules/md needs pyOpenSSL) is skipped with a
note rather than aborting the run.
Environment overrides:
APXS path to apxs (default: pyhttpd/config.ini prefix, else PATH)
PHP_FPM path to a php-fpm binary; enables pytest_suite's PHP tests
PYHTTPD_TARGETS pyhttpd test path(s) to run (default: auto-detected modules/*)
The runner exits non-zero if either suite has failures.
Running a suite directly
------------------------
pytest_suite (from its own directory; it creates its own virtualenv):
cd pytest_suite
uv sync # one-time: create the venv
./runtests.sh --apxs=/path/to/apxs # all tests
./runtests.sh --php-fpm=/path/to/php-fpm tests/t/php # PHP tests
./runtests.sh -k rewrite -v # any pytest args pass through
pyhttpd tests (need pyhttpd/config.ini from httpd's configure, plus curl,
nghttp2/h2load, and -- for modules/md -- pyOpenSSL and an ACME test server):
pytest modules/http2 # all HTTP/2 tests
pytest modules/core -k test_001 # a subset
Other contents
--------------
unit/ C-based unit tests (libcheck / httpdunit).
clients/ helper client programs used by the tests.
*.c small standalone C test programs.