mirror of
https://github.com/docker-mailserver/docker-mailserver
synced 2024-12-18 23:14:11 +01:00
47f8d50beb
* chore: Detect missing final newline in configs read These lines will be not be processed by `read`, emit a warning to raise awareness. * fix: Ensure parsed config has final newline appended (when possible) This functionality was handled in `accounts.sh` via a similar sed command (that the linked references also offer). `printf` is better for this, no shellcheck comment required either. We additionally don't attempt to modify files that are read-only. * fix: Ensure parsed configs have CRLF to LF corrected (where possible) Likewise, this runtime fix was only covering two config files. It now applies to all callers of this method. * fix: Sanitize `postfix-master.cf` via helper This feature should have been using the helper to avoid user error from their config updates accidentally introducing subtle breakage implicitly (due to CRLF or missing final newline). * tests: Add test cases for new helpers * tests: `rm` is redundant when using `BATS_TEST_TMPDIR` This temporary directory is created and removed implicitly. Even after a test failure. * chore: Remove old `postfix-virtual.cf` migration logic This was introduced in 2018, there should be no one needing to rely on this anymore? * tests: Remove comment on sed failure concern * chore: Add entry to `CHANGELOG.md` * Apply suggestions from code review Co-authored-by: Georg Lauterbach <44545919+georglauterbach@users.noreply.github.com> --------- Co-authored-by: Georg Lauterbach <44545919+georglauterbach@users.noreply.github.com>
115 lines
3.6 KiB
Bash
115 lines
3.6 KiB
Bash
load "${REPOSITORY_ROOT}/test/helper/common"
|
|
|
|
BATS_TEST_NAME_PREFIX='[Scripts] (helper functions) '
|
|
SOURCE_BASE_PATH="${REPOSITORY_ROOT:?Expected REPOSITORY_ROOT to be set}/target/scripts/helpers"
|
|
|
|
@test '(network.sh) _sanitize_ipv4_to_subnet_cidr' {
|
|
# shellcheck source=../../../../../target/scripts/helpers/network.sh
|
|
source "${SOURCE_BASE_PATH}/network.sh"
|
|
|
|
run _sanitize_ipv4_to_subnet_cidr '255.255.255.255/0'
|
|
assert_output '0.0.0.0/0'
|
|
|
|
run _sanitize_ipv4_to_subnet_cidr '192.168.255.14/20'
|
|
assert_output '192.168.240.0/20'
|
|
|
|
run _sanitize_ipv4_to_subnet_cidr '192.168.255.14/32'
|
|
assert_output '192.168.255.14/32'
|
|
}
|
|
|
|
@test '(utils.sh) _env_var_expect_zero_or_one' {
|
|
# shellcheck source=../../../../../target/scripts/helpers/log.sh
|
|
source "${SOURCE_BASE_PATH}/log.sh"
|
|
# shellcheck source=../../../../../target/scripts/helpers/utils.sh
|
|
source "${SOURCE_BASE_PATH}/utils.sh"
|
|
|
|
ZERO=0
|
|
ONE=1
|
|
TWO=2
|
|
|
|
run _env_var_expect_zero_or_one ZERO
|
|
assert_success
|
|
|
|
run _env_var_expect_zero_or_one ONE
|
|
assert_success
|
|
|
|
run _env_var_expect_zero_or_one TWO
|
|
assert_failure
|
|
assert_output --partial "The value of 'TWO' (= '2') is not 0 or 1, but was expected to be"
|
|
|
|
run _env_var_expect_zero_or_one UNSET
|
|
assert_failure
|
|
assert_output --partial "'UNSET' is not set, but was expected to be"
|
|
|
|
run _env_var_expect_zero_or_one
|
|
assert_failure
|
|
assert_output --partial "ENV var name must be provided to _env_var_expect_zero_or_one"
|
|
}
|
|
|
|
@test '(utils.sh) _env_var_expect_integer' {
|
|
# shellcheck source=../../../../../target/scripts/helpers/log.sh
|
|
source "${SOURCE_BASE_PATH}/log.sh"
|
|
# shellcheck source=../../../../../target/scripts/helpers/utils.sh
|
|
source "${SOURCE_BASE_PATH}/utils.sh"
|
|
|
|
INTEGER=1234
|
|
NEGATIVE=-${INTEGER}
|
|
NaN=not_an_integer
|
|
|
|
run _env_var_expect_integer INTEGER
|
|
assert_success
|
|
|
|
run _env_var_expect_integer NEGATIVE
|
|
assert_success
|
|
|
|
run _env_var_expect_integer NaN
|
|
assert_failure
|
|
assert_output --partial "The value of 'NaN' is not an integer ('not_an_integer'), but was expected to be"
|
|
|
|
run _env_var_expect_integer
|
|
assert_failure
|
|
assert_output --partial "ENV var name must be provided to _env_var_expect_integer"
|
|
}
|
|
|
|
@test '(utils.sh) _convert_crlf_to_lf_if_necessary' {
|
|
# shellcheck source=../../../../../target/scripts/helpers/log.sh
|
|
source "${SOURCE_BASE_PATH}/log.sh"
|
|
# shellcheck source=../../../../../target/scripts/helpers/utils.sh
|
|
source "${SOURCE_BASE_PATH}/utils.sh"
|
|
|
|
# Create a temporary file in the BATS test-case folder:
|
|
local TMP_DMS_CONFIG=$(mktemp -p "${BATS_TEST_TMPDIR}" -t 'dms_XXX.cf')
|
|
# A file with mixed line-endings including CRLF:
|
|
echo -en 'line one\nline two\r\n' > "${TMP_DMS_CONFIG}"
|
|
|
|
# Confirm CRLF detected:
|
|
run file "${TMP_DMS_CONFIG}"
|
|
assert_output --partial 'CRLF'
|
|
|
|
# Helper method detects and fixes:
|
|
_convert_crlf_to_lf_if_necessary "${TMP_DMS_CONFIG}"
|
|
run file "${TMP_DMS_CONFIG}"
|
|
refute_output --partial 'CRLF'
|
|
}
|
|
|
|
@test '(utils.sh) _append_final_newline_if_missing' {
|
|
# shellcheck source=../../../../../target/scripts/helpers/log.sh
|
|
source "${SOURCE_BASE_PATH}/log.sh"
|
|
# shellcheck source=../../../../../target/scripts/helpers/utils.sh
|
|
source "${SOURCE_BASE_PATH}/utils.sh"
|
|
|
|
# Create a temporary file in the BATS test-case folder:
|
|
local TMP_DMS_CONFIG=$(mktemp -p "${BATS_TEST_TMPDIR}" -t 'dms_XXX.cf')
|
|
# A file missing a final newline:
|
|
echo -en 'line one\nline two' > "${TMP_DMS_CONFIG}"
|
|
|
|
# Confirm missing newline:
|
|
run bash -c "tail -c 1 '${TMP_DMS_CONFIG}' | wc -l"
|
|
assert_output '0'
|
|
|
|
# Helper method detects and fixes:
|
|
_append_final_newline_if_missing "${TMP_DMS_CONFIG}"
|
|
run bash -c "tail -c 1 '${TMP_DMS_CONFIG}' | wc -l"
|
|
assert_output '1'
|
|
}
|