X-Git-Url: https://git.arvados.org/arvados-dev.git/blobdiff_plain/7c797619a3bf856a5f3cee92fb40722c6e771336..254c4352cf3f0fba7861bd51b42498e996036227:/jenkins/run-tests.sh diff --git a/jenkins/run-tests.sh b/jenkins/run-tests.sh index b93aa92..44bb603 100755 --- a/jenkins/run-tests.sh +++ b/jenkins/run-tests.sh @@ -7,6 +7,8 @@ # Arguments: # --skip FOO Do not test the FOO component. # --only FOO Do not test anything except the FOO component. +# WORKSPACE=path Arvados source tree to test. +# CONFIGSRC=path Dir with api server config files to copy into source tree. # envvar=value Set $envvar to value # # Regardless of which components are tested, install all components in @@ -46,12 +48,15 @@ unset $(env | cut -d= -f1 | grep \^ARVADOS_) COLUMNS=80 -export GOPATH=$(mktemp -d) -VENVDIR=$(mktemp -d) +GITDIR= +GOPATH= +VENVDIR= +PYTHONPATH= cli_test= workbench_test= apiserver_test= python_sdk_test= +ruby_sdk_test= fuse_test= leave_temp= skip_install= @@ -61,24 +66,32 @@ then source /etc/profile.d/rvm.sh fi +declare -A leave_temp +clear_temp() { + leaving="" + for var in VENVDIR GOPATH GITDIR + do + if [[ -z "${leave_temp[$var]}" ]] + then + if [[ -n "${!var}" ]] + then + rm -rf "${!var}" + fi + else + leaving+=" $var=\"${!var}\"" + fi + done + if [[ -z "$leaving" ]]; then + echo "Leaving behind temp dirs: $leaving" + fi +} + fatal() { clear_temp echo >&2 "Fatal: $* in ${FUNCNAME[1]} at ${BASH_SOURCE[1]} line ${BASH_LINENO[0]}" exit 1 } -# Sanity check -echo "WORKSPACE=$WORKSPACE" -[[ -n "$WORKSPACE" ]] || fatal "WORKSPACE not set" - -# Set up temporary install dirs -mkdir -p "$GOPATH/src/git.curoverse.com" -ln -sfn "$WORKSPACE" "$GOPATH/src/git.curoverse.com/arvados.git" \ - || fatal "symlink failed" - -virtualenv --setuptools "$VENVDIR" || fatal "virtualenv $VENVDIR failed" -PATH="$VENVDIR/bin:$PATH" - declare -a failures declare -A skip @@ -100,10 +113,11 @@ do skip_install=1 ;; --leave-temp) - leave_temp=1 + leave_temp[VENVDIR]=1 + leave_temp[GOPATH]=1 ;; *=*) - eval $(echo $arg | cut -d= -f1)=\"$(echo $arg | cut -d= -f2)\" + eval $(echo $arg | cut -d= -f1)=\"$(echo $arg | cut -d= -f2-)\" ;; *) echo >&2 "$0: Unrecognized option: '$arg'" @@ -112,6 +126,36 @@ do esac done +# Sanity check +echo "WORKSPACE=$WORKSPACE" +[[ -n "$WORKSPACE" ]] || fatal "WORKSPACE not set" + +if [[ -n "$CONFIGSRC" ]]; then + if [[ -d "$HOME/arvados-api-server" ]]; then + # Jenkins expects us to use this by default. + CONFIGSRC="$HOME/arvados-api-server" + fi +fi + +# Set up temporary install dirs (unless existing dirs were supplied) +if [[ -n "$VENVDIR" ]]; then + leave_temp[VENVDIR]=1 +else + VENVDIR=$(mktemp -d) +fi +if [[ -n "$GOPATH" ]]; then + leave_temp[GOPATH]=1 +else + GOPATH=$(mktemp -d) +fi +export GOPATH +mkdir -p "$GOPATH/src/git.curoverse.com" +ln -sfn "$WORKSPACE" "$GOPATH/src/git.curoverse.com/arvados.git" \ + || fatal "symlink failed" + +virtualenv --setuptools "$VENVDIR" || fatal "virtualenv $VENVDIR failed" +PATH="$VENVDIR/bin:$PATH" + checkexit() { if [[ "$?" != "0" ]]; then title "!!!!!! $1 FAILED !!!!!!" @@ -170,25 +214,9 @@ title () { printf "\n%*s%s\n\n" $((($COLUMNS-${#txt})/2)) "" "$txt" } -clear_temp() { - if [[ -z "$leave_temp" ]] - then - for t in "$VENVDIR" "$GOPATH" - do - if [[ -n "$t" ]] - then - rm -rf "$t" - fi - done - else - echo "Leaving VENVDIR=\"$VENVDIR\"" - echo "Leaving GOPATH=\"$GOPATH\"" - fi -} - test_docs() { cd "$WORKSPACE/doc" - bundle install --deployment + bundle install --no-deployment rm -rf .site # Make sure python-epydoc is installed or the next line won't do much good! ARVADOS_API_HOST=qr1hi.arvadosapi.com @@ -203,15 +231,50 @@ test_doclinkchecker() { } do_test doclinkchecker +test_ruby_sdk() { + cd "$WORKSPACE/sdk/ruby" \ + && bundle install --no-deployment \ + && bundle exec rake test +} +do_test ruby_sdk + +install_ruby_sdk() { + cd "$WORKSPACE/sdk/ruby" \ + && gem build arvados.gemspec \ + && gem install --user-install --no-ri --no-rdoc `ls -t arvados-*.gem|head -n1` +} +do_install ruby_sdk + +install_cli() { + cd "$WORKSPACE/sdk/cli" \ + && gem build arvados-cli.gemspec \ + && gem install --user-install --no-ri --no-rdoc `ls -t arvados-cli-*.gem|head -n1` +} +do_install cli + +test_cli() { + title "Starting SDK CLI tests" + cd "$WORKSPACE/sdk/cli" \ + && bundle install --no-deployment \ + && mkdir -p /tmp/keep \ + && KEEP_LOCAL_STORE=/tmp/keep bundle exec rake test $cli_test +} +do_test cli + install_apiserver() { cd "$WORKSPACE/services/api" - bundle install --deployment + bundle install --no-deployment rm -f config/environments/test.rb cp config/environments/test.rb.example config/environments/test.rb - cp $HOME/arvados-api-server/database.yml config/ || fatal "database.yml" - cp $HOME/arvados-api-server/application.yml config/ || fatal "application.yml" + if [ -n "$CONFIGSRC" ] + then + for f in database.yml application.yml + do + cp "$CONFIGSRC/$f" config/ || fatal "$f" + done + fi # Fill in a random secret_token and blob_signing_key for testing SECRET_TOKEN=`echo 'puts rand(2**512).to_s(36)' |ruby` @@ -223,7 +286,7 @@ install_apiserver() { export RAILS_ENV=test # Set up empty git repo (for git tests) - GITDIR="$WORKSPACE/tmpgit" + GITDIR=$(mktemp -d) sed -i'' -e "s:/var/cache/git:$GITDIR:" config/application.default.yml rm -rf $GITDIR @@ -236,6 +299,10 @@ install_apiserver() { && git add tmp \ && git commit -m 'initial commit' + # Clear out any lingering postgresql connections to arvados_test, so that we can drop it + # This assumes the current user is a postgresql superuser + psql arvados_test -c "SELECT pg_terminate_backend (pg_stat_activity.procpid::int) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'arvados_test';" 2>/dev/null + cd "$WORKSPACE/services/api" \ && bundle exec rake db:drop \ && bundle exec rake db:create \ @@ -249,12 +316,6 @@ test_apiserver() { } do_test apiserver -install_cli() { - cd "$WORKSPACE/sdk/cli" - bundle install --deployment -} -do_install cli - declare -a gostuff gostuff=( services/keepstore @@ -320,20 +381,11 @@ done test_workbench() { cd "$WORKSPACE/apps/workbench" \ - && bundle install --deployment \ + && bundle install --no-deployment \ && bundle exec rake test $workbench_test } do_test workbench -test_cli() { - title "Starting SDK CLI tests" - cd "$WORKSPACE/sdk/cli" \ - && bundle install --deployment \ - && mkdir -p /tmp/keep \ - && KEEP_LOCAL_STORE=/tmp/keep bundle exec rake test $cli_test -} -do_test cli - clear_temp for x in "${successes[@]}"