X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f2a79e0cc9bffcbe941d9a05b78f102fa6f09d03..8e2a634e2b0ef180f30db5322233244b142f93f6:/build/run-tests.sh diff --git a/build/run-tests.sh b/build/run-tests.sh index 7d1d4c9e6b..d18250a95a 100755 --- a/build/run-tests.sh +++ b/build/run-tests.sh @@ -69,7 +69,12 @@ apps/workbench_functionals (*) apps/workbench_integration (*) apps/workbench_benchmark apps/workbench_profile +cmd/arvados-client doc +lib/cli +lib/cmd +lib/crunchstat +lib/dispatchcloud services/api services/arv-git-httpd services/crunchstat @@ -104,6 +109,7 @@ sdk/go/asyncbuf sdk/go/stats sdk/go/crunchrunner sdk/cwl +sdk/R tools/sync-groups tools/crunchstat-summary tools/keep-exercise @@ -128,6 +134,7 @@ VENV3DIR= PYTHONPATH= GEMHOME= PERLINSTALLBASE= +R_LIBS= short= only_install= @@ -235,6 +242,16 @@ sanity_checks() { which Xvfb || fatal "No xvfb. Try: apt-get install xvfb" echo -n 'graphviz: ' dot -V || fatal "No graphviz. Try: apt-get install graphviz" + + # R SDK stuff + echo -n 'R: ' + which R || fatal "No R. Try: apt-get install r-base" + echo -n 'testthat: ' + R -q -e "library('testthat')" || fatal "No testthat. Try: apt-get install r-cran-testthat" + # needed for roxygen2, needed for devtools, needed for R sdk + pkg-config --exists libxml-2.0 || fatal "No libxml2. Try: apt-get install libxml2-dev" + # needed for pkgdown, builds R SDK doc pages + which pandoc || fatal "No pandoc. Try: apt-get install pandoc" } rotate_logfile() { @@ -304,8 +321,8 @@ do esac done -start_api() { - echo 'Starting API server...' +start_services() { + echo 'Starting API, keepproxy, keep-web, ws, arv-git-httpd, and nginx ssl proxy...' if [[ ! -d "$WORKSPACE/services/api/log" ]]; then mkdir -p "$WORKSPACE/services/api/log" fi @@ -317,39 +334,26 @@ 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, 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 + && (env | egrep ^ARVADOS) } stop_services() { - if [[ -n "$ARVADOS_TEST_PROXY_SERVICES" ]]; then - unset ARVADOS_TEST_PROXY_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 + if [[ -z "$ARVADOS_TEST_API_HOST" ]]; then + return fi + 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_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 \ + && python sdk/python/tests/run_test_server.py stop } interrupt() { @@ -376,7 +380,7 @@ if [[ -z "$temp" ]]; then fi # Set up temporary install dirs (unless existing dirs were supplied) -for tmpdir in VENVDIR VENV3DIR GOPATH GEMHOME PERLINSTALLBASE +for tmpdir in VENVDIR VENV3DIR GOPATH GEMHOME PERLINSTALLBASE R_LIBS do if [[ -z "${!tmpdir}" ]]; then eval "$tmpdir"="$temp/$tmpdir" @@ -485,13 +489,37 @@ setup_virtualenv() { export PERLINSTALLBASE export PERLLIB="$PERLINSTALLBASE/lib/perl5:${PERLLIB:+$PERLLIB}" +export R_LIBS + export GOPATH mkdir -p "$GOPATH/src/git.curoverse.com" -rmdir --parents "$GOPATH/src/git.curoverse.com/arvados.git/tmp/GOPATH" -ln -sfT "$WORKSPACE" "$GOPATH/src/git.curoverse.com/arvados.git" \ +rmdir -v --parents --ignore-fail-on-non-empty "$GOPATH/src/git.curoverse.com/arvados.git/tmp/GOPATH" +for d in \ + "$GOPATH/src/git.curoverse.com/arvados.git/arvados.git" \ + "$GOPATH/src/git.curoverse.com/arvados.git"; do + [[ -d "$d" ]] && rmdir "$d" + [[ -h "$d" ]] && rm "$d" +done +ln -vsnfT "$WORKSPACE" "$GOPATH/src/git.curoverse.com/arvados.git" \ || fatal "symlink failed" go get -v github.com/kardianos/govendor \ || fatal "govendor install failed" +cd "$GOPATH/src/git.curoverse.com/arvados.git" \ + || fatal +# Remove cached source dirs in workdir. Otherwise, they won't qualify +# as +missing or +external below, and we won't be able to detect that +# they're missing from vendor/vendor.json. +rm -r vendor/*/ +go get -v -d ... +"$GOPATH/bin/govendor" sync \ + || fatal "govendor sync failed" +[[ -z $("$GOPATH/bin/govendor" list +unused +missing +external | tee /dev/stderr) ]] \ + || fatal "vendor/vendor.json has unused or missing dependencies -- try: +* govendor remove +unused +* govendor add +missing +external +" +cd "$WORKSPACE" + setup_virtualenv "$VENVDIR" --python python2.7 . "$VENVDIR/bin/activate" @@ -505,6 +533,7 @@ pip freeze 2>/dev/null | egrep ^PyYAML= \ # won't pick it up by default. pip freeze 2>/dev/null | egrep ^apache-libcloud==$LIBCLOUD_PIN \ || pip install --pre --ignore-installed https://github.com/curoverse/libcloud/archive/apache-libcloud-$LIBCLOUD_PIN.zip >/dev/null \ + || pip install apache-libcloud>=$LIBCLOUD_PIN >/dev/null \ || fatal "pip install apache-libcloud failed" # We need an unreleased (as of 2017-08-17) llfuse bugfix, otherwise our fuse test suite deadlocks. @@ -751,6 +780,12 @@ install_ruby_sdk() { } do_install sdk/ruby ruby_sdk +install_R_sdk() { + cd "$WORKSPACE/sdk/R" \ + && R --quiet --vanilla --file=install_deps.R +} +do_install sdk/R R_sdk + install_perl_sdk() { cd "$WORKSPACE/sdk/perl" \ && perl Makefile.PL INSTALL_BASE="$PERLINSTALLBASE" \ @@ -821,6 +856,15 @@ install_apiserver() { ) || return 1 fi + cd "$WORKSPACE/services/api" \ + && rm -rf tmp/git \ + && mkdir -p tmp/git \ + && cd tmp/git \ + && tar xf ../../test/test.git.tar \ + && mkdir -p internal.git \ + && git --git-dir internal.git init \ + || return 1 + cd "$WORKSPACE/services/api" \ && RAILS_ENV=test bundle exec rake db:drop \ && RAILS_ENV=test bundle exec rake db:setup \ @@ -828,11 +872,13 @@ install_apiserver() { } do_install services/api apiserver -cd "$GOPATH/src/git.curoverse.com/arvados.git" && \ - "$GOPATH/bin/govendor" sync -v || \ - fatal "govendor sync failed" declare -a gostuff gostuff=( + cmd/arvados-client + lib/cli + lib/cmd + lib/crunchstat + lib/dispatchcloud sdk/go/arvados sdk/go/arvadosclient sdk/go/blockdigest @@ -843,7 +889,6 @@ gostuff=( sdk/go/asyncbuf sdk/go/crunchrunner sdk/go/stats - lib/crunchstat services/arv-git-httpd services/crunchstat services/health @@ -904,7 +949,7 @@ if [ ! -z "$only" ] && [ "$only" == "services/api" ]; then exit_cleanly fi -start_api || { stop_services; fatal "start_api"; } +start_services || { stop_services; fatal "start_services"; } test_ruby_sdk() { cd "$WORKSPACE/sdk/ruby" \ @@ -912,6 +957,12 @@ test_ruby_sdk() { } do_test sdk/ruby ruby_sdk +test_R_sdk() { + cd "$WORKSPACE/sdk/R" \ + && R --quiet --file=run_test.R +} +do_test sdk/R R_sdk + test_cli() { cd "$WORKSPACE/sdk/cli" \ && mkdir -p /tmp/keep \ @@ -951,37 +1002,32 @@ do done test_workbench_units() { - start_nginx_proxy_services \ - && cd "$WORKSPACE/apps/workbench" \ + 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" \ + cd "$WORKSPACE/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_functionals workbench_functionals test_workbench_integration() { - start_nginx_proxy_services \ - && cd "$WORKSPACE/apps/workbench" \ + 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 \ - && cd "$WORKSPACE/apps/workbench" \ + cd "$WORKSPACE/apps/workbench" \ && env RAILS_ENV=test ${short:+RAILS_TEST_SHORT=1} bundle exec rake test:benchmark ${testargs[apps/workbench_benchmark]} } do_test apps/workbench_benchmark workbench_benchmark test_workbench_profile() { - start_nginx_proxy_services \ - && cd "$WORKSPACE/apps/workbench" \ + cd "$WORKSPACE/apps/workbench" \ && env RAILS_ENV=test ${short:+RAILS_TEST_SHORT=1} bundle exec rake test:profile ${testargs[apps/workbench_profile]} } do_test apps/workbench_profile workbench_profile