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 ( 117080...115dc3 )
by
unknown
05:55
created

providers.TestDefaultCredentialsProvider   B

Complexity

Conditions 1

Size

Total Lines 88
Code Lines 64

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 64
nop 1
dl 0
loc 88
rs 8.1781
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
)
12
13
func TestDefaultCredentialsProvider(t *testing.T) {
14
	provider := NewDefaultCredentialsProvider()
15
	assert.NotNil(t, provider)
16
	assert.Len(t, provider.providerChain, 4)
17
	_, ok := provider.providerChain[0].(*EnvironmentVariableCredentialsProvider)
18
	assert.True(t, ok)
19
20
	_, ok = provider.providerChain[1].(*CLIProfileCredentialsProvider)
21
	assert.True(t, ok)
22
23
	_, ok = provider.providerChain[2].(*ProfileCredentialsProvider)
24
	assert.True(t, ok)
25
26
	_, ok = provider.providerChain[3].(*ECSRAMRoleCredentialsProvider)
27
	assert.True(t, ok)
28
29
	// Add oidc provider
30
	rollback := utils.Memory("ALIBABA_CLOUD_OIDC_TOKEN_FILE",
31
		"ALIBABA_CLOUD_OIDC_PROVIDER_ARN",
32
		"ALIBABA_CLOUD_ROLE_ARN",
33
		"ALIBABA_CLOUD_ECS_METADATA",
34
		"ALIBABA_CLOUD_CREDENTIALS_URI")
35
36
	defer rollback()
37
	os.Setenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE", "/path/to/oidc.token")
38
	os.Setenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", "oidcproviderarn")
39
	os.Setenv("ALIBABA_CLOUD_ROLE_ARN", "rolearn")
40
41
	provider = NewDefaultCredentialsProvider()
42
	assert.NotNil(t, provider)
43
	assert.Len(t, provider.providerChain, 5)
44
	_, ok = provider.providerChain[0].(*EnvironmentVariableCredentialsProvider)
45
	assert.True(t, ok)
46
47
	_, ok = provider.providerChain[1].(*OIDCCredentialsProvider)
48
	assert.True(t, ok)
49
50
	_, ok = provider.providerChain[2].(*CLIProfileCredentialsProvider)
51
	assert.True(t, ok)
52
53
	_, ok = provider.providerChain[3].(*ProfileCredentialsProvider)
54
	assert.True(t, ok)
55
56
	_, ok = provider.providerChain[4].(*ECSRAMRoleCredentialsProvider)
57
	assert.True(t, ok)
58
59
	// Add ecs ram role name
60
	os.Setenv("ALIBABA_CLOUD_ECS_METADATA", "rolename")
61
	provider = NewDefaultCredentialsProvider()
62
	assert.NotNil(t, provider)
63
	assert.Len(t, provider.providerChain, 5)
64
	_, ok = provider.providerChain[0].(*EnvironmentVariableCredentialsProvider)
65
	assert.True(t, ok)
66
67
	_, ok = provider.providerChain[1].(*OIDCCredentialsProvider)
68
	assert.True(t, ok)
69
70
	_, ok = provider.providerChain[2].(*CLIProfileCredentialsProvider)
71
	assert.True(t, ok)
72
73
	_, ok = provider.providerChain[3].(*ProfileCredentialsProvider)
74
	assert.True(t, ok)
75
76
	_, ok = provider.providerChain[4].(*ECSRAMRoleCredentialsProvider)
77
	assert.True(t, ok)
78
79
	// Add ecs ram role
80
	os.Setenv("ALIBABA_CLOUD_CREDENTIALS_URI", "http://")
81
	provider = NewDefaultCredentialsProvider()
82
	assert.NotNil(t, provider)
83
	assert.Len(t, provider.providerChain, 6)
84
	_, ok = provider.providerChain[0].(*EnvironmentVariableCredentialsProvider)
85
	assert.True(t, ok)
86
87
	_, ok = provider.providerChain[1].(*OIDCCredentialsProvider)
88
	assert.True(t, ok)
89
90
	_, ok = provider.providerChain[2].(*CLIProfileCredentialsProvider)
91
	assert.True(t, ok)
92
93
	_, ok = provider.providerChain[3].(*ProfileCredentialsProvider)
94
	assert.True(t, ok)
95
96
	_, ok = provider.providerChain[4].(*ECSRAMRoleCredentialsProvider)
97
	assert.True(t, ok)
98
99
	_, ok = provider.providerChain[5].(*URLCredentialsProvider)
100
	assert.True(t, ok)
101
}
102
103
func TestDefaultCredentialsProvider_GetCredentials(t *testing.T) {
104
	rollback := utils.Memory("ALIBABA_CLOUD_ACCESS_KEY_ID",
105
		"ALIBABA_CLOUD_ACCESS_KEY_SECRET",
106
		"ALIBABA_CLOUD_SECURITY_TOKEN",
107
		"ALIBABA_CLOUD_ECS_METADATA_DISABLED",
108
		"ALIBABA_CLOUD_PROFILE")
109
110
	defer func() {
111
		getHomePath = utils.GetHomePath
112
		rollback()
113
	}()
114
	originHttpDo := httpDo
115
	defer func() { httpDo = originHttpDo }()
116
117
	// testcase: empty home
118
	getHomePath = func() string {
119
		return ""
120
	}
121
122
	os.Setenv("ALIBABA_CLOUD_ECS_METADATA_DISABLED", "true")
123
	provider := NewDefaultCredentialsProvider()
124
	assert.Len(t, provider.providerChain, 3)
125
	_, err := provider.GetCredentials()
126
	assert.EqualError(t, err, "unable to get credentials from any of the providers in the chain: unable to get credentials from enviroment variables, Access key ID must be specified via environment variable (ALIBABA_CLOUD_ACCESS_KEY_ID), cannot found home dir, cannot found home dir")
127
128
	os.Setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", "akid")
129
	os.Setenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "aksecret")
130
	provider = NewDefaultCredentialsProvider()
131
	assert.Len(t, provider.providerChain, 3)
132
	cc, err := provider.GetCredentials()
133
	assert.Nil(t, err)
134
	assert.Equal(t, &Credentials{AccessKeyId: "akid", AccessKeySecret: "aksecret", SecurityToken: "", ProviderName: "default/env"}, cc)
135
	// get again
136
	cc, err = provider.GetCredentials()
137
	assert.Nil(t, err)
138
	assert.Equal(t, &Credentials{AccessKeyId: "akid", AccessKeySecret: "aksecret", SecurityToken: "", ProviderName: "default/env"}, cc)
139
140
	getHomePath = func() string {
141
		wd, _ := os.Getwd()
142
		return path.Join(wd, "fixtures")
143
	}
144
	os.Setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", "")
145
	os.Setenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "")
146
	os.Setenv("ALIBABA_CLOUD_PROFILE", "ChainableRamRoleArn")
147
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
148
		res = &httputil.Response{
149
			StatusCode: 200,
150
			Body:       []byte(`{"Credentials": {"AccessKeyId":"akid","AccessKeySecret":"aksecret","Expiration":"2021-10-20T04:27:09Z","SecurityToken":"ststoken"}}`),
151
		}
152
		return
153
	}
154
	provider = NewDefaultCredentialsProvider()
155
	cc, err = provider.GetCredentials()
156
	assert.Nil(t, err)
157
	assert.Equal(t, &Credentials{AccessKeyId: "akid", AccessKeySecret: "aksecret", SecurityToken: "ststoken", ProviderName: "default/cli_profile/ram_role_arn/ram_role_arn/static_ak"}, cc)
158
}
159