From 6de4399012e35ed538be8ba6b461e37ba0b23441 Mon Sep 17 00:00:00 2001 From: Felix Lohmeier Date: Tue, 6 Aug 2019 22:01:20 +0200 Subject: [PATCH] improved script tests.sh default to main versions option for multiple tags option for host port improved usage of sudo more examples in help screen --- tests.sh | 98 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 64 insertions(+), 34 deletions(-) diff --git a/tests.sh b/tests.sh index 100b40a..2464a6e 100755 --- a/tests.sh +++ b/tests.sh @@ -16,44 +16,36 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see -# check system requirements -DOCKER="$(which docker 2> /dev/null)" -if [ -z "$DOCKER" ] ; then - echo 1>&2 "This action requires you to have 'docker' installed and present in your PATH. You can download it for free at http://www.docker.com/" - exit 1 -fi -DOCKERINFO="$(docker info 2>/dev/null | grep 'Server Version')" -if [ -z "$DOCKERINFO" ] ; then - echo 1>&2 "This action requires you to start the docker daemon. Try 'sudo systemctl start docker' or 'sudo start docker'. If the docker daemon is already running then maybe some security privileges are missing to run docker commands. Try to run the script with 'sudo ./openrefine-batch-docker.sh ...'" - exit 1 -fi -CURLINFO="$(which curl 2>/dev/null)" -if [ -z "$CURLINFO" ] ; then - echo 1>&2 "This action requires you to have 'curl' installed and present in your PATH." - exit 1 -fi - # defaults: -tags=(3.2-java12 3.2-java11 3.2-java10 3.2-java9 3.2 3.1-java9 3.1 3.0-java9 3.0 2.8-java9 2.8 2.8-java7 2.7 2.7-java7 2.5-java7 2.5-java6 2.1-java6 2.0-java6) -pause=false +all=(3.2-java12 3.2-java11 3.2-java10 3.2-java9 3.2 3.1-java9 3.1 3.0-java9 3.0 2.8-java9 2.8 2.8-java7 2.7 2.7-java7 2.5-java7 2.5-java6 2.1-java6 2.0-java6) +main=(3.2 3.1 3.0 2.8 2.7 2.5-java6 2.1-java6 2.0-java6) +interactively=false +port="3333" # help screen function usage () { cat <&2 "This action requires you to have 'docker' installed and present in your PATH. You can download it for free at http://www.docker.com/" + exit 1 +fi +DOCKERINFO="$(docker info 2>/dev/null | grep 'Server Version')" +if [ -z "$DOCKERINFO" ] +then + echo "command 'docker info' failed, trying again with sudo..." + DOCKERINFO="$(sudo docker info 2>/dev/null | grep 'Server Version')" + echo "OK" + docker=(sudo docker) + if [ -z "$DOCKERINFO" ] ; then + echo 1>&2 "This action requires you to start the docker daemon. Try 'sudo systemctl start docker' or 'sudo start docker'. If the docker daemon is already running then maybe some security privileges are missing to run docker commands.'" + exit 1 + fi +else + docker=(docker) +fi +CURLINFO="$(command -v curl 2>/dev/null)" +if [ -z "$CURLINFO" ] ; then + echo 1>&2 "This action requires you to have 'curl' installed and present in your PATH." + exit 1 +fi + # get user input -options="at:ph" +options="t:p:iajh" while getopts $options opt; do case $opt in - a ) ;; - t ) tags=(${OPTARG}) ;; - p ) pause=true ;; + t ) tags+=("${OPTARG}");; + p ) port="${OPTARG}";export OPENREFINE_PORT="$port";; + i ) interactively=true;; + a ) tags=("${main[*]}");; + j ) tags=("${all[*]}");; h ) usage ;; \? ) echo 1>&2 "Unknown option: -$OPTARG"; usage; exit 1;; : ) echo 1>&2 "Missing option argument for -$OPTARG"; usage; exit 1;; @@ -82,19 +102,29 @@ shift $((OPTIND - 1)) # print config echo "Tags: ${tags[*]}" +echo "Port: $port" echo "" +# safe cleanup handler +cleanup() +{ + echo "cleanup..." + ${docker[*]} stop "$t" +} +trap "cleanup;exit" SIGHUP SIGINT SIGQUIT SIGTERM + # run setup.py tests for each docker tag for t in ${tags[*]} ; do echo "=== Tests for $t ===" echo "" echo "Begin: $(date)" - sudo docker run -d -p 3333:3333 --rm --name $t felixlohmeier/openrefine:$t - until curl --silent -N http://localhost:3333 | cat | grep -q -o "Refine" ; do sleep 1; done - if [ $pause = true ]; then read -p "Press [Enter] key to start tests..."; fi + ${docker[*]} run -d -p "$port":3333 --rm --name "$t" felixlohmeier/openrefine:"$t" + until curl --silent -N http://localhost:"$port" | cat | grep -q -o "Refine" ; do sleep 1; done + echo "Refine running at http://localhost:${port}" + if [ $interactively = true ]; then read -r -p "Press [Enter] key to start tests..."; fi python setup.py test - if [ $pause = true ]; then read -p "Press [Enter] key to stop OpenRefine..."; fi - sudo docker stop $t + if [ $interactively = true ]; then read -r -p "Press [Enter] key to stop OpenRefine..."; fi + ${docker[*]} stop "$t" echo "End: $(date)" echo "" done