Files
moby/hack/make/test-docker-py
Albin Kerouanton d2e0895b9b daemon: deprecate env vars set by legacy links
The environment variables set by legacy links are not particularly
useful because you need to know the name of the linked container to use
them, or you need to scan all enviornment variables to find them.

Legacy links are deprecated / marked "legacy" since a long time, and we
want to replace them with non-legacy links. This will help make the
default bridge work like custom networks.

For now, stop setting these environment variables inside of linking
containers by default, but provide an escape hatch to allow users who
still rely on these to re-enable them.

The integration-cli tests `TestExecEnvLinksHost` and `TestLinksEnvs` are
removed as they need to run against a daemon with legacy links env vars
enabled, and a new integration test`TestLegacyLinksEnvVars` is added to
fill the gap. Similarly, the docker-py test `test_create_with_links` is
skipped.

Signed-off-by: Albin Kerouanton <albinker@gmail.com>
2025-08-14 11:32:54 +02:00

90 lines
4.5 KiB
Bash

#!/usr/bin/env bash
set -e
source hack/make/.integration-test-helpers
# The commit or tag to use for testing
# TODO(thaJeztah): remove VERSION build-arg once https://github.com/docker/docker-py/pull/3267 is merged and released.
: "${DOCKER_PY_COMMIT:=7.1.0}"
# custom options to pass py.test
#
# This option can be used to temporarily skip flaky tests (using the `--deselect`
# flag) until they are fixed upstream. For example:
# --deselect=tests/integration/api_container_test.py::AttachContainerTest::test_attach_no_stream
: "${PY_TEST_OPTIONS:=--junitxml=${DEST}/junit-report.xml}"
# build --squash is not supported with containerd integration.
if [ -z "$TEST_INTEGRATION_USE_GRAPHDRIVER" ]; then
PY_TEST_OPTIONS="$PY_TEST_OPTIONS --deselect=tests/integration/api_build_test.py::BuildTest::test_build_squash"
fi
# TODO re-enable test_attach_no_stream after https://github.com/docker/docker-py/issues/2513 is resolved
PY_TEST_OPTIONS="$PY_TEST_OPTIONS --deselect=tests/integration/api_container_test.py::AttachContainerTest::test_attach_no_stream"
# TODO re-enable test_run_container_reading_socket_ws. It's reported in https://github.com/docker/docker-py/issues/1478, and we're getting that error in our tests.
PY_TEST_OPTIONS="$PY_TEST_OPTIONS --deselect=tests/integration/api_container_test.py::AttachContainerTest::test_run_container_reading_socket_ws"
# TODO re-enable test_run_with_networking_config once this issue is fixed: https://github.com/moby/moby/pull/46853#issuecomment-1864679942.
PY_TEST_OPTIONS="$PY_TEST_OPTIONS --deselect=tests/integration/models_containers_test.py::ContainerCollectionTest::test_run_with_networking_config"
# TODO(thaJeztah) re-enable after https://github.com/docker/docker-py/pull/3336 is in the DOCKER_PY_COMMIT release.
PY_TEST_OPTIONS="$PY_TEST_OPTIONS --deselect=tests/integration/api_build_test.py::BuildTest::test_build_container_with_target"
# TODO(vvoland): re-enable after https://github.com/docker/docker-py/pull/3203 is included in the DOCKER_PY_COMMIT release.
PY_TEST_OPTIONS="$PY_TEST_OPTIONS --deselect=tests/integration/api_image_test.py::CommitTest::test_commit"
PY_TEST_OPTIONS="$PY_TEST_OPTIONS --deselect=tests/integration/api_image_test.py::CommitTest::test_commit_with_changes"
# TODO(laurazard): re-enable after https://github.com/docker/docker-py/pull/3290 is included in the DOCKER_PY_COMMIT release.
PY_TEST_OPTIONS="$PY_TEST_OPTIONS --deselect=tests/integration/models_containers_test.py::ContainerTest::test_exec_run_failed"
# Legacy links are deprecated since a long time, and starting with v29.0, the Engine won't set legacy links env vars
# automatically in linking containers. Thus, this test is expected to fail — skip it. See https://github.com/moby/moby/pull/50719
PY_TEST_OPTIONS="${PY_TEST_OPTIONS} --deselect=tests/integration/api_container_test.py::CreateContainerTest::test_create_with_links"
(
bundle .integration-daemon-start
docker_host_scheme=$(echo "${DOCKER_HOST}" | cut -d: -f1 -)
case "${docker_host_scheme}" in
unix)
# trim the tcp:// scheme, and bind-mount the docker socket into the container
run_opts="--mount type=bind,src=${DOCKER_HOST#unix://},dst=/var/run/docker.sock"
;;
tcp)
# run container in host-mode networking so that it can connect to the
# daemon from the current networking namespace (e.g., to connect to localhost)
run_opts="--network=host -e DOCKER_HOST=${DOCKER_HOST}"
;;
*)
echo "WARN: Skipping test-docker-py: connecting to docker daemon using ${docker_host_scheme} (${DOCKER_HOST}) not supported"
bundle .integration-daemon-stop
return 0
;;
esac
docker_py_image="docker-sdk-python3:${DOCKER_PY_COMMIT}"
if ! docker image inspect "dockerPyImage" &> /dev/null; then
echo INFO: Building ${docker_py_image}...
(
[ -n "${TESTDEBUG}" ] && set -x
[ -z "${TESTDEBUG}" ] && build_opts="--quiet"
[ -f /.dockerenv ] || build_opts="${build_opts} --network=host"
# TODO(thaJeztah): remove VERSION build-arg once https://github.com/docker/docker-py/pull/3267 is merged and released.
# shellcheck disable=SC2086
exec docker build ${build_opts} -t "${docker_py_image}" --build-arg VERSION="${DOCKER_PY_COMMIT}" -f tests/Dockerfile "https://github.com/docker/docker-py.git#${DOCKER_PY_COMMIT}"
)
fi
echo INFO: Starting docker-py tests...
(
[ -n "${TESTDEBUG}" ] && set -x
# shellcheck disable=SC2086,SC2140
exec docker run --rm ${run_opts} --mount type=bind,"src=${ABS_DEST}","dst=/src/${DEST}" "${docker_py_image}" pytest ${PY_TEST_OPTIONS} tests/integration
)
bundle .integration-daemon-stop
) &> >(tee -a "$DEST/test.log")