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