From 855193b8c5ab28a2b82999b0f4911d17f874303b Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Mon, 20 Apr 2020 19:34:40 -0300 Subject: [PATCH] 16029: Enhances orquestration script in various ways. * Checks if wb2's config.json exists and quits with a message. * Adds timeouts on arvados-boot & wb2 executions to avoid wating for ever. * If timeouts are reached, exits with error code and doesn't run tests. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- tools/run-integration-tests.sh | 73 ++++++++++++++++------------------ 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/tools/run-integration-tests.sh b/tools/run-integration-tests.sh index 250bc48c..74476b8e 100755 --- a/tools/run-integration-tests.sh +++ b/tools/run-integration-tests.sh @@ -5,10 +5,11 @@ 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 + rm -rf ${ARVADOS_DIR} echo >&2 "done" } @@ -23,18 +24,23 @@ random_free_port() { # 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 +ARVADOS_DIR=`mktemp -d` +ARVADOS_LOG=${ARVADOS_DIR}/arvados.log +WB2_DIR=`pwd` +ARVADOS_CONF=${WB2_DIR}/tools/arvados_config.yml -if [ ! -e "${WORKDIR}/lib" ]; then +if [ -f "${WB2_DIR}/public/config.json" ]; then + echo "ERROR: Cannot run with Workbench2's public/config.json file" + exit 1 +fi + +if [ ! -d "${ARVADOS_DIR}/lib" ]; then 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 +49,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 -- 2.30.2