devilbox/.tests/.lib.sh

364 lines
9.5 KiB
Bash
Raw Normal View History

2016-12-22 19:17:35 +00:00
#!/bin/sh -eu
if [ "${#}" != "1" ]; then
exit 1
fi
if [ ! -d "${1}" ]; then
exit 1
fi
DEVILBOX_PATH="${1}"
2016-12-25 14:30:33 +00:00
################################################################################
#
# H E L P E R
#
################################################################################
run() {
_cmd="${1}"
_debug="1"
_red="\033[0;31m"
_green="\033[0;32m"
_reset="\033[0m"
_user="$(whoami)"
# If 2nd argument is set and enabled, allow debug command
if [ "${#}" = "2" ]; then
if [ "${2}" = "1" ]; then
_debug="1"
fi
fi
if [ "${_debug}" = "1" ]; then
printf "${_red}%s \$ ${_green}${_cmd}${_reset}\n" "${_user}"
fi
sh -c "LANG=C LC_ALL=C ${_cmd}"
}
runsu() {
_cmd="${1}"
_debug="0"
_red="\033[0;31m"
_green="\033[0;32m"
_reset="\033[0m"
_user="$(whoami)"
# If 2nd argument is set and enabled, allow debug command
if [ "${#}" = "2" ]; then
if [ "${2}" = "1" ]; then
_debug="1"
fi
fi
if [ "${_debug}" = "1" ]; then
printf "${_red}%s \$ ${_green}sudo ${_cmd}${_reset}\n" "${_user}"
fi
sudo "LANG=C LC_ALL=C ${_cmd}"
}
2016-12-22 19:17:35 +00:00
################################################################################
#
# 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
}
2016-12-25 14:16:11 +00:00
################################################################################
#
# G E T E N A B L E D
#
################################################################################
###
### Default enabled Docker Versions
###
get_enabled_version_httpd() {
_default="$( grep -E '^HTTPD_SERVER=' "${DEVILBOX_PATH}/.env" | sed 's/^.*=//g' )"
echo "${_default}"
}
get_enabled_version_mysql() {
_default="$( grep -E '^MYSQL_SERVER=' "${DEVILBOX_PATH}/.env" | sed 's/^.*=//g' )"
echo "${_default}"
}
get_enabled_version_postgres() {
_default="$( grep -E '^POSTGRES_SERVER=' "${DEVILBOX_PATH}/.env" | sed 's/^.*=//g' )"
echo "${_default}"
}
get_enabled_version_php() {
_default="$( grep -E '^PHP_SERVER=' "${DEVILBOX_PATH}/.env" | sed 's/^.*=//g' )"
echo "${_default}"
}
2016-12-22 19:17:35 +00:00
################################################################################
#
# 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
2016-12-25 14:30:33 +00:00
run "sed -i'' \"s/HTTPD_SERVER=${_httpd}/#HTTPD_SERVER=${_httpd}/g\" \"${DEVILBOX_PATH}/.env\""
run "sed -i'' \"s/MYSQL_SERVER=${_mysql}/#MYSQL_SERVER=${_mysql}/g\" \"${DEVILBOX_PATH}/.env\""
run "sed -i'' \"s/POSTGRES_SERVER=${_postgres}/#POSTGRES_SERVER=${_postgres}/g\" \"${DEVILBOX_PATH}/.env\""
run "sed -i'' \"s/PHP_SERVER=${_php}/#PHP_SERVER=${_php}/g\" \"${DEVILBOX_PATH}/.env\""
2016-12-22 19:17:35 +00:00
}
###
### Eenable desired docker version
###
enable_docker_httpd() {
_docker_version="${1}"
2016-12-25 14:30:33 +00:00
run "sed -i'' \"s/#HTTPD_SERVER=${_docker_version}/HTTPD_SERVER=${_docker_version}/g\" \"${DEVILBOX_PATH}/.env\""
2016-12-22 19:17:35 +00:00
}
enable_docker_mysql() {
_docker_version="${1}"
2016-12-25 14:30:33 +00:00
run "sed -i'' \"s/#MYSQL_SERVER=${_docker_version}/MYSQL_SERVER=${_docker_version}/g\" \"${DEVILBOX_PATH}/.env\""
2016-12-22 19:17:35 +00:00
}
enable_docker_postgres() {
_docker_version="${1}"
2016-12-25 14:30:33 +00:00
run "sed -i'' \"s/#POSTGRES_SERVER=${_docker_version}/POSTGRES_SERVER=${_docker_version}/g\" \"${DEVILBOX_PATH}/.env\""
2016-12-22 19:17:35 +00:00
}
enable_docker_php() {
_docker_version="${1}"
2016-12-25 14:30:33 +00:00
run "sed -i'' \"s/#PHP_SERVER=${_docker_version}/PHP_SERVER=${_docker_version}/g\" \"${DEVILBOX_PATH}/.env\""
2016-12-22 19:17:35 +00:00
}
set_host_port_httpd() {
_port="${1}"
2016-12-25 14:30:33 +00:00
run "sed -i'' \"s/^HOST_PORT_HTTPD=.*/HOST_PORT_HTTPD=${_port}/\" \"${DEVILBOX_PATH}/.env\""
2016-12-22 19:17:35 +00:00
}
set_host_port_mysql() {
_port="${1}"
2016-12-25 14:30:33 +00:00
run "sed -i'' \"s/^HOST_PORT_MYSQL=.*/HOST_PORT_MYSQL=${_port}/\" \"${DEVILBOX_PATH}/.env\""
2016-12-22 19:17:35 +00:00
}
set_host_port_pgsql() {
_port="${1}"
2016-12-25 14:30:33 +00:00
run "sed -i'' \"s/^HOST_PORT_POSTGRES=.*/HOST_PORT_POSTGRES=${_port}/\" \"${DEVILBOX_PATH}/.env\""
2016-12-22 19:17:35 +00:00
}
################################################################################
#
# S T A R T / S T O P T H E D E V I L B O X
#
################################################################################
devilbox_start() {
2016-12-25 14:35:30 +00:00
_new_httpd="$1"
_new_mysql="$2"
_new_pysql="$3"
_new_php="$4"
_new_head="$5"
2016-12-22 19:17:35 +00:00
2016-12-25 14:46:02 +00:00
# Print Headline
_blue="\033[0;34m"
_reset="\033[0m"
printf "${_blue}%s${_reset}\n" "################################################################################"
printf "${_blue}%s${_reset}\n" "#"
printf "${_blue}%s %s${_reset}\n" "#" "${_new_head}"
printf "${_blue}%s${_reset}\n" "#"
printf "${_blue}%s${_reset}\n" "################################################################################"
2016-12-22 19:17:35 +00:00
# Adjust .env
comment_all_dockers
2016-12-25 14:35:30 +00:00
enable_docker_httpd "${_new_httpd}"
enable_docker_mysql "${_new_mysql}"
enable_docker_postgres "${_new_pysql}"
enable_docker_php "${_new_php}"
2016-12-22 19:17:35 +00:00
# Run
docker-compose up -d
# Wait for it to come up
sleep 20
}
2016-12-25 15:30:18 +00:00
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
sudo rm -rf "$( get_default_mount_httpd )"
sudo rm -rf "$( get_default_mount_mysql )"
sudo rm -rf "$( get_default_mount_postgres )"
}
2016-12-22 19:17:35 +00:00
2016-12-25 15:30:18 +00:00
################################################################################
#
# T E S T T H E D E V I L B O X
#
################################################################################
2016-12-22 19:17:35 +00:00
debilbox_test() {
2016-12-25 14:16:11 +00:00
echo ".env settings"
echo "------------------------------------------------------------"
echo "HTTPD: $(get_enabled_version_httpd)"
echo "PHP: $(get_enabled_version_php)"
echo "MySQL: $(get_enabled_version_mysql)"
echo "PgSQL: $(get_enabled_version_postgres)"
echo
echo "http://localhost settings"
echo "------------------------------------------------------------"
curl -q localhost 2>/dev/null | grep -E '<h3>.*</h3>' | sed 's/.*<h3>//g' | sed 's/<\/h3>//g'
echo
2016-12-22 19:17:35 +00:00
count="$( curl -q localhost 2>/dev/null | grep -c OK )"
echo "${count}"
if [ "${count}" = "0" ]; then
curl localhost
2016-12-25 14:16:11 +00:00
return 1
2016-12-22 19:17:35 +00:00
fi
}