diff --git a/contrib/docker-integration/Dockerfile b/contrib/docker-integration/Dockerfile new file mode 100644 index 00000000..dc3511c4 --- /dev/null +++ b/contrib/docker-integration/Dockerfile @@ -0,0 +1,55 @@ +FROM debian:jessie + +# compile and runtime deps +# https://github.com/docker/docker/blob/master/project/PACKAGERS.md#runtime-dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + # For DIND + ca-certificates \ + curl \ + iptables \ + procps \ + e2fsprogs \ + xz-utils \ + # For build + build-essential \ + file \ + git \ + net-tools \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +# Install Docker +ENV VERSION 1.7.0-rc1 +RUN curl -L -o /usr/local/bin/docker https://test.docker.com/builds/Linux/x86_64/docker-${VERSION} \ + && chmod +x /usr/local/bin/docker + +# Install DIND +RUN curl -L -o /dind https://raw.githubusercontent.com/docker/docker/master/hack/dind \ + && chmod +x /dind + +# Install golang +ENV GO_VERSION 1.4.2 +RUN curl -sSL https://golang.org/dl/go${GO_VERSION}.src.tar.gz | tar -v -C /usr/local -xz \ + && mkdir -p /go/bin +ENV PATH /go/bin:/usr/local/go/bin:$PATH +ENV GOPATH /go +RUN cd /usr/local/go/src && ./make.bash --no-clean 2>&1 + +# Go dependencies +RUN go get github.com/tools/godep + +# Install bats +RUN cd /usr/local/src/ \ + && git clone https://github.com/sstephenson/bats.git \ + && cd bats \ + && ./install.sh /usr/local + +# Install docker-compose +RUN curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose \ + && chmod +x /usr/local/bin/docker-compose + +RUN mkdir -p /go/src/github.com/docker/distribution +WORKDIR /go/src/github.com/docker/distribution/contrib/docker-integration + +VOLUME /var/lib/docker + +ENTRYPOINT ["/dind"] diff --git a/contrib/docker-integration/run.sh b/contrib/docker-integration/run.sh new file mode 100755 index 00000000..8d730b59 --- /dev/null +++ b/contrib/docker-integration/run.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -e + +cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" + +# Root directory of Distribution +DISTRIBUTION_ROOT=$(cd ../..; pwd -P) + +# Image containing the integration tests environment. +INTEGRATION_IMAGE=${INTEGRATION_IMAGE:-distribution/docker-integration} + +# Make sure we upgrade the integration environment. +# Not yet on hub, run `docker build -t distribution/docker-integration .` +#docker pull $INTEGRATION_IMAGE + +# Start the integration tests in a Docker container. +ID=$(docker run -d -t --privileged \ + -v ${DISTRIBUTION_ROOT}:/go/src/github.com/docker/distribution \ + -e "DOCKER_IMAGE=$DOCKER_IMAGE" \ + -e "DOCKER_VERSION=$DOCKER_VERSION" \ + -e "STORAGE_DRIVER=$STORAGE_DRIVER" \ + -e "EXEC_DRIVER=$EXEC_DRIVER" \ + ${INTEGRATION_IMAGE} \ + ./test_runner.sh "$@") + +# Clean it up when we exit. +trap "docker rm -f -v $ID > /dev/null" EXIT + +docker logs -f $ID diff --git a/contrib/docker-integration/test_runner.sh b/contrib/docker-integration/test_runner.sh new file mode 100755 index 00000000..3ce1bb7a --- /dev/null +++ b/contrib/docker-integration/test_runner.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +set -e + +cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" + +# Load the helpers. +#. helpers.bash + +TESTS=${@:-.} + +# Drivers to use for Docker engines the tests are going to create. +STORAGE_DRIVER=${STORAGE_DRIVER:-overlay} +EXEC_DRIVER=${EXEC_DRIVER:-native} + + +function execute() { + >&2 echo "++ $@" + eval "$@" +} + +# Set IP address in /etc/hosts for localregistry +IP=$(ifconfig eth0|grep "inet addr:"| cut -d: -f2 | awk '{ print $1}') +execute echo "$IP localregistry" >> /etc/hosts + +# Setup certificates +execute sh install_certs.sh localregistry + +# Start the docker engine. +execute docker --daemon --log-level=panic \ + --storage-driver="$STORAGE_DRIVER" --exec-driver="$EXEC_DRIVER" & +DOCKER_PID=$! + +# Wait for it to become reachable. +tries=10 +until docker version &> /dev/null; do + (( tries-- )) + if [ $tries -le 0 ]; then + echo >&2 "error: daemon failed to start" + exit 1 + fi + sleep 1 +done + +execute time docker-compose build + +execute docker-compose up -d + +# Run the tests. +execute time bats -p $TESTS + + +# Run test script +execute sh test_docker.sh localregistry +