better name and updated tests
- use ManifestDigests name instead of Indexes - update tests to validate against multiple tags Signed-off-by: Manish Tomar <manish.tomar@docker.com>master
							parent
							
								
									9ebf151ac2
								
							
						
					
					
						commit
						1251e51ad0
					
				|  | @ -197,7 +197,7 @@ func (ts *tagStore) Lookup(ctx context.Context, desc distribution.Descriptor) ([ | |||
| 	return tags, nil | ||||
| } | ||||
| 
 | ||||
| func (ts *tagStore) Indexes(ctx context.Context, tag string) ([]digest.Digest, error) { | ||||
| func (ts *tagStore) ManifestDigests(ctx context.Context, tag string) ([]digest.Digest, error) { | ||||
| 	var tagLinkPath = func(name string, dgst digest.Digest) (string, error) { | ||||
| 		return pathFor(manifestTagIndexEntryLinkPathSpec{ | ||||
| 			name:     name, | ||||
|  |  | |||
|  | @ -226,9 +226,9 @@ func TestTagIndexes(t *testing.T) { | |||
| 	tagStore := env.ts | ||||
| 	ctx := env.ctx | ||||
| 
 | ||||
| 	indexes, ok := tagStore.(distribution.TagIndexes) | ||||
| 	md, ok := tagStore.(distribution.TagManifestsProvider) | ||||
| 	if !ok { | ||||
| 		t.Fatal("tagStore does not implement TagIndexes interface") | ||||
| 		t.Fatal("tagStore does not implement TagManifestDigests interface") | ||||
| 	} | ||||
| 
 | ||||
| 	conf, err := env.bs.Put(ctx, "application/octet-stream", []byte{0}) | ||||
|  | @ -236,8 +236,9 @@ func TestTagIndexes(t *testing.T) { | |||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	dgstsSet := make(map[digest.Digest]bool) | ||||
| 	for i := 0; i < 3; i++ { | ||||
| 	t1Dgsts := make(map[digest.Digest]struct{}) | ||||
| 	t2Dgsts := make(map[digest.Digest]struct{}) | ||||
| 	for i := 0; i < 5; i++ { | ||||
| 		layer, err := env.bs.Put(ctx, "application/octet-stream", []byte{byte(i + 1)}) | ||||
| 		if err != nil { | ||||
| 			t.Fatal(err) | ||||
|  | @ -272,22 +273,44 @@ func TestTagIndexes(t *testing.T) { | |||
| 		if err != nil { | ||||
| 			t.Fatal(err) | ||||
| 		} | ||||
| 		err = tagStore.Tag(ctx, "t", desc) | ||||
| 		if i < 3 { | ||||
| 			// tag first 3 manifests as "t1"
 | ||||
| 			err = tagStore.Tag(ctx, "t1", desc) | ||||
| 			if err != nil { | ||||
| 				t.Fatal(err) | ||||
| 			} | ||||
| 		dgstsSet[dgst] = true | ||||
| 			t1Dgsts[dgst] = struct{}{} | ||||
| 		} else { | ||||
| 			// the last two under "t2"
 | ||||
| 			err = tagStore.Tag(ctx, "t2", desc) | ||||
| 			if err != nil { | ||||
| 				t.Fatal(err) | ||||
| 			} | ||||
| 			t2Dgsts[dgst] = struct{}{} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	gotDgsts, err := indexes.Indexes(ctx, "t") | ||||
| 	gotT1Dgsts, err := md.ManifestDigests(ctx, "t1") | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	gotDgstsSet := make(map[digest.Digest]bool) | ||||
| 	for _, dgst := range gotDgsts { | ||||
| 		gotDgstsSet[dgst] = true | ||||
| 	if !reflect.DeepEqual(t1Dgsts, digestMap(gotT1Dgsts)) { | ||||
| 		t.Fatalf("Expected digests: %v but got digests: %v", t1Dgsts, digestMap(gotT1Dgsts)) | ||||
| 	} | ||||
| 	if !reflect.DeepEqual(dgstsSet, gotDgstsSet) { | ||||
| 		t.Fatalf("Expected digests: %v but got digests: %v", dgstsSet, gotDgstsSet) | ||||
| 
 | ||||
| 	gotT2Dgsts, err := md.ManifestDigests(ctx, "t2") | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	if !reflect.DeepEqual(t2Dgsts, digestMap(gotT2Dgsts)) { | ||||
| 		t.Fatalf("Expected digests: %v but got digests: %v", t2Dgsts, digestMap(gotT2Dgsts)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func digestMap(dgsts []digest.Digest) map[digest.Digest]struct{} { | ||||
| 	set := make(map[digest.Digest]struct{}) | ||||
| 	for _, dgst := range dgsts { | ||||
| 		set[dgst] = struct{}{} | ||||
| 	} | ||||
| 	return set | ||||
| } | ||||
|  |  | |||
							
								
								
									
										11
									
								
								tags.go
								
								
								
								
							
							
						
						
									
										11
									
								
								tags.go
								
								
								
								
							|  | @ -28,9 +28,10 @@ type TagService interface { | |||
| 	Lookup(ctx context.Context, digest Descriptor) ([]string, error) | ||||
| } | ||||
| 
 | ||||
| // TagIndexes proves method to retreive all the digests that a tag historically pointed to
 | ||||
| type TagIndexes interface { | ||||
| 	// Indexes returns set of digests that this tag historically pointed to. This also includes
 | ||||
| 	// currently linked digest. There is no ordering guaranteed
 | ||||
| 	Indexes(ctx context.Context, tag string) ([]digest.Digest, error) | ||||
| // TagManifestsProvider provides method to retreive the digests of manifests that a tag historically
 | ||||
| // pointed to
 | ||||
| type TagManifestsProvider interface { | ||||
| 	// ManifestDigests returns set of digests that this tag historically pointed to. This also
 | ||||
| 	// includes currently linked digest. There is no ordering guaranteed
 | ||||
| 	ManifestDigests(ctx context.Context, tag string) ([]digest.Digest, error) | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue