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

     1  package secret
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/docker/cli/cli/config/configfile"
    10  	"github.com/docker/cli/internal/test"
    11  	"github.com/docker/cli/internal/test/builders"
    12  	"github.com/docker/docker/api/types"
    13  	"github.com/docker/docker/api/types/swarm"
    14  	"github.com/pkg/errors"
    15  	"gotest.tools/v3/assert"
    16  	is "gotest.tools/v3/assert/cmp"
    17  	"gotest.tools/v3/golden"
    18  )
    19  
    20  func TestSecretListErrors(t *testing.T) {
    21  	testCases := []struct {
    22  		args           []string
    23  		secretListFunc func(context.Context, types.SecretListOptions) ([]swarm.Secret, error)
    24  		expectedError  string
    25  	}{
    26  		{
    27  			args:          []string{"foo"},
    28  			expectedError: "accepts no argument",
    29  		},
    30  		{
    31  			secretListFunc: func(_ context.Context, options types.SecretListOptions) ([]swarm.Secret, error) {
    32  				return []swarm.Secret{}, errors.Errorf("error listing secrets")
    33  			},
    34  			expectedError: "error listing secrets",
    35  		},
    36  	}
    37  	for _, tc := range testCases {
    38  		cmd := newSecretListCommand(
    39  			test.NewFakeCli(&fakeClient{
    40  				secretListFunc: tc.secretListFunc,
    41  			}),
    42  		)
    43  		cmd.SetArgs(tc.args)
    44  		cmd.SetOut(io.Discard)
    45  		assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
    46  	}
    47  }
    48  
    49  func TestSecretList(t *testing.T) {
    50  	cli := test.NewFakeCli(&fakeClient{
    51  		secretListFunc: func(_ context.Context, options types.SecretListOptions) ([]swarm.Secret, error) {
    52  			return []swarm.Secret{
    53  				*builders.Secret(builders.SecretID("ID-1-foo"),
    54  					builders.SecretName("1-foo"),
    55  					builders.SecretVersion(swarm.Version{Index: 10}),
    56  					builders.SecretCreatedAt(time.Now().Add(-2*time.Hour)),
    57  					builders.SecretUpdatedAt(time.Now().Add(-1*time.Hour)),
    58  				),
    59  				*builders.Secret(builders.SecretID("ID-10-foo"),
    60  					builders.SecretName("10-foo"),
    61  					builders.SecretVersion(swarm.Version{Index: 11}),
    62  					builders.SecretCreatedAt(time.Now().Add(-2*time.Hour)),
    63  					builders.SecretUpdatedAt(time.Now().Add(-1*time.Hour)),
    64  					builders.SecretDriver("driver"),
    65  				),
    66  				*builders.Secret(builders.SecretID("ID-2-foo"),
    67  					builders.SecretName("2-foo"),
    68  					builders.SecretVersion(swarm.Version{Index: 11}),
    69  					builders.SecretCreatedAt(time.Now().Add(-2*time.Hour)),
    70  					builders.SecretUpdatedAt(time.Now().Add(-1*time.Hour)),
    71  					builders.SecretDriver("driver"),
    72  				),
    73  			}, nil
    74  		},
    75  	})
    76  	cmd := newSecretListCommand(cli)
    77  	assert.NilError(t, cmd.Execute())
    78  	golden.Assert(t, cli.OutBuffer().String(), "secret-list-sort.golden")
    79  }
    80  
    81  func TestSecretListWithQuietOption(t *testing.T) {
    82  	cli := test.NewFakeCli(&fakeClient{
    83  		secretListFunc: func(_ context.Context, options types.SecretListOptions) ([]swarm.Secret, error) {
    84  			return []swarm.Secret{
    85  				*builders.Secret(builders.SecretID("ID-foo"), builders.SecretName("foo")),
    86  				*builders.Secret(builders.SecretID("ID-bar"), builders.SecretName("bar"), builders.SecretLabels(map[string]string{
    87  					"label": "label-bar",
    88  				})),
    89  			}, nil
    90  		},
    91  	})
    92  	cmd := newSecretListCommand(cli)
    93  	assert.Check(t, cmd.Flags().Set("quiet", "true"))
    94  	assert.NilError(t, cmd.Execute())
    95  	golden.Assert(t, cli.OutBuffer().String(), "secret-list-with-quiet-option.golden")
    96  }
    97  
    98  func TestSecretListWithConfigFormat(t *testing.T) {
    99  	cli := test.NewFakeCli(&fakeClient{
   100  		secretListFunc: func(_ context.Context, options types.SecretListOptions) ([]swarm.Secret, error) {
   101  			return []swarm.Secret{
   102  				*builders.Secret(builders.SecretID("ID-foo"), builders.SecretName("foo")),
   103  				*builders.Secret(builders.SecretID("ID-bar"), builders.SecretName("bar"), builders.SecretLabels(map[string]string{
   104  					"label": "label-bar",
   105  				})),
   106  			}, nil
   107  		},
   108  	})
   109  	cli.SetConfigFile(&configfile.ConfigFile{
   110  		SecretFormat: "{{ .Name }} {{ .Labels }}",
   111  	})
   112  	cmd := newSecretListCommand(cli)
   113  	assert.NilError(t, cmd.Execute())
   114  	golden.Assert(t, cli.OutBuffer().String(), "secret-list-with-config-format.golden")
   115  }
   116  
   117  func TestSecretListWithFormat(t *testing.T) {
   118  	cli := test.NewFakeCli(&fakeClient{
   119  		secretListFunc: func(_ context.Context, options types.SecretListOptions) ([]swarm.Secret, error) {
   120  			return []swarm.Secret{
   121  				*builders.Secret(builders.SecretID("ID-foo"), builders.SecretName("foo")),
   122  				*builders.Secret(builders.SecretID("ID-bar"), builders.SecretName("bar"), builders.SecretLabels(map[string]string{
   123  					"label": "label-bar",
   124  				})),
   125  			}, nil
   126  		},
   127  	})
   128  	cmd := newSecretListCommand(cli)
   129  	assert.Check(t, cmd.Flags().Set("format", "{{ .Name }} {{ .Labels }}"))
   130  	assert.NilError(t, cmd.Execute())
   131  	golden.Assert(t, cli.OutBuffer().String(), "secret-list-with-format.golden")
   132  }
   133  
   134  func TestSecretListWithFilter(t *testing.T) {
   135  	cli := test.NewFakeCli(&fakeClient{
   136  		secretListFunc: func(_ context.Context, options types.SecretListOptions) ([]swarm.Secret, error) {
   137  			assert.Check(t, is.Equal("foo", options.Filters.Get("name")[0]), "foo")
   138  			assert.Check(t, is.Equal("lbl1=Label-bar", options.Filters.Get("label")[0]))
   139  			return []swarm.Secret{
   140  				*builders.Secret(builders.SecretID("ID-foo"),
   141  					builders.SecretName("foo"),
   142  					builders.SecretVersion(swarm.Version{Index: 10}),
   143  					builders.SecretCreatedAt(time.Now().Add(-2*time.Hour)),
   144  					builders.SecretUpdatedAt(time.Now().Add(-1*time.Hour)),
   145  				),
   146  				*builders.Secret(builders.SecretID("ID-bar"),
   147  					builders.SecretName("bar"),
   148  					builders.SecretVersion(swarm.Version{Index: 11}),
   149  					builders.SecretCreatedAt(time.Now().Add(-2*time.Hour)),
   150  					builders.SecretUpdatedAt(time.Now().Add(-1*time.Hour)),
   151  				),
   152  			}, nil
   153  		},
   154  	})
   155  	cmd := newSecretListCommand(cli)
   156  	assert.Check(t, cmd.Flags().Set("filter", "name=foo"))
   157  	assert.Check(t, cmd.Flags().Set("filter", "label=lbl1=Label-bar"))
   158  	assert.NilError(t, cmd.Execute())
   159  	golden.Assert(t, cli.OutBuffer().String(), "secret-list-with-filter.golden")
   160  }