1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-19 14:57:04 +00:00
Files
go-chasquid-smtp/test/util/lib.sh
Alberto Bertogli d39d3aaff4 chasquid: Dovecot support (experimental)
This patch adds dovecot support to the chasquid daemon, using the
internal dovecot library added in previous patches.

Dovecot support is still considered EXPERIMENTAL and may be reverted, or
changed in backwards-incompatible ways.

The patch also adds the corresponding integration test, which brings up
a dovecot server with a custom configuration, and tests chasquid's
authentication against it.  If dovecot is not installed, the test is
skipped.
2018-02-10 23:18:31 +00:00

125 lines
2.6 KiB
Bash

# Library to write the shell scripts in the tests.
function init() {
if [ "$V" == "1" ]; then
set -v
fi
export UTILDIR="$( realpath `dirname "${BASH_SOURCE[0]}"` )"
export TBASE="$(realpath `dirname ${0}`)"
cd ${TBASE}
if [ "${RACE}" == "1" ]; then
RACE="-race"
fi
# Remove the directory where test-mda will deliver mail, so previous
# runs don't interfere with this one.
rm -rf .mail
# Set traps to kill our subprocesses when we exit (for any reason).
# https://stackoverflow.com/questions/360201/
trap "exit" INT TERM
trap "kill 0" EXIT
}
function generate_cert() {
go run ${UTILDIR}/generate_cert.go "$@"
}
function chasquid() {
# HOSTALIASES: so we "fake" hostnames.
# PATH: so chasquid can call test-mda without path issues.
# MDA_DIR: so our test-mda knows where to deliver emails.
HOSTALIASES=${TBASE}/hosts \
PATH=${UTILDIR}:${PATH} \
MDA_DIR=${TBASE}/.mail \
go run ${RACE} ${TBASE}/../../chasquid.go "$@"
}
function add_user() {
CONFDIR="${CONFDIR:-config}"
DOMAIN=$(echo $1 | cut -d @ -f 2)
mkdir -p "${CONFDIR}/domains/$DOMAIN/"
go run ${TBASE}/../../cmd/chasquid-util/chasquid-util.go \
-C "${CONFDIR}" \
user-add "$1" \
--password "$2" \
>> .add_user_logs
}
function dovecot-auth-cli() {
go run ${TBASE}/../../cmd/dovecot-auth-cli/dovecot-auth-cli.go "$@"
}
function run_msmtp() {
# msmtp will check that the rc file is only user readable.
chmod 600 msmtprc
HOSTALIASES=${TBASE}/hosts \
msmtp -C msmtprc "$@"
}
function smtpc.py() {
${UTILDIR}/smtpc.py "$@"
}
function mail_diff() {
${UTILDIR}/mail_diff "$@"
}
function chamuyero() {
${UTILDIR}/chamuyero "$@"
}
function success() {
echo success
}
function skip() {
echo skipped: $*
exit 0
}
function fail() {
echo FAILED: $*
exit 1
}
# Wait until there's something listening on the given port.
function wait_until_ready() {
PORT=$1
while ! bash -c "true < /dev/tcp/localhost/$PORT" 2>/dev/null ; do
sleep 0.1
done
}
# Wait for the given file to exist.
function wait_for_file() {
while ! [ -e ${1} ]; do
sleep 0.1
done
}
# Generate certs for the given hostname.
function generate_certs_for() {
CONFDIR="${CONFDIR:-config}"
mkdir -p ${CONFDIR}/certs/${1}/
(
cd ${CONFDIR}/certs/${1}
generate_cert -ca -duration=1h -host=${1}
)
}
# Check the Python version, and skip if it's too old.
# This will check against the version required for smtpc.py.
function skip_if_python_is_too_old() {
# We need Python >= 3.5 to be able to use SMTPUTF8.
check='import sys; sys.exit(0 if sys.version_info >= (3, 5) else 1)'
if ! python3 -c "${check}" > /dev/null 2>&1; then
skip "python3 >= 3.5 not available"
fi
}