mirror of https://github.com/docker/docs.git
114 lines
4.2 KiB
Python
Executable File
114 lines
4.2 KiB
Python
Executable File
"""
|
|
"vendors" notary into docker and runs integration tests - then builds the
|
|
docker client binary with an API version compatible with the existing
|
|
daemon
|
|
|
|
Usage:
|
|
python docker-integration-test.py
|
|
|
|
This assumes that your docker directory is in $GOPATH/src/github.com/docker/docker
|
|
and your notary directory, irrespective of where this script is located, is
|
|
at $GOPATH/src/github.com/docker/notary.
|
|
"""
|
|
from __future__ import print_function
|
|
import os
|
|
import re
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
|
|
def from_gopath(gopkg):
|
|
"""
|
|
Gets the location of the go source given go package, based on the $GOPATH.
|
|
"""
|
|
gopaths = os.getenv("GOPATH")
|
|
for path in gopaths.split(":"):
|
|
maybe_path = os.path.abspath(os.path.expanduser(os.path.join(
|
|
path, "src", *gopkg.split("/"))))
|
|
if os.path.isdir(maybe_path):
|
|
return maybe_path
|
|
return ""
|
|
|
|
|
|
DOCKER_DIR = from_gopath("github.com/docker/docker")
|
|
NOTARY_DIR = from_gopath("github.com/docker/notary")
|
|
|
|
|
|
def fake_vendor():
|
|
"""
|
|
"vendors" notary into docker by copying all of notary into the docker
|
|
vendor directory - also appending several lines into the Dockerfile because
|
|
it pulls down notary from github and builds the binaries
|
|
"""
|
|
docker_notary_relpath = "vendor/src/github.com/docker/notary"
|
|
docker_notary_abspath = os.path.join(DOCKER_DIR, docker_notary_relpath)
|
|
|
|
print("copying notary ({0}) into {1}".format(NOTARY_DIR, docker_notary_abspath))
|
|
|
|
def ignore_dirs(walked_dir, _):
|
|
"""
|
|
Don't vendor everything, particularly not the docker directory
|
|
recursively, if it happened to be in the notary directory
|
|
"""
|
|
if walked_dir == NOTARY_DIR:
|
|
return [".git", ".cover", "docs", "bin"]
|
|
elif walked_dir == os.path.join(NOTARY_DIR, "fixtures"):
|
|
return ["compatibility"]
|
|
return []
|
|
|
|
if os.path.exists(docker_notary_abspath):
|
|
shutil.rmtree(docker_notary_abspath)
|
|
shutil.copytree(
|
|
NOTARY_DIR, docker_notary_abspath, symlinks=True, ignore=ignore_dirs)
|
|
|
|
# hack this because docker/docker's Dockerfile checks out a particular version of notary
|
|
# based on a tag or SHA, and we want to build based on what was vendored in
|
|
dockerfile_addition = ("\n"
|
|
"RUN set -x && "
|
|
"export GO15VENDOREXPERIMENT=1 && "
|
|
"go build -o /usr/local/bin/notary-server github.com/docker/notary/cmd/notary-server &&"
|
|
"go build -o /usr/local/bin/notary github.com/docker/notary/cmd/notary")
|
|
|
|
with open(os.path.join(DOCKER_DIR, "Dockerfile")) as dockerfile:
|
|
text = dockerfile.read()
|
|
|
|
if not text.endswith(dockerfile_addition):
|
|
with open(os.path.join(DOCKER_DIR, "Dockerfile"), 'a+') as dockerfile:
|
|
dockerfile.write(dockerfile_addition)
|
|
|
|
# hack the makefile so that we tag the built image as something else so we
|
|
# don't interfere with any other docker test builds
|
|
with open(os.path.join(DOCKER_DIR, "Makefile"), 'r') as makefile:
|
|
makefiletext = makefile.read()
|
|
|
|
with open(os.path.join(DOCKER_DIR, "Makefile"), 'wb') as makefile:
|
|
image_name = os.getenv("DOCKER_TEST_IMAGE_NAME", "notary-docker-vendor-test")
|
|
text = re.sub("^DOCKER_IMAGE := .+$", "DOCKER_IMAGE := {0}".format(image_name),
|
|
makefiletext, 1, flags=re.M)
|
|
makefile.write(text)
|
|
|
|
def run_integration_test():
|
|
"""
|
|
Presumes that the fake vendoring has already happened - this runs the
|
|
integration tests.
|
|
"""
|
|
env = os.environ.copy()
|
|
env["TESTFLAGS"] = '-check.f DockerTrustSuite*'
|
|
subprocess.check_call(
|
|
"make test-integration-cli".split(), cwd=DOCKER_DIR, env=env)
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1:
|
|
print("\nWarning: Ignoring all extra arguments: {0}".format(" ".join(sys.argv[1:])))
|
|
print("\nUsage: python {0}\n\n".format(sys.argv[0]))
|
|
if DOCKER_DIR == "":
|
|
print("ERROR: Could not find github.com/docker/docker in your GOPATH='{0}'"
|
|
.format(os.getenv("GOPATH")))
|
|
sys.exit(1)
|
|
if NOTARY_DIR == "":
|
|
print("ERROR: Could not find github.com/docker/notary in your GOPATH='{0}'"
|
|
.format(os.getenv("GOPATH")))
|
|
sys.exit(1)
|
|
fake_vendor()
|
|
run_integration_test()
|