forked from TrueCloudLab/distribution
Merge pull request #1837 from RichardScothern/catalog-test
Use registry APIs to generate catalog test environment
This commit is contained in:
commit
42a7e6e171
1 changed files with 51 additions and 13 deletions
|
@ -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 a new issue