mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2024-01-19 02:48:50 +00:00
6d06149581
The `DYNAMIC_FILES` var was quote wrapped, treating all filepaths to create checksums for as a single string that would be ignored instead of processed individually. Removed the quotes, and changed the for loop to an array which accomplishes the same goal. * fix: Prevent unnecessary change detection event `acme.json` change would extract new cert files, which would then be hashed after restarting services and considered a change event, running through the logic again and restarting services once more when that was not required. The checksum entries for those cert files are now replaced with new entries containing updated checksum hashes, after `acme.json` extraction.
99 lines
4.1 KiB
Bash
99 lines
4.1 KiB
Bash
load 'test_helper/common'
|
|
|
|
# Note if tests fail asserting against `supervisorctl tail changedetector` output,
|
|
# use `supervisorctl tail -<num bytes> changedetector` instead to increase log output.
|
|
# Default `<num bytes>` appears to be around 1500.
|
|
|
|
function setup() {
|
|
run_setup_file_if_necessary
|
|
}
|
|
|
|
function teardown() {
|
|
run_teardown_file_if_necessary
|
|
}
|
|
|
|
function setup_file() {
|
|
local PRIVATE_CONFIG
|
|
PRIVATE_CONFIG="$(duplicate_config_for_container . mail_changedetector_one)"
|
|
|
|
docker run -d --name mail_changedetector_one \
|
|
-v "${PRIVATE_CONFIG}":/tmp/docker-mailserver \
|
|
-v "$(pwd)/test/test-files":/tmp/docker-mailserver-test:ro \
|
|
-e DMS_DEBUG=1 \
|
|
-h mail.my-domain.com -t "${NAME}"
|
|
wait_for_finished_setup_in_container mail_changedetector_one
|
|
|
|
docker run -d --name mail_changedetector_two \
|
|
-v "${PRIVATE_CONFIG}":/tmp/docker-mailserver \
|
|
-v "$(pwd)/test/test-files":/tmp/docker-mailserver-test:ro \
|
|
-e DMS_DEBUG=1 \
|
|
-h mail.my-domain.com -t "${NAME}"
|
|
wait_for_finished_setup_in_container mail_changedetector_two
|
|
}
|
|
|
|
function teardown_file() {
|
|
docker rm -f mail_changedetector_one
|
|
docker rm -f mail_changedetector_two
|
|
}
|
|
|
|
# this test must come first to reliably identify when to run setup_file
|
|
@test "first" {
|
|
skip 'Starting testing of changedetector'
|
|
}
|
|
|
|
@test "checking changedetector: servers are ready" {
|
|
wait_for_service mail_changedetector_one changedetector
|
|
wait_for_service mail_changedetector_two changedetector
|
|
}
|
|
|
|
@test "checking changedetector: can detect changes & between two containers using same config" {
|
|
echo "" >> "$(private_config_path mail_changedetector_one)/postfix-accounts.cf"
|
|
sleep 15
|
|
run docker exec mail_changedetector_one /bin/bash -c "supervisorctl tail -3000 changedetector"
|
|
assert_output --partial "postfix: stopped"
|
|
assert_output --partial "postfix: started"
|
|
assert_output --partial "Change detected"
|
|
assert_output --partial "Removed lock"
|
|
run docker exec mail_changedetector_two /bin/bash -c "supervisorctl tail -3000 changedetector"
|
|
assert_output --partial "postfix: stopped"
|
|
assert_output --partial "postfix: started"
|
|
assert_output --partial "Change detected"
|
|
assert_output --partial "Removed lock"
|
|
}
|
|
|
|
@test "checking changedetector: lock file found, blocks, and doesn't get prematurely removed" {
|
|
run docker exec mail_changedetector_two /bin/bash -c "supervisorctl stop changedetector"
|
|
docker exec mail_changedetector_one /bin/bash -c "touch /tmp/docker-mailserver/check-for-changes.sh.lock"
|
|
echo "" >> "$(private_config_path mail_changedetector_one)/postfix-accounts.cf"
|
|
run docker exec mail_changedetector_two /bin/bash -c "supervisorctl start changedetector"
|
|
sleep 15
|
|
run docker exec mail_changedetector_one /bin/bash -c "supervisorctl tail changedetector"
|
|
assert_output --partial "check-for-changes.sh.lock exists"
|
|
run docker exec mail_changedetector_two /bin/bash -c "supervisorctl tail changedetector"
|
|
assert_output --partial "check-for-changes.sh.lock exists"
|
|
# Ensure starting a new check-for-changes.sh instance (restarting here) doesn't delete the lock
|
|
docker exec mail_changedetector_two /bin/bash -c "rm -f /var/log/supervisor/changedetector.log"
|
|
run docker exec mail_changedetector_two /bin/bash -c "supervisorctl restart changedetector"
|
|
sleep 5
|
|
run docker exec mail_changedetector_two /bin/bash -c "supervisorctl tail changedetector"
|
|
refute_output --partial "check-for-changes.sh.lock exists"
|
|
refute_output --partial "Removed lock"
|
|
}
|
|
|
|
@test "checking changedetector: lock stale and cleaned up" {
|
|
docker rm -f mail_changedetector_two
|
|
docker exec mail_changedetector_one /bin/bash -c "touch /tmp/docker-mailserver/check-for-changes.sh.lock"
|
|
echo "" >> "$(private_config_path mail_changedetector_one)/postfix-accounts.cf"
|
|
sleep 15
|
|
run docker exec mail_changedetector_one /bin/bash -c "supervisorctl tail changedetector"
|
|
assert_output --partial "check-for-changes.sh.lock exists"
|
|
sleep 65
|
|
run docker exec mail_changedetector_one /bin/bash -c "supervisorctl tail -3000 changedetector"
|
|
assert_output --partial "Removed stale lock"
|
|
}
|
|
|
|
# this test is only there to reliably mark the end for the teardown_file
|
|
@test "last" {
|
|
skip 'Finished testing of changedetector'
|
|
}
|