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 ( b73ef4...747592 )
by
unknown
05:57
created

credentials/providers/cli_profile_test.go   A

Size/Duplication

Total Lines 268
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 10
eloc 195
dl 0
loc 268
rs 10
c 0
b 0
f 0

4 Methods

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