X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/8831e4dcad5d21cc86257b70123e542de4afe1b1..f3569ce613f0e19a63149c08be68e0bcbb7eaf92:/tools/run-integration-tests.sh diff --git a/tools/run-integration-tests.sh b/tools/run-integration-tests.sh index 250bc48c..09cb2518 100755 --- a/tools/run-integration-tests.sh +++ b/tools/run-integration-tests.sh @@ -5,10 +5,13 @@ set -e -o pipefail -cleanup_arvboot() { +cleanup() { set -x - kill ${arvboot_PID} ${consume_stdout_PID} - wait ${arvboot_PID} ${consume_stdout_PID} || true + kill ${arvboot_PID} ${consume_stdout_PID} ${wb2_PID} ${consume_wb2_stdout_PID} + wait ${arvboot_PID} ${consume_stdout_PID} ${wb2_PID} ${consume_wb2_stdout_PID} || true + if [ "${CLEANUP_ARVADOS_DIR}" -eq "1" ]; then + rm -rf ${ARVADOS_DIR} + fi echo >&2 "done" } @@ -20,21 +23,70 @@ random_free_port() { echo $port } +usage() { + echo "Usage: ${0} [options]" + echo "Options:" + echo " -i Run Cypress in interactive mode." + echo " -a PATH Arvados dir. If PATH doesn't exist, a repo clone is downloaded there." + echo " -w PATH Workbench2 dir. Default: Current working directory" + exit 0 +} + # Allow self-signed certs on 'wait-on' export NODE_TLS_REJECT_UNAUTHORIZED=0 -WORKDIR=`mktemp -d` -WORKDIR=/tmp/arvboot # For script testing purposes... -ARVADOS_LOG=${WORKDIR}/arvados.log -ARVADOS_CONF=`pwd`/tools/arvados_config.yml +CLEANUP_ARVADOS_DIR=0 +CYPRESS_MODE="run" +ARVADOS_DIR=`mktemp -d` +WB2_DIR=`pwd` + +while getopts "ia:w:" o; do + case "${o}" in + i) + # Interactive mode + CYPRESS_MODE="open" + ;; + a) + ARVADOS_DIR=${OPTARG} + ;; + w) + WB2_DIR=${OPTARG} + ;; + *) + echo "Invalid Option: -$OPTARG" 1>&2 + usage + ;; + esac +done +shift $((OPTIND-1)) + +ARVADOS_LOG=${ARVADOS_DIR}/arvados.log +ARVADOS_CONF=${WB2_DIR}/tools/arvados_config.yml + +if [ ! -f "${WB2_DIR}/src/index.tsx" ]; then + echo "ERROR: '${WB2_DIR}' isn't workbench2's directory" + usage +fi + +if [ ! -f ${ARVADOS_CONF} ]; then + echo "ERROR: Arvados config file ${ARVADOS_CONF} not found" + exit 1 +fi + +if [ -f "${WB2_DIR}/public/config.json" ]; then + echo "ERROR: Please move public/config.json file out of the way" + exit 1 +fi -if [ ! -e "${WORKDIR}/lib" ]; then +if [ ! -d "${ARVADOS_DIR}/.git" ]; then + mkdir -p ${ARVADOS_DIR} || exit 1 + CLEANUP_ARVADOS_DIR=1 echo "Downloading arvados..." - git clone https://git.arvados.org/arvados.git ${WORKDIR} || exit 1 + git clone https://git.arvados.org/arvados.git ${ARVADOS_DIR} || exit 1 fi echo "Building & installing arvados-server..." -cd ${WORKDIR} +cd ${ARVADOS_DIR} go mod download || exit 1 cd cmd/arvados-server go install @@ -43,46 +95,37 @@ cd - echo "Installing dev dependencies..." ~/go/bin/arvados-server install -type test || exit 1 -echo "Running arvados in test mode..." -# ARVADOS_PORT=`random_free_port` -# go run ./cmd/arvados-server boot \ -# -config ${ARVADOS_CONF} \ -# -type test \ -# -own-temporary-database \ -# -controller-address :${ARVADOS_PORT} \ -# -listen-host localhost > ${ARVADOS_LOG} 2>&1 & +echo "Launching arvados in test mode..." coproc arvboot (~/go/bin/arvados-server boot \ - -type test \ - -config ${ARVADOS_CONF} \ - -own-temporary-database \ - -timeout 20m) -trap cleanup_arvboot ERR EXIT + -type test \ + -config ${ARVADOS_CONF} \ + -own-temporary-database \ + -timeout 20m 2> ${ARVADOS_LOG}) +trap cleanup ERR EXIT -read controllerURL <&"${arvboot[0]}" +read controllerURL <&"${arvboot[0]}" || exit 1 +echo "Arvados up and running at ${controllerURL}" +IFS='/' ; read -ra controllerHostPort <<< "${controllerURL}" ; unset IFS +controllerHostPort=${controllerHostPort[2]} # Copy coproc's stdout to stderr, to ensure `arvados-server boot` # doesn't get blocked trying to write stdout. -exec 7<&"${arvbboot[0]}"; coproc consume_stdout (cat <&7 >&2) +exec 7<&"${arvboot[0]}"; coproc consume_stdout (cat <&7 >&2) -cd - -echo "Running workbench2..." +cd ${WB2_DIR} +echo "Launching workbench2..." WB2_PORT=`random_free_port` -PORT=${WB2_PORT} REACT_APP_ARVADOS_API_HOST=${controllerURL} \ - yarn start & +coproc wb2 (PORT=${WB2_PORT} \ + REACT_APP_ARVADOS_API_HOST=${controllerHostPort} \ + yarn start) +exec 8<&"${wb2[0]}"; coproc consume_wb2_stdout (cat <&8 >&2) -# Wait for arvados & workbench2 to be up. +# Wait for workbench2 to be up. # Using https-get to avoid false positive 'ready' detection. -# yarn run wait-on --httpTimeout 300000 https-get://localhost:${ARVADOS_PORT}/discovery/v1/apis/arvados/v1/rest || -yarn run wait-on --httpTimeout 300000 https-get://localhost:${WB2_PORT} +yarn run wait-on --timeout 300000 https-get://localhost:${WB2_PORT} || exit 1 echo "Running tests..." CYPRESS_system_token=systemusertesttoken1234567890aoeuidhtnsqjkxbmwvzpy \ CYPRESS_controller_url=${controllerURL} \ CYPRESS_BASE_URL=https://localhost:${WB2_PORT} \ - yarn run cypress run -TEST_EXIT_CODE=$? - -# Cleanup -rm -rf ${WORKDIR} - -exit ${TEST_EXIT_CODE} \ No newline at end of file + yarn run cypress ${CYPRESS_MODE}