tests: Revise + respect existing conventions

This commit is contained in:
Brennan Kinney 2025-05-13 14:28:46 +12:00 committed by GitHub
parent 15db792c14
commit 77ae5554b1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,66 +1,79 @@
load "${REPOSITORY_ROOT}/test/helper/setup"
load "${REPOSITORY_ROOT}/test/helper/common"
export CONTAINER1_NAME='dms-test_env-files_success'
export CONTAINER2_NAME='dms-test_env-files_warning'
export CONTAINER3_NAME='dms-test_env-files_error'
# Feature (ENV value sourced from file):
# - An ENV with a `__FILE` suffix will read a value from a referenced file path to set the actual ENV (assuming it is empty)
# - Feature implemented at: `variables-stack.sh:__environment_variables_from_files()`
# - Feature PR: https://github.com/docker-mailserver/docker-mailserver/pull/4359
setup_file() {
BATS_TEST_NAME_PREFIX='[Configuration] (ENV __FILE support) '
CONTAINER1_NAME='dms-test_env-files_success'
CONTAINER2_NAME='dms-test_env-files_warning'
CONTAINER3_NAME='dms-test_env-files_error'
function setup_file() {
export CONTAINER_NAME
export TEST__FILE
export TEST__FILE_SUCCESS
export NON_EXISTENT__FILE
export FILEPATH_VALID='/tmp/file-with-value'
export FILEPATH_INVALID='/path/to/non-existent-file'
export FILE_WITH_VALUE="${TEST_TMP_CONFIG}/test_secret"
echo 1 > "${FILE_WITH_VALUE}"
# ENV is set via file content (valid file path):
CONTAINER_NAME=${CONTAINER1_NAME}
_init_with_defaults
TEST__FILE=${TEST_TMP_CONFIG}/test_secret
echo 1 > "${TEST__FILE}"
TEST__FILE_SUCCESS=${TEST__FILE}
local CUSTOM_SETUP_ARGUMENTS=(
--env ENABLE_POP3__FILE="${TEST__FILE}"
-v "${TEST__FILE}:${TEST__FILE}"
--env ENABLE_POP3__FILE="${FILEPATH_VALID}"
-v "${FILE_WITH_VALUE}:${FILEPATH_VALID}"
)
_common_container_setup 'CUSTOM_SETUP_ARGUMENTS'
# ENV is already set explicitly, logs warning:
CONTAINER_NAME=${CONTAINER2_NAME}
_init_with_defaults
TEST__FILE=${TEST_TMP_CONFIG}/test_secret
local CUSTOM_SETUP_ARGUMENTS=(
--env TEST="manual-secret"
--env TEST__FILE="${TEST__FILE}"
--env TEST_ENV="manual-secret"
--env TEST_ENV__FILE="${FILEPATH_VALID}"
)
_common_container_setup 'CUSTOM_SETUP_ARGUMENTS'
# ENV is not set by file content (invalid file path):
CONTAINER_NAME=${CONTAINER3_NAME}
_init_with_defaults
NON_EXISTENT__FILE="/tmp/non_existent_secret"
local CUSTOM_SETUP_ARGUMENTS=(
--env TEST__FILE="${NON_EXISTENT__FILE}"
--env TEST__FILE="${FILEPATH_INVALID}"
)
_common_container_setup 'CUSTOM_SETUP_ARGUMENTS'
}
teardown_file() {
rm -f "${TEST__FILE_SUCCESS}" "${TEST__FILE_WARNING}"
function teardown_file() {
rm -f "${FILE_WITH_VALUE}"
docker rm -f "${CONTAINER1_NAME}" "${CONTAINER2_NAME}" "${CONTAINER3_NAME}"
}
@test "Environment variables are loaded from files" {
run docker logs "${CONTAINER1_NAME}"
@test "ENV can be set from a file" {
export CONTAINER_NAME=${CONTAINER1_NAME}
run docker logs "${CONTAINER_NAME}"
assert_success
assert_line --partial "Getting secret ENABLE_POP3 from ${TEST__FILE_SUCCESS}"
_exec_in_container_explicit "${CONTAINER1_NAME}" [ -f /etc/dovecot/protocols.d/pop3d.protocol ]
assert_line --partial "Getting secret ENABLE_POP3 from ${FILEPATH_VALID}"
_run_in_container [ -f /etc/dovecot/protocols.d/pop3d.protocol ]
assert_success
}
@test "Existing environment variables take precedence over __FILE variants" {
run docker logs "${CONTAINER2_NAME}"
@test "Non-empty ENV have precedence over their __FILE variant" {
export CONTAINER_NAME=${CONTAINER2_NAME}
run docker logs "${CONTAINER_NAME}"
assert_success
assert_line --partial "Ignoring TEST since TEST__FILE is also set"
assert_line --partial "Ignoring TEST_ENV since TEST_ENV__FILE is also set"
}
@test "Non-existent file triggers an error" {
run docker logs "${CONTAINER3_NAME}"
@test "Referencing a non-existent file logs an error" {
export CONTAINER_NAME=${CONTAINER3_NAME}
run docker logs "${CONTAINER_NAME}"
assert_success
assert_line --partial "File ${NON_EXISTENT__FILE} does not exist"
assert_line --partial "File ${FILEPATH_INVALID} does not exist"
}