#!/usr/bin/env bash
# Run integration tests against the latest docker-ce dind
set -eu -o pipefail

source ./scripts/build/.variables

container_ip() {
    local cid=$1
    local network=$2
    docker inspect \
        -f "{{.NetworkSettings.Networks.${network}.IPAddress}}" "$cid"
}

fetch_images() {
    ./scripts/test/e2e/load-image fetch-only
}

setup() {
    local project=$1
    local file=$2

    if [ "${TEST_CONNHELPER:-}" = "ssh" ];then
        test ! -f "${HOME}/.ssh/id_rsa" && ssh-keygen -t rsa -C docker-e2e-dummy -N "" -f "${HOME}/.ssh/id_rsa" -q
        grep "^StrictHostKeyChecking no" "${HOME}/.ssh/config" > /dev/null 2>&1 || echo "StrictHostKeyChecking no" > "${HOME}/.ssh/config"
        TEST_CONNHELPER_SSH_ID_RSA_PUB=$(cat "${HOME}/.ssh/id_rsa.pub")
        export TEST_CONNHELPER_SSH_ID_RSA_PUB
        file="${file}:./e2e/compose-env.connhelper-ssh.yaml"
    fi
    COMPOSE_PROJECT_NAME=$project COMPOSE_FILE=$file docker compose up --build -d >&2

    local network="${project}_default"
    # TODO: only run if inside a container
    docker network connect "$network" "$(hostname)"

    engine_ip="$(container_ip "${project}-engine-1" "$network")"
    engine_host="tcp://$engine_ip:2375"
    if [ "${TEST_CONNHELPER:-}" = "ssh" ];then
        engine_host="ssh://penguin@${engine_ip}"
    fi
    (
        export DOCKER_HOST="$engine_host"
        timeout 200 ./scripts/test/e2e/wait-on-daemon
        ./scripts/test/e2e/load-image
        is_swarm_enabled || docker swarm init
    ) >&2
    echo "$engine_host"
}

is_swarm_enabled() {
    docker info 2> /dev/null | grep -q 'Swarm: active'
}

cleanup() {
    local project=$1
    local network="${project}_default"
    docker network disconnect "$network" "$(hostname)"
    COMPOSE_PROJECT_NAME=$1 COMPOSE_FILE=$2 docker compose down -v --rmi local >&2
}

runtests() {
    local engine_host=$1

    # shellcheck disable=SC2086
    env -i \
        TEST_DOCKER_HOST="$engine_host" \
        TEST_DOCKER_CERT_PATH="${DOCKER_CERT_PATH-}" \
        TEST_REMOTE_DAEMON="${REMOTE_DAEMON-}" \
        TEST_SKIP_PLUGIN_TESTS="${SKIP_PLUGIN_TESTS-}" \
        GOPATH="$GOPATH" \
        PATH="$PWD/build/:/usr/bin:/usr/local/bin:/usr/local/go/bin" \
        HOME="$HOME" \
        DOCKER_CLI_E2E_PLUGINS_EXTRA_DIRS="$PWD/build/plugins-linux-${GOARCH}" \
        GO111MODULE=auto \
        "$(command -v gotestsum)" -- ${TESTDIRS:-./e2e/...} ${TESTFLAGS-}
}

export unique_id="${E2E_UNIQUE_ID:-cliendtoendsuite}"
compose_env_file=./e2e/compose-env.yaml

cmd=${1-}

case "$cmd" in
    setup)
        setup "$unique_id" "$compose_env_file"
        exit
        ;;
    cleanup)
        cleanup "$unique_id" "$compose_env_file"
        exit
        ;;
    fetch-images)
        fetch_images
        exit
        ;;
    test)
        engine_host=${2-}
        if [ -z "${engine_host}" ]; then
            echo "missing parameter docker engine host"
            echo "Usage: $0 test ENGINE_HOST"
            exit 3
        fi
        runtests "$engine_host"
        ;;
    run|"")
        engine_host="$(setup "$unique_id" "$compose_env_file")"
        testexit=0
        runtests "$engine_host" || testexit=$?
        cleanup "$unique_id" "$compose_env_file"
        exit $testexit
        ;;
    shell)
        $SHELL
        ;;
    *)
        echo "Unknown command: $cmd"
        echo "Usage: "
        echo "    $0 [setup | cleanup | test | run] [engine_host]"
        exit 1
        ;;
esac
