From 4cdee851603cf9ec9c368b86e6b85a00cd796430 Mon Sep 17 00:00:00 2001 From: Christian Kuhn <lolli@schwarzbu.ch> Date: Mon, 15 Feb 2021 10:25:05 +0100 Subject: [PATCH] [TASK] runTests.sh: Proper validation of -a option Plus: No variable fallback magick in docker-compose.yml, this belongs to runTests.sh Change-Id: I9ec8d1ecba695061155807fd44d0a3cb3f342cfd Resolves: #93514 Releases: master, 10.4 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/67919 Tested-by: Simon Gilli <typo3@gilbertsoft.org> Tested-by: TYPO3com <noreply@typo3.com> Tested-by: core-ci <typo3@b13.com> Tested-by: Richard Haeser <richard@richardhaeser.com> Reviewed-by: Simon Gilli <typo3@gilbertsoft.org> Reviewed-by: Richard Haeser <richard@richardhaeser.com> --- Build/Scripts/runTests.sh | 63 +++++++++++++++---- Build/testing-docker/local/docker-compose.yml | 6 +- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/Build/Scripts/runTests.sh b/Build/Scripts/runTests.sh index 3234afe7d84a..35fbedc81227 100755 --- a/Build/Scripts/runTests.sh +++ b/Build/Scripts/runTests.sh @@ -30,15 +30,51 @@ setUpDockerComposeDotEnv() { echo "SCRIPT_VERBOSE=${SCRIPT_VERBOSE}" >> .env echo "PHPUNIT_RANDOM=${PHPUNIT_RANDOM}" >> .env echo "CGLCHECK_DRY_RUN=${CGLCHECK_DRY_RUN}" >> .env + echo "DATABASE_DRIVER=${DATABASE_DRIVER}" >> .env echo "MARIADB_VERSION=${MARIADB_VERSION}" >> .env echo "MYSQL_VERSION=${MYSQL_VERSION}" >> .env echo "POSTGRES_VERSION=${POSTGRES_VERSION}" >> .env echo "PHP_VERSION=${PHP_VERSION}" >> .env echo "CHUNKS=${CHUNKS}" >> .env echo "THISCHUNK=${THISCHUNK}" >> .env +} - # Set a custom database driver provided by option: -a - [[ ! -z "$DATABASE_DRIVER" ]] && echo "DATABASE_DRIVER=${DATABASE_DRIVER}" >> .env +# Options -a and -d depend on each other. The function +# validates input combinations and sets defaults. +handleDbmsAndDriverOptions() { + case ${DBMS} in + mariadb) + ;& + mysql) + [ -z ${DATABASE_DRIVER} ] && DATABASE_DRIVER="mysqli" + if [ "${DATABASE_DRIVER}" != "mysqli" ] && [ "${DATABASE_DRIVER}" != "pdo_mysql" ]; then + echo "Invalid option -a ${DATABASE_DRIVER} with -d ${DBMS}" >&2 + echo >&2 + echo "call \".Build/Scripts/runTests.sh -h\" to display help and valid options" >&2 + exit 1 + fi + ;; + mssql) + [ -z ${DATABASE_DRIVER} ] && DATABASE_DRIVER="sqlsrv" + if [ "${DATABASE_DRIVER}" != "sqlsrv" ] && [ "${DATABASE_DRIVER}" != "pdo_sqlsrv" ]; then + echo "Invalid option -a ${DATABASE_DRIVER} with -d ${DBMS}" >&2 + echo >&2 + echo "call \".Build/Scripts/runTests.sh -h\" to display help and valid options" >&2 + exit 1 + fi + ;; + postgres) + ;& + sqlite) + if ! [ -z ${DATABASE_DRIVER} ]; then + echo "Invalid option -a ${DATABASE_DRIVER} with -d ${DBMS}" >&2 + echo >&2 + echo "call \".Build/Scripts/runTests.sh -h\" to display help and valid options" >&2 + exit 1 + fi + DATABASE_DRIVER="" + ;; + esac } # Load help text into $HELP @@ -367,19 +403,20 @@ fi # Suite execution case ${TEST_SUITE} in acceptance) + handleDbmsAndDriverOptions setUpDockerComposeDotEnv if [ ${CHUNKS} -gt 1 ]; then docker-compose run acceptance_split fi case ${DBMS} in mysql) - [[ ! -z "$DATABASE_DRIVER" ]] && echo "Using driver: ${DATABASE_DRIVER}" + echo "Using driver: ${DATABASE_DRIVER}" docker-compose run prepare_acceptance_backend_mysql docker-compose run acceptance_backend_mysql SUITE_EXIT_CODE=$? ;; mariadb) - [[ ! -z "$DATABASE_DRIVER" ]] && echo "Using driver: ${DATABASE_DRIVER}" + echo "Using driver: ${DATABASE_DRIVER}" docker-compose run prepare_acceptance_backend_mariadb docker-compose run acceptance_backend_mariadb SUITE_EXIT_CODE=$? @@ -548,25 +585,26 @@ case ${TEST_SUITE} in docker-compose down ;; functional) + handleDbmsAndDriverOptions setUpDockerComposeDotEnv if [ ${CHUNKS} -gt 1 ]; then docker-compose run functional_split fi case ${DBMS} in mariadb) - [[ ! -z "$DATABASE_DRIVER" ]] && echo "Using driver: ${DATABASE_DRIVER}" + echo "Using driver: ${DATABASE_DRIVER}" docker-compose run prepare_functional_mariadb docker-compose run functional_mariadb SUITE_EXIT_CODE=$? ;; mysql) - [[ ! -z "$DATABASE_DRIVER" ]] && echo "Using driver: ${DATABASE_DRIVER}" + echo "Using driver: ${DATABASE_DRIVER}" docker-compose run prepare_functional_mysql docker-compose run functional_mysql SUITE_EXIT_CODE=$? ;; mssql) - [[ ! -z "$DATABASE_DRIVER" ]] && echo "Using driver: ${DATABASE_DRIVER}" + echo "Using driver: ${DATABASE_DRIVER}" docker-compose run prepare_functional_mssql2019latest docker-compose run functional_mssql2019latest SUITE_EXIT_CODE=$? @@ -590,16 +628,17 @@ case ${TEST_SUITE} in docker-compose down ;; install) + handleDbmsAndDriverOptions setUpDockerComposeDotEnv case ${DBMS} in mysql) - [[ ! -z "$DATABASE_DRIVER" ]] && echo "Using driver: ${DATABASE_DRIVER}" + echo "Using driver: ${DATABASE_DRIVER}" docker-compose run prepare_acceptance_install_mysql docker-compose run acceptance_install_mysql SUITE_EXIT_CODE=$? ;; mariadb) - [[ ! -z "$DATABASE_DRIVER" ]] && echo "Using driver: ${DATABASE_DRIVER}" + echo "Using driver: ${DATABASE_DRIVER}" docker-compose run prepare_acceptance_install_mariadb docker-compose run acceptance_install_mariadb SUITE_EXIT_CODE=$? @@ -691,13 +730,13 @@ esac case ${DBMS} in mariadb) - DBMS_OUTPUT="DBMS: ${DBMS} version ${MARIADB_VERSION} driver ${DATABASE_DRIVER:-mysqli}" + DBMS_OUTPUT="DBMS: ${DBMS} version ${MARIADB_VERSION} driver ${DATABASE_DRIVER}" ;; mysql) - DBMS_OUTPUT="DBMS: ${DBMS} version ${MYSQL_VERSION} driver ${DATABASE_DRIVER:-mysqli}" + DBMS_OUTPUT="DBMS: ${DBMS} version ${MYSQL_VERSION} driver ${DATABASE_DRIVER}" ;; mssql) - DBMS_OUTPUT="DBMS: ${DBMS} driver ${DATABASE_DRIVER:-sqlsrv}" + DBMS_OUTPUT="DBMS: ${DBMS} driver ${DATABASE_DRIVER}" ;; postgres) DBMS_OUTPUT="DBMS: ${DBMS} version ${POSTGRES_VERSION}" diff --git a/Build/testing-docker/local/docker-compose.yml b/Build/testing-docker/local/docker-compose.yml index 543bcdbf598a..540d055f1e6d 100644 --- a/Build/testing-docker/local/docker-compose.yml +++ b/Build/testing-docker/local/docker-compose.yml @@ -845,7 +845,7 @@ services: - /etc/passwd:/etc/passwd:ro - /etc/group:/etc/group:ro environment: - typo3DatabaseDriver: "${DATABASE_DRIVER:-mysqli}" + typo3DatabaseDriver: "${DATABASE_DRIVER}" typo3DatabaseName: func_test typo3DatabaseUsername: root typo3DatabasePassword: funcp @@ -899,7 +899,7 @@ services: - /etc/passwd:/etc/passwd:ro - /etc/group:/etc/group:ro environment: - typo3DatabaseDriver: "${DATABASE_DRIVER:-mysqli}" + typo3DatabaseDriver: "${DATABASE_DRIVER}" typo3DatabaseName: func_test typo3DatabaseUsername: root typo3DatabasePassword: funcp @@ -954,7 +954,7 @@ services: - /etc/passwd:/etc/passwd:ro - /etc/group:/etc/group:ro environment: - typo3DatabaseDriver: "${DATABASE_DRIVER:-sqlsrv}" + typo3DatabaseDriver: "${DATABASE_DRIVER}" typo3DatabaseName: func typo3DatabasePassword: "Test1234!" typo3DatabaseUsername: SA -- GitLab