From c073bb9b4ee33efdc5b41507edc18a9958f931f3 Mon Sep 17 00:00:00 2001 From: allencloud Date: Fri, 7 Jul 2017 16:22:52 +0800 Subject: [PATCH] sort secrets and configs in cli Signed-off-by: allencloud --- cli/command/config/ls.go | 13 +++++++++++++ cli/command/config/ls_test.go | 34 +++++++++++++++++++--------------- cli/command/secret/ls.go | 14 ++++++++++++++ 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/cli/command/config/ls.go b/cli/command/config/ls.go index f01e3b91544e..513d866c6c88 100644 --- a/cli/command/config/ls.go +++ b/cli/command/config/ls.go @@ -1,15 +1,26 @@ package config import ( + "sort" + "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/formatter" "github.com/docker/cli/opts" "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/swarm" "github.com/spf13/cobra" "golang.org/x/net/context" ) +type byConfigName []swarm.Config + +func (r byConfigName) Len() int { return len(r) } +func (r byConfigName) Swap(i, j int) { r[i], r[j] = r[j], r[i] } +func (r byConfigName) Less(i, j int) bool { + return r[i].Spec.Name < r[j].Spec.Name +} + type listOptions struct { quiet bool format string @@ -55,6 +66,8 @@ func runConfigList(dockerCli command.Cli, options listOptions) error { } } + sort.Sort(byConfigName(configs)) + configCtx := formatter.Context{ Output: dockerCli.Out(), Format: formatter.NewConfigFormat(format, options.quiet), diff --git a/cli/command/config/ls_test.go b/cli/command/config/ls_test.go index b43c764a4df9..b5b0bfd36d98 100644 --- a/cli/command/config/ls_test.go +++ b/cli/command/config/ls_test.go @@ -3,6 +3,7 @@ package config import ( "bytes" "io/ioutil" + "strings" "testing" "time" @@ -73,8 +74,11 @@ func TestConfigList(t *testing.T) { cmd.SetOutput(buf) assert.NoError(t, cmd.Execute()) actual := buf.String() - expected := golden.Get(t, []byte(actual), "config-list.golden") - testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected)) + + outArr := strings.Split(strings.TrimSpace(out), "\n") + assert.Equal(t, len(outArr), 2) + assert.Equal(t, strings.Contains(assert[0], "bar"), true) + assert.Equal(t, strings.Contains(assert[1], "bar"), true) } func TestConfigListWithQuietOption(t *testing.T) { @@ -82,9 +86,9 @@ func TestConfigListWithQuietOption(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ configListFunc: func(options types.ConfigListOptions) ([]swarm.Config, error) { return []swarm.Config{ - *Config(ConfigID("ID-foo"), ConfigName("foo")), - *Config(ConfigID("ID-bar"), ConfigName("bar"), ConfigLabels(map[string]string{ - "label": "label-bar", + *Config(ConfigID("ID-bar"), ConfigName("bar")), + *Config(ConfigID("ID-foo"), ConfigName("foo"), ConfigLabels(map[string]string{ + "label": "label-foo", })), }, nil }, @@ -103,9 +107,9 @@ func TestConfigListWithConfigFormat(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ configListFunc: func(options types.ConfigListOptions) ([]swarm.Config, error) { return []swarm.Config{ - *Config(ConfigID("ID-foo"), ConfigName("foo")), - *Config(ConfigID("ID-bar"), ConfigName("bar"), ConfigLabels(map[string]string{ - "label": "label-bar", + *Config(ConfigID("ID-bar"), ConfigName("bar")), + *Config(ConfigID("ID-foo"), ConfigName("foo"), ConfigLabels(map[string]string{ + "label": "label-foo", })), }, nil }, @@ -125,9 +129,9 @@ func TestConfigListWithFormat(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ configListFunc: func(options types.ConfigListOptions) ([]swarm.Config, error) { return []swarm.Config{ - *Config(ConfigID("ID-foo"), ConfigName("foo")), - *Config(ConfigID("ID-bar"), ConfigName("bar"), ConfigLabels(map[string]string{ - "label": "label-bar", + *Config(ConfigID("ID-bar"), ConfigName("bar")), + *Config(ConfigID("ID-foo"), ConfigName("foo"), ConfigLabels(map[string]string{ + "label": "label-foo", })), }, nil }, @@ -147,14 +151,14 @@ func TestConfigListWithFilter(t *testing.T) { assert.Equal(t, "foo", options.Filters.Get("name")[0]) assert.Equal(t, "lbl1=Label-bar", options.Filters.Get("label")[0]) return []swarm.Config{ - *Config(ConfigID("ID-foo"), - ConfigName("foo"), + *Config(ConfigID("ID-bar"), + ConfigName("bar"), ConfigVersion(swarm.Version{Index: 10}), ConfigCreatedAt(time.Now().Add(-2*time.Hour)), ConfigUpdatedAt(time.Now().Add(-1*time.Hour)), ), - *Config(ConfigID("ID-bar"), - ConfigName("bar"), + *Config(ConfigID("ID-foo"), + ConfigName("foo"), ConfigVersion(swarm.Version{Index: 11}), ConfigCreatedAt(time.Now().Add(-2*time.Hour)), ConfigUpdatedAt(time.Now().Add(-1*time.Hour)), diff --git a/cli/command/secret/ls.go b/cli/command/secret/ls.go index 35bc3da0f21d..bbf4c3cf9156 100644 --- a/cli/command/secret/ls.go +++ b/cli/command/secret/ls.go @@ -1,15 +1,26 @@ package secret import ( + "sort" + "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/formatter" "github.com/docker/cli/opts" "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/swarm" "github.com/spf13/cobra" "golang.org/x/net/context" ) +type bySecretName []swarm.Secret + +func (r bySecretName) Len() int { return len(r) } +func (r bySecretName) Swap(i, j int) { r[i], r[j] = r[j], r[i] } +func (r bySecretName) Less(i, j int) bool { + return r[i].Spec.Name < r[j].Spec.Name +} + type listOptions struct { quiet bool format string @@ -53,6 +64,9 @@ func runSecretList(dockerCli command.Cli, options listOptions) error { format = formatter.TableFormatKey } } + + sort.Sort(bySecretName(secrets)) + secretCtx := formatter.Context{ Output: dockerCli.Out(), Format: formatter.NewSecretFormat(format, options.quiet),