github.com/jfrog/jfrog-cli-platform-services@v1.2.0/commands/add_secret_cmd_test.go (about) 1 package commands 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 11 "github.com/jfrog/jfrog-cli-platform-services/model" 12 ) 13 14 type addSecretAssertFunc func(t *testing.T, manifestBefore, manifestAfter *model.Manifest) 15 16 func TestAddSecretCmd(t *testing.T) { 17 tests := []struct { 18 name string 19 commandArgs []string 20 secretName string 21 secretValue string 22 secretPassword string 23 wantErr string 24 assert addSecretAssertFunc 25 patchManifest func(mf *model.Manifest) 26 }{ 27 { 28 name: "add", 29 secretName: "sec-1", 30 secretValue: "val-1", 31 secretPassword: secretPassword, 32 patchManifest: func(mf *model.Manifest) { 33 mf.Secrets = model.Secrets{ 34 "sec-2": mustEncryptSecret(t, "val-2"), 35 } 36 }, 37 assert: assertSecrets(model.Secrets{ 38 "sec-1": "val-1", 39 "sec-2": "val-2", 40 }), 41 }, 42 { 43 name: "add with nil manifest", 44 secretName: "sec-1", 45 secretValue: "val-1", 46 secretPassword: secretPassword, 47 patchManifest: func(mf *model.Manifest) { 48 mf.Secrets = nil 49 }, 50 assert: assertSecrets(model.Secrets{ 51 "sec-1": "val-1", 52 }), 53 }, 54 { 55 name: "add with different password", 56 secretName: "sec-1", 57 secretValue: "val-1", 58 secretPassword: secretPassword, 59 patchManifest: func(mf *model.Manifest) { 60 mf.Secrets["sec-2"] = mustEncryptSecret(t, "val-2", "other-password") 61 }, 62 wantErr: "others secrets are encrypted with a different password, please use the same one", 63 }, 64 { 65 name: "edit secret", 66 secretName: "sec-1", 67 secretValue: "val-1", 68 secretPassword: secretPassword, 69 commandArgs: []string{fmt.Sprintf("--%s", model.FlagEdit)}, 70 patchManifest: func(mf *model.Manifest) { 71 mf.Secrets = model.Secrets{ 72 "sec-1": mustEncryptSecret(t, "val-1-before"), 73 } 74 }, 75 assert: assertSecrets(model.Secrets{"sec-1": "val-1"}), 76 }, 77 { 78 name: "fails if the secret exists", 79 secretName: "sec-1", 80 secretValue: "val-1", 81 secretPassword: secretPassword, 82 patchManifest: func(mf *model.Manifest) { 83 mf.Secrets = model.Secrets{ 84 "sec-1": mustEncryptSecret(t, "val-1-before"), 85 } 86 }, 87 wantErr: "sec-1 already exists, use --edit to overwrite", 88 }, 89 { 90 name: "fails if missing name", 91 wantErr: "Wrong number of arguments (0).", 92 }, 93 } 94 95 for _, tt := range tests { 96 t.Run(tt.name, func(t *testing.T) { 97 workerDir, workerName := prepareWorkerDirForTest(t) 98 99 runCmd := createCliRunner(t, GetInitCommand(), GetAddSecretCommand()) 100 101 err := runCmd("worker", "init", "GENERIC_EVENT", workerName) 102 require.NoError(t, err) 103 104 if tt.patchManifest != nil { 105 patchManifest(t, tt.patchManifest) 106 } 107 108 if tt.secretPassword != "" { 109 err = os.Setenv(model.EnvKeySecretsPassword, tt.secretPassword) 110 require.NoError(t, err) 111 t.Cleanup(func() { 112 _ = os.Unsetenv(model.EnvKeySecretsPassword) 113 }) 114 } 115 116 if tt.secretValue != "" { 117 err = os.Setenv(model.EnvKeyAddSecretValue, tt.secretValue) 118 require.NoError(t, err) 119 t.Cleanup(func() { 120 _ = os.Unsetenv(model.EnvKeyAddSecretValue) 121 }) 122 } 123 124 manifestBefore, err := model.ReadManifest(workerDir) 125 require.NoError(t, err) 126 127 cmd := []string{"worker", "add-secret"} 128 cmd = append(cmd, tt.commandArgs...) 129 130 if tt.secretName != "" { 131 cmd = append(cmd, tt.secretName) 132 } 133 134 err = runCmd(cmd...) 135 136 if tt.wantErr == "" { 137 require.NoError(t, err) 138 manifestAfter, err := model.ReadManifest(workerDir) 139 assert.NoError(t, err) 140 tt.assert(t, manifestBefore, manifestAfter) 141 } else { 142 assert.EqualError(t, err, tt.wantErr) 143 } 144 }) 145 } 146 } 147 148 func assertSecrets(wantSecrets model.Secrets) addSecretAssertFunc { 149 return func(t *testing.T, manifestBefore, manifestAfter *model.Manifest) { 150 require.Equalf(t, len(wantSecrets), len(manifestAfter.Secrets), "Invalid secrets length") 151 require.NoError(t, manifestAfter.DecryptSecrets()) 152 assert.Equalf(t, wantSecrets, manifestAfter.Secrets, "Secrets mismatch") 153 } 154 }