Run integration tests with multiple Docker engine versions

Add a run_multiversion.sh script that downloads a variety of Docker
engines and runs the integration tests against each of them.

Skip some of the tests when running with Docker 1.6.0. It has a bug that
prevents these tests from completing successfully.

Fixes #751

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
This commit is contained in:
Aaron Lehmann 2015-07-27 18:08:04 -07:00
parent 2b74c46795
commit e564231f58
2 changed files with 57 additions and 0 deletions

View file

@ -0,0 +1,46 @@
#!/usr/bin/env bash
# Run the integration tests with multiple versions of the Docker engine
set -e
# 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.7.0"
for v in $versions; do
echo "Downloading Docker $v"
binpath="$tmpdir/docker-$v"
curl -L -o "$binpath" "https://test.docker.com/builds/Linux/x86_64/docker-$v"
chmod +x "$binpath"
echo "Running tests with Docker $v"
DOCKER_BINARY="$binpath" DOCKER_VOLUME="$volume" ./run.sh
done
# Latest experimental version
# Extract URI from https://experimental.docker.com/builds/
experimental=`curl -sSL https://experimental.docker.com/builds/ | tr " " "\n" | grep 'https://experimental.docker.com/builds/Linux/'`
echo "Downloading Docker experimental"
binpath="$tmpdir/docker-experimental"
curl -L -o "$binpath" "$experimental"
chmod +x "$binpath"
echo "Running tests with Docker experimental"
DOCKER_BINARY="$binpath" DOCKER_VOLUME="$volume" ./run.sh

View file

@ -13,6 +13,15 @@ function setup() {
docker pull $image 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.0"'
if [ "$status" -eq 0 ]; then
skip "Basic auth tests don't support 1.6.0"
fi
}
# has_digest enforces the last output line is "Digest: sha256:..." # has_digest enforces the last output line is "Digest: sha256:..."
# the input is the name of the array containing the output lines # the input is the name of the array containing the output lines
function has_digest() { function has_digest() {
@ -35,6 +44,7 @@ function login() {
} }
@test "Test basic auth" { @test "Test basic auth" {
basic_auth_version_check
login $hostname:5441 login $hostname:5441
docker tag -f $image $hostname:5441/$image docker tag -f $image $hostname:5441/$image
run docker push $hostname:5441/$image run docker push $hostname:5441/$image
@ -56,6 +66,7 @@ function login() {
} }
@test "Test basic auth with TLS client auth" { @test "Test basic auth with TLS client auth" {
basic_auth_version_check
login $hostname:5444 login $hostname:5444
docker tag -f $image $hostname:5444/$image docker tag -f $image $hostname:5444/$image
run docker push $hostname:5444/$image run docker push $hostname:5444/$image