c17743d869
the infra version is bumped because the nginx's dhparams path has changed and the sftp server key path has changed.
85 lines
3.3 KiB
Bash
Executable File
85 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -eu
|
|
|
|
readonly source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
readonly DATA_DIR="${HOME}/.cloudron_test"
|
|
readonly DEFAULT_TESTS="./src/test/*-test.js ./src/routes/test/*-test.js"
|
|
|
|
! "${source_dir}/src/test/checkInstall" && exit 1
|
|
|
|
# cleanup old data dirs some of those docker container data requires sudo to be removed
|
|
echo "=> Provide root password to purge any leftover data in ${DATA_DIR} and load apparmor profile:"
|
|
sudo rm -rf ${DATA_DIR}
|
|
|
|
# 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
|
|
|
|
# create dir structure
|
|
mkdir -p ${DATA_DIR}
|
|
cd ${DATA_DIR}
|
|
mkdir -p appsdata
|
|
mkdir -p boxdata/mail boxdata/certs boxdata/mail/dkim/localhost boxdata/mail/dkim/foobar.com boxdata/firewall
|
|
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
|
|
sudo mkdir -p /mnt/cloudron-test-music /media/cloudron-test-music # volume test
|
|
|
|
# translations
|
|
mkdir -p box/dashboard/dist/translation
|
|
cp -r ${source_dir}/../dashboard/dist/translation/* box/dashboard/dist/translation
|
|
|
|
# put cert
|
|
echo "=> Generating a localhost selfsigned cert"
|
|
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"))
|
|
|
|
# clear out any containers if FAST is unset
|
|
if [[ -z ${FAST+x} ]]; then
|
|
echo "=> Delete all docker containers first"
|
|
docker ps -qa | xargs --no-run-if-empty docker rm -f
|
|
echo "==> To skip this run with: FAST=1 ./runTests"
|
|
else
|
|
echo "==> WARNING!! Skipping docker container cleanup, the database might not be pristine!"
|
|
fi
|
|
|
|
# create docker network (while the infra code does this, most tests skip infra setup)
|
|
docker network create --subnet=172.18.0.0/16 --ip-range=172.18.0.0/20 cloudron || true
|
|
|
|
# create the same mysql server version to test with
|
|
OUT=`docker inspect mysql-server` || true
|
|
if [[ "${OUT}" = "[]" ]]; then
|
|
echo "=> Starting mysql-server..."
|
|
docker run --name mysql-server -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
|
|
else
|
|
echo "=> mysql-server already running. If you want to start fresh, run 'docker rm --force mysql-server'"
|
|
fi
|
|
|
|
export MYSQL_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-server`
|
|
|
|
echo "=> Waiting for mysql server to be ready..."
|
|
while ! mysqladmin ping -h"${MYSQL_IP}" --silent; do
|
|
sleep 1
|
|
done
|
|
|
|
echo "=> Create iptables blocklist"
|
|
sudo ipset create cloudron_blocklist hash:net || true
|
|
|
|
echo "=> Starting cloudron-syslog"
|
|
cloudron-syslog --logdir "${DATA_DIR}/platformdata/logs/" &
|
|
|
|
echo "=> Ensure database"
|
|
mysql -h"${MYSQL_IP}" -uroot -ppassword -e 'CREATE DATABASE IF NOT EXISTS box'
|
|
|
|
echo "=> Run database migrations"
|
|
cd "${source_dir}"
|
|
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
|
|
|
|
BOX_ENV=test ./node_modules/mocha/bin/_mocha --bail --no-timeouts --exit -R spec ${TESTS}
|