github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/system/prune_test.go (about)

     1  package system
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/docker/cli/cli/config/configfile"
     8  	"github.com/docker/cli/internal/test"
     9  	"github.com/docker/docker/api/types"
    10  	"github.com/docker/docker/api/types/filters"
    11  	"github.com/pkg/errors"
    12  	"gotest.tools/v3/assert"
    13  	is "gotest.tools/v3/assert/cmp"
    14  )
    15  
    16  func TestPrunePromptPre131DoesNotIncludeBuildCache(t *testing.T) {
    17  	cli := test.NewFakeCli(&fakeClient{version: "1.30"})
    18  	cmd := newPruneCommand(cli)
    19  	cmd.SetArgs([]string{})
    20  	assert.ErrorContains(t, cmd.Execute(), "system prune has been cancelled")
    21  	expected := `WARNING! This will remove:
    22    - all stopped containers
    23    - all networks not used by at least one container
    24    - all dangling images
    25  
    26  Are you sure you want to continue? [y/N] `
    27  	assert.Check(t, is.Equal(expected, cli.OutBuffer().String()))
    28  }
    29  
    30  func TestPrunePromptFilters(t *testing.T) {
    31  	cli := test.NewFakeCli(&fakeClient{version: "1.31"})
    32  	cli.SetConfigFile(&configfile.ConfigFile{
    33  		PruneFilters: []string{"label!=never=remove-me", "label=remove=me"},
    34  	})
    35  	cmd := newPruneCommand(cli)
    36  	cmd.SetArgs([]string{"--filter", "until=24h", "--filter", "label=hello-world", "--filter", "label!=foo=bar", "--filter", "label=bar=baz"})
    37  
    38  	assert.ErrorContains(t, cmd.Execute(), "system prune has been cancelled")
    39  	expected := `WARNING! This will remove:
    40    - all stopped containers
    41    - all networks not used by at least one container
    42    - all dangling images
    43    - unused build cache
    44  
    45    Items to be pruned will be filtered with:
    46    - label!=foo=bar
    47    - label!=never=remove-me
    48    - label=bar=baz
    49    - label=hello-world
    50    - label=remove=me
    51    - until=24h
    52  
    53  Are you sure you want to continue? [y/N] `
    54  	assert.Check(t, is.Equal(expected, cli.OutBuffer().String()))
    55  }
    56  
    57  func TestSystemPrunePromptTermination(t *testing.T) {
    58  	ctx, cancel := context.WithCancel(context.Background())
    59  	t.Cleanup(cancel)
    60  
    61  	cli := test.NewFakeCli(&fakeClient{
    62  		containerPruneFunc: func(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) {
    63  			return types.ContainersPruneReport{}, errors.New("fakeClient containerPruneFunc should not be called")
    64  		},
    65  		networkPruneFunc: func(ctx context.Context, pruneFilters filters.Args) (types.NetworksPruneReport, error) {
    66  			return types.NetworksPruneReport{}, errors.New("fakeClient networkPruneFunc should not be called")
    67  		},
    68  	})
    69  
    70  	cmd := newPruneCommand(cli)
    71  	test.TerminatePrompt(ctx, t, cmd, cli)
    72  }