mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2025-08-04 01:55:29 +02:00
tests: Revise + respect existing conventions
This commit is contained in:
parent
15db792c14
commit
77ae5554b1
1 changed files with 42 additions and 29 deletions
|
@ -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"
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue