diff --git a/test/test_helper/common.bash b/test/test_helper/common.bash index fd49fabb..7d14c2d8 100644 --- a/test/test_helper/common.bash +++ b/test/test_helper/common.bash @@ -154,7 +154,7 @@ function private_config_path() { # @return path to the folder where the config is duplicated function duplicate_config_for_container() { output="$(private_config_path "$2")" - rm -r "${output:?}/" # cleanup + rm -rf "${output:?}/" # cleanup mkdir -p "$output" cp -r "$PWD/test/config/${1:?}/." "$output" echo "$output" @@ -175,5 +175,14 @@ function wait_for_service() { function count_processed_changes() { containerName=$1 - docker exec "$containerName" cat /var/log/supervisor/changedetector.log | grep "Change detected" -c + docker exec "$containerName" cat /var/log/supervisor/changedetector.log | grep "Change detected" -c \ + || [[ $? == 1 ]] # don't error when no matches were found } + + +function wait_for_changes_to_be_detected_in_container() { + containerName="$1" + timeout=${TEST_TIMEOUT_IN_SECONDS} + repeat_in_container_until_success_or_timeout "$timeout" "$containerName" \ + bash -c 'source /usr/local/bin/helper_functions.sh; cmp --silent -- <(_monitored_files_checksums) "$CHKSUM_FILE" >/dev/null' +} \ No newline at end of file diff --git a/test/tests.bats b/test/tests.bats index 219ceb0c..a11b93ca 100644 --- a/test/tests.bats +++ b/test/tests.bats @@ -30,12 +30,21 @@ setup_file() { -e PERMIT_DOCKER=host \ -e DMS_DEBUG=0 \ -h mail.my-domain.com -t ${NAME} - # generate account after run + + wait_for_finished_setup_in_container mail + + # generate accounts after container has been started 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)"' >> "$private_config/postfix-accounts.cf" docker exec mail addmailuser pass@localhost.localdomain 'may be \a `p^a.*ssword' + # setup sieve - repeat_until_success_or_timeout 15 docker cp "$private_config/sieve/dovecot.sieve" mail:/var/mail/localhost.localdomain/user1/.dovecot.sieve + docker cp "$private_config/sieve/dovecot.sieve" mail:/var/mail/localhost.localdomain/user1/.dovecot.sieve + + # this relies on the checksum file beeing updated after all changes have been applied + wait_for_changes_to_be_detected_in_container mail + wait_for_smtp_port_in_container mail + # sending test mails docker exec mail /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/email-templates/amavis-spam.txt" docker exec mail /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/email-templates/amavis-virus.txt"