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