#!/bin/bash

# Test SPF resolution, which requires overriding DNS server.
# Note this aims at providing some general end to end coverage, as well as the
# main gaps.

set -e
. "$(dirname "$0")/../util/lib.sh"

init
check_hostaliases

# Build with the DNS override, so we can fake DNS records.
export GOTAGS="dnsoverride"

# Two chasquid servers:
# A - listens on :1025, hosts srv-A
# B - listens on :2025, hosts srv-B

CONFDIR=A generate_certs_for srv-A
CONFDIR=A add_user usera@srv-A userA

CONFDIR=B generate_certs_for srv-B
CONFDIR=B add_user userb@srv-B userB

rm -rf .data-A .data-B .mail .certs
mkdir -p .logs-A .logs-B .mail .certs

# Put public certs in .certs, and use it as our trusted cert dir.
cp A/certs/srv-A/fullchain.pem .certs/srv-a.pem
cp B/certs/srv-B/fullchain.pem .certs/srv-b.pem
export SSL_CERT_DIR=$PWD/.certs/

chasquid -v=2 --logfile=.logs-A/chasquid.log --config_dir=A \
	--testing__dns_addr=127.0.0.1:9053 \
	--testing__max_received_headers=5 \
	--testing__outgoing_smtp_port=2025 &
chasquid -v=2 --logfile=.logs-B/chasquid.log --config_dir=B \
	--testing__dns_addr=127.0.0.1:9053 \
	--testing__outgoing_smtp_port=1025 &

wait_until_ready 1025
wait_until_ready 2025

function launch_minidns() {
	if [ "$MINIDNS" != "" ]; then
		kill "$MINIDNS"
		wait "$MINIDNS" || true
	fi
	cp "$1" .zones
	minidns_bg --addr=":9053" -zones=.zones >> .minidns.log 2>&1
	wait_until_ready 9053
}

# T0: Successful.
launch_minidns zones.t0
run_msmtp userB@srv-B < content
wait_for_file .mail/userb@srv-b
mail_diff content .mail/userb@srv-b

# T1: A is not permitted to send to B.
# Check that userA got a DSN about it.
rm .mail/*
launch_minidns zones.t1
run_msmtp userB@srv-B < content
wait_for_file .mail/usera@srv-a
mail_diff expected_dsn .mail/usera@srv-a

success
