2019-08-08 19:33:55 +00:00
|
|
|
load 'test_helper/bats-support/load'
|
|
|
|
load 'test_helper/bats-assert/load'
|
|
|
|
|
|
|
|
NAME=tvial/docker-mailserver:testing
|
|
|
|
|
2019-09-05 19:35:23 +00:00
|
|
|
# default timeout is 120 seconds
|
|
|
|
TEST_TIMEOUT_IN_SECONDS=${TEST_TIMEOUT_IN_SECONDS-120}
|
2019-09-11 22:38:34 +00:00
|
|
|
NUMBER_OF_LOG_LINES=${NUMBER_OF_LOG_LINES-10}
|
2019-08-08 19:33:55 +00:00
|
|
|
|
|
|
|
function repeat_until_success_or_timeout {
|
2019-08-16 17:20:19 +00:00
|
|
|
if ! [[ "$1" =~ ^[0-9]+$ ]]; then
|
2019-08-08 19:33:55 +00:00
|
|
|
echo "First parameter for timeout must be an integer, recieved \"$1\""
|
2019-09-10 22:02:16 +00:00
|
|
|
return 1
|
2019-08-08 19:33:55 +00:00
|
|
|
fi
|
|
|
|
TIMEOUT=$1
|
|
|
|
STARTTIME=$SECONDS
|
|
|
|
shift 1
|
|
|
|
until "$@"
|
|
|
|
do
|
|
|
|
sleep 5
|
|
|
|
if [[ $(($SECONDS - $STARTTIME )) -gt $TIMEOUT ]]; then
|
|
|
|
echo "Timed out on command: $@"
|
2019-09-10 22:02:16 +00:00
|
|
|
return 1
|
2019-08-08 19:33:55 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2019-10-08 21:11:27 +00:00
|
|
|
# @param $1 port
|
|
|
|
# @param $2 container name
|
|
|
|
function wait_for_tcp_port_in_container() {
|
|
|
|
repeat_until_success_or_timeout $TEST_TIMEOUT_IN_SECONDS docker exec $2 /bin/sh -c "nc -z 0.0.0.0 $1"
|
|
|
|
}
|
|
|
|
|
2019-08-08 19:33:55 +00:00
|
|
|
# @param $1 name of the postfix container
|
|
|
|
function wait_for_smtp_port_in_container() {
|
2019-10-08 21:11:27 +00:00
|
|
|
wait_for_tcp_port_in_container 25 $1
|
|
|
|
}
|
|
|
|
|
|
|
|
# @param $1 name of the postfix container
|
|
|
|
function wait_for_amavis_port_in_container() {
|
|
|
|
wait_for_tcp_port_in_container 10024 $1
|
2019-08-08 19:33:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# @param $1 name of the postfix container
|
|
|
|
function wait_for_finished_setup_in_container() {
|
2019-09-11 22:38:34 +00:00
|
|
|
local status=0
|
|
|
|
repeat_until_success_or_timeout $TEST_TIMEOUT_IN_SECONDS sh -c "docker logs $1 | grep 'is up and running'" || status=1
|
|
|
|
if [[ $status -eq 1 ]]; then
|
|
|
|
echo "Last $NUMBER_OF_LOG_LINES lines of container \`$1\`'s log"
|
|
|
|
docker logs $1 | tail -n $NUMBER_OF_LOG_LINES
|
|
|
|
fi
|
|
|
|
return $status
|
2019-08-08 23:34:04 +00:00
|
|
|
}
|
|
|
|
|
2019-09-11 22:37:34 +00:00
|
|
|
SETUP_FILE_MARKER="$BATS_TMPDIR/`basename \"$BATS_TEST_FILENAME\"`.setup_file"
|
2019-09-10 23:01:51 +00:00
|
|
|
|
2019-08-08 23:34:04 +00:00
|
|
|
# use in setup() in conjunction with a `@test "first" {}` to trigger setup_file reliably
|
|
|
|
function run_setup_file_if_necessary() {
|
|
|
|
if [ "$BATS_TEST_NAME" == 'test_first' ]; then
|
2019-09-11 22:37:34 +00:00
|
|
|
# prevent old markers from marking success or get an error if we cannot remove due to permissions
|
|
|
|
rm -f "$SETUP_FILE_MARKER"
|
|
|
|
|
2019-08-08 23:34:04 +00:00
|
|
|
setup_file
|
2019-09-11 22:37:34 +00:00
|
|
|
|
2019-09-10 23:01:51 +00:00
|
|
|
touch "$SETUP_FILE_MARKER"
|
|
|
|
else
|
|
|
|
if [ ! -f "$SETUP_FILE_MARKER" ]; then
|
|
|
|
skip "setup_file failed"
|
|
|
|
return 1
|
|
|
|
fi
|
2019-08-08 23:34:04 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# use in teardown() in conjunction with a `@test "last" {}` to trigger teardown_file reliably
|
|
|
|
function run_teardown_file_if_necessary() {
|
|
|
|
if [ "$BATS_TEST_NAME" == 'test_last' ]; then
|
2019-09-11 22:37:34 +00:00
|
|
|
# cleanup setup file marker
|
|
|
|
rm -f "$SETUP_FILE_MARKER"
|
2019-08-08 23:34:04 +00:00
|
|
|
teardown_file
|
|
|
|
fi
|
2019-09-05 19:35:23 +00:00
|
|
|
}
|