2015-07-20 00:09:47 -07:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
set -eu
|
|
|
|
|
|
2020-11-21 22:16:14 -08:00
|
|
|
readonly source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
2019-04-18 13:11:56 +02:00
|
|
|
readonly DATA_DIR="${HOME}/.cloudron_test"
|
2019-04-18 16:41:10 +02:00
|
|
|
readonly DEFAULT_TESTS="./src/test/*-test.js ./src/routes/test/*-test.js"
|
2015-07-20 00:09:47 -07:00
|
|
|
|
2020-11-21 22:16:14 -08:00
|
|
|
! "${source_dir}/src/test/checkInstall" && exit 1
|
2019-04-18 13:11:56 +02:00
|
|
|
|
|
|
|
|
# cleanup old data dirs some of those docker container data requires sudo to be removed
|
2019-04-24 14:39:22 -07:00
|
|
|
echo "=> Provide root password to purge any leftover data in ${DATA_DIR} and load apparmor profile:"
|
2019-04-18 13:11:56 +02:00
|
|
|
sudo rm -rf ${DATA_DIR}
|
2015-07-20 00:09:47 -07:00
|
|
|
|
2019-04-25 09:30:23 +02:00
|
|
|
# archlinux does not have apparmor
|
|
|
|
|
if hash apparmor_parser 2>/dev/null; then
|
|
|
|
|
echo "=> Loading app armor profile"
|
|
|
|
|
sudo apparmor_parser --replace --write-cache ./setup/start/docker-cloudron-app.apparmor
|
|
|
|
|
fi
|
2019-04-24 14:39:22 -07:00
|
|
|
|
2015-07-20 00:09:47 -07:00
|
|
|
# create dir structure
|
2019-04-18 13:11:56 +02:00
|
|
|
mkdir -p ${DATA_DIR}
|
|
|
|
|
cd ${DATA_DIR}
|
2017-09-09 22:37:39 -07:00
|
|
|
mkdir -p appsdata
|
2021-05-04 21:40:11 -07:00
|
|
|
mkdir -p boxdata/mail boxdata/certs boxdata/mail/dkim/localhost boxdata/mail/dkim/foobar.com
|
2021-06-03 12:20:44 -07:00
|
|
|
mkdir -p platformdata/addons/mail/banner platformdata/nginx/cert platformdata/nginx/applications platformdata/collectd/collectd.conf.d platformdata/addons platformdata/logrotate.d platformdata/backup platformdata/logs/tasks platformdata/sftp/ssh platformdata/firewall platformdata/update
|
2021-01-14 21:15:45 +01:00
|
|
|
sudo mkdir -p /mnt/cloudron-test-music /media/cloudron-test-music # volume test
|
2015-07-20 00:09:47 -07:00
|
|
|
|
2020-11-21 22:16:14 -08:00
|
|
|
# translations
|
|
|
|
|
mkdir -p box/dashboard/dist/translation
|
|
|
|
|
cp -r ${source_dir}/../dashboard/dist/translation/* box/dashboard/dist/translation
|
|
|
|
|
|
2016-05-23 16:40:18 -07:00
|
|
|
# put cert
|
2019-04-18 16:41:10 +02:00
|
|
|
echo "=> Generating a localhost selfsigned cert"
|
2018-02-09 13:44:29 -08:00
|
|
|
openssl req -x509 -newkey rsa:2048 -keyout platformdata/nginx/cert/host.key -out platformdata/nginx/cert/host.cert -days 3650 -subj '/CN=localhost' -nodes -config <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:*.localhost"))
|
2016-05-23 16:40:18 -07:00
|
|
|
|
2021-04-07 16:46:12 +02:00
|
|
|
# clear out any containers if FAST is unset
|
|
|
|
|
if [[ -z ${FAST+x} ]]; then
|
|
|
|
|
echo "=> Delete all docker containers first"
|
2021-07-07 18:34:00 +02:00
|
|
|
docker ps -qa --filter \'label=isCloudronManaged\' | xargs --no-run-if-empty docker rm -f
|
|
|
|
|
docker rm -f mysql-server
|
2021-04-07 16:46:12 +02:00
|
|
|
echo "==> To skip this run with: FAST=1 ./runTests"
|
|
|
|
|
else
|
|
|
|
|
echo "==> WARNING!! Skipping docker container cleanup, the database might not be pristine!"
|
|
|
|
|
fi
|
2019-04-16 17:22:03 +02:00
|
|
|
|
2016-06-17 09:12:13 -05:00
|
|
|
# create docker network (while the infra code does this, most tests skip infra setup)
|
2020-11-20 14:13:16 -08:00
|
|
|
docker network create --subnet=172.18.0.0/16 --ip-range=172.18.0.0/20 cloudron || true
|
2019-01-23 16:18:52 +01:00
|
|
|
|
|
|
|
|
# create the same mysql server version to test with
|
|
|
|
|
OUT=`docker inspect mysql-server` || true
|
|
|
|
|
if [[ "${OUT}" = "[]" ]]; then
|
2019-04-18 16:41:10 +02:00
|
|
|
echo "=> Starting mysql-server..."
|
2019-01-23 16:18:52 +01:00
|
|
|
docker run --name mysql-server -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
|
|
|
|
|
else
|
2019-04-18 16:41:10 +02:00
|
|
|
echo "=> mysql-server already running. If you want to start fresh, run 'docker rm --force mysql-server'"
|
2019-01-23 16:18:52 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
export MYSQL_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-server`
|
|
|
|
|
|
2019-04-18 16:41:10 +02:00
|
|
|
echo "=> Waiting for mysql server to be ready..."
|
2019-01-23 16:18:52 +01:00
|
|
|
while ! mysqladmin ping -h"${MYSQL_IP}" --silent; do
|
|
|
|
|
sleep 1
|
|
|
|
|
done
|
|
|
|
|
|
2021-04-07 17:30:19 +02:00
|
|
|
echo "=> Create iptables blocklist"
|
|
|
|
|
sudo ipset create cloudron_blocklist hash:net || true
|
|
|
|
|
|
2019-04-18 16:41:10 +02:00
|
|
|
echo "=> Starting cloudron-syslog"
|
2019-04-18 13:11:56 +02:00
|
|
|
cloudron-syslog --logdir "${DATA_DIR}/platformdata/logs/" &
|
|
|
|
|
|
2019-04-18 16:41:10 +02:00
|
|
|
echo "=> Ensure database"
|
2019-01-23 16:18:52 +01:00
|
|
|
mysql -h"${MYSQL_IP}" -uroot -ppassword -e 'CREATE DATABASE IF NOT EXISTS box'
|
|
|
|
|
|
2019-04-18 16:41:10 +02:00
|
|
|
echo "=> Run database migrations"
|
2020-11-21 22:16:14 -08:00
|
|
|
cd "${source_dir}"
|
2019-04-18 16:41:10 +02:00
|
|
|
BOX_ENV=test DATABASE_URL=mysql://root:password@${MYSQL_IP}/box node_modules/.bin/db-migrate up
|
|
|
|
|
|
|
|
|
|
echo "=> Run tests with mocha"
|
|
|
|
|
TESTS=${DEFAULT_TESTS}
|
|
|
|
|
if [[ $# -gt 0 ]]; then
|
|
|
|
|
TESTS="$*"
|
|
|
|
|
fi
|
|
|
|
|
|
2019-05-07 15:31:02 +02:00
|
|
|
BOX_ENV=test ./node_modules/mocha/bin/_mocha --bail --no-timeouts --exit -R spec ${TESTS}
|