Use distribution APIs to generate catalog test environment
Signed-off-by: Richard Scothern <richard.scothern@docker.com>master
							parent
							
								
									4e17ab5d31
								
							
						
					
					
						commit
						b126d6643e
					
				|  | @ -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") | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue