diff --git a/Makefile b/Makefile index 3ac43073..2444c9f5 100644 --- a/Makefile +++ b/Makefile @@ -198,13 +198,6 @@ run: -e DMS_DEBUG=0 \ -h mail.my-domain.com -t $(NAME) sleep 15 - docker run -d --name mail_postscreen \ - -v "`pwd`/test/config":/tmp/docker-mailserver \ - -v "`pwd`/test/test-files":/tmp/docker-mailserver-test:ro \ - -e POSTSCREEN_ACTION=enforce \ - --cap-add=NET_ADMIN \ - -h mail.my-domain.com -t $(NAME) - sleep 15 generate-accounts-after-run: docker run --rm -e MAIL_USER=added@localhost.localdomain -e MAIL_PASS=mypassword -t $(NAME) /bin/sh -c 'echo "$$MAIL_USER|$$(doveadm pw -s SHA512-CRYPT -u $$MAIL_USER -p $$MAIL_PASS)"' >> test/config/postfix-accounts.cf @@ -272,7 +265,6 @@ clean: ldap_for_mail \ mail_with_ldap \ mail_with_imap \ - mail_postscreen \ mail_override_hostname \ mail_domainname \ mail_srs_domainname diff --git a/test/mail_postscreen.bats b/test/mail_postscreen.bats new file mode 100644 index 00000000..a6f17b5c --- /dev/null +++ b/test/mail_postscreen.bats @@ -0,0 +1,62 @@ +load 'test_helper/common' + +setup() { + run_setup_file_if_necessary + + # Getting mail container IP + MAIL_POSTSCREEN_IP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mail_postscreen) +} + +teardown() { + run_teardown_file_if_necessary +} + +setup_file() { + docker run -d --name mail_postscreen \ + -v "`pwd`/test/config":/tmp/docker-mailserver \ + -v "`pwd`/test/test-files":/tmp/docker-mailserver-test:ro \ + -e POSTSCREEN_ACTION=enforce \ + --cap-add=NET_ADMIN \ + -h mail.my-domain.com -t ${NAME} + + docker run --name mail_postscreen_sender \ + -v "$(pwd)/test/test-files":/tmp/docker-mailserver-test:ro \ + -d ${NAME} \ + tail -f /var/log/faillog + + wait_for_smtp_port_in_container mail_postscreen +} + +teardown_file() { + docker rm -f mail_postscreen mail_postscreen_sender +} + +@test "first" { + skip 'only used to call setup_file from setup' +} + +@test "checking postscreen: talk too fast" { + docker exec mail_postscreen_sender /bin/sh -c "nc $MAIL_POSTSCREEN_IP 25 < /tmp/docker-mailserver-test/auth/smtp-auth-login.txt" + + repeat_until_success_or_timeout 10 run docker exec mail_postscreen grep 'COMMAND PIPELINING' /var/log/mail/mail.log + assert_success +} + +@test "checking postscreen: positive test (respecting postscreen_greet_wait time and talking in turn)" { + for i in {1,2}; do + docker exec mail_postscreen_sender /bin/bash -c \ + 'exec 3<>/dev/tcp/'$MAIL_POSTSCREEN_IP'/25 && \ + while IFS= read -r cmd; do \ + head -1 <&3; \ + [[ "$cmd" == "EHLO"* ]] && sleep 6; \ + echo $cmd >&3; \ + done < "/tmp/docker-mailserver-test/auth/smtp-auth-login.txt"' + done + + repeat_until_success_or_timeout 10 run docker exec mail_postscreen grep 'PASS NEW ' /var/log/mail/mail.log + assert_success +} + +@test "last" { + skip 'only used to call teardown_file from teardown' +} \ No newline at end of file diff --git a/test/tests.bats b/test/tests.bats index 357f7f4a..66f2030e 100644 --- a/test/tests.bats +++ b/test/tests.bats @@ -872,39 +872,6 @@ function count_processed_changes() { assert_failure } -# -# postscreen -# - -@test "checking postscreen" { - # Getting mail container IP - MAIL_POSTSCREEN_IP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mail_postscreen) - - # talk too fast: - - docker exec fail-auth-mailer /bin/sh -c "nc $MAIL_POSTSCREEN_IP 25 < /tmp/docker-mailserver-test/auth/smtp-auth-login.txt" - sleep 5 - - run docker exec mail_postscreen grep 'COMMAND PIPELINING' /var/log/mail/mail.log - assert_success - - # positive test. (respecting postscreen_greet_wait time and talking in turn): - for i in {1,2}; do - docker exec fail-auth-mailer /bin/bash -c \ - 'exec 3<>/dev/tcp/'$MAIL_POSTSCREEN_IP'/25 && \ - while IFS= read -r cmd; do \ - head -1 <&3; \ - [[ "$cmd" == "EHLO"* ]] && sleep 6; \ - echo $cmd >&3; \ - done < "/tmp/docker-mailserver-test/auth/smtp-auth-login.txt"' - done - - sleep 5 - - run docker exec mail_postscreen grep 'PASS NEW ' /var/log/mail/mail.log - assert_success -} - # # fetchmail #