diff --git a/Makefile b/Makefile index 87f8b389..4df825cc 100644 --- a/Makefile +++ b/Makefile @@ -74,15 +74,6 @@ run: -e SSL_TYPE=letsencrypt \ -h mail.my-domain.com -t $(NAME) sleep 15 - docker run --rm -d --name mail_smtponly \ - -v "`pwd`/test/config":/tmp/docker-mailserver \ - -v "`pwd`/test/test-files":/tmp/docker-mailserver-test:ro \ - -e SMTP_ONLY=1 \ - -e PERMIT_DOCKER=network \ - -e DMS_DEBUG=0 \ - -e OVERRIDE_HOSTNAME=mail.my-domain.com \ - -t $(NAME) - sleep 15 docker run --rm -d --name mail_smtponly_without_config \ -e SMTP_ONLY=1 \ -e ENABLE_LDAP=1 \ diff --git a/test/mail_smtponly.bats b/test/mail_smtponly.bats new file mode 100644 index 00000000..fbbca9ee --- /dev/null +++ b/test/mail_smtponly.bats @@ -0,0 +1,78 @@ +load 'test_helper/common' + +function setup() { + run_setup_file_if_necessary +} + +function teardown() { + run_teardown_file_if_necessary +} + +function setup_file() { + docker run --rm -d --name mail_smtponly \ + -v "`pwd`/test/config":/tmp/docker-mailserver \ + -v "`pwd`/test/test-files":/tmp/docker-mailserver-test:ro \ + -e SMTP_ONLY=1 \ + -e PERMIT_DOCKER=network \ + -e DMS_DEBUG=0 \ + -e OVERRIDE_HOSTNAME=mail.my-domain.com \ + -t ${NAME} + + wait_for_finished_setup_in_container mail_smtponly +} + +function teardown_file() { + docker rm -f mail_smtponly +} + +@test "first" { + skip 'this test must come first to reliably identify when to run setup_file' +} + +# +# configuration checks +# + +@test "checking configuration: hostname/domainname override" { + run docker exec mail_smtponly /bin/bash -c "cat /etc/mailname | grep my-domain.com" + assert_success +} + +# +# imap +# + +@test "checking process: dovecot imaplogin (disabled using SMTP_ONLY)" { + run docker exec mail_smtponly /bin/bash -c "ps aux --forest | grep -v grep | grep '/usr/sbin/dovecot'" + assert_failure +} + +# +# smtp +# + +@test "checking smtp_only: mail send should work" { + run docker exec mail_smtponly /bin/sh -c "postconf -e smtp_host_lookup=no" + assert_success + run docker exec mail_smtponly /bin/sh -c "/etc/init.d/postfix reload" + assert_success + run docker exec mail_smtponly /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/email-templates/smtp-only.txt" + assert_success + run docker exec mail_smtponly /bin/sh -c 'grep -cE "to=.*status\=sent" /var/log/mail/mail.log' + [ "$status" -ge 0 ] +} + +# +# PERMIT_DOCKER=network +# + +@test "checking PERMIT_DOCKER=network: opendmarc/opendkim config" { + run docker exec mail_smtponly /bin/sh -c "cat /etc/opendmarc/ignore.hosts | grep '172.16.0.0/12'" + assert_success + run docker exec mail_smtponly /bin/sh -c "cat /etc/opendkim/TrustedHosts | grep '172.16.0.0/12'" + assert_success +} + +@test "last" { + skip 'this test is only there to reliably mark the end for the teardown_file' +} \ No newline at end of file diff --git a/test/tests.bats b/test/tests.bats index 9750d281..76a04cb5 100644 --- a/test/tests.bats +++ b/test/tests.bats @@ -32,11 +32,6 @@ function count_processed_changes() { assert_success } -@test "checking configuration: hostname/domainname override" { - run docker exec mail_smtponly /bin/bash -c "cat /etc/mailname | grep my-domain.com" - assert_success -} - @test "checking configuration: hostname/domainname override: check container hostname is applied correctly" { run docker exec mail_override_hostname /bin/bash -c "hostname | grep unknown.domain.tld" assert_success @@ -128,11 +123,6 @@ function count_processed_changes() { assert_success } -@test "checking process: dovecot imaplogin (disabled using SMTP_ONLY)" { - run docker exec mail_smtponly /bin/bash -c "ps aux --forest | grep -v grep | grep '/usr/sbin/dovecot'" - assert_failure -} - @test "checking imap: server is ready with STARTTLS" { run docker exec mail /bin/bash -c "nc -w 2 0.0.0.0 143 | grep '* OK' | grep 'STARTTLS' | grep 'ready'" assert_success @@ -303,17 +293,6 @@ function count_processed_changes() { assert_output 1 } -@test "checking smtp_only: mail send should work" { - run docker exec mail_smtponly /bin/sh -c "postconf -e smtp_host_lookup=no" - assert_success - run docker exec mail_smtponly /bin/sh -c "/etc/init.d/postfix reload" - assert_success - run docker exec mail_smtponly /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/email-templates/smtp-only.txt" - assert_success - run docker exec mail_smtponly /bin/sh -c 'grep -cE "to=.*status\=sent" /var/log/mail/mail.log' - [ "$status" -ge 0 ] -} - @test "checking smtp: not advertising smtputf8" { # Dovecot does not support SMTPUTF8, so while we can send we cannot receive # Better disable SMTPUTF8 support entirely if we can't handle it correctly @@ -967,13 +946,6 @@ function count_processed_changes() { assert_success } -@test "checking PERMIT_DOCKER: opendmarc/opendkim config" { - run docker exec mail_smtponly /bin/sh -c "cat /etc/opendmarc/ignore.hosts | grep '172.16.0.0/12'" - assert_success - run docker exec mail_smtponly /bin/sh -c "cat /etc/opendkim/TrustedHosts | grep '172.16.0.0/12'" - assert_success -} - @test "checking PERMIT_DOCKER: my network value" { run docker exec mail /bin/sh -c "postconf | grep '^mynetworks =' | egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.0\.0/16'" assert_success