#!/bin/bash # Script used in CI environment (Continuous Integration - eg Jenkins) to run Maestro end to end tests # (see .maestro for test flows ROOTDIR=$(realpath $(dirname $BASH_SOURCE)) CI_E2ERUN_DIR="$ROOTDIR/build/ci-e2e" if [ ! -e $CI_E2ERUN_DIR ]; then mkdir -p $CI_E2ERUN_DIR fi # Root directory for TestServerController to use (each server will get its own sub directory) # TestServerController will create the directory automatically. TESTSERVERCONTROLLER_BASEDIR="$CI_E2ERUN_DIR/workspace" if [ ! -e $TESTSERVERCONTROLLER_BASEDIR ]; then mkdir -p $TESTSERVERCONTROLLER_BASEDIR fi TESTSERVERCONTROLLER_BASENAME="testservercontroller-0.0.15" TESTSERVERCONTROLLER_DOWNLOAD_URL="https://devserver3.ustadmobile.com/jenkins/job/TestServerController/13/artifact/build/distributions/testservercontroller-0.0.15.zip" echo "ROOTDIR=$ROOTDIR BASH_SOURCE=$BASH_SOURCE" if [ ! -e $CI_E2ERUN_DIR/$TESTSERVERCONTROLLER_BASENAME ]; then wget --quiet --output-document=$CI_E2ERUN_DIR/$TESTSERVERCONTROLLER_BASENAME.zip \ $TESTSERVERCONTROLLER_DOWNLOAD_URL cp /home/mike/IdeaProjects/TestServerController/build/distributions/$TESTSERVERCONTROLLER_BASENAME.zip \ $CI_E2ERUN_DIR/$TESTSERVERCONTROLLER_BASENAME.zip unzip -q -d $CI_E2ERUN_DIR $CI_E2ERUN_DIR/$TESTSERVERCONTROLLER_BASENAME.zip fi TESTCONTROLLER_BIN=$CI_E2ERUN_DIR/$TESTSERVERCONTROLLER_BASENAME/bin/testservercontroller if [ "$TESTCONTROLLER_PORT" == "" ]; then TESTCONTROLLER_PORT=8094 fi if [ "$TESTCONTROLLER_URL" == "" ]; then if [ "$URL_SUBSTITUTION" != "" ]; then TESTCONTROLLER_URL=$(echo $URL_SUBSTITUTION | sed s/_PORT_/$TESTCONTROLLER_PORT/g) else echo "ci-run-maestro: no TESTCONTROLLER_URL set: using hostname - this might not be correct" TESTCONTROLLER_URL="http://$(hostname -I | awk '{print $1}'):$TESTCONTROLLER_PORT/" fi fi echo "ci-run-maestro: TESTCONTROLLER_URL is $TESTCONTROLLER_URL" if [ "$TEST_LEARNINGSPACE_PORTRANGE" == "" ]; then TEST_LEARNINGSPACE_PORTRANGE="8000-9000" fi function create_test_artifact_zip() { echo "ci-run-maestro: Archiving test artifacts..." local OUTPUT_ZIP="$CI_E2ERUN_DIR/artifacts/EndToEnd_Test_Artifacts_$(date +%Y%m%d_%H%M%S).zip" if [ ! -e "$(dirname $OUTPUT_ZIP)" ]; then mkdir -p $(dirname $OUTPUT_ZIP) fi if [ -d "$TESTSERVERCONTROLLER_BASEDIR" ]; then cd "$TESTSERVERCONTROLLER_BASEDIR" zip -q -r "$OUTPUT_ZIP" . \ -i "logs/*" \ -i "*/data/*" \ -i "*/logs/*" \ -i "*/logcat.txt" \ -i "maestro/*" cd "$ROOTDIR" echo "ci-run-maestro: Artifacts zipped to $OUTPUT_ZIP" else echo "ci-run-maestro: Workspace directory not found, skipping zip." fi } function check_databases() { while read -r db; do if [ "$(sqlite3 "$db" "PRAGMA integrity_check;")" != "ok" ]; then echo "ci-run-e2e-tests: FAIL - database does not pass integrity check: $db" exit 1 fi done < <(find "$TESTSERVERCONTROLLER_BASEDIR" -path "*/e2e-client-artifacts/*.db") } function cleanup() { if [ "$TESTCONTROLLER_PID" != "" ]; then echo "ci-run-e2e-tests: Stopping TestServerController : pid=$TESTCONTROLLER_PID" kill -SIGINT $TESTCONTROLLER_PID pkill -SIGINT -P $TESTCONTROLLER_PID sleep 10 kill $TESTCONTROLLER_PID pkill -P $TESTCONTROLLER_PID fi create_test_artifact_zip } trap cleanup EXIT DIR_ADMIN_AUTH_PASS=$(tr -dc A-Za-z0-9