@@ -538,7 +538,7 @@ func TestProvider_GetAccessTokenOptionsForCluster(t *testing.T) {
538538 g .Expect (o .STSRegion ).To (Equal ("us-west-2" ))
539539}
540540
541- func TestGetRegionFromCodeCommitURL (t * testing.T ) {
541+ func TestProvider_GetAccessTokenOptionsForGitRepository (t * testing.T ) {
542542 for _ , tt := range []struct {
543543 name string
544544 gitURL string
@@ -583,27 +583,88 @@ func TestGetRegionFromCodeCommitURL(t *testing.T) {
583583 parsedURL , err = url .Parse (tt .gitURL )
584584 g .Expect (err ).NotTo (HaveOccurred ())
585585 }
586- region , err := aws .GetRegionFromCodeCommitURL (parsedURL )
586+ atOpts , err := aws.Provider {}. GetAccessTokenOptionsForGitRepository (parsedURL )
587587 if tt .err != "" {
588588 g .Expect (err ).To (HaveOccurred ())
589589 g .Expect (err .Error ()).To (Equal (tt .err ))
590+ g .Expect (atOpts ).To (BeNil ())
590591 } else {
591592 g .Expect (err ).NotTo (HaveOccurred ())
592- g .Expect (region ).To (Equal (tt .expectedRegion ))
593+ var o auth.Options
594+ o .Apply (atOpts ... )
595+ g .Expect (o .STSRegion ).To (Equal (tt .expectedRegion ))
593596 }
594597 })
595598 }
596599}
597600
598- func TestProvider_NewCodeCommitGitCredentials (t * testing.T ) {
601+ func TestProvider_ParseGitRepository (t * testing.T ) {
602+ for _ , tt := range []struct {
603+ name string
604+ gitURL string
605+ expectedRegion string
606+ err string
607+ }{
608+ {
609+ name : "valid CodeCommit URL" ,
610+ gitURL : "https://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-repo" ,
611+ expectedRegion : "us-east-1" ,
612+ },
613+ {
614+ name : "valid CodeCommit FIPS URL" ,
615+ gitURL : "https://git-codecommit-fips.us-west-2.amazonaws.com/v1/repos/test-repo" ,
616+ expectedRegion : "us-west-2" ,
617+ },
618+ {
619+ name : "valid CodeCommit China URL" ,
620+ gitURL : "https://git-codecommit.cn-north-1.amazonaws.com.cn/v1/repos/test-repo" ,
621+ expectedRegion : "cn-north-1" ,
622+ },
623+ {
624+ name : "nil URL" ,
625+ err : "Git URL must be specified for AWS CodeCommit authentication" ,
626+ },
627+ {
628+ name : "non-HTTPS URL" ,
629+ gitURL : "http://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-repo" ,
630+ err : "AWS CodeCommit authentication requires an HTTPS Git URL" ,
631+ },
632+ {
633+ name : "invalid CodeCommit URL" ,
634+ gitURL : "https://github.com/org/repo" ,
635+ err : "invalid AWS CodeCommit Git URL: github.com" ,
636+ },
637+ } {
638+ t .Run (tt .name , func (t * testing.T ) {
639+ g := NewWithT (t )
640+ var parsedURL * url.URL
641+ if tt .gitURL != "" {
642+ var err error
643+ parsedURL , err = url .Parse (tt .gitURL )
644+ g .Expect (err ).NotTo (HaveOccurred ())
645+ }
646+ gitInput , err := aws.Provider {}.ParseGitRepository (parsedURL )
647+ if tt .err != "" {
648+ g .Expect (err ).To (HaveOccurred ())
649+ g .Expect (err .Error ()).To (Equal (tt .err ))
650+ g .Expect (gitInput ).To (BeEmpty ())
651+ } else {
652+ g .Expect (err ).NotTo (HaveOccurred ())
653+ g .Expect (gitInput ).To (Equal (tt .gitURL ))
654+ }
655+ })
656+ }
657+ }
658+
659+ func TestProvider_NewGitCredentials (t * testing.T ) {
599660 invalidToken := & generic.Token {Token : "invalid" , ExpiresAt : time .Now ().Add (time .Hour )}
600661 proxyUrl := url.URL {Scheme : "http" , Host : "proxy.example.com" }
601662 awsRegion := "us-east-1"
602663 for _ , tt := range []struct {
603664 name string
604665 gitURL string
605666 getAccessToken bool
606- accessTokens [] auth.Token
667+ accessToken auth.Token
607668 expectedUsername string
608669 err string
609670 }{
@@ -625,35 +686,11 @@ func TestProvider_NewCodeCommitGitCredentials(t *testing.T) {
625686 getAccessToken : true ,
626687 expectedUsername : "access-key-id%session-token" ,
627688 },
628- {
629- name : "missing Git URL" ,
630- getAccessToken : true ,
631- err : "Git URL must be specified for AWS CodeCommit authentication" ,
632- },
633- {
634- name : "non HTTPS URL" ,
635- gitURL : "http://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-repo" ,
636- getAccessToken : true ,
637- err : "AWS CodeCommit authentication requires an HTTPS Git URL" ,
638- },
639- {
640- name : "invalid CodeCommit URL" ,
641- gitURL : "https://github.com/org/repo" ,
642- getAccessToken : true ,
643- err : "invalid AWS CodeCommit Git URL: github.com" ,
644- },
645- {
646- name : "missing access token" ,
647- gitURL : "https://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-repo" ,
648- getAccessToken : false ,
649- accessTokens : []auth.Token {},
650- err : `AWS access token is required for region "us-east-1"` ,
651- },
652689 {
653690 name : "invalid access token type" ,
654691 gitURL : "https://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-repo" ,
655692 getAccessToken : false ,
656- accessTokens : []auth. Token { invalidToken } ,
693+ accessToken : invalidToken ,
657694 err : "failed to cast token to AWS token: *generic.Token" ,
658695 },
659696 } {
@@ -667,35 +704,27 @@ func TestProvider_NewCodeCommitGitCredentials(t *testing.T) {
667704 returnCreds : awssdk.Credentials {AccessKeyID : "access-key-id" , SecretAccessKey : "secret-access-key" , SessionToken : "session-token" },
668705 }
669706
670- opts := []auth.Option {}
671- if tt .gitURL != "" {
672- gitURL , err := url .Parse (tt .gitURL )
673- g .Expect (err ).NotTo (HaveOccurred ())
674- opts = append (opts , auth .WithGitURL (* gitURL ))
675- }
676-
677707 provider := aws.Provider {Implementation : impl }
678- accessTokens := tt .accessTokens
708+ accessToken := tt .accessToken
679709 if tt .getAccessToken {
680- accessToken , err := auth .GetAccessToken (t .Context (), provider ,
710+ var err error
711+ accessToken , err = auth .GetAccessToken (t .Context (), provider ,
681712 auth .WithSTSRegion (awsRegion ),
682713 auth .WithProxyURL (proxyUrl ),
683714 )
684715 g .Expect (err ).NotTo (HaveOccurred ())
685- accessTokens = []auth.Token {accessToken }
686716 }
687717
688- username , password , err := provider .NewCodeCommitGitCredentials (t .Context (), accessTokens , opts ... )
718+ creds , err := provider .NewGitCredentials (t .Context (), tt . gitURL , accessToken )
689719
690720 if tt .err == "" {
691721 g .Expect (err ).NotTo (HaveOccurred ())
692- g .Expect (username ).To (Equal (tt .expectedUsername ))
693- g .Expect (password ).To (MatchRegexp (`^[0-9]{8}T[0-9]{6}Z[0-9a-f]{64}$` ))
722+ g .Expect (creds . Username ).To (Equal (tt .expectedUsername ))
723+ g .Expect (creds . Password ).To (MatchRegexp (`^[0-9]{8}T[0-9]{6}Z[0-9a-f]{64}$` ))
694724 } else {
695725 g .Expect (err ).To (HaveOccurred ())
696726 g .Expect (err .Error ()).To (Equal (tt .err ))
697- g .Expect (username ).To (BeEmpty ())
698- g .Expect (password ).To (BeEmpty ())
727+ g .Expect (creds ).To (BeNil ())
699728 }
700729 })
701730 }
0 commit comments