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