mirror of
https://github.com/moby/moby.git
synced 2026-07-08 23:57:50 +00:00
Currently, IPAM config is never validated by the API. Some checks are done by the CLI, but they're not exhaustive. And some of these misconfigurations might be caught early by libnetwork (ie. when the network is created), and others only surface when connecting a container to a misconfigured network. In both cases, the API would return a 500. Although the `NetworkCreate` endpoint might already return warnings, these are never displayed by the CLI. As such, it was decided during a maintainer's call to return validation errors _for all API versions_. Signed-off-by: Albin Kerouanton <albinker@gmail.com> Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
74 lines
3.8 KiB
Bash
74 lines
3.8 KiB
Bash
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
source hack/make/.integration-test-helpers
|
|
|
|
# The commit or tag to use for testing
|
|
# TODO docker 17.06 cli client used in CI fails to build using a sha;
|
|
# unable to prepare context: unable to 'git clone' to temporary context directory: error fetching: error: no such remote ref ead0bb9e08c13dd3d1712759491eee06bf5a5602
|
|
#: exit status 128
|
|
: "${DOCKER_PY_COMMIT:=5.0.3}"
|
|
|
|
# The version (and variant) of the python image to use for the tests;
|
|
# see https://github.com/docker/docker-py/blob/5.0.3/tests/Dockerfile#L1C5-L3
|
|
#
|
|
# TODO remove once https://github.com/docker/docker-py/pull/3145 is merged.
|
|
: "${PYTHON_VERSION:=3.7-bullseye}"
|
|
|
|
# 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_create_with_device_cgroup_rules after https://github.com/docker/docker-py/issues/2939 is resolved
|
|
# TODO re-enable test_prune_volumes after https://github.com/docker/docker-py/pull/3051 is resolved
|
|
# TODO re-enable test_connect_with_ipv6_address after we updated to a version of docker-py with https://github.com/docker/docker-py/pull/3169
|
|
# TODO re-enable test_create_network_ipv6_enabled after we updated to a version of docker-py with https://github.com/docker/docker-py/pull/3169
|
|
# TODO re-enable test_create_with_ipv6_address after we updated to a version of docker-py with https://github.com/docker/docker-py/pull/3169
|
|
: "${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::CreateContainerTest::test_create_with_device_cgroup_rules --deselect=tests/integration/api_volume_test.py::TestVolumes::test_prune_volumes --deselect=tests/integration/api_network_test.py::TestNetworks::test_connect_with_ipv6_address --deselect=tests/integration/api_network_test.py::TestNetworks::test_create_network_ipv6_enabled --deselect=tests/integration/api_network_test.py::TestNetworks::test_create_with_ipv6_address}"
|
|
(
|
|
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} --build-arg PYTHON_VERSION="${PYTHON_VERSION}" -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
|
|
) 2>&1 | tee -a "$DEST/test.log"
|