From da3465e5092d1ce7a2aedcd8d52256f5dbc7b7be Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Mon, 15 Dec 2014 11:44:15 -0800 Subject: [PATCH 1/2] Add docker-py integration tests aginst the docker daemon This clones and run the integration tests for docker-py master as part of the integration tests created on master. docker-py hits the api directly and should be a good way to identify regressions in the api. Signed-off-by: Michael Crosby Upstream-commit: 5d6eca6642c5749099513f1f66bb44e004aa0938 Component: engine --- components/engine/Dockerfile | 2 + components/engine/Makefile | 2 +- components/engine/project/make/test-docker-py | 43 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 components/engine/project/make/test-docker-py diff --git a/components/engine/Dockerfile b/components/engine/Dockerfile index cbddccac2f..c276eb3e72 100644 --- a/components/engine/Dockerfile +++ b/components/engine/Dockerfile @@ -42,6 +42,8 @@ RUN apt-get update && apt-get install -y \ lxc=1.0* \ mercurial \ parallel \ + python-mock \ + python-pip \ reprepro \ ruby1.9.1 \ ruby1.9.1-dev \ diff --git a/components/engine/Makefile b/components/engine/Makefile index 6f76fa4d29..70799d3c2c 100644 --- a/components/engine/Makefile +++ b/components/engine/Makefile @@ -56,7 +56,7 @@ docs-release: docs-build $(DOCKER_RUN_DOCS) -e OPTIONS -e BUILD_ROOT "$(DOCKER_DOCS_IMAGE)" ./release.sh test: build - $(DOCKER_RUN_DOCKER) hack/make.sh binary cross test-unit test-integration test-integration-cli + $(DOCKER_RUN_DOCKER) hack/make.sh binary cross test-unit test-integration test-integration-cli test-docker-py test-unit: build $(DOCKER_RUN_DOCKER) hack/make.sh test-unit diff --git a/components/engine/project/make/test-docker-py b/components/engine/project/make/test-docker-py new file mode 100644 index 0000000000..2a39c6fa51 --- /dev/null +++ b/components/engine/project/make/test-docker-py @@ -0,0 +1,43 @@ +#!/bin/bash +set -e + +DEST=$1 + +DOCKER_GRAPHDRIVER=${DOCKER_GRAPHDRIVER:-vfs} +DOCKER_EXECDRIVER=${DOCKER_EXECDRIVER:-native} + +# subshell so that we can export PATH without breaking other things +exec > >(tee -a $DEST/test.log) 2>&1 +( + export PATH="$DEST/../binary:$DEST/../dynbinary:$PATH" + + if ! command -v docker &> /dev/null; then + echo >&2 'error: binary or dynbinary must be run before test-docker-py' + false + fi + + # intentionally open a couple bogus file descriptors to help test that they get scrubbed in containers + exec 41>&1 42>&2 + + ( set -x; exec \ + docker --daemon --debug \ + --storage-driver "$DOCKER_GRAPHDRIVER" \ + --exec-driver "$DOCKER_EXECDRIVER" \ + --pidfile "$DEST/docker.pid" \ + &> "$DEST/docker.log" + ) & + + mkdir -p /tmp/dockerpy-tests && cd /tmp/dockerpy-tests + git clone https://github.com/docker/docker-py.git + cd docker-py + git checkout 0.6.0-integration + python setup.py install + python tests/integration_test.py + + for pid in $(find "$DEST" -name docker.pid); do + DOCKER_PID=$(set -x; cat "$pid") + ( set -x; kill $DOCKER_PID ) + wait $DOCKERD_PID || true + done +) + From 241c2f046523e2ed668e993b01b1449efe3f9fd1 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Fri, 19 Dec 2014 00:20:59 -0700 Subject: [PATCH 2/2] Tweak test-docker-py feature - move docker/docker-py clone to the Dockerfile - put "integration test daemon startup" code in a separate file for both scripts to source - add new test-docker-py Makefile target - include "python-websocket" package in Dockerfile for running the tests Signed-off-by: Andrew "Tianon" Page Upstream-commit: 100267de81985bbf3b976bfde850def89487dc11 Component: engine --- components/engine/Dockerfile | 4 ++ components/engine/Makefile | 5 ++- components/engine/project/make.sh | 1 + .../project/make/.integration-daemon-start | 24 ++++++++++++ .../project/make/.integration-daemon-stop | 7 ++++ components/engine/project/make/test-docker-py | 39 +++++-------------- .../engine/project/make/test-integration-cli | 27 +------------ 7 files changed, 51 insertions(+), 56 deletions(-) create mode 100644 components/engine/project/make/.integration-daemon-start create mode 100644 components/engine/project/make/.integration-daemon-stop diff --git a/components/engine/Dockerfile b/components/engine/Dockerfile index c276eb3e72..a7b6bbc427 100644 --- a/components/engine/Dockerfile +++ b/components/engine/Dockerfile @@ -44,6 +44,7 @@ RUN apt-get update && apt-get install -y \ parallel \ python-mock \ python-pip \ + python-websocket \ reprepro \ ruby1.9.1 \ ruby1.9.1-dev \ @@ -95,6 +96,9 @@ RUN git clone -b buildroot-2014.02 https://github.com/jpetazzo/docker-busybox.gi # Get the "cirros" image source so we can import it instead of fetching it during tests RUN curl -sSL -o /cirros.tar.gz https://github.com/ewindisch/docker-cirros/raw/1cded459668e8b9dbf4ef976c94c05add9bbd8e9/cirros-0.3.0-x86_64-lxc.tar.gz +# Get the "docker-py" source so we can run their integration tests +RUN git clone -b 0.7.0 https://github.com/docker/docker-py.git /docker-py + # Setup s3cmd config RUN /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_KEY' > $HOME/.s3cfg diff --git a/components/engine/Makefile b/components/engine/Makefile index 70799d3c2c..f1ae554a01 100644 --- a/components/engine/Makefile +++ b/components/engine/Makefile @@ -1,4 +1,4 @@ -.PHONY: all binary build cross default docs docs-build docs-shell shell test test-unit test-integration test-integration-cli validate +.PHONY: all binary build cross default docs docs-build docs-shell shell test test-unit test-integration test-integration-cli test-docker-py validate # env vars passed through directly to Docker's build scripts # to allow things like `make DOCKER_CLIENTONLY=1 binary` easily @@ -67,6 +67,9 @@ test-integration: build test-integration-cli: build $(DOCKER_RUN_DOCKER) hack/make.sh binary test-integration-cli +test-docker-py: build + $(DOCKER_RUN_DOCKER) hack/make.sh binary test-docker-py + validate: build $(DOCKER_RUN_DOCKER) hack/make.sh validate-gofmt validate-dco diff --git a/components/engine/project/make.sh b/components/engine/project/make.sh index 2b3a530ea1..cf12016497 100755 --- a/components/engine/project/make.sh +++ b/components/engine/project/make.sh @@ -50,6 +50,7 @@ DEFAULT_BUNDLES=( test-unit test-integration test-integration-cli + test-docker-py dynbinary dyntest-unit diff --git a/components/engine/project/make/.integration-daemon-start b/components/engine/project/make/.integration-daemon-start new file mode 100644 index 0000000000..b974422cd7 --- /dev/null +++ b/components/engine/project/make/.integration-daemon-start @@ -0,0 +1,24 @@ +#!/bin/bash + +# see test-integration-cli for example usage of this script + +export PATH="$DEST/../binary:$DEST/../dynbinary:$PATH" + +if ! command -v docker &> /dev/null; then + echo >&2 'error: binary or dynbinary must be run before .integration-daemon-start' + false +fi + +# intentionally open a couple bogus file descriptors to help test that they get scrubbed in containers +exec 41>&1 42>&2 + +DOCKER_GRAPHDRIVER=${DOCKER_GRAPHDRIVER:-vfs} +DOCKER_EXECDRIVER=${DOCKER_EXECDRIVER:-native} + +( set -x; exec \ + docker --daemon --debug \ + --storage-driver "$DOCKER_GRAPHDRIVER" \ + --exec-driver "$DOCKER_EXECDRIVER" \ + --pidfile "$DEST/docker.pid" \ + &> "$DEST/docker.log" +) & diff --git a/components/engine/project/make/.integration-daemon-stop b/components/engine/project/make/.integration-daemon-stop new file mode 100644 index 0000000000..57dc651d46 --- /dev/null +++ b/components/engine/project/make/.integration-daemon-stop @@ -0,0 +1,7 @@ +#!/bin/bash + +for pid in $(find "$DEST" -name docker.pid); do + DOCKER_PID=$(set -x; cat "$pid") + ( set -x; kill $DOCKER_PID ) + wait $DOCKERD_PID || true +done diff --git a/components/engine/project/make/test-docker-py b/components/engine/project/make/test-docker-py index 2a39c6fa51..1096c9cbfc 100644 --- a/components/engine/project/make/test-docker-py +++ b/components/engine/project/make/test-docker-py @@ -3,41 +3,20 @@ set -e DEST=$1 -DOCKER_GRAPHDRIVER=${DOCKER_GRAPHDRIVER:-vfs} -DOCKER_EXECDRIVER=${DOCKER_EXECDRIVER:-native} - # subshell so that we can export PATH without breaking other things exec > >(tee -a $DEST/test.log) 2>&1 ( - export PATH="$DEST/../binary:$DEST/../dynbinary:$PATH" + source "$(dirname "$BASH_SOURCE")/.integration-daemon-start" - if ! command -v docker &> /dev/null; then - echo >&2 'error: binary or dynbinary must be run before test-docker-py' - false - fi + dockerPy='/docker-py' + [ -d "$dockerPy" ] || { + dockerPy="$DEST/docker-py" + git clone https://github.com/docker/docker-py.git "$dockerPy" + } - # intentionally open a couple bogus file descriptors to help test that they get scrubbed in containers - exec 41>&1 42>&2 - - ( set -x; exec \ - docker --daemon --debug \ - --storage-driver "$DOCKER_GRAPHDRIVER" \ - --exec-driver "$DOCKER_EXECDRIVER" \ - --pidfile "$DEST/docker.pid" \ - &> "$DEST/docker.log" - ) & - - mkdir -p /tmp/dockerpy-tests && cd /tmp/dockerpy-tests - git clone https://github.com/docker/docker-py.git - cd docker-py - git checkout 0.6.0-integration - python setup.py install + cd "$dockerPy" + export PYTHONPATH=. # import "docker" from "." python tests/integration_test.py - for pid in $(find "$DEST" -name docker.pid); do - DOCKER_PID=$(set -x; cat "$pid") - ( set -x; kill $DOCKER_PID ) - wait $DOCKERD_PID || true - done + source "$(dirname "$BASH_SOURCE")/.integration-daemon-stop" ) - diff --git a/components/engine/project/make/test-integration-cli b/components/engine/project/make/test-integration-cli index e371fac071..b8647ef763 100644 --- a/components/engine/project/make/test-integration-cli +++ b/components/engine/project/make/test-integration-cli @@ -3,9 +3,6 @@ set -e DEST=$1 -DOCKER_GRAPHDRIVER=${DOCKER_GRAPHDRIVER:-vfs} -DOCKER_EXECDRIVER=${DOCKER_EXECDRIVER:-native} - bundle_test_integration_cli() { go_test_dir ./integration-cli } @@ -13,23 +10,7 @@ bundle_test_integration_cli() { # subshell so that we can export PATH without breaking other things exec > >(tee -a $DEST/test.log) 2>&1 ( - export PATH="$DEST/../binary:$DEST/../dynbinary:$PATH" - - if ! command -v docker &> /dev/null; then - echo >&2 'error: binary or dynbinary must be run before test-integration-cli' - false - fi - - # intentionally open a couple bogus file descriptors to help test that they get scrubbed in containers - exec 41>&1 42>&2 - - ( set -x; exec \ - docker --daemon --debug \ - --storage-driver "$DOCKER_GRAPHDRIVER" \ - --exec-driver "$DOCKER_EXECDRIVER" \ - --pidfile "$DEST/docker.pid" \ - &> "$DEST/docker.log" - ) & + source "$(dirname "$BASH_SOURCE")/.integration-daemon-start" # pull the busybox image before running the tests sleep 2 @@ -38,9 +19,5 @@ exec > >(tee -a $DEST/test.log) 2>&1 bundle_test_integration_cli - for pid in $(find "$DEST" -name docker.pid); do - DOCKER_PID=$(set -x; cat "$pid") - ( set -x; kill $DOCKER_PID ) - wait $DOCKERD_PID || true - done + source "$(dirname "$BASH_SOURCE")/.integration-daemon-stop" )