diff --git a/main_test.go b/main_test.go index 769012e3..928d0f83 100644 --- a/main_test.go +++ b/main_test.go @@ -36,6 +36,7 @@ var ( password: "testing", }, } + registryHelper *testutils.RegistryHelper ) func init() { @@ -81,6 +82,11 @@ func TestMain(m *testing.M) { panic(fmt.Errorf("starting registry container %s failed: %v", regConfig.config, err)) } + registryHelper, err = testutils.NewRegistryHelper(dcli, regConfig.username, regConfig.password, domain) + if err != nil { + panic(fmt.Errorf("creating registry helper %s failed: %v", regConfig.config, err)) + } + flag.Parse() merr := m.Run() diff --git a/registry/digest.go b/registry/digest.go index baeacecd..118f6813 100644 --- a/registry/digest.go +++ b/registry/digest.go @@ -35,5 +35,5 @@ func (r *Registry) Digest(image Image) (digest.Digest, error) { return "", fmt.Errorf("Got status code: %d", resp.StatusCode) } - return digest.FromString(resp.Header.Get("Docker-Content-Digest")), nil + return digest.Parse(resp.Header.Get("Docker-Content-Digest")) } diff --git a/remove_test.go b/remove_test.go index 1e4a75b2..f7166e61 100644 --- a/remove_test.go +++ b/remove_test.go @@ -6,7 +6,14 @@ import ( "testing" ) +func teardownTest(t *testing.T) { + if err := registryHelper.RefillRegistry("busybox:glibc"); err != nil { + t.Fatalf("adding image after remove failed: +%v", err) + } +} + func TestRemove(t *testing.T) { + defer teardownTest(t) // Make sure we have busybox in list. out, err := run("ls", domain) if err != nil { @@ -24,4 +31,16 @@ busybox glibc, latest, musl` t.Fatalf("output: %s, error: %v", out, err) } + // Make sure we have removed busybox:glibc. + out, err = run("ls", domain) + if err != nil { + t.Fatalf("output: %s, error: %v", out, err) + } + expected = `REPO TAGS +alpine 3.5, latest +busybox latest, musl` + if !strings.HasSuffix(strings.TrimSpace(out), expected) { + t.Fatalf("expected to contain: %s\ngot: %s", expected, out) + } + } diff --git a/testutils/registry.go b/testutils/registry.go new file mode 100644 index 00000000..276ab8ce --- /dev/null +++ b/testutils/registry.go @@ -0,0 +1,50 @@ +package testutils + +import ( + "context" + "os" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" + "github.com/docker/docker/pkg/jsonmessage" + "github.com/docker/docker/pkg/term" +) + +// RegistryHelper implements methods to manipulate docker registry from test cases +type RegistryHelper struct { + dcli *client.Client + auth string + addr string +} + +// NewRegistryHelper returns RegistryHelper +func NewRegistryHelper(dcli *client.Client, username, password, addr string) (*RegistryHelper, error) { + auth, err := constructRegistryAuth(username, password) + if err != nil { + return nil, err + } + return &RegistryHelper{dcli: dcli, auth: auth, addr: addr}, nil +} + +// RefillRegistry adds images to a registry. +func (r *RegistryHelper) RefillRegistry(image string) error { + if err := pullDockerImage(r.dcli, image); err != nil { + return err + } + + if err := r.dcli.ImageTag(context.Background(), image, r.addr+"/"+image); err != nil { + return err + } + + resp, err := r.dcli.ImagePush(context.Background(), r.addr+"/"+image, types.ImagePushOptions{ + RegistryAuth: r.auth, + }) + if err != nil { + return err + } + defer resp.Close() + + fd, isTerm := term.GetFdInfo(os.Stdout) + + return jsonmessage.DisplayJSONMessagesStream(resp, os.Stdout, fd, isTerm, nil) +}