1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-19 14:57:04 +00:00
Files
go-chasquid-smtp/cmd/chasquid-util/test.sh
Alberto Bertogli e6c6df457d chasquid-util: Use server for aliases-resolve and domaininfo-remove
This patch makes chasquid-util's aliases-resolve and domaininfo-remove
commands talk to the chasquid server (via the new localrpc server).

For aliases-resolve, currently has fairly hacky logic which reimplements
a bunch of the servers', and is also incomplete because it does not
support hooks.

In this patch we fix that by having it talk to the server, where we get
authoritative responses and have no issues with aliases hooks. This
resolves https://github.com/albertito/chasquid/issues/18.

For domaininfo-remove, currently its implementation is also very hacky
since it manipulates files behind the servers' back and without even
using the internal library.

In this patch we fix that by doing the operation through the server,
avoiding the need for those hacks, and also remove the need to manually
reload the server afterwards.
2023-07-30 13:21:07 +01:00

115 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -e
. "$(dirname "$0")/../../test/util/lib.sh"
init
go build || exit 1
function r() {
./chasquid-util -C=.config "$@"
}
function check_userdb() {
if ! r check-userdb domain > /dev/null; then
echo check-userdb failed
exit 1
fi
}
mkdir -p .config/domains/domain/ .data/domaininfo
rm -f .config/chasquid.conf
echo 'data_dir: ".data"' >> .config/chasquid.conf
if ! r print-config > /dev/null; then
echo print-config failed
exit 1
fi
if ! r user-add user@domain --password=passwd > /dev/null; then
echo user-add failed
exit 1
fi
check_userdb
if ! r authenticate user@domain --password=passwd > /dev/null; then
echo authenticate failed
exit 1
fi
if r authenticate user@domain --password=abcd > /dev/null; then
echo authenticate with bad password worked
exit 1
fi
# Interactive authentication.
# Need to wrap the execution under "script" since the interaction requires an
# actual TTY, and that's a fairly portable way to do that.
if hash script 2>/dev/null; then
if ! (echo passwd; echo passwd ) \
| script \
-qfec "./chasquid-util -C=.config authenticate user@domain" \
".script-out" \
| grep -q "Authentication succeeded";
then
echo interactive authenticate failed
exit 1
fi
fi
if ! r user-remove user@domain > /dev/null; then
echo user-remove failed
exit 1
fi
check_userdb
if r authenticate user@domain --password=passwd > /dev/null; then
echo authenticate for removed user worked
exit 1
fi
C=$(r print-config | grep hostname)
if ! ( echo "$C" | grep -E -q "hostname:.*\"$HOSTNAME\"" ); then
echo print-config failed
echo output: "$C"
exit 1
fi
if r aliases-add alias2@domain target > /dev/null; then
A=$(grep alias2 .config/domains/domain/aliases)
if [ "$A" != "alias2: target" ]; then
echo aliases-add failed
echo output: "$A"
exit 1
fi
fi
if r aliases-add alias2@domain target > /dev/null; then
echo aliases-add on existing alias worked
exit 1
fi
if r aliases-add alias3@notexist target > /dev/null; then
echo aliases-add on non-existing domain worked
exit 1
fi
if r aliases-add alias4@domain > /dev/null; then
echo aliases-add without target worked
exit 1
fi
# Run all the chamuyero tests.
for i in *.cmy; do
if ! chamuyero "$i" > "$i.log" 2>&1 ; then
echo "# Test $i failed, log follows"
cat "$i.log"
exit 1
fi
done
success