@@ -162,6 +162,120 @@ func TestGetSecret(t *testing.T) {
162
162
require .NoError (t , e )
163
163
assert .Equal (t , secretValue , output .Data [req .Name ])
164
164
})
165
+
166
+ t .Run ("with multiple keys per secret" , func (t * testing.T ) {
167
+ mockSSM := & awsAuth.MockSecretManager {
168
+ GetSecretValueFn : func (ctx context.Context , input * secretsmanager.GetSecretValueInput , option ... request.Option ) (* secretsmanager.GetSecretValueOutput , error ) {
169
+ assert .Nil (t , input .VersionId )
170
+ assert .Nil (t , input .VersionStage )
171
+ secret := `{"key1":"value1","key2":"value2"}`
172
+
173
+ return & secretsmanager.GetSecretValueOutput {
174
+ Name : input .SecretId ,
175
+ SecretString : & secret ,
176
+ }, nil
177
+ },
178
+ }
179
+
180
+ secret := awsAuth.SecretManagerClients {
181
+ Manager : mockSSM ,
182
+ }
183
+
184
+ mockedClients := awsAuth.Clients {
185
+ Secret : & secret ,
186
+ }
187
+ mockAuthProvider := & awsAuth.StaticAuth {}
188
+ mockAuthProvider .WithMockClients (& mockedClients )
189
+ s := smSecretStore {
190
+ authProvider : mockAuthProvider ,
191
+ multipleKeysPerSecret : true ,
192
+ }
193
+
194
+ req := secretstores.GetSecretRequest {
195
+ Name : "/aws/secret/testing" ,
196
+ Metadata : map [string ]string {},
197
+ }
198
+ output , e := s .GetSecret (t .Context (), req )
199
+ require .NoError (t , e )
200
+ assert .Len (t , output .Data , 2 )
201
+ assert .Equal (t , "value1" , output .Data ["/aws/secret/testing:key1" ])
202
+ assert .Equal (t , "value2" , output .Data ["/aws/secret/testing:key2" ])
203
+ })
204
+
205
+ t .Run ("with multiple keys per secret and option disabled" , func (t * testing.T ) {
206
+ mockSSM := & awsAuth.MockSecretManager {
207
+ GetSecretValueFn : func (ctx context.Context , input * secretsmanager.GetSecretValueInput , option ... request.Option ) (* secretsmanager.GetSecretValueOutput , error ) {
208
+ assert .Nil (t , input .VersionId )
209
+ assert .Nil (t , input .VersionStage )
210
+ secret := `{"key1":"value1","key2":"value2"}`
211
+
212
+ return & secretsmanager.GetSecretValueOutput {
213
+ Name : input .SecretId ,
214
+ SecretString : & secret ,
215
+ }, nil
216
+ },
217
+ }
218
+
219
+ secret := awsAuth.SecretManagerClients {
220
+ Manager : mockSSM ,
221
+ }
222
+
223
+ mockedClients := awsAuth.Clients {
224
+ Secret : & secret ,
225
+ }
226
+ mockAuthProvider := & awsAuth.StaticAuth {}
227
+ mockAuthProvider .WithMockClients (& mockedClients )
228
+ s := smSecretStore {
229
+ authProvider : mockAuthProvider ,
230
+ }
231
+
232
+ req := secretstores.GetSecretRequest {
233
+ Name : "/aws/secret/testing" ,
234
+ Metadata : map [string ]string {},
235
+ }
236
+ output , e := s .GetSecret (t .Context (), req )
237
+ require .NoError (t , e )
238
+ assert .Len (t , output .Data , 1 )
239
+ assert .Equal (t , `{"key1":"value1","key2":"value2"}` , output .Data ["/aws/secret/testing" ])
240
+ })
241
+
242
+ t .Run ("with multiple keys per secret and secret is NOT json" , func (t * testing.T ) {
243
+ mockSSM := & awsAuth.MockSecretManager {
244
+ GetSecretValueFn : func (ctx context.Context , input * secretsmanager.GetSecretValueInput , option ... request.Option ) (* secretsmanager.GetSecretValueOutput , error ) {
245
+ assert .Nil (t , input .VersionId )
246
+ assert .Nil (t , input .VersionStage )
247
+ secret := "not json"
248
+
249
+ return & secretsmanager.GetSecretValueOutput {
250
+ Name : input .SecretId ,
251
+ SecretString : & secret ,
252
+ }, nil
253
+ },
254
+ }
255
+
256
+ secret := awsAuth.SecretManagerClients {
257
+ Manager : mockSSM ,
258
+ }
259
+
260
+ mockedClients := awsAuth.Clients {
261
+ Secret : & secret ,
262
+ }
263
+ mockAuthProvider := & awsAuth.StaticAuth {}
264
+ mockAuthProvider .WithMockClients (& mockedClients )
265
+ s := smSecretStore {
266
+ authProvider : mockAuthProvider ,
267
+ multipleKeysPerSecret : true ,
268
+ }
269
+
270
+ req := secretstores.GetSecretRequest {
271
+ Name : "/aws/secret/testing" ,
272
+ Metadata : map [string ]string {},
273
+ }
274
+ output , e := s .GetSecret (t .Context (), req )
275
+ require .NoError (t , e )
276
+ assert .Len (t , output .Data , 1 )
277
+ assert .Equal (t , "not json" , output .Data ["/aws/secret/testing" ])
278
+ })
165
279
})
166
280
167
281
t .Run ("unsuccessfully retrieve secret" , func (t * testing.T ) {
0 commit comments