diff --git a/registry/storage/catalog_test.go b/registry/storage/catalog_test.go index eb062c5b7..994c059a5 100644 --- a/registry/storage/catalog_test.go +++ b/registry/storage/catalog_test.go @@ -6,9 +6,12 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/context" + "github.com/docker/distribution/digest" + "github.com/docker/distribution/reference" "github.com/docker/distribution/registry/storage/cache/memory" "github.com/docker/distribution/registry/storage/driver" "github.com/docker/distribution/registry/storage/driver/inmemory" + "github.com/docker/distribution/testutil" ) type setupEnv struct { @@ -20,28 +23,22 @@ type setupEnv struct { func setupFS(t *testing.T) *setupEnv { d := inmemory.New() - c := []byte("") ctx := context.Background() registry, err := NewRegistry(ctx, d, BlobDescriptorCacheProvider(memory.NewInMemoryBlobDescriptorCacheProvider()), EnableRedirect) if err != nil { t.Fatalf("error creating registry: %v", err) } - rootpath, _ := pathFor(repositoriesRootPathSpec{}) repos := []string{ - "/foo/a/_layers/1", - "/foo/b/_layers/2", - "/bar/c/_layers/3", - "/bar/d/_layers/4", - "/foo/d/in/_layers/5", - "/an/invalid/repo", - "/bar/d/_layers/ignored/dir/6", + "foo/a", + "foo/b", + "bar/c", + "bar/d", + "foo/d/in", } for _, repo := range repos { - if err := d.PutContent(ctx, rootpath+repo, c); err != nil { - t.Fatalf("Unable to put to inmemory fs") - } + makeRepo(t, ctx, repo, registry) } expected := []string{ @@ -60,14 +57,55 @@ func setupFS(t *testing.T) *setupEnv { } } +func makeRepo(t *testing.T, ctx context.Context, name string, reg distribution.Namespace) { + named, err := reference.ParseNamed(name) + if err != nil { + t.Fatal(err) + } + + repo, _ := reg.Repository(ctx, named) + manifests, _ := repo.Manifests(ctx) + + layers, err := testutil.CreateRandomLayers(1) + if err != nil { + t.Fatal(err) + } + + err = testutil.UploadBlobs(repo, layers) + if err != nil { + t.Fatalf("failed to upload layers: %v", err) + } + + getKeys := func(digests map[digest.Digest]io.ReadSeeker) (ds []digest.Digest) { + for d := range digests { + ds = append(ds, d) + } + return + } + + manifest, err := testutil.MakeSchema1Manifest(getKeys(layers)) + if err != nil { + t.Fatal(err) + } + + _, err = manifests.Put(ctx, manifest) + if err != nil { + t.Fatalf("manifest upload failed: %v", err) + } + +} + func TestCatalog(t *testing.T) { env := setupFS(t) p := make([]string, 50) numFilled, err := env.registry.Repositories(env.ctx, p, "") + if numFilled != len(env.expected) { + t.Errorf("missing items in catalog") + } - if !testEq(p, env.expected, numFilled) { + if !testEq(p, env.expected, len(env.expected)) { t.Errorf("Expected catalog repos err") }