diff --git a/Makefile b/Makefile index 4df825cc..3e9f5d9c 100644 --- a/Makefile +++ b/Makefile @@ -65,15 +65,6 @@ run: -e DMS_DEBUG=0 \ -h mail.my-domain.com -t $(NAME) sleep 15 - docker run --rm -d --name mail_pop3 \ - -v "`pwd`/test/config":/tmp/docker-mailserver \ - -v "`pwd`/test/test-files":/tmp/docker-mailserver-test:ro \ - -v "`pwd`/test/config/letsencrypt":/etc/letsencrypt/live \ - -e ENABLE_POP3=1 \ - -e DMS_DEBUG=0 \ - -e SSL_TYPE=letsencrypt \ - -h 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_pop3.bats b/test/mail_pop3.bats new file mode 100644 index 00000000..45bbea27 --- /dev/null +++ b/test/mail_pop3.bats @@ -0,0 +1,115 @@ +load 'test_helper/common' + +function setup() { + run_setup_file_if_necessary +} + +function teardown() { + run_teardown_file_if_necessary +} + +function setup_file() { + docker run -d --name mail_pop3 \ + -v "`pwd`/test/config":/tmp/docker-mailserver \ + -v "`pwd`/test/test-files":/tmp/docker-mailserver-test:ro \ + -v "`pwd`/test/config/letsencrypt":/etc/letsencrypt/live \ + -e ENABLE_POP3=1 \ + -e DMS_DEBUG=0 \ + -e SSL_TYPE=letsencrypt \ + -h mail.my-domain.com -t ${NAME} + + wait_for_finished_setup_in_container mail_pop3 + +} + +function teardown_file() { + docker rm -f mail_pop3 +} + +@test "first" { + skip 'this test must come first to reliably identify when to run setup_file' +} + +# +# pop +# + +@test "checking pop: server is ready" { + run docker exec mail_pop3 /bin/bash -c "nc -w 1 0.0.0.0 110 | grep '+OK'" + assert_success +} + +@test "checking pop: authentication works" { + run docker exec mail_pop3 /bin/sh -c "nc -w 1 0.0.0.0 110 < /tmp/docker-mailserver-test/auth/pop3-auth.txt" + assert_success +} + +@test "checking pop: added user authentication works" { + run docker exec mail_pop3 /bin/sh -c "nc -w 1 0.0.0.0 110 < /tmp/docker-mailserver-test/auth/added-pop3-auth.txt" + assert_success +} + +# +# spamassassin +# + +@test "checking spamassassin: docker env variables are set correctly (default)" { + run docker exec mail_pop3 /bin/sh -c "grep '\$sa_tag_level_deflt' /etc/amavis/conf.d/20-debian_defaults | grep '= 2.0'" + assert_success + run docker exec mail_pop3 /bin/sh -c "grep '\$sa_tag2_level_deflt' /etc/amavis/conf.d/20-debian_defaults | grep '= 6.31'" + assert_success + run docker exec mail_pop3 /bin/sh -c "grep '\$sa_kill_level_deflt' /etc/amavis/conf.d/20-debian_defaults | grep '= 6.31'" + assert_success + run docker exec mail_pop3 /bin/sh -c "grep '\$sa_spam_subject_tag' /etc/amavis/conf.d/20-debian_defaults | grep '= .\*\*\*SPAM\*\*\* .'" + assert_success +} + +# +# ssl +# + +@test "checking ssl: letsencrypt configuration is correct" { + run docker exec mail_pop3 /bin/sh -c 'grep -ir "/etc/letsencrypt/live/mail.my-domain.com/" /etc/postfix/main.cf | wc -l' + assert_success + assert_output 2 + run docker exec mail_pop3 /bin/sh -c 'grep -ir "/etc/letsencrypt/live/mail.my-domain.com/" /etc/dovecot/conf.d/10-ssl.conf | wc -l' + assert_success + assert_output 2 +} + +@test "checking ssl: letsencrypt cert works correctly" { + run docker exec mail_pop3 /bin/sh -c "timeout 1 openssl s_client -connect 0.0.0.0:587 -starttls smtp -CApath /etc/ssl/certs/ | grep 'Verify return code: 10 (certificate has expired)'" + assert_success +} + +# +# system +# + +@test "checking system: /var/log/mail/mail.log is error free" { + run docker exec mail_pop3 grep 'non-null host address bits in' /var/log/mail/mail.log + assert_failure + run docker exec mail_pop3 grep ': error:' /var/log/mail/mail.log + assert_failure +} + +# +# sieve +# + +@test "checking manage sieve: disabled per default" { + run docker exec mail_pop3 /bin/bash -c "nc -z 0.0.0.0 4190" + assert_failure +} + +# +# PERMIT_DOCKER mynetworks +# +@test "checking PERMIT_DOCKER: my network value" { + run docker exec mail_pop3 /bin/sh -c "postconf | grep '^mynetworks =' | egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/32'" + 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 76a04cb5..1465dd6b 100644 --- a/test/tests.bats +++ b/test/tests.bats @@ -138,25 +138,6 @@ function count_processed_changes() { assert_success } -# -# pop -# - -@test "checking pop: server is ready" { - run docker exec mail_pop3 /bin/bash -c "nc -w 1 0.0.0.0 110 | grep '+OK'" - assert_success -} - -@test "checking pop: authentication works" { - run docker exec mail_pop3 /bin/sh -c "nc -w 1 0.0.0.0 110 < /tmp/docker-mailserver-test/auth/pop3-auth.txt" - assert_success -} - -@test "checking pop: added user authentication works" { - run docker exec mail_pop3 /bin/sh -c "nc -w 1 0.0.0.0 110 < /tmp/docker-mailserver-test/auth/added-pop3-auth.txt" - assert_success -} - # # sasl # @@ -386,17 +367,6 @@ function count_processed_changes() { assert_success } -@test "checking spamassassin: docker env variables are set correctly (default)" { - run docker exec mail_pop3 /bin/sh -c "grep '\$sa_tag_level_deflt' /etc/amavis/conf.d/20-debian_defaults | grep '= 2.0'" - assert_success - run docker exec mail_pop3 /bin/sh -c "grep '\$sa_tag2_level_deflt' /etc/amavis/conf.d/20-debian_defaults | grep '= 6.31'" - assert_success - run docker exec mail_pop3 /bin/sh -c "grep '\$sa_kill_level_deflt' /etc/amavis/conf.d/20-debian_defaults | grep '= 6.31'" - assert_success - run docker exec mail_pop3 /bin/sh -c "grep '\$sa_spam_subject_tag' /etc/amavis/conf.d/20-debian_defaults | grep '= .\*\*\*SPAM\*\*\* .'" - assert_success -} - @test "checking spamassassin: all registered domains should see spam headers" { run docker exec mail /bin/sh -c "grep -ir 'X-Spam-' /var/mail/localhost.localdomain/user1/new" assert_success @@ -675,20 +645,6 @@ function count_processed_changes() { assert_success } -@test "checking ssl: letsencrypt configuration is correct" { - run docker exec mail_pop3 /bin/sh -c 'grep -ir "/etc/letsencrypt/live/mail.my-domain.com/" /etc/postfix/main.cf | wc -l' - assert_success - assert_output 2 - run docker exec mail_pop3 /bin/sh -c 'grep -ir "/etc/letsencrypt/live/mail.my-domain.com/" /etc/dovecot/conf.d/10-ssl.conf | wc -l' - assert_success - assert_output 2 -} - -@test "checking ssl: letsencrypt cert works correctly" { - run docker exec mail_pop3 /bin/sh -c "timeout 1 openssl s_client -connect 0.0.0.0:587 -starttls smtp -CApath /etc/ssl/certs/ | grep 'Verify return code: 10 (certificate has expired)'" - assert_success -} - # # postsrsd # @@ -780,10 +736,6 @@ function count_processed_changes() { assert_failure run docker exec mail grep -i 'connect to 127.0.0.1:10023: Connection refused' /var/log/mail/mail.log assert_failure - run docker exec mail_pop3 grep 'non-null host address bits in' /var/log/mail/mail.log - assert_failure - run docker exec mail_pop3 grep ': error:' /var/log/mail/mail.log - assert_failure } @test "checking system: /var/log/auth.log is error free" { @@ -830,11 +782,6 @@ function count_processed_changes() { assert_success } -@test "checking manage sieve: disabled per default" { - run docker exec mail_pop3 /bin/bash -c "nc -z 0.0.0.0 4190" - assert_failure -} - @test "checking sieve: user2 should have piped 1 email to /tmp/" { run docker exec mail /bin/sh -c "ls -A /tmp/pipe-test.out | wc -l" assert_success @@ -949,8 +896,6 @@ function count_processed_changes() { @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 - run docker exec mail_pop3 /bin/sh -c "postconf | grep '^mynetworks =' | egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/32'" - assert_success } #