github.com/aavshr/aws-sdk-go@v1.41.3/aws/credentials/chain_provider_test.go (about)

     1  package credentials
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/aavshr/aws-sdk-go/aws/awserr"
     8  )
     9  
    10  type secondStubProvider struct {
    11  	creds   Value
    12  	expired bool
    13  	err     error
    14  }
    15  
    16  func (s *secondStubProvider) Retrieve() (Value, error) {
    17  	s.expired = false
    18  	s.creds.ProviderName = "secondStubProvider"
    19  	return s.creds, s.err
    20  }
    21  func (s *secondStubProvider) IsExpired() bool {
    22  	return s.expired
    23  }
    24  
    25  func TestChainProviderWithNames(t *testing.T) {
    26  	p := &ChainProvider{
    27  		Providers: []Provider{
    28  			&stubProvider{err: awserr.New("FirstError", "first provider error", nil)},
    29  			&stubProvider{err: awserr.New("SecondError", "second provider error", nil)},
    30  			&secondStubProvider{
    31  				creds: Value{
    32  					AccessKeyID:     "AKIF",
    33  					SecretAccessKey: "NOSECRET",
    34  					SessionToken:    "",
    35  				},
    36  			},
    37  			&stubProvider{
    38  				creds: Value{
    39  					AccessKeyID:     "AKID",
    40  					SecretAccessKey: "SECRET",
    41  					SessionToken:    "",
    42  				},
    43  			},
    44  		},
    45  	}
    46  
    47  	creds, err := p.Retrieve()
    48  	if err != nil {
    49  		t.Errorf("Expect no error, got %v", err)
    50  	}
    51  	if e, a := "secondStubProvider", creds.ProviderName; e != a {
    52  		t.Errorf("Expect provider name to match, %v got, %v", e, a)
    53  	}
    54  
    55  	// Also check credentials
    56  	if e, a := "AKIF", creds.AccessKeyID; e != a {
    57  		t.Errorf("Expect access key ID to match, %v got %v", e, a)
    58  	}
    59  	if e, a := "NOSECRET", creds.SecretAccessKey; e != a {
    60  		t.Errorf("Expect secret access key to match, %v got %v", e, a)
    61  	}
    62  	if v := creds.SessionToken; len(v) != 0 {
    63  		t.Errorf("Expect session token to be empty, %v", v)
    64  	}
    65  
    66  }
    67  
    68  func TestChainProviderGet(t *testing.T) {
    69  	p := &ChainProvider{
    70  		Providers: []Provider{
    71  			&stubProvider{err: awserr.New("FirstError", "first provider error", nil)},
    72  			&stubProvider{err: awserr.New("SecondError", "second provider error", nil)},
    73  			&stubProvider{
    74  				creds: Value{
    75  					AccessKeyID:     "AKID",
    76  					SecretAccessKey: "SECRET",
    77  					SessionToken:    "",
    78  				},
    79  			},
    80  		},
    81  	}
    82  
    83  	creds, err := p.Retrieve()
    84  	if err != nil {
    85  		t.Errorf("Expect no error, got %v", err)
    86  	}
    87  	if e, a := "AKID", creds.AccessKeyID; e != a {
    88  		t.Errorf("Expect access key ID to match, %v got %v", e, a)
    89  	}
    90  	if e, a := "SECRET", creds.SecretAccessKey; e != a {
    91  		t.Errorf("Expect secret access key to match, %v got %v", e, a)
    92  	}
    93  	if v := creds.SessionToken; len(v) != 0 {
    94  		t.Errorf("Expect session token to be empty, %v", v)
    95  	}
    96  }
    97  
    98  func TestChainProviderIsExpired(t *testing.T) {
    99  	stubProvider := &stubProvider{expired: true}
   100  	p := &ChainProvider{
   101  		Providers: []Provider{
   102  			stubProvider,
   103  		},
   104  	}
   105  
   106  	if !p.IsExpired() {
   107  		t.Errorf("Expect expired to be true before any Retrieve")
   108  	}
   109  	_, err := p.Retrieve()
   110  	if err != nil {
   111  		t.Errorf("Expect no error, got %v", err)
   112  	}
   113  	if p.IsExpired() {
   114  		t.Errorf("Expect not expired after retrieve")
   115  	}
   116  
   117  	stubProvider.expired = true
   118  	if !p.IsExpired() {
   119  		t.Errorf("Expect return of expired provider")
   120  	}
   121  
   122  	_, err = p.Retrieve()
   123  	if err != nil {
   124  		t.Errorf("Expect no error, got %v", err)
   125  	}
   126  	if p.IsExpired() {
   127  		t.Errorf("Expect not expired after retrieve")
   128  	}
   129  }
   130  
   131  func TestChainProviderWithNoProvider(t *testing.T) {
   132  	p := &ChainProvider{
   133  		Providers: []Provider{},
   134  	}
   135  
   136  	if !p.IsExpired() {
   137  		t.Errorf("Expect expired with no providers")
   138  	}
   139  	_, err := p.Retrieve()
   140  	if e, a := ErrNoValidProvidersFoundInChain, err; e != a {
   141  		t.Errorf("Expect no providers error returned, %v, got %v", e, a)
   142  	}
   143  }
   144  
   145  func TestChainProviderWithNoValidProvider(t *testing.T) {
   146  	errs := []error{
   147  		awserr.New("FirstError", "first provider error", nil),
   148  		awserr.New("SecondError", "second provider error", nil),
   149  	}
   150  	p := &ChainProvider{
   151  		Providers: []Provider{
   152  			&stubProvider{err: errs[0]},
   153  			&stubProvider{err: errs[1]},
   154  		},
   155  	}
   156  
   157  	if !p.IsExpired() {
   158  		t.Errorf("Expect expired with no providers")
   159  	}
   160  	_, err := p.Retrieve()
   161  
   162  	if e, a := ErrNoValidProvidersFoundInChain, err; e != a {
   163  		t.Errorf("Expect no providers error returned, %v, got %v", e, a)
   164  	}
   165  }
   166  
   167  func TestChainProviderWithNoValidProviderWithVerboseEnabled(t *testing.T) {
   168  	errs := []error{
   169  		awserr.New("FirstError", "first provider error", nil),
   170  		awserr.New("SecondError", "second provider error", nil),
   171  	}
   172  	p := &ChainProvider{
   173  		VerboseErrors: true,
   174  		Providers: []Provider{
   175  			&stubProvider{err: errs[0]},
   176  			&stubProvider{err: errs[1]},
   177  		},
   178  	}
   179  
   180  	if !p.IsExpired() {
   181  		t.Errorf("Expect expired with no providers")
   182  	}
   183  	_, err := p.Retrieve()
   184  
   185  	expectErr := awserr.NewBatchError("NoCredentialProviders", "no valid providers in chain", errs)
   186  	if e, a := expectErr, err; !reflect.DeepEqual(e, a) {
   187  		t.Errorf("Expect no providers error returned, %v, got %v", e, a)
   188  	}
   189  }