github.com/khulnasoft/cli@v0.0.0-20240402070845-01bcad7beefa/scripts/test/e2e/run (about) 1 #!/usr/bin/env bash 2 # Run integration tests against the latest docker-ce dind 3 set -eu -o pipefail 4 5 source ./scripts/build/.variables 6 7 container_ip() { 8 local cid=$1 9 local network=$2 10 docker inspect \ 11 -f "{{.NetworkSettings.Networks.${network}.IPAddress}}" "$cid" 12 } 13 14 fetch_images() { 15 ./scripts/test/e2e/load-image fetch-only 16 } 17 18 setup() { 19 local project=$1 20 local file=$2 21 22 test "${DOCKERD_EXPERIMENTAL:-0}" -eq "1" && file="${file}:./e2e/compose-env.experimental.yaml" 23 24 if [ "${TEST_CONNHELPER:-}" = "ssh" ];then 25 test ! -f "${HOME}/.ssh/id_rsa" && ssh-keygen -t rsa -C docker-e2e-dummy -N "" -f "${HOME}/.ssh/id_rsa" -q 26 grep "^StrictHostKeyChecking no" "${HOME}/.ssh/config" > /dev/null 2>&1 || echo "StrictHostKeyChecking no" > "${HOME}/.ssh/config" 27 TEST_CONNHELPER_SSH_ID_RSA_PUB=$(cat "${HOME}/.ssh/id_rsa.pub") 28 export TEST_CONNHELPER_SSH_ID_RSA_PUB 29 file="${file}:./e2e/compose-env.connhelper-ssh.yaml" 30 fi 31 COMPOSE_PROJECT_NAME=$project COMPOSE_FILE=$file docker compose up --build -d >&2 32 33 local network="${project}_default" 34 # TODO: only run if inside a container 35 docker network connect "$network" "$(hostname)" 36 37 engine_ip="$(container_ip "${project}-engine-1" "$network")" 38 engine_host="tcp://$engine_ip:2375" 39 if [ "${TEST_CONNHELPER:-}" = "ssh" ];then 40 engine_host="ssh://penguin@${engine_ip}" 41 fi 42 ( 43 export DOCKER_HOST="$engine_host" 44 timeout 200 ./scripts/test/e2e/wait-on-daemon 45 ./scripts/test/e2e/load-image 46 is_swarm_enabled || docker swarm init 47 ) >&2 48 echo "$engine_host" 49 } 50 51 is_swarm_enabled() { 52 docker info 2> /dev/null | grep -q 'Swarm: active' 53 } 54 55 cleanup() { 56 local project=$1 57 local network="${project}_default" 58 docker network disconnect "$network" "$(hostname)" 59 COMPOSE_PROJECT_NAME=$1 COMPOSE_FILE=$2 docker compose down -v --rmi local >&2 60 } 61 62 runtests() { 63 local engine_host=$1 64 65 # shellcheck disable=SC2086 66 env -i \ 67 TEST_DOCKER_HOST="$engine_host" \ 68 TEST_DOCKER_CERT_PATH="${DOCKER_CERT_PATH-}" \ 69 TEST_REMOTE_DAEMON="${REMOTE_DAEMON-}" \ 70 TEST_SKIP_PLUGIN_TESTS="${SKIP_PLUGIN_TESTS-}" \ 71 GOPATH="$GOPATH" \ 72 PATH="$PWD/build/:/usr/bin:/usr/local/bin:/usr/local/go/bin" \ 73 HOME="$HOME" \ 74 DOCKER_CLI_E2E_PLUGINS_EXTRA_DIRS="$PWD/build/plugins-linux-${GOARCH}" \ 75 GO111MODULE=auto \ 76 "$(command -v gotestsum)" -- ${TESTDIRS:-./e2e/...} ${TESTFLAGS-} 77 } 78 79 export unique_id="${E2E_UNIQUE_ID:-cliendtoendsuite}" 80 compose_env_file=./e2e/compose-env.yaml 81 82 cmd=${1-} 83 84 case "$cmd" in 85 setup) 86 setup "$unique_id" "$compose_env_file" 87 exit 88 ;; 89 cleanup) 90 cleanup "$unique_id" "$compose_env_file" 91 exit 92 ;; 93 fetch-images) 94 fetch_images 95 exit 96 ;; 97 test) 98 engine_host=${2-} 99 if [ -z "${engine_host}" ]; then 100 echo "missing parameter docker engine host" 101 echo "Usage: $0 test ENGINE_HOST" 102 exit 3 103 fi 104 runtests "$engine_host" 105 ;; 106 run|"") 107 engine_host="$(setup "$unique_id" "$compose_env_file")" 108 testexit=0 109 runtests "$engine_host" || testexit=$? 110 cleanup "$unique_id" "$compose_env_file" 111 exit $testexit 112 ;; 113 shell) 114 $SHELL 115 ;; 116 *) 117 echo "Unknown command: $cmd" 118 echo "Usage: " 119 echo " $0 [setup | cleanup | test | run] [engine_host]" 120 exit 1 121 ;; 122 esac