Browse Source

c8d/list: Add empty index test case

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
Paweł Gronowski 1 năm trước cách đây
mục cha
commit
153de36b3f

+ 10 - 0
daemon/containerd/image_list_test.go

@@ -48,6 +48,9 @@ func TestImageList(t *testing.T) {
 	twoplatform, err := specialimage.TwoPlatform(blobsDir)
 	assert.NilError(t, err)
 
+	emptyIndex, err := specialimage.EmptyIndex(blobsDir)
+	assert.NilError(t, err)
+
 	cs := &blobsDirContentStore{blobs: filepath.Join(blobsDir, "blobs/sha256")}
 
 	snapshotter := &testSnapshotterService{}
@@ -92,6 +95,13 @@ func TestImageList(t *testing.T) {
 				assert.Check(t, is.DeepEqual(all[1].RepoTags, []string{"twoplatform:latest"}))
 			},
 		},
+		{
+			name:   "three images, one is an empty index",
+			images: imagesFromIndex(multilayer, emptyIndex, twoplatform),
+			check: func(t *testing.T, all []*imagetypes.Summary) {
+				assert.Check(t, is.Len(all, 2))
+			},
+		},
 	} {
 		tc := tc
 		t.Run(tc.name, func(t *testing.T) {

+ 25 - 0
internal/testutils/specialimage/emptyindex.go

@@ -0,0 +1,25 @@
+package specialimage
+
+import (
+	"github.com/distribution/reference"
+	"github.com/opencontainers/image-spec/specs-go"
+	ocispec "github.com/opencontainers/image-spec/specs-go/v1"
+)
+
+// EmptyIndex creates an image index with no manifests.
+// This is equivalent to `tianon/scratch:index`.
+func EmptyIndex(dir string) (*ocispec.Index, error) {
+	const imageRef = "emptyindex:latest"
+
+	index := ocispec.Index{
+		Versioned: specs.Versioned{SchemaVersion: 2},
+		MediaType: ocispec.MediaTypeImageIndex,
+		Manifests: []ocispec.Descriptor{},
+	}
+
+	ref, err := reference.ParseNormalizedNamed(imageRef)
+	if err != nil {
+		return nil, err
+	}
+	return multiPlatformImage(dir, ref, index)
+}