github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/config/ls_test.go (about) 1 package config 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 TestConfigListErrors(t *testing.T) { 21 testCases := []struct { 22 args []string 23 configListFunc func(context.Context, types.ConfigListOptions) ([]swarm.Config, error) 24 expectedError string 25 }{ 26 { 27 args: []string{"foo"}, 28 expectedError: "accepts no argument", 29 }, 30 { 31 configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) { 32 return []swarm.Config{}, errors.Errorf("error listing configs") 33 }, 34 expectedError: "error listing configs", 35 }, 36 } 37 for _, tc := range testCases { 38 cmd := newConfigListCommand( 39 test.NewFakeCli(&fakeClient{ 40 configListFunc: tc.configListFunc, 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 TestConfigList(t *testing.T) { 50 cli := test.NewFakeCli(&fakeClient{ 51 configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) { 52 return []swarm.Config{ 53 *builders.Config(builders.ConfigID("ID-1-foo"), 54 builders.ConfigName("1-foo"), 55 builders.ConfigVersion(swarm.Version{Index: 10}), 56 builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)), 57 builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)), 58 ), 59 *builders.Config(builders.ConfigID("ID-10-foo"), 60 builders.ConfigName("10-foo"), 61 builders.ConfigVersion(swarm.Version{Index: 11}), 62 builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)), 63 builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)), 64 ), 65 *builders.Config(builders.ConfigID("ID-2-foo"), 66 builders.ConfigName("2-foo"), 67 builders.ConfigVersion(swarm.Version{Index: 11}), 68 builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)), 69 builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)), 70 ), 71 }, nil 72 }, 73 }) 74 cmd := newConfigListCommand(cli) 75 assert.NilError(t, cmd.Execute()) 76 golden.Assert(t, cli.OutBuffer().String(), "config-list-sort.golden") 77 } 78 79 func TestConfigListWithQuietOption(t *testing.T) { 80 cli := test.NewFakeCli(&fakeClient{ 81 configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) { 82 return []swarm.Config{ 83 *builders.Config(builders.ConfigID("ID-foo"), builders.ConfigName("foo")), 84 *builders.Config(builders.ConfigID("ID-bar"), builders.ConfigName("bar"), builders.ConfigLabels(map[string]string{ 85 "label": "label-bar", 86 })), 87 }, nil 88 }, 89 }) 90 cmd := newConfigListCommand(cli) 91 assert.Check(t, cmd.Flags().Set("quiet", "true")) 92 assert.NilError(t, cmd.Execute()) 93 golden.Assert(t, cli.OutBuffer().String(), "config-list-with-quiet-option.golden") 94 } 95 96 func TestConfigListWithConfigFormat(t *testing.T) { 97 cli := test.NewFakeCli(&fakeClient{ 98 configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) { 99 return []swarm.Config{ 100 *builders.Config(builders.ConfigID("ID-foo"), builders.ConfigName("foo")), 101 *builders.Config(builders.ConfigID("ID-bar"), builders.ConfigName("bar"), builders.ConfigLabels(map[string]string{ 102 "label": "label-bar", 103 })), 104 }, nil 105 }, 106 }) 107 cli.SetConfigFile(&configfile.ConfigFile{ 108 ConfigFormat: "{{ .Name }} {{ .Labels }}", 109 }) 110 cmd := newConfigListCommand(cli) 111 assert.NilError(t, cmd.Execute()) 112 golden.Assert(t, cli.OutBuffer().String(), "config-list-with-config-format.golden") 113 } 114 115 func TestConfigListWithFormat(t *testing.T) { 116 cli := test.NewFakeCli(&fakeClient{ 117 configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) { 118 return []swarm.Config{ 119 *builders.Config(builders.ConfigID("ID-foo"), builders.ConfigName("foo")), 120 *builders.Config(builders.ConfigID("ID-bar"), builders.ConfigName("bar"), builders.ConfigLabels(map[string]string{ 121 "label": "label-bar", 122 })), 123 }, nil 124 }, 125 }) 126 cmd := newConfigListCommand(cli) 127 assert.Check(t, cmd.Flags().Set("format", "{{ .Name }} {{ .Labels }}")) 128 assert.NilError(t, cmd.Execute()) 129 golden.Assert(t, cli.OutBuffer().String(), "config-list-with-format.golden") 130 } 131 132 func TestConfigListWithFilter(t *testing.T) { 133 cli := test.NewFakeCli(&fakeClient{ 134 configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) { 135 assert.Check(t, is.Equal("foo", options.Filters.Get("name")[0])) 136 assert.Check(t, is.Equal("lbl1=Label-bar", options.Filters.Get("label")[0])) 137 return []swarm.Config{ 138 *builders.Config(builders.ConfigID("ID-foo"), 139 builders.ConfigName("foo"), 140 builders.ConfigVersion(swarm.Version{Index: 10}), 141 builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)), 142 builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)), 143 ), 144 *builders.Config(builders.ConfigID("ID-bar"), 145 builders.ConfigName("bar"), 146 builders.ConfigVersion(swarm.Version{Index: 11}), 147 builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)), 148 builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)), 149 ), 150 }, nil 151 }, 152 }) 153 cmd := newConfigListCommand(cli) 154 assert.Check(t, cmd.Flags().Set("filter", "name=foo")) 155 assert.Check(t, cmd.Flags().Set("filter", "label=lbl1=Label-bar")) 156 assert.NilError(t, cmd.Execute()) 157 golden.Assert(t, cli.OutBuffer().String(), "config-list-with-filter.golden") 158 }