1package credentials 2 3import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/aws/aws-sdk-go/internal/sdktesting" 9 "github.com/aws/aws-sdk-go/internal/shareddefaults" 10) 11 12func TestSharedCredentialsProvider(t *testing.T) { 13 restoreEnvFn := sdktesting.StashEnv() 14 defer restoreEnvFn() 15 16 p := SharedCredentialsProvider{Filename: "example.ini", Profile: ""} 17 creds, err := p.Retrieve() 18 if err != nil { 19 t.Errorf("expect nil, got %v", err) 20 } 21 22 if e, a := "accessKey", creds.AccessKeyID; e != a { 23 t.Errorf("expect %v, got %v", e, a) 24 } 25 if e, a := "secret", creds.SecretAccessKey; e != a { 26 t.Errorf("expect %v, got %v", e, a) 27 } 28 if e, a := "token", creds.SessionToken; e != a { 29 t.Errorf("expect %v, got %v", e, a) 30 } 31} 32 33func TestSharedCredentialsProviderIsExpired(t *testing.T) { 34 restoreEnvFn := sdktesting.StashEnv() 35 defer restoreEnvFn() 36 37 p := SharedCredentialsProvider{Filename: "example.ini", Profile: ""} 38 39 if !p.IsExpired() { 40 t.Errorf("Expect creds to be expired before retrieve") 41 } 42 43 _, err := p.Retrieve() 44 if err != nil { 45 t.Errorf("expect nil, got %v", err) 46 } 47 48 if p.IsExpired() { 49 t.Errorf("Expect creds to not be expired after retrieve") 50 } 51} 52 53func TestSharedCredentialsProviderWithAWS_SHARED_CREDENTIALS_FILE(t *testing.T) { 54 restoreEnvFn := sdktesting.StashEnv() 55 defer restoreEnvFn() 56 57 os.Setenv("AWS_SHARED_CREDENTIALS_FILE", "example.ini") 58 p := SharedCredentialsProvider{} 59 creds, err := p.Retrieve() 60 61 if err != nil { 62 t.Errorf("expect nil, got %v", err) 63 } 64 65 if e, a := "accessKey", creds.AccessKeyID; e != a { 66 t.Errorf("expect %v, got %v", e, a) 67 } 68 if e, a := "secret", creds.SecretAccessKey; e != a { 69 t.Errorf("expect %v, got %v", e, a) 70 } 71 if e, a := "token", creds.SessionToken; e != a { 72 t.Errorf("expect %v, got %v", e, a) 73 } 74} 75 76func TestSharedCredentialsProviderWithAWS_SHARED_CREDENTIALS_FILEAbsPath(t *testing.T) { 77 restoreEnvFn := sdktesting.StashEnv() 78 defer restoreEnvFn() 79 80 wd, err := os.Getwd() 81 if err != nil { 82 t.Errorf("expect no error, got %v", err) 83 } 84 os.Setenv("AWS_SHARED_CREDENTIALS_FILE", filepath.Join(wd, "example.ini")) 85 p := SharedCredentialsProvider{} 86 creds, err := p.Retrieve() 87 if err != nil { 88 t.Errorf("expect nil, got %v", err) 89 } 90 91 if e, a := "accessKey", creds.AccessKeyID; e != a { 92 t.Errorf("expect %v, got %v", e, a) 93 } 94 if e, a := "secret", creds.SecretAccessKey; e != a { 95 t.Errorf("expect %v, got %v", e, a) 96 } 97 if e, a := "token", creds.SessionToken; e != a { 98 t.Errorf("expect %v, got %v", e, a) 99 } 100} 101 102func TestSharedCredentialsProviderWithAWS_PROFILE(t *testing.T) { 103 restoreEnvFn := sdktesting.StashEnv() 104 defer restoreEnvFn() 105 106 os.Setenv("AWS_PROFILE", "no_token") 107 108 p := SharedCredentialsProvider{Filename: "example.ini", Profile: ""} 109 creds, err := p.Retrieve() 110 if err != nil { 111 t.Errorf("expect nil, got %v", err) 112 } 113 114 if e, a := "accessKey", creds.AccessKeyID; e != a { 115 t.Errorf("expect %v, got %v", e, a) 116 } 117 if e, a := "secret", creds.SecretAccessKey; e != a { 118 t.Errorf("expect %v, got %v", e, a) 119 } 120 if v := creds.SessionToken; len(v) != 0 { 121 t.Errorf("Expect no token, %v", v) 122 } 123} 124 125func TestSharedCredentialsProviderWithoutTokenFromProfile(t *testing.T) { 126 restoreEnvFn := sdktesting.StashEnv() 127 defer restoreEnvFn() 128 129 p := SharedCredentialsProvider{Filename: "example.ini", Profile: "no_token"} 130 creds, err := p.Retrieve() 131 if err != nil { 132 t.Errorf("expect nil, got %v", err) 133 } 134 135 if e, a := "accessKey", creds.AccessKeyID; e != a { 136 t.Errorf("expect %v, got %v", e, a) 137 } 138 if e, a := "secret", creds.SecretAccessKey; e != a { 139 t.Errorf("expect %v, got %v", e, a) 140 } 141 if v := creds.SessionToken; len(v) != 0 { 142 t.Errorf("Expect no token, %v", v) 143 } 144} 145 146func TestSharedCredentialsProviderColonInCredFile(t *testing.T) { 147 restoreEnvFn := sdktesting.StashEnv() 148 defer restoreEnvFn() 149 150 p := SharedCredentialsProvider{Filename: "example.ini", Profile: "with_colon"} 151 creds, err := p.Retrieve() 152 if err != nil { 153 t.Errorf("expect nil, got %v", err) 154 } 155 156 if e, a := "accessKey", creds.AccessKeyID; e != a { 157 t.Errorf("expect %v, got %v", e, a) 158 } 159 if e, a := "secret", creds.SecretAccessKey; e != a { 160 t.Errorf("expect %v, got %v", e, a) 161 } 162 if v := creds.SessionToken; len(v) != 0 { 163 t.Errorf("Expect no token, %v", v) 164 } 165} 166 167func TestSharedCredentialsProvider_DefaultFilename(t *testing.T) { 168 restoreEnvFn := sdktesting.StashEnv() 169 defer restoreEnvFn() 170 171 os.Setenv("USERPROFILE", "profile_dir") 172 os.Setenv("HOME", "home_dir") 173 174 // default filename and profile 175 p := SharedCredentialsProvider{} 176 177 filename, err := p.filename() 178 179 if err != nil { 180 t.Fatalf("expect no error, got %v", err) 181 } 182 183 if e, a := shareddefaults.SharedCredentialsFilename(), filename; e != a { 184 t.Errorf("expect %q filename, got %q", e, a) 185 } 186} 187 188func BenchmarkSharedCredentialsProvider(b *testing.B) { 189 restoreEnvFn := sdktesting.StashEnv() 190 defer restoreEnvFn() 191 192 p := SharedCredentialsProvider{Filename: "example.ini", Profile: ""} 193 _, err := p.Retrieve() 194 if err != nil { 195 b.Fatal(err) 196 } 197 198 b.ResetTimer() 199 for i := 0; i < b.N; i++ { 200 _, err := p.Retrieve() 201 if err != nil { 202 b.Fatal(err) 203 } 204 } 205} 206