github.com/moby/docker@v26.1.3+incompatible/integration/image/prune_test.go (about)

     1  package image
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/docker/docker/api/types/filters"
     8  	"github.com/docker/docker/integration/internal/container"
     9  	"github.com/docker/docker/internal/testutils/specialimage"
    10  	"github.com/docker/docker/testutil/daemon"
    11  	"gotest.tools/v3/assert"
    12  	"gotest.tools/v3/skip"
    13  )
    14  
    15  // Regression test for: https://github.com/moby/moby/issues/45732
    16  func TestPruneDontDeleteUsedDangling(t *testing.T) {
    17  	skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot start multiple daemons on windows")
    18  	skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
    19  
    20  	ctx := setupTest(t)
    21  
    22  	d := daemon.New(t)
    23  	d.Start(t)
    24  	defer d.Stop(t)
    25  
    26  	client := d.NewClientT(t)
    27  	defer client.Close()
    28  
    29  	danglingID := specialimage.Load(ctx, t, client, specialimage.Dangling)
    30  
    31  	_, _, err := client.ImageInspectWithRaw(ctx, danglingID)
    32  	assert.NilError(t, err, "Test dangling image doesn't exist")
    33  
    34  	container.Create(ctx, t, client,
    35  		container.WithImage(danglingID),
    36  		container.WithCmd("sleep", "60"))
    37  
    38  	pruned, err := client.ImagesPrune(ctx, filters.NewArgs(filters.Arg("dangling", "true")))
    39  	assert.NilError(t, err)
    40  
    41  	for _, deleted := range pruned.ImagesDeleted {
    42  		if strings.Contains(deleted.Deleted, danglingID) || strings.Contains(deleted.Untagged, danglingID) {
    43  			t.Errorf("used dangling image %s shouldn't be deleted", danglingID)
    44  		}
    45  	}
    46  
    47  	_, _, err = client.ImageInspectWithRaw(ctx, danglingID)
    48  	assert.NilError(t, err, "Test dangling image should still exist")
    49  }