1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-17 14:37:02 +00:00

test: Add a test for Exim interactions

This patch adds a new test which makes chasquid send and receive email to/from
Exim.

To make it work we need to add two testing flags to the SMTP courier, which is
not ideal but doesn't muddle the code much.

The test is not very portable, and assumes an exim binary is available, but
does not have to be installed in the system. It includes a helper script to
fetch one from the Debian archives.
This commit is contained in:
Alberto Bertogli
2016-07-21 22:21:48 +01:00
parent aac2d3c061
commit 905161c537
11 changed files with 190 additions and 4 deletions

3
test/t-exim/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
# Packages, so fetches via get-exim4-* don't add cruft.
*.deb

View File

@@ -0,0 +1,5 @@
address: ":1025"
monitoring_address: ":1099"
mail_delivery_agent_bin: "test-mda"
mail_delivery_agent_args: "%user%@%domain%"

View File

@@ -0,0 +1,2 @@
#chasquid-userdb-v1
user SCRYPT@n:14,r:8,p:1,l:32,r00XqNmRkV505R2X6KT8+Q== aAiBBIVNNzmDXwxLLdJezFuxGtc2/wcHsy3FiOMAH4c=

View File

@@ -0,0 +1,62 @@
CONFDIR = ${EXIMDIR}
spool_directory = CONFDIR/spool
exim_path = CONFDIR/exim4
# No need to keep anything on the environment.
# This is the default, but exim emits a warning if it's not set
# (https://www.exim.org/static/doc/CVE-2016-1531.txt).
keep_environment =
# Disable TLS for now.
tls_advertise_hosts =
# Run as the current user.
# TODO: obviously do not hard-code it!
exim_group = ${USER}
exim_user = ${USER}
# Listen on a non-privileged port.
daemon_smtp_port = 2025
# ACLs to let anyone send mail (for testing, obviously).
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
begin acl
acl_check_rcpt:
accept
acl_check_data:
accept
# Forward all incoming email to chasquid (running on :1025 in this test).
begin routers
rewritedst:
driver = redirect
data = someone@srv-chasquid
forwardall:
driver = accept
transport = tochasquid
begin transports
tochasquid:
driver = smtp
# exim4 will by default detect and special-case deliveries to localhost;
# this avoids that behaviour and tells it to go ahead anyway.
allow_localhost
hosts_override
# chasquid will be listening on localhost:1025
hosts = localhost
port = 1025
# Add headers to help debug failures.
delivery_date_add
envelope_to_add
return_path_add

4
test/t-exim/content Normal file
View File

@@ -0,0 +1,4 @@
Subject: Prueba desde el test
Crece desde el test el futuro
Crece desde el test

27
test/t-exim/get-exim4-debian.sh Executable file
View File

@@ -0,0 +1,27 @@
#!/bin/bash
#
# This script downloads the exim4 binary from Debian's package.
# It assumes "apt" is functional, which means it's not very portable, but
# given the nature of these tests that's acceptable for now.
set -e
. $(dirname ${0})/../util/lib.sh
init
# Download and extract the package in .exim-bin
apt download exim4-daemon-light
dpkg -x exim4-daemon-light_*.deb $PWD/.exim-bin/
# Create a symlink to .exim4, which is the directory we will use to store
# configuration, spool, etc.
# The configuration template will look for it here.
mkdir -p .exim4
ln -sf $PWD/.exim-bin/usr/sbin/exim4 .exim4/
# Remove the setuid bit, if there is one - we don't need it and may cause
# confusion and/or security troubles.
chmod -s .exim-bin/usr/sbin/exim4
success

2
test/t-exim/hosts Normal file
View File

@@ -0,0 +1,2 @@
srv-chasquid localhost
srv-exim localhost

14
test/t-exim/msmtprc Normal file
View File

@@ -0,0 +1,14 @@
account default
host srv-chasquid
port 1025
tls on
tls_trust_file config/domains/srv-chasquid/cert.pem
from user@srv-chasquid
auth on
user user@srv-chasquid
password secretpassword

57
test/t-exim/run.sh Executable file
View File

@@ -0,0 +1,57 @@
#!/bin/bash
#
# This test checks that we can send and receive mail to/from exim4.
#
# Setup:
# - chasquid listening on :1025.
# - exim listening on :2025.
# - hosts "srv-chasquid" and "srv-exim" pointing back to localhost.
# - exim configured to accept all email and forward it to
# someone@srv-chasquid.
#
# Test:
# msmtp --> chasquid --> exim --> chasquid --> local delivery
#
# msmtp will auth as user@srv-chasquid to chasquid, and send an email with
# recipient someone@srv-exim.
#
# chasquid will deliver the mail to exim.
#
# exim will deliver the mail back to chasquid (after changing the
# destination to someone@chasquid).
#
# chasquid will receive the email from exim, and deliver it locally.
set -e
. $(dirname ${0})/../util/lib.sh
init
# Create a temporary directory for exim4 to use, and generate the exim4
# config based on the template.
mkdir -p .exim4
EXIMDIR="$PWD/.exim4" envsubst < config/exim4.in > .exim4/config
generate_certs_for srv-chasquid
# Launch chasquid at port 1025 (in config).
# Use outgoing port 2025 which is where exim will be at.
# Bypass MX lookup, so it can find srv-exim (via our host alias).
chasquid -v=2 --log_dir=.logs --config_dir=config \
--testing__outgoing_smtp_port=2025 \
--testing__bypass_mx_lookup &
wait_until_ready 1025
# Launch exim at port 2025
.exim4/exim4 -bd -d -C "$PWD/.exim4/config" > .exim4/log 2>&1 &
wait_until_ready 2025
# msmtp will use chasquid to send an email to someone@srv-exim.
run_msmtp someone@srv-exim < content
wait_for_file .mail/someone@srv-chasquid
mail_diff content .mail/someone@srv-chasquid
success