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 ( 25ec51...117080 )
by
unknown
07:44
created

credentials/providers/uri_test.go   A

Size/Duplication

Total Lines 198
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 16
eloc 140
dl 0
loc 198
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A providers.TestURLCredentialsProviderWithHttpOptions 0 13 1
C providers.TestURLCredentialsProvider_getCredentials 0 88 8
A providers.TestNewURLCredentialsProvider 0 23 2
B providers.TestURLCredentialsProvider_GetCredentials 0 54 5
1
package providers
2
3
import (
4
	"errors"
5
	"os"
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 TestNewURLCredentialsProvider(t *testing.T) {
16
	rollback := utils.Memory("ALIBABA_CLOUD_CREDENTIALS_URI")
17
	defer func() {
18
		rollback()
19
	}()
20
	// case 1: no credentials provider
21
	_, err := NewURLCredentialsProviderBuilderBuilder().
22
		Build()
23
	assert.EqualError(t, err, "the url is empty")
24
25
	// case 2: no role arn
26
	os.Setenv("ALIBABA_CLOUD_CREDENTIALS_URI", "http://localhost:8080")
27
	p, err := NewURLCredentialsProviderBuilderBuilder().
28
		Build()
29
	assert.Nil(t, err)
30
	assert.True(t, strings.HasPrefix(p.url, "http://localhost:8080"))
31
32
	// case 3: check default role session name
33
	p, err = NewURLCredentialsProviderBuilderBuilder().
34
		WithUrl("http://localhost:9090").
35
		Build()
36
	assert.Nil(t, err)
37
	assert.True(t, strings.HasPrefix(p.url, "http://localhost:9090"))
38
}
39
40
func TestURLCredentialsProvider_getCredentials(t *testing.T) {
41
	originHttpDo := httpDo
42
	defer func() { httpDo = originHttpDo }()
43
	p, err := NewURLCredentialsProviderBuilderBuilder().
44
		WithUrl("http://localhost:8080").
45
		Build()
46
	assert.Nil(t, err)
47
48
	// case 1: server error
49
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
50
		err = errors.New("mock server error")
51
		return
52
	}
53
	_, err = p.getCredentials()
54
	assert.NotNil(t, err)
55
	assert.Equal(t, "mock server error", err.Error())
56
57
	// case 2: 4xx error
58
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
59
		res = &httputil.Response{
60
			StatusCode: 400,
61
			Body:       []byte("4xx error"),
62
		}
63
		return
64
	}
65
66
	_, err = p.getCredentials()
67
	assert.NotNil(t, err)
68
	assert.Equal(t, "get credentials from GET http://localhost:8080 failed: 4xx error", err.Error())
69
70
	// case 3: invalid json
71
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
72
		res = &httputil.Response{
73
			StatusCode: 200,
74
			Body:       []byte("invalid json"),
75
		}
76
		return
77
	}
78
	_, err = p.getCredentials()
79
	assert.NotNil(t, err)
80
	assert.Equal(t, "get credentials from GET http://localhost:8080 failed with error, json unmarshal fail: invalid character 'i' looking for beginning of value", err.Error())
81
82
	// case 4: empty response json
83
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
84
		res = &httputil.Response{
85
			StatusCode: 200,
86
			Body:       []byte("null"),
87
		}
88
		return
89
	}
90
	_, err = p.getCredentials()
91
	assert.NotNil(t, err)
92
	assert.Equal(t, "refresh credentials from GET http://localhost:8080 failed: null", err.Error())
93
94
	// case 5: empty session ak response json
95
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
96
		res = &httputil.Response{
97
			StatusCode: 200,
98
			Body:       []byte(`{}`),
99
		}
100
		return
101
	}
102
	_, err = p.getCredentials()
103
	assert.NotNil(t, err)
104
	assert.Equal(t, "refresh credentials from GET http://localhost:8080 failed: {}", err.Error())
105
106
	// case 6: mock ok value
107
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
108
		res = &httputil.Response{
109
			StatusCode: 200,
110
			Body:       []byte(`{"AccessKeyId":"saki","AccessKeySecret":"saks","Expiration":"2021-10-20T04:27:09Z","SecurityToken":"token"}`),
111
		}
112
		return
113
	}
114
	creds, err := p.getCredentials()
115
	assert.Nil(t, err)
116
	assert.Equal(t, "saki", creds.AccessKeyId)
117
	assert.Equal(t, "saks", creds.AccessKeySecret)
118
	assert.Equal(t, "token", creds.SecurityToken)
119
	assert.Equal(t, "2021-10-20T04:27:09Z", creds.Expiration)
120
121
	// needUpdateCredential
122
	assert.True(t, p.needUpdateCredential())
123
	p.expirationTimestamp = time.Now().Unix()
124
	assert.True(t, p.needUpdateCredential())
125
126
	p.expirationTimestamp = time.Now().Unix() + 300
127
	assert.False(t, p.needUpdateCredential())
128
}
129
130
func TestURLCredentialsProvider_GetCredentials(t *testing.T) {
131
	originHttpDo := httpDo
132
	defer func() { httpDo = originHttpDo }()
133
134
	// case 0: get previous credentials failed
135
	p, err := NewURLCredentialsProviderBuilderBuilder().
136
		WithUrl("http://localhost:8080").
137
		Build()
138
	assert.Nil(t, err)
139
140
	// case 1: get credentials failed
141
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
142
		err = errors.New("mock server error")
143
		return
144
	}
145
	_, err = p.GetCredentials()
146
	assert.NotNil(t, err)
147
	assert.Equal(t, "mock server error", err.Error())
148
149
	// case 2: get invalid expiration
150
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
151
		res = &httputil.Response{
152
			StatusCode: 200,
153
			Body:       []byte(`{"AccessKeyId":"akid","AccessKeySecret":"aksecret","Expiration":"invalidexpiration","SecurityToken":"ststoken"}`),
154
		}
155
		return
156
	}
157
	_, err = p.GetCredentials()
158
	assert.NotNil(t, err)
159
	assert.Equal(t, "parsing time \"invalidexpiration\" as \"2006-01-02T15:04:05Z\": cannot parse \"invalidexpiration\" as \"2006\"", err.Error())
160
161
	// case 3: happy result
162
	httpDo = func(req *httputil.Request) (res *httputil.Response, err error) {
163
		res = &httputil.Response{
164
			StatusCode: 200,
165
			Body:       []byte(`{"AccessKeyId":"akid","AccessKeySecret":"aksecret","Expiration":"2021-10-20T04:27:09Z","SecurityToken":"ststoken"}`),
166
		}
167
		return
168
	}
169
	cc, err := p.GetCredentials()
170
	assert.Nil(t, err)
171
	assert.Equal(t, "akid", cc.AccessKeyId)
172
	assert.Equal(t, "aksecret", cc.AccessKeySecret)
173
	assert.Equal(t, "ststoken", cc.SecurityToken)
174
	assert.Equal(t, "credential_uri", cc.ProviderName)
175
	assert.True(t, p.needUpdateCredential())
176
	// get credentials again
177
	cc, err = p.GetCredentials()
178
	assert.Nil(t, err)
179
	assert.Equal(t, "akid", cc.AccessKeyId)
180
	assert.Equal(t, "aksecret", cc.AccessKeySecret)
181
	assert.Equal(t, "ststoken", cc.SecurityToken)
182
	assert.Equal(t, "credential_uri", cc.ProviderName)
183
	assert.True(t, p.needUpdateCredential())
184
}
185
186
func TestURLCredentialsProviderWithHttpOptions(t *testing.T) {
187
	p, err := NewURLCredentialsProviderBuilderBuilder().
188
		WithUrl("http://localhost:8080").
189
		WithHttpOptions(&HttpOptions{
190
			ConnectTimeout: 1000,
191
			ReadTimeout:    1000,
192
			Proxy:          "localhost:3999",
193
		}).
194
		Build()
195
	assert.Nil(t, err)
196
	_, err = p.GetCredentials()
197
	assert.NotNil(t, err)
198
	assert.Contains(t, err.Error(), "proxyconnect tcp:")
199
}
200