mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2024-01-19 02:48:50 +00:00
3b4f44e837
* tests(fix): Increase some timeouts Running tests locally via a VM these tests would fail sometimes due to the time from being queued and Amavis actually processing being roughly around 30 seconds. There should be no harm in raising this to 60 seconds, other than delaying a failure case which will ripple through other time sensitive tests. It's better to pass when functionality is actually correct but just needs a bit longer to complete. * tests(fix): Don't setup an invalid hostname During container startup `helpers/dns.sh` would panic with `hostname -f` failing. Dropping `--domainname` for this container is fine and does not affect the point of it's test. --- It's unclear why this does not occur in CI. Possibly changes within the docker daemon since as CI runs docker on Ubuntu 20.04? (2020). For clarity, this may be equivalent to setting a hostname of `domain.com.domain.com`, or `--hostname` value truncated the NIS domain (`--domainname`) of the same value. IIRC, it would still fail with both options using different values if `--hostname` was multi-label. I believe I've documented how non-deterministic these options can be across different environments. `--hostname` should be preferred. There doesn't seem to be any reason to actually need `--domainname` (which is NIS domain name, unrelated to the DNS domain name). We still need to properly investigate reworking our ENV support that `dns.sh` manages. --- Containers were also not removing themselves after failures either (missing teardown). Which would cause problems when running tests again. * chore: Normalize white-space Sets a consistent indent size of 2 spaces. Previously this varied a fair bit, sometimes with tabs or mixed tabs and spaces. Some formatting with blank lines. Easier to review with white-space in diff ignored. Some minor edits besides blank lines, but no change in functionality. * fix: `setup.sh` target container under test Some of the `setup.sh` commands did not specify the container which was problematic if another `docker-mailserver` container was running, causing test failures. This probably doesn't help with `test/no_container.bats`, but at least prevents `test/tests.bats` failing at this point.
203 lines
7.8 KiB
Bash
203 lines
7.8 KiB
Bash
load 'test_helper/common'
|
|
|
|
|
|
function setup_file() {
|
|
local PRIVATE_CONFIG
|
|
|
|
PRIVATE_CONFIG=$(duplicate_config_for_container . mail_override_hostname)
|
|
docker run --rm -d --name mail_override_hostname \
|
|
-v "${PRIVATE_CONFIG}":/tmp/docker-mailserver \
|
|
-v "$(pwd)/test/test-files":/tmp/docker-mailserver-test:ro \
|
|
-e PERMIT_DOCKER=network \
|
|
-e ENABLE_SRS=1 \
|
|
-e OVERRIDE_HOSTNAME=mail.my-domain.com \
|
|
-h unknown.domain.tld \
|
|
-t "${NAME}"
|
|
|
|
PRIVATE_CONFIG_TWO=$(duplicate_config_for_container . mail_non_subdomain_hostname)
|
|
docker run --rm -d --name mail_non_subdomain_hostname \
|
|
-v "${PRIVATE_CONFIG_TWO}":/tmp/docker-mailserver \
|
|
-v "$(pwd)/test/test-files":/tmp/docker-mailserver-test:ro \
|
|
-e PERMIT_DOCKER=network \
|
|
-e ENABLE_SRS=1 \
|
|
--hostname domain.com \
|
|
-t "${NAME}"
|
|
|
|
PRIVATE_CONFIG_THREE=$(duplicate_config_for_container . mail_srs_domainname)
|
|
docker run --rm -d --name mail_srs_domainname \
|
|
-v "${PRIVATE_CONFIG_THREE}":/tmp/docker-mailserver \
|
|
-v "$(pwd)/test/test-files":/tmp/docker-mailserver-test:ro \
|
|
-e PERMIT_DOCKER=network \
|
|
-e ENABLE_SRS=1 \
|
|
-e SRS_DOMAINNAME='srs.my-domain.com' \
|
|
--domainname 'my-domain.com' \
|
|
--hostname 'mail' \
|
|
-t "${NAME}"
|
|
|
|
PRIVATE_CONFIG_FOUR=$(duplicate_config_for_container . mail_domainname)
|
|
docker run --rm -d --name mail_domainname \
|
|
-v "${PRIVATE_CONFIG_FOUR}":/tmp/docker-mailserver \
|
|
-v "$(pwd)/test/test-files":/tmp/docker-mailserver-test:ro \
|
|
-e PERMIT_DOCKER=network \
|
|
-e ENABLE_SRS=1 \
|
|
--domainname 'my-domain.com' \
|
|
--hostname 'mail' \
|
|
-t "${NAME}"
|
|
|
|
wait_for_smtp_port_in_container mail_override_hostname
|
|
wait_for_smtp_port_in_container mail_non_subdomain_hostname
|
|
wait_for_smtp_port_in_container mail_srs_domainname
|
|
wait_for_smtp_port_in_container mail_domainname
|
|
|
|
# postfix virtual transport lmtp
|
|
docker exec mail_override_hostname /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/email-templates/existing-user1.txt"
|
|
docker exec mail_non_subdomain_hostname /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/email-templates/existing-user1.txt"
|
|
}
|
|
|
|
function teardown_file() {
|
|
docker rm -f mail_override_hostname mail_non_subdomain_hostname mail_srs_domainname mail_domainname
|
|
}
|
|
|
|
@test "checking SRS: SRS_DOMAINNAME is used correctly" {
|
|
repeat_until_success_or_timeout 15 docker exec mail_srs_domainname grep "SRS_DOMAIN=srs.my-domain.com" /etc/default/postsrsd
|
|
}
|
|
|
|
@test "checking SRS: DOMAINNAME is handled correctly" {
|
|
repeat_until_success_or_timeout 15 docker exec mail_domainname grep "SRS_DOMAIN=my-domain.com" /etc/default/postsrsd
|
|
}
|
|
|
|
@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
|
|
}
|
|
|
|
@test "checking configuration: hostname/domainname override: check overriden hostname is applied to all configs" {
|
|
run docker exec mail_override_hostname /bin/bash -c "cat /etc/mailname | grep my-domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_override_hostname /bin/bash -c "postconf -n | grep mydomain | grep my-domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_override_hostname /bin/bash -c "postconf -n | grep myhostname | grep mail.my-domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_override_hostname /bin/bash -c "doveconf | grep hostname | grep mail.my-domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_override_hostname /bin/bash -c "cat /etc/opendmarc.conf | grep AuthservID | grep mail.my-domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_override_hostname /bin/bash -c "cat /etc/opendmarc.conf | grep TrustedAuthservIDs | grep mail.my-domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_override_hostname /bin/bash -c "cat /etc/amavis/conf.d/05-node_id | grep myhostname | grep mail.my-domain.com"
|
|
assert_success
|
|
}
|
|
|
|
@test "checking configuration: hostname/domainname override: check hostname in postfix HELO message" {
|
|
run docker exec mail_override_hostname /bin/bash -c "nc -w 1 0.0.0.0 25 | grep mail.my-domain.com"
|
|
assert_success
|
|
}
|
|
|
|
@test "checking configuration: hostname/domainname override: check headers of received mail" {
|
|
run docker exec mail_override_hostname /bin/sh -c "ls -A /var/mail/localhost.localdomain/user1/new | wc -l | grep 1"
|
|
assert_success
|
|
|
|
run docker exec mail_override_hostname /bin/sh -c "cat /var/mail/localhost.localdomain/user1/new/* | grep mail.my-domain.com"
|
|
assert_success
|
|
|
|
# test whether the container hostname is not found in received mail
|
|
run docker exec mail_override_hostname /bin/sh -c "cat /var/mail/localhost.localdomain/user1/new/* | grep unknown.domain.tld"
|
|
assert_failure
|
|
}
|
|
|
|
@test "checking SRS: OVERRIDE_HOSTNAME is handled correctly" {
|
|
run docker exec mail_override_hostname grep "SRS_DOMAIN=my-domain.com" /etc/default/postsrsd
|
|
assert_success
|
|
}
|
|
|
|
@test "checking dovecot: postmaster address" {
|
|
run docker exec mail_override_hostname /bin/sh -c "grep 'postmaster_address = postmaster@my-domain.com' /etc/dovecot/conf.d/15-lda.conf"
|
|
assert_success
|
|
}
|
|
|
|
#
|
|
# non-subdomain tests
|
|
#
|
|
|
|
@test "checking configuration: non-subdomain: check container hostname is applied correctly" {
|
|
run docker exec mail_non_subdomain_hostname /bin/bash -c "hostname | grep domain.com"
|
|
assert_success
|
|
}
|
|
|
|
@test "checking configuration: non-subdomain: check overriden hostname is applied to all configs" {
|
|
run docker exec mail_non_subdomain_hostname /bin/bash -c "cat /etc/mailname | grep domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_non_subdomain_hostname /bin/bash -c "postconf -n | grep mydomain | grep domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_non_subdomain_hostname /bin/bash -c "postconf -n | grep myhostname | grep domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_non_subdomain_hostname /bin/bash -c "doveconf | grep hostname | grep domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_non_subdomain_hostname /bin/bash -c "cat /etc/opendmarc.conf | grep AuthservID | grep domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_non_subdomain_hostname /bin/bash -c "cat /etc/opendmarc.conf | grep TrustedAuthservIDs | grep domain.com"
|
|
assert_success
|
|
|
|
run docker exec mail_non_subdomain_hostname /bin/bash -c "cat /etc/amavis/conf.d/05-node_id | grep myhostname | grep domain.com"
|
|
assert_success
|
|
}
|
|
|
|
@test "checking configuration: non-subdomain: check hostname in postfix HELO message" {
|
|
run docker exec mail_non_subdomain_hostname /bin/bash -c "nc -w 1 0.0.0.0 25 | grep domain.com"
|
|
assert_success
|
|
}
|
|
|
|
@test "checking configuration: non-subdomain: check headers of received mail" {
|
|
run docker exec mail_non_subdomain_hostname /bin/sh -c "ls -A /var/mail/localhost.localdomain/user1/new | wc -l | grep 1"
|
|
assert_success
|
|
|
|
run docker exec mail_non_subdomain_hostname /bin/sh -c "cat /var/mail/localhost.localdomain/user1/new/* | grep domain.com"
|
|
assert_success
|
|
}
|
|
|
|
@test "checking SRS: non-subdomain is handled correctly" {
|
|
docker exec mail_non_subdomain_hostname cat /etc/default/postsrsd
|
|
run docker exec mail_non_subdomain_hostname grep "SRS_DOMAIN=domain.com" /etc/default/postsrsd
|
|
assert_success
|
|
}
|
|
|
|
@test "checking dovecot: non-subdomain postmaster address" {
|
|
run docker exec mail_non_subdomain_hostname /bin/sh -c "grep 'postmaster_address = postmaster@domain.com' /etc/dovecot/conf.d/15-lda.conf"
|
|
assert_success
|
|
}
|
|
|
|
#
|
|
# clean exit
|
|
#
|
|
|
|
@test "checking that the container stops cleanly: mail_override_hostname" {
|
|
run docker stop -t 60 mail_override_hostname
|
|
assert_success
|
|
}
|
|
|
|
@test "checking that the container stops cleanly: mail_non_subdomain_hostname" {
|
|
run docker stop -t 60 mail_non_subdomain_hostname
|
|
assert_success
|
|
}
|
|
|
|
@test "checking that the container stops cleanly: mail_srs_domainname" {
|
|
run docker stop -t 60 mail_srs_domainname
|
|
assert_success
|
|
}
|
|
|
|
@test "checking that the container stops cleanly: mail_domainname" {
|
|
run docker stop -t 60 mail_domainname
|
|
assert_success
|
|
}
|