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.

credentials/providers/cli_profile_test.go   A
last analyzed

Size/Duplication

Total Lines 310
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 10
eloc 227
dl 0
loc 310
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
C providers.TestCLIProfileCredentialsProvider_GetCredentials 0 89 7
B providers.TestCLIProfileCredentialsProvider_getCredentialsProvider 0 133 1
A providers.TestCLIProfileCredentialsProvider 0 27 1
A providers.Test_configuration 0 40 1
1
package providers
2
3
import (
4
	"os"
5
	"path"
6
	"strings"
7
	"testing"
8
	"time"
9
10
	httputil "github.com/aliyun/credentials-go/credentials/internal/http"
11
	"github.com/aliyun/credentials-go/credentials/internal/utils"
12
	"github.com/stretchr/testify/assert"
13
)
14
15
func TestCLIProfileCredentialsProvider(t *testing.T) {
16
	rollback := utils.Memory("ALIBABA_CLOUD_PROFILE", "ALIBABA_CLOUD_CLI_PROFILE_DISABLED")
17
	defer rollback()
18
19
	b, err := NewCLIProfileCredentialsProviderBuilder().
20
		Build()
21
	assert.Nil(t, err)
22
	assert.Equal(t, "", b.profileName)
23
24
	// get from env
25
	os.Setenv("ALIBABA_CLOUD_PROFILE", "custom_profile")
26
	b, err = NewCLIProfileCredentialsProviderBuilder().
27
		Build()
28
	assert.Nil(t, err)
29
	assert.Equal(t, "custom_profile", b.profileName)
30
31
	b, err = NewCLIProfileCredentialsProviderBuilder().
32
		WithProfileName("profilename").
33
		Build()
34
	assert.Nil(t, err)
35
	assert.Equal(t, "profilename", b.profileName)
36
37
	os.Setenv("ALIBABA_CLOUD_CLI_PROFILE_DISABLED", "True")
38
	_, err = NewCLIProfileCredentialsProviderBuilder().
39
		WithProfileName("profilename").
40
		Build()
41
	assert.Equal(t, "the CLI profile is disabled", err.Error())
42
43
}
44
45
func Test_configuration(t *testing.T) {
46
	wd, _ := os.Getwd()
47
	_, err := newConfigurationFromPath(path.Join(wd, "fixtures/inexist_cli_config.json"))
48
	assert.NotNil(t, err)
49
	assert.True(t, strings.HasPrefix(err.Error(), "reading aliyun cli config from "))
50
51
	_, err = newConfigurationFromPath(path.Join(wd, "fixtures/invalid_cli_config.json"))
52
	assert.NotNil(t, err)
53
	assert.True(t, strings.HasPrefix(err.Error(), "unmarshal aliyun cli config from "))
54
55
	_, err = newConfigurationFromPath(path.Join(wd, "fixtures/mock_empty_cli_config.json"))
56
	assert.True(t, strings.HasPrefix(err.Error(), "no any configured profiles in "))
57
58
	conf, err := newConfigurationFromPath(path.Join(wd, "fixtures/mock_cli_config.json"))
59
	assert.Nil(t, err)
60
	assert.Equal(t, &configuration{
61
		Current: "default",
62
		Profiles: []*profile{
63
			{
64
				Mode:            "AK",
65
				Name:            "default",
66
				AccessKeyID:     "akid",
67
				AccessKeySecret: "secret",
68
			},
69
			{
70
				Mode:            "AK",
71
				Name:            "jacksontian",
72
				AccessKeyID:     "akid",
73
				AccessKeySecret: "secret",
74
			},
75
		},
76
	}, conf)
77
78
	_, err = conf.getProfile("inexists")
79
	assert.EqualError(t, err, "unable to get profile with 'inexists'")
80
81
	p, err := conf.getProfile("jacksontian")
82
	assert.Nil(t, err)
83
	assert.Equal(t, p.Name, "jacksontian")
84
	assert.Equal(t, p.Mode, "AK")
85
}
86
87
func TestCLIProfileCredentialsProvider_getCredentialsProvider(t *testing.T) {
88
	conf := &configuration{
89
		Current: "AK",
90
		Profiles: []*profile{
91
			{
92
				Mode:            "AK",
93
				Name:            "AK",
94
				AccessKeyID:     "akid",
95
				AccessKeySecret: "secret",
96
			},
97
			{
98
				Mode:            "StsToken",
99
				Name:            "StsToken",
100
				AccessKeyID:     "access_key_id",
101
				AccessKeySecret: "access_key_secret",
102
				SecurityToken:   "sts_token",
103
			},
104
			{
105
				Mode:            "RamRoleArn",
106
				Name:            "RamRoleArn",
107
				AccessKeyID:     "akid",
108
				AccessKeySecret: "secret",
109
				RoleArn:         "arn",
110
				StsRegion:       "cn-hangzhou",
111
				EnableVpc:       true,
112
				Policy:          "policy",
113
				ExternalId:      "externalId",
114
			},
115
			{
116
				Mode: "RamRoleArn",
117
				Name: "Invalid_RamRoleArn",
118
			},
119
			{
120
				Mode:     "EcsRamRole",
121
				Name:     "EcsRamRole",
122
				RoleName: "rolename",
123
			},
124
			{
125
				Mode:            "OIDC",
126
				Name:            "OIDC",
127
				RoleArn:         "role_arn",
128
				OIDCTokenFile:   "path/to/oidc/file",
129
				OIDCProviderARN: "provider_arn",
130
				StsRegion:       "cn-hangzhou",
131
				EnableVpc:       true,
132
				Policy:          "policy",
133
			},
134
			{
135
				Mode:          "ChainableRamRoleArn",
136
				Name:          "ChainableRamRoleArn",
137
				RoleArn:       "arn",
138
				SourceProfile: "AK",
139
			},
140
			{
141
				Mode:          "ChainableRamRoleArn",
142
				Name:          "ChainableRamRoleArn2",
143
				SourceProfile: "InvalidSource",
144
			},
145
			{
146
				Name:              "CloudSSO",
147
				Mode:              "CloudSSO",
148
				SignInUrl:         "url",
149
				AccessToken:       "token",
150
				AccessTokenExpire: time.Now().Unix() + 1000,
151
				AccessConfig:      "config",
152
				AccountId:         "uid",
153
			},
154
			{
155
				Mode: "Unsupported",
156
				Name: "Unsupported",
157
			},
158
		},
159
	}
160
161
	provider, err := NewCLIProfileCredentialsProviderBuilder().Build()
162
	assert.Nil(t, err)
163
	_, err = provider.getCredentialsProvider(conf, "inexist")
164
	assert.EqualError(t, err, "unable to get profile with 'inexist'")
165
166
	// AK
167
	cp, err := provider.getCredentialsProvider(conf, "AK")
168
	assert.Nil(t, err)
169
	akcp, ok := cp.(*StaticAKCredentialsProvider)
170
	assert.True(t, ok)
171
	cc, err := akcp.GetCredentials()
172
	assert.Nil(t, err)
173
	assert.Equal(t, cc, &Credentials{AccessKeyId: "akid", AccessKeySecret: "secret", SecurityToken: "", ProviderName: "static_ak"})
174
	// STS
175
	cp, err = provider.getCredentialsProvider(conf, "StsToken")
176
	assert.Nil(t, err)
177
	stscp, ok := cp.(*StaticSTSCredentialsProvider)
178
	assert.True(t, ok)
179
	cc, err = stscp.GetCredentials()
180
	assert.Nil(t, err)
181
	assert.Equal(t, cc, &Credentials{AccessKeyId: "access_key_id", AccessKeySecret: "access_key_secret", SecurityToken: "sts_token", ProviderName: "static_sts"})
182
	// RamRoleArn
183
	cp, err = provider.getCredentialsProvider(conf, "RamRoleArn")
184
	assert.Nil(t, err)
185
	_, ok = cp.(*RAMRoleARNCredentialsProvider)
186
	assert.True(t, ok)
187
	// RamRoleArn invalid ak
188
	_, err = provider.getCredentialsProvider(conf, "Invalid_RamRoleArn")
189
	assert.EqualError(t, err, "the access key id is empty")
190
	// EcsRamRole
191
	cp, err = provider.getCredentialsProvider(conf, "EcsRamRole")
192
	assert.Nil(t, err)
193
	_, ok = cp.(*ECSRAMRoleCredentialsProvider)
194
	assert.True(t, ok)
195
	// OIDC
196
	cp, err = provider.getCredentialsProvider(conf, "OIDC")
197
	assert.Nil(t, err)
198
	_, ok = cp.(*OIDCCredentialsProvider)
199
	assert.True(t, ok)
200
201
	// ChainableRamRoleArn
202
	cp, err = provider.getCredentialsProvider(conf, "ChainableRamRoleArn")
203
	assert.Nil(t, err)
204
	_, ok = cp.(*RAMRoleARNCredentialsProvider)
205
	assert.True(t, ok)
206
207
	// CloudSSO
208
	cp, err = provider.getCredentialsProvider(conf, "CloudSSO")
209
	assert.Nil(t, err)
210
	_, ok = cp.(*CloudSSOCredentialsProvider)
211
	assert.True(t, ok)
212
213
	// ChainableRamRoleArn with invalid source profile
214
	_, err = provider.getCredentialsProvider(conf, "ChainableRamRoleArn2")
215
	assert.EqualError(t, err, "get source profile failed: unable to get profile with 'InvalidSource'")
216
217
	// Unsupported
218
	_, err = provider.getCredentialsProvider(conf, "Unsupported")
219
	assert.EqualError(t, err, "unsupported profile mode 'Unsupported'")
220
}
221
222
func TestCLIProfileCredentialsProvider_GetCredentials(t *testing.T) {
223
	originHttpDo := httpDo
224
	defer func() { httpDo = originHttpDo }()
225
	rollback := utils.Memory("ALIBABA_CLOUD_CONFIG_FILE")
226
	defer func() {
227
		getHomePath = utils.GetHomePath
228
		rollback()
229
	}()
230
231
	getHomePath = func() string {
232
		return ""
233
	}
234
	provider, err := NewCLIProfileCredentialsProviderBuilder().Build()
235
	assert.Nil(t, err)
236
	_, err = provider.GetCredentials()
237
	assert.EqualError(t, err, "cannot found home dir")
238
239
	getHomePath = func() string {
240
		return "/path/invalid/home/dir"
241
	}
242
	provider, err = NewCLIProfileCredentialsProviderBuilder().Build()
243
	assert.Nil(t, err)
244
	_, err = provider.GetCredentials()
245
	assert.EqualError(t, err, "reading aliyun cli config from '/path/invalid/home/dir/.aliyun/config.json' failed open /path/invalid/home/dir/.aliyun/config.json: no such file or directory")
246
247
	// testcase: specify credentials file
248
	provider, err = NewCLIProfileCredentialsProviderBuilder().WithProfileFile("/path/to/config.invalid").Build()
249
	assert.Nil(t, err)
250
	_, err = provider.GetCredentials()
251
	assert.EqualError(t, err, "reading aliyun cli config from '/path/to/config.invalid' failed open /path/to/config.invalid: no such file or directory")
252
253
	// testcase: specify credentials file with env
254
	os.Setenv("ALIBABA_CLOUD_CONFIG_FILE", "/path/to/config.invalid")
255
	provider, err = NewCLIProfileCredentialsProviderBuilder().Build()
256
	assert.Nil(t, err)
257
	_, err = provider.GetCredentials()
258
	assert.EqualError(t, err, "reading aliyun cli config from '/path/to/config.invalid' failed open /path/to/config.invalid: no such file or directory")
259
260
	provider, err = NewCLIProfileCredentialsProviderBuilder().WithProfileFile("/path/to/config1.invalid").Build()
261
	assert.Nil(t, err)
262
	_, err = provider.GetCredentials()
263
	assert.EqualError(t, err, "reading aliyun cli config from '/path/to/config1.invalid' failed open /path/to/config1.invalid: no such file or directory")
264
	os.Unsetenv("ALIBABA_CLOUD_CONFIG_FILE")
265
266
	getHomePath = func() string {
267
		wd, _ := os.Getwd()
268
		return path.Join(wd, "fixtures")
269
	}
270
271
	// get credentials by current profile
272
	provider, err = NewCLIProfileCredentialsProviderBuilder().Build()
273
	assert.Nil(t, err)
274
	cc, err := provider.GetCredentials()
275
	assert.Nil(t, err)
276
	assert.Equal(t, &Credentials{AccessKeyId: "akid", AccessKeySecret: "secret", SecurityToken: "", ProviderName: "cli_profile/static_ak"}, cc)
277
278
	provider, err = NewCLIProfileCredentialsProviderBuilder().WithProfileName("inexist").Build()
279
	assert.Nil(t, err)
280
	_, err = provider.GetCredentials()
281
	assert.EqualError(t, err, "unable to get profile with 'inexist'")
282
283
	// The get_credentials_error profile is invalid
284
	provider, err = NewCLIProfileCredentialsProviderBuilder().WithProfileName("get_credentials_error").Build()
285
	assert.Nil(t, err)
286
	_, err = provider.GetCredentials()
287
	assert.Contains(t, err.Error(), "InvalidAccessKeyId.NotFound")
288
289
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
290
		res = &httputil.Response{
291
			StatusCode: 200,
292
			Body:       []byte(`{"Credentials": {"AccessKeyId":"akid","AccessKeySecret":"aksecret","Expiration":"2021-10-20T04:27:09Z","SecurityToken":"ststoken"}}`),
293
		}
294
		return
295
	}
296
	provider, err = NewCLIProfileCredentialsProviderBuilder().WithProfileName("ChainableRamRoleArn").Build()
297
	assert.Nil(t, err)
298
	cc, err = provider.GetCredentials()
299
	assert.Nil(t, err)
300
	assert.Equal(t, "akid", cc.AccessKeyId)
301
	assert.Equal(t, "aksecret", cc.AccessKeySecret)
302
	assert.Equal(t, "ststoken", cc.SecurityToken)
303
	assert.Equal(t, "cli_profile/ram_role_arn/ram_role_arn/static_ak", cc.ProviderName)
304
305
	provider.innerProvider = new(testProvider)
306
	cc, err = provider.GetCredentials()
307
	assert.Nil(t, err)
308
	assert.Equal(t, "test", cc.AccessKeyId)
309
	assert.Equal(t, "test", cc.AccessKeySecret)
310
	assert.Equal(t, "cli_profile/test", cc.ProviderName)
311
}
312