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 }