To send mails, today some tests use msmtp and others our internal smtpc.py. This works, but msmtp slows down the tests significantly, and smtpc.py is also not particularly fast, and also has some limitations. This patch introduces a new SMTP client tool written in Go, and makes almost all the tests use it. Some tests still remain on msmtp, mainly for client-check compatibility. It's likely that this will be moved in later patches to a separate special-purpose test. With this patch, integration tests take ~20% less time than before.
91 lines
2.3 KiB
Bash
Executable File
91 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
. "$(dirname "$0")/../util/lib.sh"
|
|
|
|
init
|
|
check_hostaliases
|
|
|
|
generate_certs_for testserver
|
|
add_user user@testserver secretpassword
|
|
|
|
mkdir -p .logs
|
|
chasquid -v=2 --logfile=.logs/chasquid.log --config_dir=config &
|
|
wait_until_ready 1025
|
|
|
|
function send_and_check() {
|
|
smtpc "$1@testserver" < content
|
|
shift
|
|
for i in "$@"; do
|
|
wait_for_file ".mail/$i@testserver"
|
|
mail_diff content ".mail/$i@testserver"
|
|
rm -f ".mail/$i@testserver"
|
|
done
|
|
if [ -n "$(ls .mail/)" ]; then
|
|
fail "unexpected mail was delivered: $(ls .mail/)"
|
|
fi
|
|
}
|
|
|
|
# Remove the hooks that could be left over from previous failed tests.
|
|
rm -f config/hooks/alias-resolve
|
|
|
|
# Test email aliases.
|
|
send_and_check pepe jose
|
|
send_and_check joan juan
|
|
send_and_check pitanga ñangapirí
|
|
send_and_check añil azul índigo
|
|
|
|
# Test suffix separators and drop characters.
|
|
send_and_check a.ñi_l azul índigo
|
|
send_and_check añil-blah azul índigo
|
|
send_and_check añil+blah azul índigo
|
|
|
|
# Test the pipe alias separately.
|
|
rm -f .data/pipe_alias_worked
|
|
smtpc tubo@testserver < content
|
|
wait_for_file .data/pipe_alias_worked
|
|
mail_diff content .data/pipe_alias_worked
|
|
|
|
# Set up the hooks.
|
|
mkdir -p config/hooks/
|
|
cp alias-resolve-hook config/hooks/alias-resolve
|
|
|
|
# Test email aliases via the hook.
|
|
send_and_check vicuña juan jose
|
|
send_and_check vi.cu.ña juan jose
|
|
send_and_check vi.cu.ña+abc juan jose
|
|
send_and_check vic.uña+abc uña
|
|
|
|
# Test the pipe alias separately.
|
|
rm -f .data/pipe_alias_worked
|
|
smtpc ñandú@testserver < content
|
|
wait_for_file .data/pipe_alias_worked
|
|
mail_diff content .data/pipe_alias_worked
|
|
|
|
# Test when alias-resolve exits with an error
|
|
if smtpc roto@testserver < content 2> .logs/smtpc.out; then
|
|
fail "expected delivery to roto@ to fail, but succeeded"
|
|
fi
|
|
|
|
# Test a non-existent alias.
|
|
if smtpc nono@testserver < content 2> .logs/smtpc.out; then
|
|
fail "expected delivery to nono@ to fail, but succeeded"
|
|
fi
|
|
|
|
# Test chasquid-util's ability to do alias resolution talking to chasquid.
|
|
# We use chamuyero for convenience, so we can match the output exactly.
|
|
# We run it once to ensure it gets built.
|
|
chasquid-util --help > /dev/null
|
|
for i in *.cmy; do
|
|
if ! chamuyero "$i" > "$i.log" 2>&1 ; then
|
|
echo "$i failed, log follows"
|
|
cat "$i.log"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Remove the hooks, leave a clean state.
|
|
rm -f config/hooks/alias-resolve
|
|
|
|
success
|