#!/bin/bash
# This should be run inside a container built from the Dockerfile
# at the root of the repo - script/test will do it automatically.

set -e

>&2 echo "Running lint checks"
docker run --rm \
  --tty \
  ${GIT_VOLUME} \
  "$TAG" tox -e pre-commit

get_versions="docker run --rm
    --entrypoint=/code/.tox/py37/bin/python
    $TAG
    /code/script/test/versions.py docker/docker-ce,moby/moby"

if [ "$DOCKER_VERSIONS" == "" ]; then
  DOCKER_VERSIONS="$($get_versions default)"
elif [ "$DOCKER_VERSIONS" == "all" ]; then
  DOCKER_VERSIONS=$($get_versions -n 2 recent)
fi

BUILD_NUMBER=${BUILD_NUMBER-$USER}
PY_TEST_VERSIONS=${PY_TEST_VERSIONS:-py37}

for version in $DOCKER_VERSIONS; do
  >&2 echo "Running tests against Docker $version"

  daemon_container="compose-dind-$version-$BUILD_NUMBER"

  function on_exit() {
    if [[ "$?" != "0" ]]; then
        docker logs "$daemon_container" 2>&1 | tail -n 100
    fi
    docker rm -vf "$daemon_container"
  }

  trap "on_exit" EXIT

  docker run \
    -d \
    --name "$daemon_container" \
    --privileged \
    --volume="/var/lib/docker" \
    -e "DOCKER_TLS_CERTDIR=" \
    "docker:$version-dind" \
    dockerd -H tcp://0.0.0.0:2375 $DOCKER_DAEMON_ARGS \
    2>&1 | tail -n 10

  docker exec "$daemon_container" sh -c "apk add --no-cache git"

  # copy docker config from host for authentication with Docker Hub
  docker exec "$daemon_container" sh -c "mkdir /root/.docker"
  docker cp /root/.docker/config.json $daemon_container:/root/.docker/config.json
  docker exec "$daemon_container" sh -c "chmod 644 /root/.docker/config.json"

  docker run \
    --rm \
    --tty \
    --link="$daemon_container:docker" \
    --env="DOCKER_HOST=tcp://docker:2375" \
    --env="DOCKER_VERSION=$version" \
    --entrypoint="tox" \
    "$TAG" \
    -e "$PY_TEST_VERSIONS" -- "$@"

done
