docker-mailserver/test/tests/serial/mail_with_relays.bats

85 lines
2.7 KiB
Plaintext
Raw Normal View History

load "${REPOSITORY_ROOT}/test/helper/common"
load "${REPOSITORY_ROOT}/test/helper/setup"
BATS_TEST_NAME_PREFIX='[Relay Host] '
CONTAINER_NAME='dms-test_relay'
function setup_file() {
_init_with_defaults
mv "${TEST_TMP_CONFIG}/relay-hosts/"* "${TEST_TMP_CONFIG}/"
local CUSTOM_SETUP_ARGUMENTS=(
--env RELAY_HOST=default.relay.com
--env RELAY_PORT=2525
--env RELAY_USER=smtp_user
--env RELAY_PASSWORD=smtp_password
--env PERMIT_DOCKER=host
)
_common_container_setup 'CUSTOM_SETUP_ARGUMENTS'
}
function teardown_file() { _default_teardown ; }
@test 'default mapping is added from ENV variables' {
_run_in_container grep 'domainone.tld' /etc/postfix/relayhost_map
assert_success
assert_output --regexp '^@domainone.tld[[:space:]]+\[default.relay.com\]:2525$'
}
@test 'default mapping is added from ENV variables for virtual user entry' {
_run_in_container grep 'domain1.tld' /etc/postfix/relayhost_map
assert_success
assert_output --regexp '^@domain1.tld[[:space:]]+\[default.relay.com\]:2525$'
}
@test 'default mapping is added from ENV variables for new user entry' {
_run_in_container grep 'domainzero.tld' /etc/postfix/relayhost_map
assert_failure
tests(fix): Adjust for local testing conditions (#2606) * 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.
2022-05-30 00:53:30 +00:00
_add_mail_account_then_wait_until_ready 'user0@domainzero.tld' 'password123'
_run_until_success_or_timeout 20 _exec_in_container grep 'domainzero.tld' /etc/postfix/relayhost_map
assert_success
assert_output --regexp '^@domainzero.tld[[:space:]]+\[default.relay.com\]:2525$'
}
@test 'default mapping is added from ENV variables for new virtual user (alias) entry' {
_run_in_container grep 'domain2.tld' /etc/postfix/relayhost_map
assert_failure
tests(fix): Adjust for local testing conditions (#2606) * 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.
2022-05-30 00:53:30 +00:00
run ./setup.sh -c "${CONTAINER_NAME}" alias add 'user2@domain2.tld' 'user2@domaintwo.tld'
assert_success
_run_until_success_or_timeout 10 _exec_in_container grep 'domain2.tld' /etc/postfix/relayhost_map
assert_success
assert_output --regexp '^@domain2.tld[[:space:]]+\[default.relay.com\]:2525$'
}
@test 'custom mapping is added from file' {
_run_in_container grep 'domaintwo.tld' /etc/postfix/relayhost_map
assert_success
assert_output --regexp '^@domaintwo.tld[[:space:]]+\[other.relay.com\]:587$'
}
@test 'ignored domain is not added' {
_run_in_container grep domainthree.tld /etc/postfix/relayhost_map
assert_failure
}
@test '/etc/postfix/sasl_passwd exists' {
_run_in_container_bash '[[ -f /etc/postfix/sasl_passwd ]]'
assert_success
}
@test 'auth entry is added' {
_run_in_container grep '^@domaintwo.tld\s\+smtp_user_2:smtp_password_2' /etc/postfix/sasl_passwd
assert_success
_should_output_number_of_lines 1
}
@test 'default auth entry is added' {
_run_in_container grep '^\[default.relay.com\]:2525\s\+smtp_user:smtp_password' /etc/postfix/sasl_passwd
assert_success
_should_output_number_of_lines 1
}