Files

144 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
set -e
WORKDIR=$(mktemp -d)
TESTDIR=$(realpath "$(dirname "$0")")
DKIMPY_MILTER=${DKIMPY_MILTER:-"$TESTDIR/dkimpy-milter"}
KEY_TYPES=(ed25519 rsa)
cd "$WORKDIR"
printf "Testing %s from directory %s\n" "$DKIMPY_MILTER" "$WORKDIR"
for keytype in "${KEY_TYPES[@]}"; do
dknewkey --ktype "$keytype" "testkey.$keytype"
if [ "$keytype" = ed25519 ]; then
keyfile=KeyFileEd25519
selector=SelectorEd25519
elif [ "$keytype" = rsa ]; then
keyfile=KeyFile
selector=Selector
fi
if [ "$keytype" = ed25519 ]; then
keytable=KeyTableEd25519
signingtable=SigningTable
selector=SelectorEd25519
elif [ "$keytype" = rsa ]; then
keytable=KeyTable
signingtable=SigningTable
selector=Selector
fi
cat > "$keytype.signing.conf" <<EOF
Domain example.net
$keyfile testkey.$keytype.key
$selector testkey
Socket unix:$keytype.signing.sock
PidFile $keytype.signing.pid
Mode s
UserID $(id --name --user):$(id --name --group)
EOF
cat > "$keytype.verify.conf" <<EOF
Socket unix:$keytype.verify.sock
PidFile $keytype.verify.pid
Mode v
DNSOverride $(cat testkey.$keytype.dns)
MinimumKeyBits 2048
UserID $(id --name --user):$(id --name --group)
EOF
cat > "$keytype.stable.conf" <<EOF
$keyfile testkey.$keytype.key
$selector testkey
$signingtable $WORKDIR/signing-table
Socket unix:$keytype.stable.signing.sock
PidFile $keytype.stable.pid
Mode s
UserID $(id --name --user):$(id --name --group)
EOF
cat > "$keytype.stable.verify.conf" <<EOF
Socket unix:$keytype.stable.verify.sock
PidFile $keytype.stable.verify.pid
Mode v
DNSOverride $(cat testkey.$keytype.dns)
UserID $(id --name --user):$(id --name --group)
EOF
cat > "$keytype.table.conf" <<EOF
$keytable $WORKDIR/$keytype-table
$signingtable $WORKDIR/signing-table
Socket unix:$keytype.table.signing.sock
PidFile $keytype.table.pid
Mode s
UserID $(id --name --user):$(id --name --group)
EOF
cat > "$keytype.table.verify.conf" <<EOF
Socket unix:$keytype.table.verify.sock
PidFile $keytype.table.verify.pid
Mode v
DNSOverride $(cat testkey.$keytype.dns)
UserID $(id --name --user):$(id --name --group)
EOF
cat > "$keytype-table" <<EOF
preskey example.org:testkey:$WORKDIR/testkey.$keytype.key
orgkey example.org:testkey:$WORKDIR/testkey.$keytype.key
netkey example.net:testkey:$WORKDIR/testkey.$keytype.key
EOF
cat > "signing-table" <<EOF
president@example.org @special.example.org:preskey
*@example.org orgkey
*@example.net netkey
EOF
done
cleanup() {
echo cleaning up jobs:
jobs
for keytype in "${KEY_TYPES[@]}"; do
for func in signing verify stable stable.verify table table.verify; do
if [ -s "$keytype.$func.pid" ] && kill -0 "$(cat "$keytype.$func.pid")"; then
kill "$(cat $keytype.$func.pid)"
fi
done
done
wait
for keytype in "${KEY_TYPES[@]}"; do
for func in signing verify stable stable.verify table table.verify; do
errdata="$keytype.$func.stderr"
if [ -s "$errdata" ]; then
printf -- "-> %s:\n" "$errdata"
cat "$errdata"
printf -- "-> end %s\n" "$errdata"
fi
done
done
rm -rf "$WORKDIR"
}
for keytype in "${KEY_TYPES[@]}"; do
for func in signing verify stable stable.verify table table.verify; do
PYTHONPATH="$(dirname "$TESTDIR")" "$DKIMPY_MILTER" "$keytype.$func.conf" 2>"$keytype.$func.stderr" &
done
done
trap cleanup EXIT
# ugly ugly (how are we supposed to know that the milters are all ready?):
sleep 2
# uses miltertest from opendkim:
for x in ${TESTS:-"$TESTDIR"/*.miltertest}; do
if ! [ -e "$x" ]; then
if [ -e "$TESTDIR/$x" ]; then
x="$TESTDIR/$x"
fi
fi
printf -- "-> running %s...\n" "$x"
miltertest -s "$x"
done
rm -rf "$(dirname $TESTDIR)/dkimpy_milter/__pycache__"