#!/bin/bash

overtest_debug ()
{
    [ -n "$OVERTEST_DEBUG" ]
}

if overtest_debug
then
    set -x
    OVERTEST_OUTPUT=/dev/stdout
else
    OVERTEST_OUTPUT=/dev/null
fi

overtest_run ()
{
    eval "$@" > $OVERTEST_OUTPUT 2>&1
}

overtest_make_temp_dir ()
{
    PROJECT=${1:-unknown}
    mktemp -d -t overtest-$PROJECT-XXXXXX
}

overtest_find_executable ()
{
    if ! which "$1" >/dev/null 2>&1
    then
        echo "E: $1 not found"
    fi
}

overtest_stop ()
{
    echo "I: stopping $OVERTEST_DAEMON"
    overtest_stop_${OVERTEST_DAEMON}
    echo "I: stopped $OVERTEST_DAEMON"
}

overtest_usage ()
{
    echo "Usage: $(basename $0) <daemon> [command]"
    echo
    echo "Known daemons:"
    for f in $OVERTEST_LIBS_PATH/*
    do
        f=$(basename $f)
        [ "$f" != "_utils" ] && echo " - $f"
    done
}

overtest_parse_options ()
{
    case $1 in
        --help|-h)
            overtest_usage
            return 1
            ;;
    esac
    export OVERTEST_DAEMON=$1
    local daemon_lib=${OVERTEST_LIBS_PATH}/${OVERTEST_DAEMON}
    if [ ! -f $daemon_lib ]
    then
       echo "E: unknown daemon $OVERTEST_DAEMON"
       return 2
    fi
    echo "I: starting $OVERTEST_DAEMON"
    source $daemon_lib
    trap overtest_stop EXIT
    overtest_start_${OVERTEST_DAEMON}
    local daemon_up=$(echo $OVERTEST_DAEMON | tr '[:lower:]' '[:upper:]')
    eval export OVERTEST_URL=\${OVERTEST_${daemon_up}_URL}
    echo "I: started $OVERTEST_DAEMON"

    shift

    if [ -n "$1" ]
    then
        echo "I: executing command: $*"
        $*
    fi
}

overtest_wait_for_line ()
{
    local PATTERN=$1
    local FILE=$2
    FOUND=1
    while read line
    do
        echo "$line" | grep -q "$PATTERN" && FOUND=0 && break
    done < "$FILE"
    # Read the FIFO forever otherwise process would block
    overtest_run cat "$FILE" &
    return $FOUND
}

