diff --git a/bin/selfcheck.sh b/bin/selfcheck.sh index 1d46e673..a3f2b457 100755 --- a/bin/selfcheck.sh +++ b/bin/selfcheck.sh @@ -1,16 +1,21 @@ #!/bin/bash set -e set -x APP_DOMAIN=$(grep APP_DOMAIN .env | tail -n1 | sed "s/APP_DOMAIN=//") -ADMIN_PASSWORD="simple123" +if [ -z "$ADMIN_PASSWORD" ]; then + ADMIN_PASSWORD="simple123" +fi +if [ -z "$ADMIN_USER" ]; then + ADMIN_USER="admin@$APP_DOMAIN" +fi -docker compose exec postfix testsaslauthd -u "admin@$APP_DOMAIN" -p "$ADMIN_PASSWORD" -docker compose exec imap testsaslauthd -u "admin@$APP_DOMAIN" -p "$ADMIN_PASSWORD" +docker compose exec postfix testsaslauthd -u "$ADMIN_USER" -p "$ADMIN_PASSWORD" +docker compose exec imap testsaslauthd -u "$ADMIN_USER" -p "$ADMIN_PASSWORD" -utils/mailtransporttest.py --sender-username "admin@$APP_DOMAIN" --sender-password "$ADMIN_PASSWORD" --sender-host "$APP_DOMAIN" --recipient-username "admin@$APP_DOMAIN" --recipient-password "$ADMIN_PASSWORD" --recipient-host "$APP_DOMAIN" +utils/mailtransporttest.py --sender-username "$ADMIN_USER" --sender-password "$ADMIN_PASSWORD" --sender-host "$APP_DOMAIN" --recipient-username "$ADMIN_USER" --recipient-password "$ADMIN_PASSWORD" --recipient-host "$APP_DOMAIN" -utils/kolabendpointtester.py --verbose --host "$APP_DOMAIN" --dav "https://$APP_DOMAIN/dav/" --imap "$APP_DOMAIN" --activesync "$APP_DOMAIN" --user "admin@$APP_DOMAIN" --password "$ADMIN_PASSWORD" +utils/kolabendpointtester.py --verbose --host "$APP_DOMAIN" --dav "https://$APP_DOMAIN/dav/" --imap "$APP_DOMAIN" --activesync "$APP_DOMAIN" --user "$ADMIN_USER" --password "$ADMIN_PASSWORD" echo "All tests have passed!" diff --git a/ci/Makefile b/ci/Makefile index 4a018ca9..fe2d61bc 100644 --- a/ci/Makefile +++ b/ci/Makefile @@ -1,42 +1,42 @@ PWD=$(shell pwd) configure: cd .. ; \ bin/configure.sh config.demo ; setup: docker kill kolab-tests || : ; \ docker rm kolab-tests || : ; \ cd .. && bin/quickstart.sh --nodev build: - cd .. && docker compose -f docker-compose.yml f docker-compose.override.yml -f docker-compose.build.yml build && cd ci + cd .. && docker compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.build.yml build && cd ci lint: docker kill kolab-tests || : ; \ docker rm kolab-tests || : ; \ docker run -v ${PWD}/../:/src/kolab.orig --name kolab-tests -t kolab-tests /lint.sh test: docker kill kolab-tests || : ; \ docker rm kolab-tests || : ; \ docker run --network=kolab_kolab -v ${PWD}/../src:/src/kolabsrc.orig --name kolab-tests -t kolab-tests /init.sh testsuite quicktest: docker kill kolab-tests || : ; \ docker rm kolab-tests || : ; \ docker run --network=kolab_kolab -v ${PWD}/../src:/src/kolabsrc.orig --name kolab-tests -t kolab-tests /init.sh quicktest browser: docker kill kolab-tests || : ; \ docker rm kolab-tests || : ; \ docker run --network=kolab_kolab -v ${PWD}/../src:/src/kolabsrc.orig --name kolab-tests -t kolab-tests /init.sh suite-Browser shell: docker kill kolab-tests || : ; \ docker rm kolab-tests || : ; \ docker run --network=kolab_kolab -v ${PWD}/../src:/src/kolabsrc.orig --name kolab-tests -ti kolab-tests /init.sh shell all: configure build setup lint test diff --git a/ci/runchecks.sh b/ci/runchecks.sh index 0019d015..a8d32392 100755 --- a/ci/runchecks.sh +++ b/ci/runchecks.sh @@ -1,14 +1,22 @@ #!/bin/bash set -x set -e +# Setup +git stash git pull docker compose pull --ignore-buildable -env HOST=kolab.local ADMIN_PASSWORD=simple123 bin/configure.sh config.prod -env ADMIN_PASSWORD=simple123 bin/deploy.sh +env HOST=kolab.local ADMIN_PASSWORD=simple123 bin/configure.sh config.demo +bin/quickstart.sh --nodev pip install virtualenv virtualenv venv source venv/bin/activate pip install dnspython -env ADMIN_PASSWORD=simple123 bin/selfcheck.sh + +# Ensure the environment is functional +env ADMIN_USER=john@kolab.org ADMIN_PASSWORD=simple123 bin/selfcheck.sh + +# Run the tests +docker rm kolab-tests >/dev/null 2>/dev/null || : +docker run --rm --network=kolab_kolab -v ${PWD}/src:/src/kolabsrc.orig --name kolab-tests -t kolab-tests /init.sh testsuite diff --git a/docker/tests/Dockerfile b/docker/tests/Dockerfile index 31304fc6..945975c0 100644 --- a/docker/tests/Dockerfile +++ b/docker/tests/Dockerfile @@ -1,16 +1,8 @@ FROM kolab-webapp:latest -MAINTAINER Jeroen van Meeuwen - USER root RUN dnf -y install findutils php-phpunit-PHPUnit chromium php-xdebug - - - - - COPY init.sh /init.sh COPY lint.sh /lint.sh -CMD [ "/init.sh" ] diff --git a/docker/tests/init.sh b/docker/tests/init.sh index f28301fd..70747242 100755 --- a/docker/tests/init.sh +++ b/docker/tests/init.sh @@ -1,145 +1,157 @@ #!/bin/bash -#set -e +set -e +set -x + rsync -av \ --exclude=vendor \ --exclude=composer.lock \ --exclude=node_modules \ --exclude=package-lock.json \ --exclude=public \ --exclude=storage \ --exclude=resources/build \ --exclude=bootstrap \ --exclude=.gitignore \ - /src/kolabsrc.orig/ /src/kolabsrc/ | tee /tmp/rsync.output -cd /src/kolabsrc - -rm -rf storage/framework -mkdir -p storage/framework/{sessions,views,cache} - -php -dmemory_limit=-1 $(command -v composer) update -/usr/local/bin/npm install -find bootstrap/cache/ -type f ! -name ".gitignore" -delete -./artisan clear-compiled -./artisan cache:clear -./artisan horizon:install - -if rpm -qv chromium 2>/dev/null; then - chver=$(rpmquery --queryformat="%{VERSION}" chromium | awk -F'.' '{print $1}') - ./artisan dusk:chrome-driver ${chver} -fi + /src/kolabsrc.orig/ /opt/app-root/src/ | tee /tmp/rsync.output -if [ ! -f 'resources/countries.php' ]; then - ./artisan data:countries -fi +cd /opt/app-root/src/ + +if [ "$1" == "--refresh" ]; then + rm -rf storage/framework + mkdir -p storage/framework/{sessions,views,cache} + + find bootstrap/cache/ -type f ! -name ".gitignore" -delete + ./artisan clear-compiled + ./artisan cache:clear + + # FIXME seems to be required for db seed to function + composer update -npm run dev + if rpm -qv chromium 2>/dev/null; then + chver=$(rpmquery --queryformat="%{VERSION}" chromium | awk -F'.' '{print $1}') + ./artisan dusk:chrome-driver ${chver} + fi -rm -rf database/database.sqlite -./artisan db:ping --wait -php -dmemory_limit=512M ./artisan migrate --force -if test "$( env APP_DEBUG=false ./artisan -n users | wc -l )" -lt "1"; then - php -dmemory_limit=512M ./artisan db:seed + # Only run npm if something relevant was updated + if grep -e "package.json" -e "resources" /tmp/rsync.output; then + npm run dev + fi + + ./artisan db:ping --wait + + + # Unconditionally get the database into shape + php -dmemory_limit=512M ./artisan migrate:refresh --seed + + ./artisan data:import || : + ./artisan queue:work --stop-when-empty + + shift fi -./artisan data:import || : -./artisan queue:work --stop-when-empty +EXCLUDE_GROUPS="skipci,ldap,coinbase,mollie,stripe,meet,dns" if [ "$1" == "suite-Functional" ]; then php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci \ + --exclude-group skipci,ldap \ --verbose \ --testsuite Unit php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci \ + --exclude-group skipci,ldap \ --verbose \ --testsuite Functional -fi -if [ "$1" == "suite-Feature" ]; then +elif [ "$1" == "suite-Feature" ]; then php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci,coinbase,mollie,stripe,meet,dns \ + --exclude-group "$EXCLUDE_GROUPS" \ --verbose \ --testsuite Feature -fi -if [ "$1" == "suite-Browser" ]; then +elif [ "$1" == "suite-Browser" ]; then # Can't do browser tests over https echo "APP_URL=http://kolab.local" >> .env echo "APP_PUBLIC_URL=http://kolab.local" >> .env echo "ASSET_URL=http://kolab.local" >> .env echo "MEET_SERVER_URLS=http://kolab.local/meetmedia/api/" >> .env echo "APP_HEADER_CSP=" >> .env echo "APP_HEADER_XFO=" >> .env ./artisan octane:start --port=80 >/dev/null 2>&1 & echo "127.0.0.1 kolab.local admin.kolab.local reseller.kolab.local" >> /etc/hosts php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci,meet,mollie \ + --exclude-group skipci,ldap,meet,mollie \ --verbose \ --testsuite Browser -fi -if [ "$1" == "testsuite" ]; then +elif [ "$1" == "testsuite" ]; then php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci \ + --exclude-group "$EXCLUDE_GROUPS" \ --verbose \ --testsuite Unit php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci \ + --exclude-group "$EXCLUDE_GROUPS" \ --verbose \ --testsuite Functional php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci,coinbase,mollie,stripe,meet,dns \ + --exclude-group "$EXCLUDE_GROUPS" \ --verbose \ --testsuite Feature -fi -if [ "$1" == "quicktest" ]; then +elif [ "$1" == "quicktest" ]; then php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci \ + --exclude-group "$EXCLUDE_GROUPS" \ --verbose \ --stop-on-defect \ --stop-on-error \ --stop-on-failure \ --testsuite Unit php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci \ + --exclude-group "$EXCLUDE_GROUPS" \ --verbose \ --stop-on-defect \ --stop-on-error \ --stop-on-failure \ --testsuite Functional php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ - --exclude-group skipci,coinbase,mollie,stripe,meet,dns \ + --exclude-group "$EXCLUDE_GROUPS" \ --verbose \ --stop-on-defect \ --stop-on-error \ --stop-on-failure \ --testsuite Feature -fi -if [ "$1" == "shell" ]; then +elif [ "$1" == "shell" ]; then exec /bin/bash +else + php \ + -dmemory_limit=-1 \ + vendor/bin/phpunit \ + --exclude-group "$EXCLUDE_GROUPS" \ + --verbose \ + --stop-on-defect \ + --stop-on-error \ + --stop-on-failure \ + "$1" fi