# 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
COLUMNS=80
-export GOPATH=$(mktemp -d)
-VENVDIR=$(mktemp -d)
+GITDIR=
+GOPATH=
+VENVDIR=
+PYTHONPATH=
cli_test=
workbench_test=
apiserver_test=
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
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-)\"
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 !!!!!!"
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 --no-deployment
install_ruby_sdk() {
cd "$WORKSPACE/sdk/ruby" \
&& gem build arvados.gemspec \
- && gem install arvados-*.gem
+ && 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 arvados-cli-*.gem
+ && gem install --user-install --no-ri --no-rdoc `ls -t arvados-cli-*.gem|head -n1`
}
do_install cli
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`
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
&& 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 \