c0b0029935
We removed httpPort with the assumption that docker allocated IPs and kept them as long as the container is around. This turned out to be not true because the IP changes on even container restart. So we now allocate IPs statically. The iprange makes sure we don't overlap with addons and other CI app or JupyterHub apps. https://github.com/moby/moby/issues/6743 https://github.com/moby/moby/pull/19001
72 lines
2.8 KiB
Bash
Executable File
72 lines
2.8 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/profileicons boxdata/appicons boxdata/mail boxdata/certs boxdata/mail/dkim/localhost boxdata/mail/dkim/foobar.com
|
|
mkdir -p platformdata/addons/mail platformdata/nginx/cert platformdata/nginx/applications platformdata/collectd/collectd.conf.d platformdata/addons platformdata/logrotate.d platformdata/backup platformdata/logs/tasks
|
|
|
|
# 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
|
|
echo "=> Delete all docker containers first"
|
|
docker ps -qa | xargs --no-run-if-empty docker rm -f
|
|
|
|
# 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 "=> 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}
|