diff --git a/integration-cli/docker_utils.go b/integration-cli/docker_utils.go index 3af6d9a60e..3d66e9948f 100644 --- a/integration-cli/docker_utils.go +++ b/integration-cli/docker_utils.go @@ -870,5 +870,18 @@ func setupRegistry(t *testing.T) func() { if err != nil { t.Fatal(err) } + + // Wait for registry to be ready to serve requests. + for i := 0; i != 5; i++ { + if err = reg.Ping(); err == nil { + break + } + time.Sleep(100 * time.Millisecond) + } + + if err != nil { + t.Fatal("Timeout waiting for test registry to become available") + } + return func() { reg.Close() } } diff --git a/integration-cli/registry.go b/integration-cli/registry.go index 00ba3030a9..d24ff5c98a 100644 --- a/integration-cli/registry.go +++ b/integration-cli/registry.go @@ -3,6 +3,7 @@ package main import ( "fmt" "io/ioutil" + "net/http" "os" "os/exec" "path/filepath" @@ -52,6 +53,18 @@ http: }, nil } +func (t *testRegistryV2) Ping() error { + // We always ping through HTTP for our test registry. + resp, err := http.Get(fmt.Sprintf("http://%s/v2/", privateRegistryURL)) + if err != nil { + return err + } + if resp.StatusCode != 200 { + return fmt.Errorf("registry ping replied with an unexpected status code %s", resp.StatusCode) + } + return nil +} + func (r *testRegistryV2) Close() { r.cmd.Process.Kill() os.RemoveAll(r.dir)