#!/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