9e5b86f647
In some cases, when the daemon launched by a test panics and quits, the
cleanup code would end with an error when trying to kill it by its pid.
In those cases the whole suite will end up waiting for the daemon that
we start in .integration-daemon-start to finish and we end up waiting 2
hours for the CI to cancel after a timeout.
Using process substitution makes the integration tests quit.
Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>
(cherry picked from commit 3d8b8dc09a
)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
60 lines
2.5 KiB
Bash
60 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
source hack/make/.integration-test-helpers
|
|
|
|
# The commit or tag to use for testing
|
|
: "${DOCKER_PY_COMMIT:=7.0.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
|
|
# TODO re-enable test_attach_no_stream after https://github.com/docker/docker-py/issues/2513 is resolved
|
|
# 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:=--junitxml=${DEST}/junit-report.xml --deselect=tests/integration/api_container_test.py::AttachContainerTest::test_attach_no_stream --deselect=tests/integration/api_container_test.py::AttachContainerTest::test_run_container_reading_socket_ws}"
|
|
(
|
|
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"
|
|
# shellcheck disable=SC2086
|
|
exec docker build ${build_opts} -t "${docker_py_image}" -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")
|