From 100267de81985bbf3b976bfde850def89487dc11 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Fri, 19 Dec 2014 00:20:59 -0700 Subject: [PATCH] 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 --- Dockerfile | 4 +++ Makefile | 5 +++- project/make.sh | 1 + project/make/.integration-daemon-start | 24 ++++++++++++++++ project/make/.integration-daemon-stop | 7 +++++ project/make/test-docker-py | 39 ++++++-------------------- project/make/test-integration-cli | 27 ++---------------- 7 files changed, 51 insertions(+), 56 deletions(-) create mode 100644 project/make/.integration-daemon-start create mode 100644 project/make/.integration-daemon-stop diff --git a/Dockerfile b/Dockerfile index c276eb3e726a5..a7b6bbc42773b 100644 --- a/Dockerfile +++ b/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/Makefile b/Makefile index 70799d3c2cf7c..f1ae554a01257 100644 --- a/Makefile +++ b/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/project/make.sh b/project/make.sh index 2b3a530ea1a71..cf12016497614 100755 --- a/project/make.sh +++ b/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/project/make/.integration-daemon-start b/project/make/.integration-daemon-start new file mode 100644 index 0000000000000..b974422cd76a9 --- /dev/null +++ b/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/project/make/.integration-daemon-stop b/project/make/.integration-daemon-stop new file mode 100644 index 0000000000000..57dc651d464c7 --- /dev/null +++ b/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/project/make/test-docker-py b/project/make/test-docker-py index 2a39c6fa51bf2..1096c9cbfcb28 100644 --- a/project/make/test-docker-py +++ b/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" - - if ! command -v docker &> /dev/null; then - echo >&2 'error: binary or dynbinary must be run before test-docker-py' - false - fi + source "$(dirname "$BASH_SOURCE")/.integration-daemon-start" - # intentionally open a couple bogus file descriptors to help test that they get scrubbed in containers - exec 41>&1 42>&2 + dockerPy='/docker-py' + [ -d "$dockerPy" ] || { + dockerPy="$DEST/docker-py" + git clone https://github.com/docker/docker-py.git "$dockerPy" + } - ( 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/project/make/test-integration-cli b/project/make/test-integration-cli index e371fac0719e4..b8647ef76355c 100644 --- a/project/make/test-integration-cli +++ b/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" )