X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0a563c9f5791246d9a403d114044400ff636e5d2..69fab19d5c5fdb685a4b6651ac2077a467a6ca9a:/docker/run.sh diff --git a/docker/run.sh b/docker/run.sh index 1c74b1d395..c8ddabeded 100755 --- a/docker/run.sh +++ b/docker/run.sh @@ -3,11 +3,26 @@ ENABLE_SSH=false function usage { - echo >&2 "usage:" - echo >&2 "$0 start [--ssh] [--doc] [--sso] [--api] [--workbench] [--keep]" + echo >&2 + echo >&2 "usage: $0 (start|stop|test) [options]" + echo >&2 + echo >&2 "$0 start options:" + echo >&2 " -d [port], --doc[=port] Start documentation server (default port 9898)" + echo >&2 " -w [port], --workbench[=port] Start workbench server (default port 9899)" + echo >&2 " -s [port], --sso[=port] Start SSO server (default port 9901)" + echo >&2 " -a [port], --api[=port] Start API server (default port 9900)" + echo >&2 " -k, --keep Start Keep servers" + echo >&2 " --ssh Enable SSH access to server containers" + echo >&2 " -h, --help Display this help and exit" + echo >&2 + echo >&2 " If no switches are given, the default is to start all" + echo >&2 " servers on the default ports." + echo >&2 echo >&2 "$0 stop" - echo >&2 "$0 test" - echo >&2 "If no switches are given, the default is to start all servers." + echo >&2 " Stop all servers." + echo >&2 + echo >&2 "$0 test [testname] [testname] ..." + echo >&2 " By default, all tests are run." } function ip_address { @@ -99,60 +114,105 @@ function do_start { local start_workbench=false local start_keep=false + # NOTE: This requires GNU getopt (part of the util-linux package on Debian-based distros). + local TEMP=`getopt -o d::s::a::w::kh \ + --long doc::,sso::,api::,workbench::,keep,help,ssh \ + -n "$0" -- "$@"` + + if [ $? != 0 ] ; then echo "Use -h for help"; exit 1 ; fi + + # Note the quotes around `$TEMP': they are essential! + eval set -- "$TEMP" + while [ $# -ge 1 ] do case $1 in - --doc) - start_doc=true + -d | --doc) + case "$2" in + "") start_doc=9898; shift 2 ;; + *) start_doc=$2; shift 2 ;; + esac ;; - --sso) - start_sso=true + -s | --sso) + case "$2" in + "") start_sso=9901; shift 2 ;; + *) start_sso=$2; shift 2 ;; + esac ;; - --api) - start_api=true + -a | --api) + case "$2" in + "") start_api=9900; shift 2 ;; + *) start_api=$2; shift 2 ;; + esac ;; - --workbench) - start_workbench=true + -w | --workbench) + case "$2" in + "") start_workbench=9899; shift 2 ;; + *) start_workbench=$2; shift 2 ;; + esac ;; - --keep) + -k | --keep ) start_keep=true + shift ;; --ssh) + # ENABLE_SSH is a global variable ENABLE_SSH=true + shift + ;; + --) + shift + break ;; *) usage exit 1 ;; esac - shift done # If no options were selected, then start all servers. - if $start_doc || $start_sso || $start_api || $start_workbench || $start_keep + if [[ $start_doc == false && + $start_sso == false && + $start_api == false && + $start_workbench == false && + $start_keep == false ]] then - : - else - start_doc=true - start_sso=true - start_api=true - start_workbench=true - start_keep=true + start_doc=9898 + start_sso=9901 + start_api=9900 + start_workbench=9899 + start_keep=true + fi + + if [[ $start_doc != false ]] + then + start_container "9898:80" "doc_server" '' '' "arvados/doc" + fi + + if [[ $start_sso != false ]] + then + start_container "9901:443" "sso_server" '' '' "arvados/sso" fi - $start_doc && start_container "9898:80" "doc_server" '' '' "arvados/doc" - $start_sso && start_container "9901:443" "sso_server" '' '' "arvados/sso" - $start_api && start_container "9900:443" "api_server" '' "sso_server:sso" "arvados/api" - $start_workbench && start_container "9899:80" "workbench_server" '' "api_server:api" "arvados/workbench" + if [[ $start_api != false ]] + then + start_container "9900:443" "api_server" '' "sso_server:sso" "arvados/api" + fi + + if [[ $start_workbench != false ]] + then + start_container "9899:80" "workbench_server" '' "api_server:api" "arvados/workbench" + fi - if $start_keep + if [[ $start_keep != false ]] then # create `keep_volumes' array with a list of keep mount points # remove any stale metadata from those volumes before starting them make_keep_volumes for v in ${keep_volumes[*]} do - [ -f $v/.metadata.yml ] && rm $v/.metadata.yml + [ -f $v/keep/.metadata.yml ] && sudo rm $v/keep/.metadata.yml done start_container "25107:25107" "keep_server_0" \ "${keep_volumes[0]}:/dev/keep-0" \ @@ -166,7 +226,7 @@ function do_start { ARVADOS_API_HOST=$(ip_address "api_server") ARVADOS_API_HOST_INSECURE=yes - ARVADOS_API_TOKEN=$(grep '^\w' api/generated/secret_token.rb | cut -d "'" -f 2) + ARVADOS_API_TOKEN=$(cat api/generated/superuser_token) echo "To run a test suite:" echo "export ARVADOS_API_HOST=$ARVADOS_API_HOST" @@ -176,13 +236,45 @@ function do_start { } function do_stop { - docker stop api_server \ + docker stop doc_server \ + api_server \ sso_server \ workbench_server \ keep_server_0 \ keep_server_1 2>/dev/null } +function do_test { + local alltests + if [ $# -lt 1 ] + then + alltests="python-sdk api" + else + alltests="$@" + fi + + for testname in $alltests + do + echo "testing $testname..." + case $testname in + python-sdk) + do_start --api --keep --sso + export ARVADOS_API_HOST=$(ip_address "api_server") + export ARVADOS_API_HOST_INSECURE=yes + export ARVADOS_API_TOKEN=$(cat api/generated/superuser_token) + python -m unittest discover ../sdk/python + ;; + api) + docker run -t -i arvados/api \ + /usr/src/arvados/services/api/script/rake_test.sh + ;; + *) + echo >&2 "unknown test $testname" + ;; + esac + done +} + if [ $# -lt 1 ] then usage @@ -198,6 +290,10 @@ case $1 in shift do_stop $@ ;; + test) + shift + do_test $@ + ;; *) usage exit 1