forked from TrueCloudLab/distribution
Use distribution APIs to generate catalog test environment
Signed-off-by: Richard Scothern <richard.scothern@docker.com>
This commit is contained in:
parent
4e17ab5d31
commit
b126d6643e
1 changed files with 51 additions and 13 deletions
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue