Просмотр исходного кода

Fix disk usage test

Check for accurate values that may contain content sizes unknown to the
usage test in the calculation. Avoid asserting using deep equals when
only the expected value range is known to the test.

Signed-off-by: Derek McGowan <derek@mcg.dev>
Derek McGowan 1 год назад
Родитель
Сommit
e97716a95a
2 измененных файлов с 31 добавлено и 46 удалено
  1. 1 1
      daemon/containerd/image_list.go
  2. 30 45
      integration/system/disk_usage_test.go

+ 1 - 1
daemon/containerd/image_list.go

@@ -263,7 +263,7 @@ func (i *ImageService) singlePlatformImage(ctx context.Context, contentStore con
 		if err != nil {
 		if err != nil {
 			logger.WithError(err).Error("failed to create digested reference")
 			logger.WithError(err).Error("failed to create digested reference")
 		} else {
 		} else {
-			repoDigests = append(repoDigests, digested.String())
+			repoDigests = append(repoDigests, reference.FamiliarString(digested))
 		}
 		}
 	}
 	}
 
 

+ 30 - 45
integration/system/disk_usage_test.go

@@ -1,6 +1,7 @@
 package system // import "github.com/docker/docker/integration/system"
 package system // import "github.com/docker/docker/integration/system"
 
 
 import (
 import (
+	"strings"
 	"testing"
 	"testing"
 
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
@@ -10,6 +11,7 @@ import (
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil/daemon"
 	"github.com/docker/docker/testutil/daemon"
 	"gotest.tools/v3/assert"
 	"gotest.tools/v3/assert"
+	is "gotest.tools/v3/assert/cmp"
 	"gotest.tools/v3/skip"
 	"gotest.tools/v3/skip"
 )
 )
 
 
@@ -54,20 +56,18 @@ func TestDiskUsage(t *testing.T) {
 				assert.NilError(t, err)
 				assert.NilError(t, err)
 				assert.Assert(t, du.LayersSize > 0)
 				assert.Assert(t, du.LayersSize > 0)
 				assert.Equal(t, len(du.Images), 1)
 				assert.Equal(t, len(du.Images), 1)
-				assert.DeepEqual(t, du, types.DiskUsage{
-					LayersSize: du.LayersSize,
-					Images: []*image.Summary{
-						{
-							Created:  du.Images[0].Created,
-							ID:       du.Images[0].ID,
-							RepoTags: []string{"busybox:latest"},
-							Size:     du.LayersSize,
-						},
-					},
-					Containers: []*types.Container{},
-					Volumes:    []*volume.Volume{},
-					BuildCache: []*types.BuildCache{},
-				})
+				assert.Equal(t, len(du.Images[0].RepoTags), 1)
+				assert.Check(t, is.Equal(du.Images[0].RepoTags[0], "busybox:latest"))
+
+				// Image size is layer size + content size, should be greater than total layer size
+				assert.Assert(t, du.Images[0].Size >= du.LayersSize)
+
+				// If size is greater, than content exists and should have a repodigest
+				if du.Images[0].Size > du.LayersSize {
+					assert.Equal(t, len(du.Images[0].RepoDigests), 1)
+					assert.Check(t, strings.HasPrefix(du.Images[0].RepoDigests[0], "busybox@"))
+				}
+
 				return du
 				return du
 			},
 			},
 		},
 		},
@@ -81,37 +81,22 @@ func TestDiskUsage(t *testing.T) {
 				assert.Equal(t, len(du.Containers), 1)
 				assert.Equal(t, len(du.Containers), 1)
 				assert.Equal(t, len(du.Containers[0].Names), 1)
 				assert.Equal(t, len(du.Containers[0].Names), 1)
 				assert.Assert(t, len(prev.Images) > 0)
 				assert.Assert(t, len(prev.Images) > 0)
-				assert.Assert(t, du.Containers[0].Created >= prev.Images[0].Created)
-				assert.DeepEqual(t, du, types.DiskUsage{
-					LayersSize: prev.LayersSize,
-					Images: []*image.Summary{
-						func() *image.Summary {
-							sum := *prev.Images[0]
-							sum.Containers++
-							return &sum
-						}(),
-					},
-					Containers: []*types.Container{
-						{
-							ID:              cID,
-							Names:           du.Containers[0].Names,
-							Image:           "busybox",
-							ImageID:         prev.Images[0].ID,
-							Command:         du.Containers[0].Command, // not relevant for the test
-							Created:         du.Containers[0].Created,
-							Ports:           du.Containers[0].Ports, // not relevant for the test
-							SizeRootFs:      prev.Images[0].Size,
-							Labels:          du.Containers[0].Labels,          // not relevant for the test
-							State:           du.Containers[0].State,           // not relevant for the test
-							Status:          du.Containers[0].Status,          // not relevant for the test
-							HostConfig:      du.Containers[0].HostConfig,      // not relevant for the test
-							NetworkSettings: du.Containers[0].NetworkSettings, // not relevant for the test
-							Mounts:          du.Containers[0].Mounts,          // not relevant for the test
-						},
-					},
-					Volumes:    []*volume.Volume{},
-					BuildCache: []*types.BuildCache{},
-				})
+				assert.Check(t, du.Containers[0].Created >= prev.Images[0].Created)
+
+				// Additional container layer could add to the size
+				assert.Check(t, du.LayersSize >= prev.LayersSize)
+
+				assert.Equal(t, len(du.Images), 1)
+				assert.Equal(t, du.Images[0].Containers, prev.Images[0].Containers+1)
+
+				assert.Check(t, is.Equal(du.Containers[0].ID, cID))
+				assert.Check(t, is.Equal(du.Containers[0].Image, "busybox"))
+				assert.Check(t, is.Equal(du.Containers[0].ImageID, prev.Images[0].ID))
+
+				// The rootfs size should be equivalent to all the layers,
+				// previously used prev.Images[0].Size, which may differ from content data
+				assert.Check(t, is.Equal(du.Containers[0].SizeRootFs, du.LayersSize))
+
 				return du
 				return du
 			},
 			},
 		},
 		},