fix docker in docker tests

Signed-off-by: Jess Frazelle <acidburn@google.com>
This commit is contained in:
Jess Frazelle 2017-06-05 20:33:14 -04:00
parent aa124e3ecb
commit 5f516001b0
No known key found for this signature in database
GPG key ID: 18F3685C0022BFF3
3 changed files with 60 additions and 20 deletions

View file

@ -2,4 +2,22 @@ FROM golang:alpine
RUN apk add --no-cache \
build-base \
ca-certificates \
git
ENV DOCKER_BUCKET get.docker.com
ENV DOCKER_VERSION 1.11.1
ENV DOCKER_SHA256 893e3c6e89c0cd2c5f1e51ea41bc2dd97f5e791fcfa3cee28445df277836339d
RUN set -x \
&& apk add --no-cache --virtual .build-deps \
curl \
&& curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-$DOCKER_VERSION.tgz" -o docker.tgz \
&& echo "${DOCKER_SHA256} *docker.tgz" | sha256sum -c - \
&& tar -xzvf docker.tgz \
&& mv docker/docker /usr/local/bin/ \
&& rm -rf docker \
&& rm docker.tgz \
&& docker -v \
&& apk del .build-deps

View file

@ -14,8 +14,24 @@ import (
)
var (
exeSuffix string // ".exe" on Windows
registryAddr string
exeSuffix string // ".exe" on Windows
registryConfigs = []struct {
config string
username string
password string
}{
{
config: "noauth.yml",
username: "blah",
password: "blah",
},
{
config: "basicauth.yml",
username: "admin",
password: "testing",
},
}
)
func init() {
@ -37,6 +53,8 @@ func TestMain(m *testing.M) {
fmt.Fprintf(os.Stderr, "building testreg failed: %v\n%s", err, out)
os.Exit(2)
}
// remove test binary
defer os.Remove("testreg" + exeSuffix)
// create the docker client
dcli, err := client.NewEnvClient()
@ -44,26 +62,29 @@ func TestMain(m *testing.M) {
panic(fmt.Errorf("could not connect to docker: %v", err))
}
// start registry
regID, addr, err := testutils.StartRegistry(dcli, "basicauth.yml", "admin", "testing")
if err != nil {
testutils.RemoveContainer(dcli, regID)
panic(fmt.Errorf("starting registry container failed: %v", err))
}
registryAddr = addr
for _, regConfig := range registryConfigs {
// start each registry
regID, _, err := testutils.StartRegistry(dcli, regConfig.config, regConfig.username, regConfig.password)
if err != nil {
testutils.RemoveContainer(dcli, regID)
panic(fmt.Errorf("starting registry container %s failed: %v", regConfig.config, err))
}
flag.Parse()
merr := m.Run()
flag.Parse()
merr := m.Run()
// remove registry
if err := testutils.RemoveContainer(dcli, regID); err != nil {
log.Printf("couldn't remove registry container: %v", err)
// remove registry
if err := testutils.RemoveContainer(dcli, regID); err != nil {
log.Printf("couldn't remove registry container %s: %v", regConfig.config, err)
}
if merr != 0 {
fmt.Printf("testing config %s failed\n", regConfig.config)
os.Exit(merr)
}
}
// remove test binary
os.Remove("testreg" + exeSuffix)
os.Exit(merr)
os.Exit(0)
}
func run(args ...string) (string, error) {

View file

@ -15,6 +15,7 @@ import (
"os/exec"
"path/filepath"
"runtime"
"strings"
"time"
"github.com/docker/docker/api/types"
@ -93,10 +94,10 @@ func RemoveContainer(dcli *client.Client, ctrID string) error {
// dockerLogin logins via the command line to a docker registry
func dockerLogin(addr, username, password string) error {
cmd := exec.Command("docker", "login", addr, "--username", username, "--password", password)
cmd := exec.Command("docker", "login", "--username", username, "--password", password, addr)
out, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("docker login failed with output %q and error: %v", string(out), err)
return fmt.Errorf("docker login [%s] failed with output %q and error: %v", strings.Join(cmd.Args, " "), string(out), err)
}
return nil
}