#!/usr/bin/env bash # Run integration tests against the latest docker-ce dind set -eu -o pipefail function container_ip { local cid=$1 local network=$2 docker inspect \ -f "{{.NetworkSettings.Networks.${network}.IPAddress}}" "$cid" } function setup { local project=$1 COMPOSE_PROJECT_NAME=$1 COMPOSE_FILE=$2 docker-compose up -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" ( export DOCKER_HOST="$engine_host" timeout -t 200 ./scripts/test/e2e/wait-on-daemon ./scripts/test/e2e/load-alpine ./scripts/test/e2e/load-busybox is_swarm_enabled || docker swarm init ) >&2 echo "$engine_host" } function is_swarm_enabled { docker info 2> /dev/null | grep -q 'Swarm: active' } function cleanup { COMPOSE_PROJECT_NAME=$1 COMPOSE_FILE=$2 docker-compose down -v >&2 } function runtests { local engine_host=$1 # TODO: only run if inside a container update-ca-certificates # shellcheck disable=SC2086 env -i \ TEST_DOCKER_HOST="$engine_host" \ GOPATH="$GOPATH" \ PATH="$PWD/build/" \ "$(which go)" test -v ./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 ;; 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