#!/bin/bash -e

#check for a text in a docker volume log
function check() {
    if test $(docker inspect -f {{.State.Running}} $1) = "false"; then
        echo
        echo "**** ERROR: container $1 not running"
        exit 1
    fi
    docker logs $1 2>&1 | grep -q "$2"
}

# call with volume name
function wait_for_mysql() {
    check $1 "mysqld: ready for connections"
}

# run a countdown and call a check function
# $1:  expected time in seconds
# $2-: check function
function countdown() {
    set +x
    expect=$1
    shift
    max=$1
    shift
    for ((i=0; i<$((expect+max)); ++i)); do
        echo -en "\rPlease wait: $((expect-i))s    "
        $* && break || sleep 1
    done
    echo -e "\rdone in ${i}s: $*                      "
    echo
    set -x
}

# should not be called with sudo root
if test "$(whoami)" = "root"; then
    echo "**** ERROR: call as non root user"
    exit 1
fi

# option checks
NEED_XVFB=0
NEED_DOCKER=0
NEED_WEBTESTER=0
while test $# -gt 0; do
    case "$1" in
        (--help|-h)
            echo "$0 [OPTIONS] [PORTS <port>]"
            echo
            echo "OPTIONS:"
            echo
            exit 0
            ;;
        (*) echo "**** ERROR: unknown option '$1', try --help"; exit 1;;
    esac
    if test $# -eq 0; then
        echo "**** ERROR: missing value, try --help"; exit 1;
    fi
    shift
done

error=0;

# test for xvfb (needed by webtester)
if test ${NEED_XVFB} -eq 1 -a \! -e "$(which xvfb-run)"; then
    echo "**** ERROR: XVFB Not Installed"
    echo "you need to install xvfb"
    echo "please execute as root:"
    echo "  apt-get install xvfb"
    error=1
fi

# test for docker if needed
if test ${NEED_DOCKER} -eq 1 -a \! -e "$(which docker)"; then
    echo "**** ERROR: Docker Not Installed"
    echo "you need to install the latest docker"
    echo "please execute as root:"
    echo "  apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \\"
    echo "    --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9"
    echo "  echo 'deb https://get.docker.io/ubuntu docker main' \\"
    echo "    > /etc/apt/sources.list.d/docker.list"
    echo "  apt-get update"
    echo "  apt-get install lxc-docker"
    echo "  adduser $(whoami) docker"
    echo "you need to add the following line to /etc/default/docker:"
    echo '  DOCKER_OPTS="--insecure-registry dev0004:5000"'
    echo "logout $(whoami) and login again to run $(whoami) with group docker"
    echo "additionals note:"
    echo "  if you run docker inside a VM (not recommended), you probably"
    echo "  need to foollow the instructions in chapter \"Changing Bridge"
    echo "  Subnetwork\" on https://marc.wäckerlin.ch/computer/docker-overview"
    echo "introduction to docker, see:"
    echo "  https://marc.wäckerlin.ch/computer/docker-overview"
    error=1
fi

# check for webtester
if test ${NEED_WEBTESTER} -eq 1 -a \! -e "$(which webrunner)"; then
    echo "**** ERROR: Webtester Not Installed"
    echo "you need to install webtester"
    echo "please execute as root:"
    echo "  apt-get install -y wget software-properties-common apt-transport-https"
    echo "  apt-add-repository https://dev.marc.waeckerlin.org/repository"
    echo "  wget -O- https://dev.marc.waeckerlin.org/repository/PublicKey \\"
    echo "    | apt-key add -"
    echo "  apt-get update -y"
    echo "  apt-get install -y webtester"
    echo "more information, see:"
    echo "  https://dev.marc.waeckerlin.org/redmine/projects/webtester"
    error=1
fi

if test "$error" = "1"; then
    exit 1
fi

set -x

# Add tests here