@@ -265,3 +265,199 @@ func TestChoiceFriendlyLabelRole(t *testing.T) {
265265 })
266266 }
267267}
268+ func TestPromptForRole (t * testing.T ) {
269+ testCases := []struct {
270+ name string
271+ idpARN string
272+ configRoles map [string ]string
273+ roleARNs []string
274+ roleArg string
275+ expected string
276+ }{
277+ {
278+ name : "friendly label" ,
279+ idpARN : "arn:aws:iam::123:role/rickrole" ,
280+ roleArg : "Rock N Role" ,
281+ roleARNs : []string {
282+ "arn:aws:iam::123:role/rocknrole" ,
283+ "arn:aws:iam::123:role/rickrole" ,
284+ },
285+ configRoles : map [string ]string {
286+ "arn:aws:iam::123:role/rocknrole" : "Rock N Role" ,
287+ "arn:aws:iam::123:role/rickrole" : "Rick Role" ,
288+ "arn:aws:iam::.*:role/never" : "Never Gonna Give You Up" ,
289+ },
290+ expected : "arn:aws:iam::123:role/rocknrole" ,
291+ },
292+ {
293+ name : "friendly label configured but arn arg supplied" ,
294+ idpARN : "arn:aws:iam::123:role/rickrole" ,
295+ roleArg : "arn:aws:iam::123:role/rocknrole" ,
296+ roleARNs : []string {
297+ "arn:aws:iam::123:role/rocknrole" ,
298+ "arn:aws:iam::123:role/rickrole" ,
299+ },
300+ configRoles : map [string ]string {
301+ "arn:aws:iam::123:role/rocknrole" : "Rock N Role" ,
302+ "arn:aws:iam::123:role/rickrole" : "Rick Role" ,
303+ "arn:aws:iam::.*:role/never" : "Never Gonna Give You Up" ,
304+ },
305+ expected : "arn:aws:iam::123:role/rocknrole" ,
306+ },
307+ {
308+ name : "friendly label with wildcard" ,
309+ idpARN : "arn:aws:iam::123:role/rickrole" ,
310+ roleArg : "Never Gonna Give You Up" ,
311+ roleARNs : []string {
312+ "arn:aws:iam::123:role/never" ,
313+ "arn:aws:iam::123:role/rocknrole" ,
314+ },
315+ configRoles : map [string ]string {
316+ "arn:aws:iam::123:role/rocknrole" : "Rock N Role" ,
317+ "arn:aws:iam::123:role/rickrole" : "Rick Role" ,
318+ "arn:aws:iam::.*:role/never" : "Never Gonna Give You Up" ,
319+ },
320+ expected : "arn:aws:iam::123:role/never" ,
321+ },
322+ {
323+ name : "no friendly labels arn arg supplied" ,
324+ idpARN : "arn:aws:iam::123:role/rickrole" ,
325+ roleArg : "arn:aws:iam::123:role/rocknrole" ,
326+ roleARNs : []string {
327+ "arn:aws:iam::123:role/never" ,
328+ "arn:aws:iam::123:role/rocknrole" ,
329+ },
330+ configRoles : nil ,
331+ expected : "arn:aws:iam::123:role/rocknrole" ,
332+ },
333+ {
334+ name : "single arn option no arg supplied" ,
335+ idpARN : "arn:aws:iam::123:role/rickrole" ,
336+ roleArg : "" ,
337+ roleARNs : []string {
338+ "arn:aws:iam::123:role/never" ,
339+ },
340+ configRoles : nil ,
341+ expected : "arn:aws:iam::123:role/never" ,
342+ },
343+ }
344+ t .Parallel ()
345+ for _ , tc := range testCases {
346+ t .Run (tc .name , func (t * testing.T ) {
347+ cfg , err := config .NewConfig (& config.Attributes {
348+ AWSIAMRole : tc .roleArg ,
349+ })
350+ require .NoError (t , err )
351+
352+ w , err := NewWebSSOAuthentication (cfg )
353+ roleARn , err := w .promptForRole (tc .idpARN , tc .roleARNs , tc .configRoles )
354+ if roleARn != tc .expected {
355+ t .Errorf ("expected %q, got %q" , tc .expected , roleARn )
356+ }
357+ })
358+ }
359+ }
360+
361+ func TestPromptForIdp (t * testing.T ) {
362+ testCases := []struct {
363+ name string
364+ configIdps map [string ]string
365+ idpARNs []string
366+ idpArg string
367+ expected string
368+ }{
369+ {
370+ name : "friendly label" ,
371+ idpArg : "My IdP" ,
372+ idpARNs : []string {
373+ "arn:aws:iam::123:saml-provider/youridp" ,
374+ "arn:aws:iam::123:saml-provider/myidp" ,
375+ "arn:aws:iam::123:saml-provider/aidp" ,
376+ },
377+ configIdps : map [string ]string {
378+ "arn:aws:iam::123:saml-provider/youridp" : "Your IdP" ,
379+ "arn:aws:iam::123:saml-provider/myidp" : "My IdP" ,
380+ "arn:aws:iam::.*:saml-provider/aidp" : "A IdP" ,
381+ },
382+ expected : "arn:aws:iam::123:saml-provider/myidp" ,
383+ },
384+ {
385+ name : "friendly label configured but arn arg supplied" ,
386+ idpArg : "arn:aws:iam::123:saml-provider/myidp" ,
387+ idpARNs : []string {
388+ "arn:aws:iam::123:saml-provider/youridp" ,
389+ "arn:aws:iam::123:saml-provider/myidp" ,
390+ "arn:aws:iam::123:saml-provider/aidp" ,
391+ },
392+ configIdps : map [string ]string {
393+ "arn:aws:iam::123:saml-provider/youridp" : "Your IdP" ,
394+ "arn:aws:iam::123:saml-provider/myidp" : "My IdP" ,
395+ "arn:aws:iam::.*:saml-provider/aidp" : "A IdP" ,
396+ },
397+ expected : "arn:aws:iam::123:saml-provider/myidp" ,
398+ },
399+ {
400+ name : "friendly label with wildcard" ,
401+ idpArg : "A IdP" ,
402+ idpARNs : []string {
403+ "arn:aws:iam::123:saml-provider/youridp" ,
404+ "arn:aws:iam::123:saml-provider/myidp" ,
405+ "arn:aws:iam::123:saml-provider/aidp" ,
406+ },
407+ configIdps : map [string ]string {
408+ "arn:aws:iam::123:saml-provider/youridp" : "Your IdP" ,
409+ "arn:aws:iam::123:saml-provider/myidp" : "My IdP" ,
410+ "arn:aws:iam::.*:saml-provider/aidp" : "A IdP" ,
411+ },
412+ expected : "arn:aws:iam::123:saml-provider/aidp" ,
413+ },
414+ {
415+ name : "no friendly labels arn arg supplied" ,
416+ idpArg : "arn:aws:iam::123:saml-provider/youridp" ,
417+ idpARNs : []string {
418+ "arn:aws:iam::123:saml-provider/youridp" ,
419+ "arn:aws:iam::123:saml-provider/myidp" ,
420+ "arn:aws:iam::123:saml-provider/aidp" ,
421+ },
422+ configIdps : nil ,
423+ expected : "arn:aws:iam::123:saml-provider/youridp" ,
424+ },
425+ {
426+ name : "single arn option no arg supplied" ,
427+ idpArg : "" ,
428+ idpARNs : []string {
429+ "arn:aws:iam::123:saml-provider/myidp" ,
430+ },
431+ configIdps : nil ,
432+ expected : "arn:aws:iam::123:saml-provider/myidp" ,
433+ },
434+ {
435+ name : "single arn option no arg supplied with friendly label" ,
436+ idpArg : "" ,
437+ idpARNs : []string {
438+ "arn:aws:iam::123:saml-provider/myidp" ,
439+ },
440+ configIdps : map [string ]string {
441+ "arn:aws:iam::123:saml-provider/youridp" : "Your IdP" ,
442+ "arn:aws:iam::123:saml-provider/myidp" : "My IdP" ,
443+ "arn:aws:iam::.*:saml-provider/aidp" : "A IdP" ,
444+ },
445+ expected : "arn:aws:iam::123:saml-provider/myidp" ,
446+ },
447+ }
448+ t .Parallel ()
449+ for _ , tc := range testCases {
450+ t .Run (tc .name , func (t * testing.T ) {
451+ cfg , err := config .NewConfig (& config.Attributes {
452+ AWSIAMIdP : tc .idpArg ,
453+ })
454+ require .NoError (t , err )
455+
456+ w , err := NewWebSSOAuthentication (cfg )
457+ roleARn , err := w .promptForIDP (tc .idpARNs , tc .configIdps )
458+ if roleARn != tc .expected {
459+ t .Errorf ("expected %q, got %q" , tc .expected , roleARn )
460+ }
461+ })
462+ }
463+ }
0 commit comments