Browse Source

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 year ago
parent
commit
e97716a95a
2 changed files with 31 additions and 46 deletions
  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 {
 			logger.WithError(err).Error("failed to create digested reference")
 		} 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"
 
 import (
+	"strings"
 	"testing"
 
 	"github.com/docker/docker/api/types"
@@ -10,6 +11,7 @@ import (
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil/daemon"
 	"gotest.tools/v3/assert"
+	is "gotest.tools/v3/assert/cmp"
 	"gotest.tools/v3/skip"
 )
 
@@ -54,20 +56,18 @@ func TestDiskUsage(t *testing.T) {
 				assert.NilError(t, err)
 				assert.Assert(t, du.LayersSize > 0)
 				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
 			},
 		},
@@ -81,37 +81,22 @@ func TestDiskUsage(t *testing.T) {
 				assert.Equal(t, len(du.Containers), 1)
 				assert.Equal(t, len(du.Containers[0].Names), 1)
 				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
 			},
 		},