From a161e536a7f111a00a4bf8fb1fabc1911d8d5d6f Mon Sep 17 00:00:00 2001 From: cytopia Date: Thu, 22 Dec 2016 20:17:35 +0100 Subject: [PATCH] Add extensive travis checks --- .tests/.lib.sh | 265 +++++++++++++++++++++++++++++++++++++++++++++++++ .tests/test.sh | 127 ++++++++++++++++++++++++ .travis.yml | 59 +---------- 3 files changed, 396 insertions(+), 55 deletions(-) create mode 100644 .tests/.lib.sh create mode 100755 .tests/test.sh diff --git a/.tests/.lib.sh b/.tests/.lib.sh new file mode 100644 index 00000000..9c1f4709 --- /dev/null +++ b/.tests/.lib.sh @@ -0,0 +1,265 @@ +#!/bin/sh -eu + + +if [ "${#}" != "1" ]; then + exit 1 +fi + +if [ ! -d "${1}" ]; then + exit 1 +fi + +DEVILBOX_PATH="${1}" + + +################################################################################ +# +# G E T D E F A U L T S +# +################################################################################ + +### +### Default enabled Docker Versions +### +get_default_version_httpd() { + _default="$( grep -E '^HTTPD_SERVER=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + echo "${_default}" +} +get_default_version_mysql() { + _default="$( grep -E '^MYSQL_SERVER=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + echo "${_default}" +} +get_default_version_postgres() { + _default="$( grep -E '^POSTGRES_SERVER=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + echo "${_default}" +} +get_default_version_php() { + _default="$( grep -E '^PHP_SERVER=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + echo "${_default}" +} + +### +### Default enabled Host Ports +### +get_default_port_httpd() { + _default="$( grep -E '^HOST_PORT_HTTPD=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + echo "${_default}" +} +get_default_port_mysql() { + _default="$( grep -E '^HOST_PORT_MYSQL=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + echo "${_default}" +} +get_default_port_postgres() { + _default="$( grep -E '^HOST_PORT_POSTGRES=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + echo "${_default}" +} + +### +### Default enabled Host Mounts +### +get_default_mount_httpd() { + _default="$( grep -E '^HOST_PATH_TO_WWW_DOCROOTS=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + _prefix="$( echo "${_default}" | cut -c-1 )" + + # Relative path? + if [ "${_prefix}" = "." ]; then + _default="$( echo "${_default}" | sed 's/^\.//g' )" # Remove leading dot: . + _default="$( echo "${_default}" | sed 's/^\///' )" # Remove leading slash: / + echo "${DEVILBOX_PATH}/${_default}" + else + echo "${_default}" + fi +} +get_default_mount_mysql() { + _default="$( grep -E '^HOST_PATH_TO_MYSQL_DATADIR=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + _prefix="$( echo "${_default}" | cut -c-1 )" + + # Relative path? + if [ "${_prefix}" = "." ]; then + _default="$( echo "${_default}" | sed 's/^\.//g' )" # Remove leading dot: . + _default="$( echo "${_default}" | sed 's/^\///' )" # Remove leading slash: / + echo "${DEVILBOX_PATH}/${_default}" + else + echo "${_default}" + fi +} +get_default_mount_postgres() { + _default="$( grep -E '^HOST_PATH_TO_POSTGRES_DATADIR=' "${DEVILBOX_PATH}/env-example" | sed 's/^.*=//g' )" + _prefix="$( echo "${_default}" | cut -c-1 )" + + # Relative path? + if [ "${_prefix}" = "." ]; then + _default="$( echo "${_default}" | sed 's/^\.//g' )" # Remove leading dot: . + _default="$( echo "${_default}" | sed 's/^\///' )" # Remove leading slash: / + echo "${DEVILBOX_PATH}/${_default}" + else + echo "${_default}" + fi +} + + +################################################################################ +# +# G E T A L L D O C K E R V E R S I O N S +# +################################################################################ + +### +### All Docker Versions +### +get_all_docker_httpd() { + _all="$( grep -E '^#?HTTPD_SERVER=' "${DEVILBOX_PATH}/env-example" | sed 's/.*=//g' )" + echo "${_all}" +} +get_all_docker_mysql() { + _all="$( grep -E '^#?MYSQL_SERVER=' "${DEVILBOX_PATH}/env-example" | sed 's/.*=//g' )" + echo "${_all}" +} +get_all_docker_postgres() { + _all="$( grep -E '^#?POSTGRES_SERVER=' "${DEVILBOX_PATH}/env-example" | sed 's/.*=//g' )" + echo "${_all}" +} +get_all_docker_php() { + _all="$( grep -E '^#?PHP_SERVER=' "${DEVILBOX_PATH}/env-example" | sed 's/.*=//g' )" + echo "${_all}" +} + + +################################################################################ +# +# S E T / R E S E T F U N C T I O N S +# +################################################################################ + +### +### Recreate .env file from env-example +### +reset_env_file() { + + # Re-create .env file + if [ -f "${DEVILBOX_PATH}/.env" ]; then + rm -f "${DEVILBOX_PATH}/.env" + fi + cp "${DEVILBOX_PATH}/env-example" "${DEVILBOX_PATH}/.env" +} + +### +### Comment out all docker versions +### +comment_all_dockers() { + _httpd="$( get_default_version_httpd )" + _mysql="$( get_default_version_mysql )" + _postgres="$( get_default_version_postgres )" + _php="$( get_default_version_php )" + + + # Comment out all enabled docker versions + sed -i'' "s/HTTPD_SERVER=${_httpd}/#HTTPD_SERVER=${_httpd}/g" "${DEVILBOX_PATH}/.env" + sed -i'' "s/MYSQL_SERVER=${_mysql}/#MYSQL_SERVER=${_mysql}/g" "${DEVILBOX_PATH}/.env" + sed -i'' "s/POSTGRES_SERVER=${_postgres}/#POSTGRES_SERVER=${_postgres}/g" "${DEVILBOX_PATH}/.env" + sed -i'' "s/PHP_SERVER=${_php}/#PHP_SERVER=${_php}/g" "${DEVILBOX_PATH}/.env" +} + +### +### Eenable desired docker version +### +enable_docker_httpd() { + _docker_version="${1}" + sed -i'' "s/#HTTPD_SERVER=${_docker_version}/HTTPD_SERVER=${_docker_version}/g" "${DEVILBOX_PATH}/.env" +} +enable_docker_mysql() { + _docker_version="${1}" + sed -i'' "s/#MYSQL_SERVER=${_docker_version}/MYSQL_SERVER=${_docker_version}/g" "${DEVILBOX_PATH}/.env" +} +enable_docker_postgres() { + _docker_version="${1}" + sed -i'' "s/#POSTGRES_SERVER=${_docker_version}/POSTGRES_SERVER=${_docker_version}/g" "${DEVILBOX_PATH}/.env" +} +enable_docker_php() { + _docker_version="${1}" + sed -i'' "s/#PHP_SERVER=${_docker_version}/PHP_SERVER=${_docker_version}/g" "${DEVILBOX_PATH}/.env" +} + + +set_host_port_httpd() { + _port="${1}" + sed -i'' "s/^HOST_PORT_HTTPD=.*/HOST_PORT_HTTPD=${_port}/" "${DEVILBOX_PATH}/.env" +} +set_host_port_mysql() { + _port="${1}" + sed -i'' "s/^HOST_PORT_MYSQL=.*/HOST_PORT_MYSQL=${_port}/" "${DEVILBOX_PATH}/.env" +} +set_host_port_pgsql() { + _port="${1}" + sed -i'' "s/^HOST_PORT_POSTGRES=.*/HOST_PORT_POSTGRES=${_port}/" "${DEVILBOX_PATH}/.env" +} + + + +################################################################################ +# +# S T A R T / S T O P T H E D E V I L B O X +# +################################################################################ + +devilbox_start() { + _httpd="$1" + _mysql="$2" + _pysql="$3" + _php="$4" + _head="$5" + + echo "################################################################################" + echo "#" + echo "# ${_head}: [HTTPD: ${_httpd} | MYSQL: ${_mysql} | PGSQL: ${_pysql} | PHP: ${_php}] " + echo "#" + echo "################################################################################" + + # Adjust .env + comment_all_dockers + enable_docker_httpd "${_httpd}" + enable_docker_mysql "${_mysql}" + enable_docker_postgres "${_pysql}" + enable_docker_php "${_php}" + + # Stop existing dockers + cd "${DEVILBOX_PATH}" || exit 1 + docker-compose down || true + docker-compose stop || true + docker-compose kill || true + docker-compose rm -f || true + + # Delete existing data dirs + rm -rf "$( get_default_mount_httpd )" + rm -rf "$( get_default_mount_mysql )" + rm -rf "$( get_default_mount_postgres )" + + # Run + docker-compose up -d + + # Wait for it to come up + sleep 20 +} + +debilbox_test() { + count="$( curl -q localhost 2>/dev/null | grep -c OK )" + echo "${count}" + if [ "${count}" = "0" ]; then + curl localhost + return false + fi +} + +devilbox_stop() { + # Stop existing dockers + cd "${DEVILBOX_PATH}" || exit 1 + docker-compose down || true + docker-compose stop || true + docker-compose kill || true + docker-compose rm -f || true + + # Delete existing data dirs + rm -rf "$( get_default_mount_httpd )" + rm -rf "$( get_default_mount_mysql )" + rm -rf "$( get_default_mount_postgres )" +} diff --git a/.tests/test.sh b/.tests/test.sh new file mode 100755 index 00000000..1358d8be --- /dev/null +++ b/.tests/test.sh @@ -0,0 +1,127 @@ +#!/bin/sh -eu + +if [ "${#}" != "1" ]; then + echo "Error: Invalid number of arguments" + exit 1 +fi + +if [ ! -d "${1}" ]; then + echo "Error: Not a directory: ${1}" + exit 1 +fi + +### +### Get devilbox path and source libs file +### +DEVILBOX_PATH="$( echo "${1}"| sed 's/\/*$//' )" # remove last slash(es): / +. "${DEVILBOX_PATH}/.tests/.lib.sh" "${DEVILBOX_PATH}" + +################################################################################ +# +# B O O T S T R A P +# +################################################################################ + +### +### Reset .env file +### +reset_env_file + +### +### Alter host ports +### +set_host_port_httpd "80" +set_host_port_mysql "33060" +set_host_port_pgsql "54320" + + + +################################################################################ +# +# T E S T 0 1 +# +################################################################################ + +### +### Docker versions to use +### +_httpd="apache-2.2" +_mysql="mariadb-10.2" +_pysql="9.6" +_php="php-fpm-7.0" + +### +### Go +### +devilbox_start "${_httpd}" "${_mysql}" "${_pysql}" "${_php}" "1/5" +debilbox_test +devilbox_stop + + + +################################################################################ +# +# T E S T 0 2 +# +################################################################################ + +### +### Docker versions to use +### +_httpd="apache-2.4" +_mysql="mariadb-10.2" +_pysql="9.6" +_php="php-fpm-7.0" + +### +### Go +### +devilbox_start "${_httpd}" "${_mysql}" "${_pysql}" "${_php}" "2/5" +debilbox_test +devilbox_stop + + + +################################################################################ +# +# T E S T 0 3 +# +################################################################################ + +### +### Docker versions to use +### +_httpd="nginx-stable" +_mysql="mariadb-10.2" +_pysql="9.6" +_php="php-fpm-7.0" + +### +### Go +### +devilbox_start "${_httpd}" "${_mysql}" "${_pysql}" "${_php}" "3/5" +debilbox_test +devilbox_stop + + + +################################################################################ +# +# T E S T 0 4 +# +################################################################################ + +### +### Docker versions to use +### +_httpd="nginx-mainline" +_mysql="mariadb-10.2" +_pysql="9.6" +_php="php-fpm-7.0" + +### +### Go +### +devilbox_start "${_httpd}" "${_mysql}" "${_pysql}" "${_php}" "4/5" +debilbox_test +devilbox_stop \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 74b528ae..49b12eee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,10 +14,8 @@ services: ### env: global: - - DEVILBOX_PHP_VERSION="$( grep -Eo 'image:.*PHP.*:.*' docker-compose.yml | sed 's/.*:.*://g' )" - - DEVILBOX_HTTPD_VERSION="$( grep -Eo 'image:.*HTTPD.*:.*' docker-compose.yml | sed 's/.*:.*://g' )" - - DEVILBOX_MYSQL_VERSION="$( grep -Eo 'image:.*MYSQL.*:.*' docker-compose.yml | sed 's/.*:.*://g' )" - + # Get .env default versions + - VAR=VAL ### ### Berfore Install @@ -31,31 +29,7 @@ before_install: ### Install ### install: - # php - #- docker pull cytopia/php-fpm-5.4:${DEVILBOX_PHP_VERSION} - #- docker pull cytopia/php-fpm-5.5:${DEVILBOX_PHP_VERSION} - #- docker pull cytopia/php-fpm-5.6:${DEVILBOX_PHP_VERSION} - #- docker pull cytopia/php-fpm-7.0:${DEVILBOX_PHP_VERSION} - #- docker pull cytopia/php-fpm-7.1:${DEVILBOX_PHP_VERSION} - ## web - #- docker pull cytopia/apache-2.2:${DEVILBOX_HTTPD_VERSION} - #- docker pull cytopia/apache-2.4:${DEVILBOX_HTTPD_VERSION} - #- docker pull cytopia/nginx-stable:${DEVILBOX_HTTPD_VERSION} - #- docker pull cytopia/nginx-mainline:${DEVILBOX_HTTPD_VERSION} - ## mysql/mariadb - #- docker pull cytopia/mysql-5.5:${DEVILBOX_MYSQL_VERSION} - #- docker pull cytopia/mysql-5.6:${DEVILBOX_MYSQL_VERSION} - #- docker pull cytopia/mysql-5.7:${DEVILBOX_MYSQL_VERSION} - #- docker pull cytopia/mariadb-5.5:${DEVILBOX_MYSQL_VERSION} - #- docker pull cytopia/mariadb-10.0:${DEVILBOX_MYSQL_VERSION} - #- docker pull cytopia/mariadb-10.1:${DEVILBOX_MYSQL_VERSION} - #- docker pull cytopia/mariadb-10.2:${DEVILBOX_MYSQL_VERSION} - ## postgresql (official images) - #- docker pull postgres:9.2 - #- docker pull postgres:9.3 - #- docker pull postgres:9.4 - #- docker pull postgres:9.5 - #- docker pull postgres:9.6 + - true @@ -63,29 +37,4 @@ install: ### Test ### script: - - cp env-example .env - - # PostgreSQL port seems already been taken - - sed -i'' 's/127.0.0.1:5432/127.0.0.1:54320/g' docker-compose.yml - - sed -i'' 's/127.0.0.1:3306/127.0.0.1:33060/g' docker-compose.yml - - - mkdir -p ~/data/mysql57 - - mkdir -p ~/data/postgres96 - - mkdir -p ~/Sites - - chmod 777 ~/data/mysql57 - - chmod 777 ~/data/postgres96 - - chmod 777 ~/Sites - - # Start - - docker-compose up -d - - sleep 30 - - # Show info - - docker-compose logs - - docker-compose ps - - # Check running containers - - if [ "$( docker-compose ps | grep -c 'Up' )" != "4" ]; then false; fi - - # Crawl page - - wget http://localhost \ No newline at end of file + - .tests/test.sh .