This patch groups a series of commands that redirect to a file into a single grouped redirect, for readability reasons. Suggested by shellcheck SC2129.
95 lines
3.4 KiB
Bash
Executable File
95 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
. "$(dirname "$0")/../util/lib.sh"
|
|
|
|
init
|
|
check_hostaliases
|
|
|
|
rm -rf .data-primary .data-secondary .data-external .mail
|
|
rm -f {primary,secondary,external}/domains/*/dkim:*.pem
|
|
|
|
# Build with the DNS override, so we can fake DNS records.
|
|
export GOTAGS="dnsoverride"
|
|
|
|
# Two servers for the same domain "dodo":
|
|
# primary - listens on 127.0.0.10:1025
|
|
# secondary - listens on 127.0.0.11:1025
|
|
#
|
|
# One server for domain "kiwi":
|
|
# external - listens on 127.0.0.20:1025
|
|
|
|
CONFDIR=primary generate_certs_for primary
|
|
CONFDIR=primary add_user user111@dodo user111
|
|
CONFDIR=primary chasquid-util dkim-keygen --algo=ed25519 \
|
|
dodo sel-primary-1 > /dev/null
|
|
|
|
CONFDIR=secondary generate_certs_for secondary
|
|
CONFDIR=secondary add_user user222@dodo user222
|
|
CONFDIR=secondary chasquid-util dkim-keygen --algo=ed25519 \
|
|
dodo sel-secondary-1 > /dev/null
|
|
|
|
CONFDIR=external generate_certs_for external
|
|
CONFDIR=external add_user user333@kiwi user333
|
|
CONFDIR=external chasquid-util dkim-keygen --algo=ed25519 \
|
|
kiwi sel-external-1 > /dev/null
|
|
|
|
|
|
# Launch minidns in the background using our configuration.
|
|
# Augment the zones with the dkim ones.
|
|
cp zones .zones
|
|
{
|
|
CONFDIR=primary chasquid-util dkim-dns dodo | sed 's/"//g'
|
|
CONFDIR=secondary chasquid-util dkim-dns dodo | sed 's/"//g'
|
|
CONFDIR=external chasquid-util dkim-dns kiwi | sed 's/"//g'
|
|
} >> .zones
|
|
minidns_bg --addr=":9053" -zones=.zones >> .minidns.log 2>&1
|
|
|
|
|
|
mkdir -p .logs
|
|
|
|
chasquid -v=2 --logfile=.logs/primary-chasquid.log --config_dir=primary \
|
|
--testing__dns_addr=127.0.0.1:9053 \
|
|
--testing__outgoing_smtp_port=1025 &
|
|
chasquid -v=2 --logfile=.logs/secondary-chasquid.log --config_dir=secondary \
|
|
--testing__dns_addr=127.0.0.1:9053 \
|
|
--testing__outgoing_smtp_port=1025 &
|
|
chasquid -v=2 --logfile=.logs/external-chasquid.log --config_dir=external \
|
|
--testing__dns_addr=127.0.0.1:9053 \
|
|
--testing__outgoing_smtp_port=1025 &
|
|
|
|
wait_until "true < /dev/tcp/127.0.0.10/1025" 2>/dev/null
|
|
wait_until "true < /dev/tcp/127.0.0.11/1025" 2>/dev/null
|
|
wait_until "true < /dev/tcp/127.0.0.20/1025" 2>/dev/null
|
|
wait_until_ready 9053
|
|
|
|
# Connect to secondary, send an email to user111@dodo (which exists only in
|
|
# the primary). It should be forwarded to the primary.
|
|
# Note this also verifies SRS is correct (by comparing the Received headers),
|
|
# and that DKIM signatures are generated by secondary, and successfully
|
|
# validated by primary.
|
|
smtpc -c=smtpc-secondary.conf user111@dodo < content
|
|
wait_for_file .mail/primary:user111@dodo
|
|
mail_diff expected-primary-user111@dodo .mail/primary:user111@dodo
|
|
|
|
# Connect to the secondary, send an email to user333@kiwi (which exists only
|
|
# in external). It should be DKIM signed and delivered to the external server.
|
|
# This is a normal delivery.
|
|
smtpc -c=smtpc-secondary.conf user333@kiwi < content
|
|
wait_for_file .mail/external:user333@kiwi
|
|
mail_diff expected-external-user333@kiwi .mail/external:user333@kiwi
|
|
|
|
# Connect to the secondary, send an email to chain-1@dodo, which has a long
|
|
# alias chain:
|
|
# secondary: chain-1-1@dodo -> chain-1-2@dodo via primary
|
|
# primary: chain-1-2@dodo -> chain-1-3@kiwi
|
|
# external: chain-1-3@kiwi -> chain-1-4@dodo via secondary
|
|
# secondary: chain-1-4@dodo -> chain-1-5@dodo via primary
|
|
# primary: chain-1-5@dodo -> user111@dodo
|
|
rm .mail/primary:user111@dodo
|
|
smtpc -c=smtpc-secondary.conf chain-1-1@dodo < content
|
|
wait_for_file .mail/primary:user111@dodo
|
|
mail_diff expected-chain-1 .mail/primary:user111@dodo
|
|
|
|
success
|