| #!/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 |