github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/config/inspect_test.go (about) 1 package config 2 3 import ( 4 "context" 5 "fmt" 6 "io" 7 "testing" 8 "time" 9 10 "github.com/docker/cli/internal/test" 11 "github.com/docker/cli/internal/test/builders" 12 "github.com/docker/docker/api/types/swarm" 13 "github.com/pkg/errors" 14 "gotest.tools/v3/assert" 15 "gotest.tools/v3/golden" 16 ) 17 18 func TestConfigInspectErrors(t *testing.T) { 19 testCases := []struct { 20 args []string 21 flags map[string]string 22 configInspectFunc func(_ context.Context, configID string) (swarm.Config, []byte, error) 23 expectedError string 24 }{ 25 { 26 expectedError: "requires at least 1 argument", 27 }, 28 { 29 args: []string{"foo"}, 30 configInspectFunc: func(_ context.Context, configID string) (swarm.Config, []byte, error) { 31 return swarm.Config{}, nil, errors.Errorf("error while inspecting the config") 32 }, 33 expectedError: "error while inspecting the config", 34 }, 35 { 36 args: []string{"foo"}, 37 flags: map[string]string{ 38 "format": "{{invalid format}}", 39 }, 40 expectedError: "template parsing error", 41 }, 42 { 43 args: []string{"foo", "bar"}, 44 configInspectFunc: func(_ context.Context, configID string) (swarm.Config, []byte, error) { 45 if configID == "foo" { 46 return *builders.Config(builders.ConfigName("foo")), nil, nil 47 } 48 return swarm.Config{}, nil, errors.Errorf("error while inspecting the config") 49 }, 50 expectedError: "error while inspecting the config", 51 }, 52 } 53 for _, tc := range testCases { 54 cmd := newConfigInspectCommand( 55 test.NewFakeCli(&fakeClient{ 56 configInspectFunc: tc.configInspectFunc, 57 }), 58 ) 59 cmd.SetArgs(tc.args) 60 for key, value := range tc.flags { 61 assert.Check(t, cmd.Flags().Set(key, value)) 62 } 63 cmd.SetOut(io.Discard) 64 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 65 } 66 } 67 68 func TestConfigInspectWithoutFormat(t *testing.T) { 69 testCases := []struct { 70 name string 71 args []string 72 configInspectFunc func(_ context.Context, configID string) (swarm.Config, []byte, error) 73 }{ 74 { 75 name: "single-config", 76 args: []string{"foo"}, 77 configInspectFunc: func(_ context.Context, name string) (swarm.Config, []byte, error) { 78 if name != "foo" { 79 return swarm.Config{}, nil, errors.Errorf("Invalid name, expected %s, got %s", "foo", name) 80 } 81 return *builders.Config(builders.ConfigID("ID-foo"), builders.ConfigName("foo")), nil, nil 82 }, 83 }, 84 { 85 name: "multiple-configs-with-labels", 86 args: []string{"foo", "bar"}, 87 configInspectFunc: func(_ context.Context, name string) (swarm.Config, []byte, error) { 88 return *builders.Config(builders.ConfigID("ID-"+name), builders.ConfigName(name), builders.ConfigLabels(map[string]string{ 89 "label1": "label-foo", 90 })), nil, nil 91 }, 92 }, 93 } 94 for _, tc := range testCases { 95 cli := test.NewFakeCli(&fakeClient{configInspectFunc: tc.configInspectFunc}) 96 cmd := newConfigInspectCommand(cli) 97 cmd.SetArgs(tc.args) 98 assert.NilError(t, cmd.Execute()) 99 golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("config-inspect-without-format.%s.golden", tc.name)) 100 } 101 } 102 103 func TestConfigInspectWithFormat(t *testing.T) { 104 configInspectFunc := func(_ context.Context, name string) (swarm.Config, []byte, error) { 105 return *builders.Config(builders.ConfigName("foo"), builders.ConfigLabels(map[string]string{ 106 "label1": "label-foo", 107 })), nil, nil 108 } 109 testCases := []struct { 110 name string 111 format string 112 args []string 113 configInspectFunc func(_ context.Context, name string) (swarm.Config, []byte, error) 114 }{ 115 { 116 name: "simple-template", 117 format: "{{.Spec.Name}}", 118 args: []string{"foo"}, 119 configInspectFunc: configInspectFunc, 120 }, 121 { 122 name: "json-template", 123 format: "{{json .Spec.Labels}}", 124 args: []string{"foo"}, 125 configInspectFunc: configInspectFunc, 126 }, 127 } 128 for _, tc := range testCases { 129 cli := test.NewFakeCli(&fakeClient{ 130 configInspectFunc: tc.configInspectFunc, 131 }) 132 cmd := newConfigInspectCommand(cli) 133 cmd.SetArgs(tc.args) 134 assert.Check(t, cmd.Flags().Set("format", tc.format)) 135 assert.NilError(t, cmd.Execute()) 136 golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("config-inspect-with-format.%s.golden", tc.name)) 137 } 138 } 139 140 func TestConfigInspectPretty(t *testing.T) { 141 testCases := []struct { 142 name string 143 configInspectFunc func(context.Context, string) (swarm.Config, []byte, error) 144 }{ 145 { 146 name: "simple", 147 configInspectFunc: func(_ context.Context, id string) (swarm.Config, []byte, error) { 148 return *builders.Config( 149 builders.ConfigLabels(map[string]string{ 150 "lbl1": "value1", 151 }), 152 builders.ConfigID("configID"), 153 builders.ConfigName("configName"), 154 builders.ConfigCreatedAt(time.Time{}), 155 builders.ConfigUpdatedAt(time.Time{}), 156 builders.ConfigData([]byte("payload here")), 157 ), []byte{}, nil 158 }, 159 }, 160 } 161 for _, tc := range testCases { 162 cli := test.NewFakeCli(&fakeClient{ 163 configInspectFunc: tc.configInspectFunc, 164 }) 165 cmd := newConfigInspectCommand(cli) 166 167 cmd.SetArgs([]string{"configID"}) 168 assert.Check(t, cmd.Flags().Set("pretty", "true")) 169 assert.NilError(t, cmd.Execute()) 170 golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("config-inspect-pretty.%s.golden", tc.name)) 171 } 172 }