diff --git a/contrib/docker-integration/run_multiversion.sh b/contrib/docker-integration/run_multiversion.sh new file mode 100755 index 00000000..e52a0e24 --- /dev/null +++ b/contrib/docker-integration/run_multiversion.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +# Run the integration tests with multiple versions of the Docker engine + +set -e +set -x + +# Don't use /tmp because this isn't available in boot2docker +tmpdir_template="`pwd`/docker-versions.XXXXX" +tmpdir=`mktemp -d "$tmpdir_template"` +trap "rm -rf $tmpdir" EXIT + +# If DOCKER_VOLUME is unset, create a temporary directory to cache containers +# between runs +# Only do this on Linux, because using /var/lib/docker from a host volume seems +# problematic with boot2docker. +if [ "$DOCKER_VOLUME" = "" -a `uname` = "Linux" ]; then + volumes_template="`pwd`/docker-versions.XXXXX" + volume=`mktemp -d "$volumes_template"` + trap "rm -rf $tmpdir $volume" EXIT +else + volume="$DOCKER_VOLUME" +fi + +# Released versions + +versions="1.6.0 1.6.1 1.7.0 1.7.1" + +for v in $versions; do + echo "Extracting Docker $v from dind image" + binpath="$tmpdir/docker-$v/docker" + ID=$(docker create dockerswarm/dind:$v) + docker cp "$ID:/usr/local/bin/docker" "$tmpdir/docker-$v" + + echo "Running tests with Docker $v" + DOCKER_BINARY="$binpath" DOCKER_VOLUME="$volume" ./run.sh + + # Cleanup. + docker rm -f "$ID" +done + +# Latest experimental version + +echo "Extracting Docker master from dind image" +binpath="$tmpdir/docker-master/docker" +docker pull dockerswarm/dind-master +ID=$(docker create dockerswarm/dind-master) +docker cp "$ID:/usr/local/bin/docker" "$tmpdir/docker-master" + +echo "Running tests with Docker master" +DOCKER_BINARY="$binpath" DOCKER_VOLUME="$volume" ./run.sh + +# Cleanup. +docker rm -f "$ID" diff --git a/contrib/docker-integration/tls.bats b/contrib/docker-integration/tls.bats index c0332283..8b7ae287 100644 --- a/contrib/docker-integration/tls.bats +++ b/contrib/docker-integration/tls.bats @@ -13,6 +13,15 @@ function setup() { docker pull $image } +# skip basic auth tests with Docker 1.6, where they don't pass due to +# certificate issues +function basic_auth_version_check() { + run sh -c 'docker version | fgrep -q "Client version: 1.6."' + if [ "$status" -eq 0 ]; then + skip "Basic auth tests don't support 1.6.x" + fi +} + # has_digest enforces the last output line is "Digest: sha256:..." # the input is the name of the array containing the output lines function has_digest() { @@ -35,6 +44,7 @@ function login() { } @test "Test basic auth" { + basic_auth_version_check login $hostname:5441 docker tag -f $image $hostname:5441/$image run docker push $hostname:5441/$image @@ -56,6 +66,7 @@ function login() { } @test "Test basic auth with TLS client auth" { + basic_auth_version_check login $hostname:5444 docker tag -f $image $hostname:5444/$image run docker push $hostname:5444/$image