diff --git a/Dockerfiles/prod/data/docker-entrypoint.d/32-docker-logs.sh b/Dockerfiles/prod/data/docker-entrypoint.d/32-docker-logs.sh index 58a0737..3434b02 100755 --- a/Dockerfiles/prod/data/docker-entrypoint.d/32-docker-logs.sh +++ b/Dockerfiles/prod/data/docker-entrypoint.d/32-docker-logs.sh @@ -18,6 +18,7 @@ _log_to_dockerlogs() { echo "access.log = /proc/self/fd/2" } > "${conf_logfile}" } + _log_to_files() { local conf_logfile="${1}" local log_dir="${2}" @@ -36,6 +37,7 @@ _log_to_files() { run "touch ${log_dir}/php-fpm.error" "${debug}" fi run "chown -R ${user}:${group} ${log_dir}" "${debug}" + run "chmod 0755 ${log_dir}" "${debug}" { echo "[global]" echo "error_log = ${log_dir}/php-fpm.error" @@ -77,10 +79,10 @@ set_docker_logs() { # Keep docker logs elif [ "${docker_logs}" = "1" ]; then - log "info" "\$${env_varname} set to 1. Logging to docker logs (stdout and stderr)." + log "info" "\$${env_varname} set to 1. Logging to docker logs (stdout and stderr)." "${debug}" _log_to_dockerlogs "${conf_logfile}" else - log "err" "Invalid value for \$${env_varname}. Can only be 0 or 1. Provided: ${docker_logs}" + log "err" "Invalid value for \$${env_varname}. Can only be 0 or 1. Provided: ${docker_logs}" "${debug}" exit 1 fi fi diff --git a/tests/.lib.sh b/tests/.lib.sh index 321c4f2..43f0c6b 100755 --- a/tests/.lib.sh +++ b/tests/.lib.sh @@ -117,7 +117,7 @@ function docker_run() { # If it fails, start again in foreground to fail again, but show errors if ! docker exec -it ${did} ls >/dev/null 2>&1; then - docker run "${args}" "${image_name}" "1" + run "docker run --name $( get_random_name ) ${args} ${image_name}" "1" return 1 fi diff --git a/tests/prod/02-test-env-docker_logs.sh b/tests/prod/02-test-env-docker_logs.sh new file mode 100755 index 0000000..9fca98f --- /dev/null +++ b/tests/prod/02-test-env-docker_logs.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash + +set -e +set -u +set -o pipefail + +CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)" + +IMAGE="${1}" +VERSION="${2}" +FLAVOUR="${3}" + +# shellcheck disable=SC1090 +. "${CWD}/../.lib.sh" + + + +############################################################ +# Tests +############################################################ + + +### +### Docker logs +### +MOUNTPOINT="$( mktemp --directory )" +did="$( docker_run "${IMAGE}:${VERSION}-${FLAVOUR}" "-e DEBUG_ENTRYPOINT=2 -e NEW_UID=$(id -u) -e NEW_GID=$(id -g) -e DOCKER_LOGS=1 -v ${MOUNTPOINT}:/var/log/php" )" +run "sleep 10" + +if ! run "docker logs ${did} 2>&1 | grep -q 'DOCKER_LOGS'"; then + docker_logs "${did}" || true + docker_stop "${did}" || true + echo "Failed" + exit 1 +fi + +if [ -f "${MOUNTPOINT}/php-fpm.access" ]; then + echo "Access log should not exist: ${MOUNTPOINT}/php-fpm.access" + ls -lap ${MOUNTPOINT}/ + docker_logs "${did}" || true + docker_stop "${did}" || true + echo "Failed" + exit 1 +fi +if [ -f "${MOUNTPOINT}/php-fpm.error" ]; then + echo "Error log should not exist: ${MOUNTPOINT}/php-fpm.error" + ls -lap ${MOUNTPOINT}/ + docker_logs "${did}" || true + docker_stop "${did}" || true + echo "Failed" + exit 1 +fi + +run "ls -lap ${MOUNTPOINT}/" + +docker_stop "${did}" +run "rm -rf ${MOUNTPOINT}" || true + + + +### +### Log to file +### +MOUNTPOINT="$( mktemp --directory )" +did="$( docker_run "${IMAGE}:${VERSION}-${FLAVOUR}" "-e DEBUG_ENTRYPOINT=2 -e NEW_UID=$(id -u) -e NEW_GID=$(id -g) -e DOCKER_LOGS=0 -v ${MOUNTPOINT}:/var/log/php" )" +run "sleep 10" + +if ! run "docker logs ${did} 2>&1 | grep -q 'DOCKER_LOGS'"; then + docker_logs "${did}" || true + docker_stop "${did}" || true + echo "Failed" + exit 1 +fi + +if [ ! -f "${MOUNTPOINT}/php-fpm.access" ]; then + echo "Access log does not exist: ${MOUNTPOINT}/php-fpm.access" + ls -lap ${MOUNTPOINT}/ + docker_logs "${did}" || true + docker_stop "${did}" || true + echo "Failed" + exit 1 +fi +if [ ! -r "${MOUNTPOINT}/php-fpm.access" ]; then + echo "Access log is not readable" + ls -lap ${MOUNTPOINT}/ + docker_logs "${did}" || true + docker_stop "${did}" || true + echo "Failed" + exit 1 +fi + +if [ ! -f "${MOUNTPOINT}/php-fpm.error" ]; then + echo "Error log does not exist: ${MOUNTPOINT}/php-fpm.error" + ls -lap ${MOUNTPOINT}/ + docker_logs "${did}" || true + docker_stop "${did}" || true + echo "Failed" + exit 1 +fi +if [ ! -r "${MOUNTPOINT}/php-fpm.error" ]; then + echo "Error log is not readable" + ls -lap ${MOUNTPOINT}/ + docker_logs "${did}" || true + docker_stop "${did}" || true + echo "Failed" + exit 1 +fi + +run "ls -lap ${MOUNTPOINT}/" +run "cat ${MOUNTPOINT}/*" + +docker_stop "${did}" +run "rm -rf ${MOUNTPOINT}" || true