diff --git a/tests/prod/02-test-env-docker_logs-stdout.sh b/tests/prod/02-test-env-docker_logs-stdout.sh new file mode 100755 index 0000000..8f63b60 --- /dev/null +++ b/tests/prod/02-test-env-docker_logs-stdout.sh @@ -0,0 +1,167 @@ +#!/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 (STDOUT) +### +WWW_PORT="23254" +WWW_DIR_HOST="$( mktemp -d )" +WWW_DIR_CONT="/var/www/default" +CFG_DIR_HOST="$( mktemp -d )" +CFG_DIR_CONT="/etc/nginx/conf.d" +LOG_DIR_HOST="$( mktemp --directory )" +CONTAINER="nginx:stable" + +# Create www files +echo " "${WWW_DIR_HOST}/ok.php" +echo " "${WWW_DIR_HOST}/fail.php" + +# Fix mount permissions +chmod 0777 -R "${LOG_DIR_HOST}" +chmod 0777 -R "${CFG_DIR_HOST}" +chmod 0777 -R "${WWW_DIR_HOST}" + + +### +### Start container +### + +# Start PHP-FPM +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 ${WWW_DIR_HOST}:${WWW_DIR_CONT} -v ${LOG_DIR_HOST}:/var/log/php" )" +name="$( docker_name "${did}" )" + +# Nginx.conf +{ + echo "server {" + echo " server_name _;" + echo " listen 80;" + echo " root ${WWW_DIR_CONT};" + echo " index index.php;" + echo " location ~* \.php\$ {" + echo " fastcgi_index index.php;" + echo " fastcgi_pass ${name}:9000;" + echo " include fastcgi_params;" + echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;" + echo " fastcgi_param SCRIPT_NAME \$fastcgi_script_name;" + echo " }" + echo "}" +} > "${CFG_DIR_HOST}/php.conf" + + +# Start Nginx +ndid="$( docker_run "${CONTAINER}" "-v ${WWW_DIR_HOST}:${WWW_DIR_CONT} -v ${CFG_DIR_HOST}:${CFG_DIR_CONT} -p ${WWW_PORT}:80 --link ${name}" )" + +# Wait for both containers to be up and running +run "sleep 10" + + +### +### Fire positive and error generating request +### +run "curl http://localhost:${WWW_PORT}/ok.php" +run "curl http://localhost:${WWW_PORT}/fail.php" + + +### +### Run tests +### +if ! run "docker logs ${did} 2>&1 | grep -q 'DOCKER_LOGS'"; then + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi + +if [ -f "${LOG_DIR_HOST}/php-fpm.access" ]; then + echo "Access log should not exist: ${LOG_DIR_HOST}/php-fpm.access" + ls -lap ${LOG_DIR_HOST}/ + cat "${LOG_DIR_HOST}/php-fpm.access" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi + +if [ -f "${LOG_DIR_HOST}/php-fpm.error" ]; then + echo "Error log should not exist: ${LOG_DIR_HOST}/php-fpm.error" + ls -lap ${LOG_DIR_HOST}/ + cat "${LOG_DIR_HOST}/php-fpm.error" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi + +if ! run "docker logs ${did} 2>&1 | grep -q 'GET /ok.php'"; then + echo "Error no access log string for 'GET /ok.php' found in stderr" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi +if ! run "docker logs ${did} 2>&1 | grep -q 'GET /fail.php'"; then + echo "Error no access log string for 'GET /fail.php' found in stderr" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi +if ! run "docker logs ${did} 2>&1 | grep -q '/var/www/default/fail.php'"; then + echo "Error no error message found in stderr" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi + + +### +### Shutdown +### +docker_stop "${ndid}" || true +docker_stop "${did}" +rm -rf "${LOG_DIR_HOST}" +rm -rf "${CFG_DIR_HOST}" +rm -rf "${WWW_DIR_HOST}" diff --git a/tests/prod/02-test-env-docker_logs.sh b/tests/prod/02-test-env-docker_logs.sh deleted file mode 100755 index 2dfbf7b..0000000 --- a/tests/prod/02-test-env-docker_logs.sh +++ /dev/null @@ -1,117 +0,0 @@ -#!/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 - rm -rf "${MOUNTPOINT}" - 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 - rm -rf "${MOUNTPOINT}" - 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 - rm -rf "${MOUNTPOINT}" - echo "Failed" - exit 1 -fi - -run "ls -lap ${MOUNTPOINT}/" -docker_stop "${did}" -rm -rf "${MOUNTPOINT}" - - -### -### 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 - rm -rf "${MOUNTPOINT}" - 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 - rm -rf "${MOUNTPOINT}" - 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 - rm -rf "${MOUNTPOINT}" - 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 - rm -rf "${MOUNTPOINT}" - 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 - rm -rf "${MOUNTPOINT}" - echo "Failed" - exit 1 -fi - -run "ls -lap ${MOUNTPOINT}/" -run "cat ${MOUNTPOINT}/*" -docker_stop "${did}" -rm -rf "${MOUNTPOINT}" diff --git a/tests/prod/03-test-env-docker_logs-file.sh b/tests/prod/03-test-env-docker_logs-file.sh new file mode 100755 index 0000000..89fd310 --- /dev/null +++ b/tests/prod/03-test-env-docker_logs-file.sh @@ -0,0 +1,244 @@ +#!/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 (STDOUT) +### +WWW_PORT="23254" +WWW_DIR_HOST="$( mktemp -d )" +WWW_DIR_CONT="/var/www/default" +CFG_DIR_HOST="$( mktemp -d )" +CFG_DIR_CONT="/etc/nginx/conf.d" +LOG_DIR_HOST="$( mktemp --directory )" +CONTAINER="nginx:stable" + +# Create www files +echo " "${WWW_DIR_HOST}/ok.php" +echo " "${WWW_DIR_HOST}/fail.php" + +# Fix mount permissions +chmod 0777 -R "${LOG_DIR_HOST}" +chmod 0777 -R "${CFG_DIR_HOST}" +chmod 0777 -R "${WWW_DIR_HOST}" + + +### +### Start container +### + +# Start PHP-FPM +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 ${WWW_DIR_HOST}:${WWW_DIR_CONT} -v ${LOG_DIR_HOST}:/var/log/php" )" +name="$( docker_name "${did}" )" + +# Nginx.conf +{ + echo "server {" + echo " server_name _;" + echo " listen 80;" + echo " root ${WWW_DIR_CONT};" + echo " index index.php;" + echo " location ~* \.php\$ {" + echo " fastcgi_index index.php;" + echo " fastcgi_pass ${name}:9000;" + echo " include fastcgi_params;" + echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;" + echo " fastcgi_param SCRIPT_NAME \$fastcgi_script_name;" + echo " }" + echo "}" +} > "${CFG_DIR_HOST}/php.conf" + + +# Start Nginx +ndid="$( docker_run "${CONTAINER}" "-v ${WWW_DIR_HOST}:${WWW_DIR_CONT} -v ${CFG_DIR_HOST}:${CFG_DIR_CONT} -p ${WWW_PORT}:80 --link ${name}" )" + +# Wait for both containers to be up and running +run "sleep 10" + + +### +### Fire positive and error generating request +### +run "curl http://localhost:${WWW_PORT}/ok.php" +run "curl http://localhost:${WWW_PORT}/fail.php" + + +### +### Run tests +### +if ! run "docker logs ${did} 2>&1 | grep -q 'DOCKER_LOGS'"; then + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi + +if [ ! -f "${LOG_DIR_HOST}/php-fpm.access" ]; then + echo "Access log does not exist: ${LOG_DIR_HOST}/php-fpm.access" + ls -lap ${LOG_DIR_HOST}/ + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi +if [ ! -r "${LOG_DIR_HOST}/php-fpm.access" ]; then + echo "Access log is not readable" + ls -lap ${LOG_DIR_HOST}/ + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi + +if [ ! -f "${LOG_DIR_HOST}/php-fpm.error" ]; then + echo "Error log does not exist: ${LOG_DIR_HOST}/php-fpm.error" + ls -lap ${LOG_DIR_HOST}/ + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi +if [ ! -r "${LOG_DIR_HOST}/php-fpm.error" ]; then + echo "Error log is not readable" + ls -lap ${LOG_DIR_HOST}/ + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi + +# Ensure no access/error goes to stderr +if run "docker logs ${did} 2>&1 | grep -q 'GET /ok.php'"; then + echo "Error access log string for 'GET /ok.php' found in stderr, but shold go to file" + run "cat ${LOG_DIR_HOST}/php-fpm.access" + run "cat ${LOG_DIR_HOST}/php-fpm.error" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi +if run "docker logs ${did} 2>&1 | grep -q 'GET /fail.php'"; then + echo "Error access log string for 'GET /fail.php' found in stderr, but should go to file" + run "cat ${LOG_DIR_HOST}/php-fpm.access" + run "cat ${LOG_DIR_HOST}/php-fpm.error" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi +if run "docker logs ${did} 2>&1 | grep -q '/var/www/default/fail.php'"; then + echo "Error error message found in stderr, but should go to file" + run "cat ${LOG_DIR_HOST}/php-fpm.access" + run "cat ${LOG_DIR_HOST}/php-fpm.error" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi + + + + +# Test access and error file for correct content +if ! run "grep -q 'GET /ok.php' ${LOG_DIR_HOST}/php-fpm.access"; then + echo "Error no access log string for 'GET /ok.php' found in: ${LOG_DIR_HOST}/php-fpm.access" + run "cat ${LOG_DIR_HOST}/php-fpm.access" + run "cat ${LOG_DIR_HOST}/php-fpm.error" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi +if ! run "grep -q 'GET /fail.php' ${LOG_DIR_HOST}/php-fpm.access"; then + echo "Error no access log string for 'GET /fail.php' found in: ${LOG_DIR_HOST}/php-fpm.access" + run "cat ${LOG_DIR_HOST}/php-fpm.access" + run "cat ${LOG_DIR_HOST}/php-fpm.error" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi +if ! run "grep -q '/var/www/default/fail.php' ${LOG_DIR_HOST}/php-fpm.error"; then + echo "Error no error message found in: ${LOG_DIR_HOST}/php-fpm.error" + run "cat ${LOG_DIR_HOST}/php-fpm.access" + run "cat ${LOG_DIR_HOST}/php-fpm.error" + docker_logs "${did}" || true + docker_stop "${ndid}" || true + docker_stop "${did}" || true + rm -rf "${LOG_DIR_HOST}" + rm -rf "${CFG_DIR_HOST}" + rm -rf "${WWW_DIR_HOST}" + echo "Failed" + exit 1 +fi + + +### +### Shutdown +### +docker_logs "${did}" || true +run "ls -lap ${LOG_DIR_HOST}/" +run "cat ${LOG_DIR_HOST}/php-fpm.access" +run "cat ${LOG_DIR_HOST}/php-fpm.error" +docker_stop "${ndid}" || true +docker_stop "${did}" +rm -rf "${LOG_DIR_HOST}" +rm -rf "${CFG_DIR_HOST}" +rm -rf "${WWW_DIR_HOST}" diff --git a/tests/prod/03-test-env-enable_mail.sh b/tests/prod/04-test-env-enable_mail.sh similarity index 100% rename from tests/prod/03-test-env-enable_mail.sh rename to tests/prod/04-test-env-enable_mail.sh diff --git a/tests/prod/04-test-env-forward_ports_to_localhost.sh b/tests/prod/05-test-env-forward_ports_to_localhost.sh similarity index 100% rename from tests/prod/04-test-env-forward_ports_to_localhost.sh rename to tests/prod/05-test-env-forward_ports_to_localhost.sh diff --git a/tests/prod/05-test-mount-custom_ini.sh b/tests/prod/06-test-mount-custom_ini.sh similarity index 100% rename from tests/prod/05-test-mount-custom_ini.sh rename to tests/prod/06-test-mount-custom_ini.sh diff --git a/tests/prod/06-test-mount-custom_fpm_conf.sh b/tests/prod/07-test-mount-custom_fpm_conf.sh similarity index 100% rename from tests/prod/06-test-mount-custom_fpm_conf.sh rename to tests/prod/07-test-mount-custom_fpm_conf.sh