blob: badc14839445cbb20a8452b45ee9de05ab2e3508 [file]
import pytest
from pyhttpd.conf import HttpdConf
from .env import NO_MONITOR_TIMEOUT
class TestSystemdExtendedStatus:
"""mod_systemd turns ExtendedStatus on so that it has request counts to
report, which changes what the rest of the server records too."""
@pytest.fixture(autouse=True, scope='class')
def _class_scope(self, env):
yield
conf = HttpdConf(env)
conf.add_vhost_test1()
conf.install()
assert env.apache_restart() == 0
def auto_report(self, env):
r = env.curl_get(env.mkurl("http", "test1", "/server-status?auto"))
assert r.response['status'] == 200
return r.response['body'].decode()
def install(self, env, extra=''):
conf = HttpdConf(env, extras={
'base': f"""
{extra}
<Location "/server-status">
SetHandler server-status
</Location>
"""
})
conf.add_vhost_test1()
conf.install()
assert env.apache_restart() == 0
def test_systemd_003_01_enabled_by_default(self, env):
"""Loading mod_systemd is enough to get extended status; no
ExtendedStatus directive is present in this configuration."""
self.install(env)
body = self.auto_report(env)
assert 'Total Accesses:' in body, \
"ExtendedStatus was not enabled by mod_systemd"
assert 'Total kBytes:' in body
def test_systemd_003_02_directive_wins(self, env):
"""An explicit ExtendedStatus off still takes effect: mod_systemd
sets the default in pre_config, before the configuration is read."""
self.install(env, extra='ExtendedStatus off')
body = self.auto_report(env)
assert 'Total Accesses:' not in body, \
"ExtendedStatus off was overridden by mod_systemd"
def test_systemd_003_03_no_report_without_extended_status(self, env):
"""With extended status off the monitor hook declines, so no status
line is reported to systemd."""
env.notify.clear()
self.install(env, extra='ExtendedStatus off')
# Startup notifications are still sent...
assert env.notify.wait_for_status(r'^Processing requests\.\.\.$',
timeout=10) is not None
# ...but the periodic status line is not.
assert env.notify.wait_for_status(r'^Total requests: ',
timeout=NO_MONITOR_TIMEOUT) is None, \
"a monitor report was sent with ExtendedStatus off"