mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-19 14:57:04 +00:00
The integration tests spend a lot of time on some ancilliary actions, which slows them down: generating certificates, adding users, and waiting for things to happen. To improve the performance of those actions, this patch: - Makes (most) tests use plain passwords (-20%) - Adds a certificate cache to reuse certs (-10%) - Tightens the sleep loops (-5%) In aggregate, this patch results in a speedup of the integration tests of ~30-40%. Note that some of the tests required adjusting the username, because `chasquid-util user-add` would convert them to lowercase as per PRECIS mapping.
78 lines
1.9 KiB
Bash
Executable File
78 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
. $(dirname ${0})/../util/lib.sh
|
|
|
|
init
|
|
check_hostaliases
|
|
|
|
generate_certs_for testserver
|
|
|
|
#
|
|
# Automatic reload.
|
|
#
|
|
|
|
# Start with the user with the wrong password, and no aliases.
|
|
chasquid-util-user-add someone@testserver password111
|
|
rm -f config/domains/testserver/aliases
|
|
|
|
mkdir -p .logs
|
|
chasquid -v=2 --logfile=.logs/chasquid.log --config_dir=config \
|
|
--testing__reload_every=50ms &
|
|
wait_until_ready 1025
|
|
|
|
# First, check that delivery fails with the "wrong" password.
|
|
if run_msmtp someone@testserver < content 2>/dev/null; then
|
|
fail "success using the wrong password"
|
|
fi
|
|
|
|
# Change password, add an alias; then wait a bit more than the reload period
|
|
# and try again.
|
|
chasquid-util-user-add someone@testserver password222
|
|
echo "analias: someone" > config/domains/testserver/aliases
|
|
sleep 0.2
|
|
|
|
run_msmtp analias@testserver < content
|
|
wait_for_file .mail/someone@testserver
|
|
|
|
|
|
#
|
|
# Manual log rotation.
|
|
#
|
|
|
|
# Rotate logs.
|
|
mv .logs/chasquid.log .logs/chasquid.log-old
|
|
mv .logs/mail_log .logs/mail_log-old
|
|
|
|
# Send SIGHUP and give it a little for the server to handle it.
|
|
pkill -HUP -s 0 chasquid
|
|
sleep 0.2
|
|
|
|
# Send another mail.
|
|
rm .mail/someone@testserver
|
|
run_msmtp analias@testserver < content
|
|
wait_for_file .mail/someone@testserver
|
|
|
|
# Check there are new entries.
|
|
sleep 0.2
|
|
if ! grep -q "from=someone@testserver all done" .logs/mail_log; then
|
|
fail "new mail log did not have the expected entry"
|
|
fi
|
|
if ! grep -q -E "Queue.SendLoop .*: someone@testserver sent" .logs/chasquid.log;
|
|
then
|
|
fail "new chasquid log did not have the expected entry"
|
|
fi
|
|
|
|
|
|
# Test that we can make the server exit using the /exit endpoint.
|
|
# First, a GET should fail with status 405.
|
|
fexp http://localhost:1099/exit -status 405
|
|
|
|
# A POST should succeed, return an OK body, and the daemon should
|
|
# eventually exit.
|
|
CHASQUID_PID=$(pgrep -s 0 chasquid)
|
|
fexp http://localhost:1099/exit -method POST -bodyre "OK"
|
|
wait_until ! kill -s 0 $CHASQUID_PID 2> /dev/null
|
|
|
|
success
|