Use distribution APIs to generate catalog test environment

Signed-off-by: Richard Scothern <richard.scothern@docker.com>
This commit is contained in:
Richard Scothern 2016-07-13 16:39:34 -07:00
parent 4e17ab5d31
commit b126d6643e

View file

@ -6,9 +6,12 @@ import (
"github.com/docker/distribution" "github.com/docker/distribution"
"github.com/docker/distribution/context" "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/cache/memory"
"github.com/docker/distribution/registry/storage/driver" "github.com/docker/distribution/registry/storage/driver"
"github.com/docker/distribution/registry/storage/driver/inmemory" "github.com/docker/distribution/registry/storage/driver/inmemory"
"github.com/docker/distribution/testutil"
) )
type setupEnv struct { type setupEnv struct {
@ -20,28 +23,22 @@ type setupEnv struct {
func setupFS(t *testing.T) *setupEnv { func setupFS(t *testing.T) *setupEnv {
d := inmemory.New() d := inmemory.New()
c := []byte("")
ctx := context.Background() ctx := context.Background()
registry, err := NewRegistry(ctx, d, BlobDescriptorCacheProvider(memory.NewInMemoryBlobDescriptorCacheProvider()), EnableRedirect) registry, err := NewRegistry(ctx, d, BlobDescriptorCacheProvider(memory.NewInMemoryBlobDescriptorCacheProvider()), EnableRedirect)
if err != nil { if err != nil {
t.Fatalf("error creating registry: %v", err) t.Fatalf("error creating registry: %v", err)
} }
rootpath, _ := pathFor(repositoriesRootPathSpec{})
repos := []string{ repos := []string{
"/foo/a/_layers/1", "foo/a",
"/foo/b/_layers/2", "foo/b",
"/bar/c/_layers/3", "bar/c",
"/bar/d/_layers/4", "bar/d",
"/foo/d/in/_layers/5", "foo/d/in",
"/an/invalid/repo",
"/bar/d/_layers/ignored/dir/6",
} }
for _, repo := range repos { for _, repo := range repos {
if err := d.PutContent(ctx, rootpath+repo, c); err != nil { makeRepo(t, ctx, repo, registry)
t.Fatalf("Unable to put to inmemory fs")
}
} }
expected := []string{ 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) { func TestCatalog(t *testing.T) {
env := setupFS(t) env := setupFS(t)
p := make([]string, 50) p := make([]string, 50)
numFilled, err := env.registry.Repositories(env.ctx, p, "") 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") t.Errorf("Expected catalog repos err")
} }