File: run

package info (click to toggle)
docker.io 26.1.5%2Bdfsg1-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 68,576 kB
  • sloc: sh: 5,748; makefile: 912; ansic: 664; asm: 228; python: 162
file content (122 lines) | stat: -rwxr-xr-x 3,556 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/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

    test "${DOCKERD_EXPERIMENTAL:-0}" -eq "1" && file="${file}:./e2e/compose-env.experimental.yaml"

    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