GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( 115dc3...b73ef4 )
by
unknown
06:09
created

credentials/providers/profile_test.go   A

Size/Duplication

Total Lines 281
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 147
dl 0
loc 281
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A providers.TestProfileCredentialsProviderBuilder 0 21 1
B providers.TestProfileCredentialsProvider_getCredentialsProvider 0 82 1
C providers.TestProfileCredentialsProviderGetCredentials 0 84 7
1
package providers
2
3
import (
4
	"os"
5
	"path"
6
	"testing"
7
8
	httputil "github.com/aliyun/credentials-go/credentials/internal/http"
9
	"github.com/aliyun/credentials-go/credentials/internal/utils"
10
	"github.com/stretchr/testify/assert"
11
	"gopkg.in/ini.v1"
12
)
13
14
var inistr = `
15
[default]
16
enable = true
17
type = access_key
18
access_key_id = foo
19
access_key_secret = bar
20
21
[notype]
22
access_key_id = foo
23
access_key_secret = bar
24
25
[noak]
26
type = access_key
27
access_key_secret = bar
28
29
[emptyak]
30
type = access_key
31
access_key_id =
32
access_key_secret = bar
33
34
[ecs]
35
type = ecs_ram_role
36
role_name = EcsRamRoleTest
37
38
[noecs]
39
type = ecs_ram_role
40
41
[emptyecs]
42
type = ecs_ram_role
43
role_name =
44
45
[ram]
46
type = ram_role_arn
47
access_key_id = foo
48
access_key_secret = bar
49
role_arn = role_arn
50
role_session_name = session_name
51
policy = {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
52
53
[noram]
54
type = ram_role_arn
55
access_key_secret = bar
56
role_arn = role_arn
57
role_session_name = session_name
58
59
[emptyram]
60
type = ram_role_arn
61
access_key_id =
62
access_key_secret = bar
63
role_arn = role_arn
64
role_session_name = session_name
65
66
[rsa]
67
type = rsa_key_pair
68
public_key_id = publicKeyId
69
private_key_file = ./pk.pem
70
71
[norsa]
72
type = rsa_key_pair
73
public_key_id = publicKeyId
74
75
[emptyrsa]
76
type = rsa_key_pair
77
public_key_id = publicKeyId
78
private_key_file =
79
80
[error_rsa]
81
type = rsa_key_pair
82
public_key_id = publicKeyId
83
private_key_file = ./pk_error.pem
84
85
[error_type]
86
type = error_type
87
public_key_id = publicKeyId
88
private_key_file = ./pk_error.pem
89
`
90
91
func TestProfileCredentialsProviderBuilder(t *testing.T) {
92
	rollback := utils.Memory("ALIBABA_CLOUD_PROFILE")
93
	defer rollback()
94
95
	// profile name from specified
96
	provider, err := NewProfileCredentialsProviderBuilder().WithProfileName("custom").Build()
97
	assert.Nil(t, err)
98
	assert.Equal(t, "custom", provider.profileName)
99
100
	// profile name from env
101
	os.Setenv("ALIBABA_CLOUD_PROFILE", "profile_from_env")
102
	provider, err = NewProfileCredentialsProviderBuilder().Build()
103
	assert.Nil(t, err)
104
105
	assert.Equal(t, "profile_from_env", provider.profileName)
106
107
	// profile name from default
108
	os.Setenv("ALIBABA_CLOUD_PROFILE", "")
109
	provider, err = NewProfileCredentialsProviderBuilder().Build()
110
	assert.Nil(t, err)
111
	assert.Equal(t, "default", provider.profileName)
112
}
113
114
func TestProfileCredentialsProvider_getCredentialsProvider(t *testing.T) {
115
	provider, err := NewProfileCredentialsProviderBuilder().WithProfileName("custom").Build()
116
	assert.Nil(t, err)
117
	_, err = provider.getCredentialsProvider(ini.Empty())
118
	assert.NotNil(t, err)
119
	assert.EqualError(t, err, "ERROR: Can not load sectionsection \"custom\" does not exist")
120
121
	file, err := ini.Load([]byte(inistr))
122
	assert.Nil(t, err)
123
	assert.NotNil(t, file)
124
125
	// no type
126
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("notype").Build()
127
	assert.Nil(t, err)
128
	_, err = provider.getCredentialsProvider(file)
129
	assert.NotNil(t, err)
130
	assert.EqualError(t, err, "ERROR: Can not find credential typeerror when getting key of section \"notype\": key \"type\" not exists")
131
132
	// no ak
133
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("noak").Build()
134
	assert.Nil(t, err)
135
	_, err = provider.getCredentialsProvider(file)
136
	assert.NotNil(t, err)
137
	assert.EqualError(t, err, "ERROR: Failed to get value")
138
139
	// value is empty
140
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("emptyak").Build()
141
	assert.Nil(t, err)
142
	_, err = provider.getCredentialsProvider(file)
143
	assert.NotNil(t, err)
144
	assert.EqualError(t, err, "ERROR: Value can't be empty")
145
146
	// static ak provider
147
	provider, err = NewProfileCredentialsProviderBuilder().Build()
148
	assert.Nil(t, err)
149
	cp, err := provider.getCredentialsProvider(file)
150
	assert.Nil(t, err)
151
	akcp, ok := cp.(*StaticAKCredentialsProvider)
152
	assert.True(t, ok)
153
	cc, err := akcp.GetCredentials()
154
	assert.Nil(t, err)
155
	assert.Equal(t, &Credentials{AccessKeyId: "foo", AccessKeySecret: "bar", SecurityToken: "", ProviderName: "static_ak"}, cc)
156
157
	// ecs_ram_role without rolename
158
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("noecs").Build()
159
	assert.Nil(t, err)
160
	_, err = provider.getCredentialsProvider(file)
161
	assert.EqualError(t, err, "ERROR: Failed to get value")
162
163
	// ecs_ram_role with rolename
164
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("ecs").Build()
165
	assert.Nil(t, err)
166
	cp, err = provider.getCredentialsProvider(file)
167
	assert.Nil(t, err)
168
	_, ok = cp.(*ECSRAMRoleCredentialsProvider)
169
	assert.True(t, ok)
170
171
	// ram role arn without keys
172
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("noram").Build()
173
	assert.Nil(t, err)
174
	_, err = provider.getCredentialsProvider(file)
175
	assert.EqualError(t, err, "ERROR: Failed to get value")
176
177
	// ram role arn without values
178
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("emptyram").Build()
179
	assert.Nil(t, err)
180
	_, err = provider.getCredentialsProvider(file)
181
	assert.EqualError(t, err, "ERROR: Value can't be empty")
182
183
	// normal ram role arn
184
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("ram").Build()
185
	assert.Nil(t, err)
186
	cp, err = provider.getCredentialsProvider(file)
187
	assert.Nil(t, err)
188
	_, ok = cp.(*RAMRoleARNCredentialsProvider)
189
	assert.True(t, ok)
190
191
	// unsupported type
192
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("error_type").Build()
193
	assert.Nil(t, err)
194
	_, err = provider.getCredentialsProvider(file)
195
	assert.EqualError(t, err, "ERROR: Failed to get credential")
196
}
197
198
func TestProfileCredentialsProviderGetCredentials(t *testing.T) {
199
	originHttpDo := httpDo
200
	defer func() { httpDo = originHttpDo }()
201
	rollback := utils.Memory("ALIBABA_CLOUD_CREDENTIALS_FILE")
202
	defer func() {
203
		getHomePath = utils.GetHomePath
204
		rollback()
205
	}()
206
207
	// testcase: empty home
208
	getHomePath = func() string {
209
		return ""
210
	}
211
	provider, err := NewProfileCredentialsProviderBuilder().WithProfileName("custom").Build()
212
	assert.Nil(t, err)
213
	_, err = provider.GetCredentials()
214
	assert.EqualError(t, err, "cannot found home dir")
215
216
	// testcase: invalid home
217
	getHomePath = func() string {
218
		return "/path/invalid/home/dir"
219
	}
220
221
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("custom").Build()
222
	assert.Nil(t, err)
223
	_, err = provider.GetCredentials()
224
	assert.EqualError(t, err, "ERROR: Can not open fileopen /path/invalid/home/dir/.alibabacloud/credentials: no such file or directory")
225
226
	// testcase: specify credentials file with env
227
	os.Setenv("ALIBABA_CLOUD_CREDENTIALS_FILE", "/path/to/credentials.invalid")
228
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("custom").Build()
229
	assert.Nil(t, err)
230
	_, err = provider.GetCredentials()
231
	assert.EqualError(t, err, "ERROR: Can not open fileopen /path/to/credentials.invalid: no such file or directory")
232
	os.Unsetenv("ALIBABA_CLOUD_CREDENTIALS_FILE")
233
234
	// get from credentials file
235
	getHomePath = func() string {
236
		wd, _ := os.Getwd()
237
		return path.Join(wd, "fixtures")
238
	}
239
240
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("custom").Build()
241
	assert.Nil(t, err)
242
	_, err = provider.GetCredentials()
243
	assert.EqualError(t, err, "ERROR: Can not load sectionsection \"custom\" does not exist")
244
245
	provider, err = NewProfileCredentialsProviderBuilder().Build()
246
	assert.Nil(t, err)
247
	cc, err := provider.GetCredentials()
248
	assert.Nil(t, err)
249
	assert.Equal(t, &Credentials{AccessKeyId: "foo", AccessKeySecret: "bar", SecurityToken: "", ProviderName: "profile/static_ak"}, cc)
250
251
	// get credentials again
252
	cc, err = provider.GetCredentials()
253
	assert.Nil(t, err)
254
	assert.Equal(t, &Credentials{AccessKeyId: "foo", AccessKeySecret: "bar", SecurityToken: "", ProviderName: "profile/static_ak"}, cc)
255
256
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
257
		res = &httputil.Response{
258
			StatusCode: 200,
259
			Body:       []byte(`{"Credentials": {"AccessKeyId":"akid","AccessKeySecret":"aksecret","Expiration":"2021-10-20T04:27:09Z","SecurityToken":"ststoken"}}`),
260
		}
261
		return
262
	}
263
	provider, err = NewProfileCredentialsProviderBuilder().WithProfileName("ram").Build()
264
	assert.Nil(t, err)
265
	cc, err = provider.GetCredentials()
266
	assert.Nil(t, err)
267
	assert.Equal(t, "akid", cc.AccessKeyId)
268
	assert.Equal(t, "aksecret", cc.AccessKeySecret)
269
	assert.Equal(t, "ststoken", cc.SecurityToken)
270
	assert.Equal(t, "profile/ram_role_arn/static_ak", cc.ProviderName)
271
272
	provider.innerProvider = new(testProvider)
273
	cc, err = provider.GetCredentials()
274
	assert.Nil(t, err)
275
	assert.Equal(t, "test", cc.AccessKeyId)
276
	assert.Equal(t, "test", cc.AccessKeySecret)
277
	assert.Equal(t, "profile/test", cc.ProviderName)
278
279
	provider.innerProvider = new(testErrorProvider)
280
	_, err = provider.GetCredentials()
281
	assert.Equal(t, "error", err.Error())
282
}
283