X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c900f416c36cd74675c5bf4c33ad1dbe5d1e78fa..bdb92619b5f6d920119b8c32c3027cf4b751ed16:/build/run-tests.sh diff --git a/build/run-tests.sh b/build/run-tests.sh index 30a80f527a..e0e1ce2852 100755 --- a/build/run-tests.sh +++ b/build/run-tests.sh @@ -58,7 +58,10 @@ https://arvados.org/projects/arvados/wiki/Running_tests Available tests: -apps/workbench +apps/workbench (*) +apps/workbench_units (*) +apps/workbench_functionals (*) +apps/workbench_integration (*) apps/workbench_benchmark apps/workbench_profile doc @@ -76,6 +79,7 @@ services/nodemanager services/crunch-run services/crunch-dispatch-local services/crunch-dispatch-slurm +services/ws sdk/cli sdk/pam sdk/python @@ -87,12 +91,17 @@ sdk/go/httpserver sdk/go/manifest sdk/go/blockdigest sdk/go/streamer +sdk/go/stats sdk/go/crunchrunner sdk/cwl tools/crunchstat-summary +tools/keep-exercise tools/keep-rsync tools/keep-block-check +(*) apps/workbench is shorthand for apps/workbench_units + + apps/workbench_functionals + apps/workbench_integration + EOF # First make sure to remove any ARVADOS_ variables from the calling @@ -149,11 +158,17 @@ sanity_checks() { echo -n 'virtualenv: ' virtualenv --version \ || fatal "No virtualenv. Try: apt-get install virtualenv (on ubuntu: python-virtualenv)" + echo -n 'ruby: ' + ruby -v \ + || fatal "No ruby. Install >=2.1.9 (using rbenv, rvm, or source)" + echo -n 'bundler: ' + bundle version \ + || fatal "No bundler. Try: gem install bundler" echo -n 'go: ' go version \ || fatal "No go binary. See http://golang.org/doc/install" - [[ $(go version) =~ go1.([0-9]+) ]] && [[ ${BASH_REMATCH[1]} -ge 6 ]] \ - || fatal "Go >= 1.6 required. See http://golang.org/doc/install" + [[ $(go version) =~ go1.([0-9]+) ]] && [[ ${BASH_REMATCH[1]} -ge 7 ]] \ + || fatal "Go >= 1.7 required. See http://golang.org/doc/install" echo -n 'gcc: ' gcc --version | egrep ^gcc \ || fatal "No gcc. Try: apt-get install build-essential" @@ -205,7 +220,13 @@ do ;; --skip) skipwhat="$1"; shift - skip[$skipwhat]=1 + if [[ "$skipwhat" == "apps/workbench" ]]; then + skip["apps/workbench_units"]=1 + skip["apps/workbench_functionals"]=1 + skip["apps/workbench_integration"]=1 + else + skip[$skipwhat]=1 + fi ;; --only) only="$1"; skip[$1]=""; shift @@ -251,15 +272,18 @@ start_api() { && eval $(python sdk/python/tests/run_test_server.py start --auth admin) \ && export ARVADOS_TEST_API_HOST="$ARVADOS_API_HOST" \ && export ARVADOS_TEST_API_INSTALLED="$$" \ + && python sdk/python/tests/run_test_server.py start_ws \ + && python sdk/python/tests/run_test_server.py start_nginx \ && (env | egrep ^ARVADOS) } start_nginx_proxy_services() { - echo 'Starting keepproxy, keep-web, arv-git-httpd, and nginx ssl proxy...' + echo 'Starting keepproxy, keep-web, ws, arv-git-httpd, and nginx ssl proxy...' cd "$WORKSPACE" \ && python sdk/python/tests/run_test_server.py start_keep_proxy \ && python sdk/python/tests/run_test_server.py start_keep-web \ && python sdk/python/tests/run_test_server.py start_arv-git-httpd \ + && python sdk/python/tests/run_test_server.py start_ws \ && python sdk/python/tests/run_test_server.py start_nginx \ && export ARVADOS_TEST_PROXY_SERVICES=1 } @@ -270,12 +294,15 @@ stop_services() { cd "$WORKSPACE" \ && python sdk/python/tests/run_test_server.py stop_nginx \ && python sdk/python/tests/run_test_server.py stop_arv-git-httpd \ + && python sdk/python/tests/run_test_server.py stop_ws \ && python sdk/python/tests/run_test_server.py stop_keep-web \ && python sdk/python/tests/run_test_server.py stop_keep_proxy fi if [[ -n "$ARVADOS_TEST_API_HOST" ]]; then unset ARVADOS_TEST_API_HOST cd "$WORKSPACE" \ + && python sdk/python/tests/run_test_server.py stop_nginx \ + && python sdk/python/tests/run_test_server.py stop_ws \ && python sdk/python/tests/run_test_server.py stop fi } @@ -342,9 +369,12 @@ setup_ruby_environment() { # complaint about not being in first place already. rvm use @default 2>/dev/null - # Create (if needed) and switch to an @arvados-tests - # gemset. (Leave the choice of ruby to the caller.) - rvm use @arvados-tests --create \ + # Create (if needed) and switch to an @arvados-tests-* gemset, + # salting the gemset name so it doesn't interfere with + # concurrent builds in other workspaces. Leave the choice of + # ruby to the caller. + gemset="arvados-tests-$(echo -n "${WORKSPACE}" | md5sum | head -c16)" + rvm use "@${gemset}" --create \ || fatal 'rvm gemset setup' rvm env @@ -397,9 +427,9 @@ setup_virtualenv() { fi if [[ $("$venvdest/bin/python" --version 2>&1) =~ \ 3\.[012]\. ]]; then # pip 8.0.0 dropped support for python 3.2, e.g., debian wheezy - "$venvdest/bin/pip" install 'setuptools>=18' 'pip>=7,<8' + "$venvdest/bin/pip" install 'setuptools>=18.5' 'pip>=7,<8' else - "$venvdest/bin/pip" install 'setuptools>=18' 'pip>=7' + "$venvdest/bin/pip" install 'setuptools>=18.5' 'pip>=7' fi # ubuntu1404 can't seem to install mock via tests_require, but it can do this. "$venvdest/bin/pip" install 'mock>=1.0' 'pbr<1.7.0' @@ -486,7 +516,13 @@ do_test() { do_test_once() { unset result - if [[ -z "${skip[$1]}" ]] && ( [[ -z "$only" ]] || [[ "$only" == "$1" ]] ) + to_test=$1 + if (( [[ "$only" == "apps/workbench" ]] ) && + ( [[ "$to_test" == "apps/workbench_units" ]] || [[ "$to_test" == "apps/workbench_functionals" ]] || + [[ "$to_test" == "apps/workbench_integration" ]])); then + to_test="apps/workbench" + fi + if [[ -z "${skip[$1]}" ]] && ( [[ -z "$only" ]] || [[ "$only" == "$to_test" ]] ) then title "Running $1 tests" timer_reset @@ -499,6 +535,8 @@ do_test_once() { # mode makes Go show the wrong line numbers when reporting # compilation errors. go get -t "git.curoverse.com/arvados.git/$1" || return 1 + cd "$WORKSPACE/$1" || return 1 + gofmt -e -d . | egrep . && result=1 if [[ -n "${testargs[$1]}" ]] then # "go test -check.vv giturl" doesn't work, but this @@ -509,7 +547,7 @@ do_test_once() { # empty, so use this form in such cases: go test ${short:+-short} ${coverflags[@]} "git.curoverse.com/arvados.git/$1" fi - result="$?" + result=${result:-$?} if [[ -f "$WORKSPACE/tmp/.$covername.tmp" ]] then go tool cover -html="$WORKSPACE/tmp/.$covername.tmp" -o "$WORKSPACE/tmp/$covername.html" @@ -517,10 +555,22 @@ do_test_once() { fi elif [[ "$2" == "pip" ]] then - # $3 can name a path directory for us to use, including trailing - # slash; e.g., the bin/ subdirectory of a virtualenv. - cd "$WORKSPACE/$1" \ - && "${3}python" setup.py ${short:+--short-tests-only} test ${testargs[$1]} + tries=0 + cd "$WORKSPACE/$1" && while : + do + tries=$((${tries}+1)) + # $3 can name a path directory for us to use, including trailing + # slash; e.g., the bin/ subdirectory of a virtualenv. + "${3}python" setup.py ${short:+--short-tests-only} test ${testargs[$1]} + result=$? + if [[ ${tries} < 3 && ${result} == 137 ]] + then + printf '\n*****\n%s tests killed -- retrying\n*****\n\n' "$1" + continue + else + break + fi + done elif [[ "$2" != "" ]] then "test_$2" @@ -714,6 +764,8 @@ gostuff=( sdk/go/manifest sdk/go/streamer sdk/go/crunchrunner + sdk/go/stats + lib/crunchstat services/arv-git-httpd services/crunchstat services/keep-web @@ -721,15 +773,13 @@ gostuff=( sdk/go/keepclient services/keep-balance services/keepproxy - services/datamanager/summary - services/datamanager/collection - services/datamanager/keep - services/datamanager services/crunch-dispatch-local services/crunch-dispatch-slurm services/crunch-run - tools/keep-rsync + services/ws tools/keep-block-check + tools/keep-exercise + tools/keep-rsync ) for g in "${gostuff[@]}" do @@ -803,12 +853,27 @@ do do_test "$g" go done -test_workbench() { +test_workbench_units() { + start_nginx_proxy_services \ + && cd "$WORKSPACE/apps/workbench" \ + && env RAILS_ENV=test ${short:+RAILS_TEST_SHORT=1} bundle exec rake test:units TESTOPTS=-v ${testargs[apps/workbench]} +} +do_test apps/workbench_units workbench_units + +test_workbench_functionals() { start_nginx_proxy_services \ && cd "$WORKSPACE/apps/workbench" \ - && env RAILS_ENV=test ${short:+RAILS_TEST_SHORT=1} bundle exec rake test TESTOPTS=-v ${testargs[apps/workbench]} + && env RAILS_ENV=test ${short:+RAILS_TEST_SHORT=1} bundle exec rake test:functionals TESTOPTS=-v ${testargs[apps/workbench]} } -do_test apps/workbench workbench +do_test apps/workbench_functionals workbench_functionals + +test_workbench_integration() { + start_nginx_proxy_services \ + && cd "$WORKSPACE/apps/workbench" \ + && env RAILS_ENV=test ${short:+RAILS_TEST_SHORT=1} bundle exec rake test:integration TESTOPTS=-v ${testargs[apps/workbench]} +} +do_test apps/workbench_integration workbench_integration + test_workbench_benchmark() { start_nginx_proxy_services \