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 }