Add dind test runner
Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)master
							parent
							
								
									f6716e73c9
								
							
						
					
					
						commit
						06de74a4e9
					
				|  | @ -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"] | ||||||
|  | @ -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 | ||||||
|  | @ -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 | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue