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  }