1package signers
2
3import (
4	"fmt"
5	"testing"
6	"time"
7
8	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
9	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
10	"github.com/stretchr/testify/assert"
11)
12
13func TestCredentialUpdater_NeedUpdateCredential(t *testing.T) {
14	// default
15	updater := &credentialUpdater{}
16	assert.NotNil(t, updater)
17	assert.True(t, updater.needUpdateCredential())
18
19	// no need update
20	updater = &credentialUpdater{
21		inAdvanceScale:       1.0,
22		lastUpdateTimestamp:  time.Now().Unix() - 4000,
23		credentialExpiration: 5000,
24	}
25	assert.NotNil(t, updater)
26	assert.False(t, updater.needUpdateCredential())
27
28	// need update
29	updater = &credentialUpdater{
30		inAdvanceScale:       1.0,
31		lastUpdateTimestamp:  time.Now().Unix() - 10000,
32		credentialExpiration: 5000,
33	}
34	assert.NotNil(t, updater)
35	assert.True(t, updater.needUpdateCredential())
36}
37
38func TestCredentialUpdater_UpdateCredential(t *testing.T) {
39	updater := &credentialUpdater{}
40	assert.NotNil(t, updater)
41	updater.buildRequestMethod = func() (*requests.CommonRequest, error) {
42		return nil, fmt.Errorf("build request method failed")
43	}
44
45	err := updater.updateCredential()
46	assert.NotNil(t, err)
47	assert.Equal(t, "build request method failed", err.Error())
48
49	updater.buildRequestMethod = func() (*requests.CommonRequest, error) {
50		return requests.NewCommonRequest(), nil
51	}
52	updater.refreshApi = func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
53		return nil, fmt.Errorf("refresh api executed fail")
54	}
55
56	err = updater.updateCredential()
57	assert.NotNil(t, err)
58	assert.Equal(t, "refresh api executed fail", err.Error())
59
60	updater.refreshApi = func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
61		return responses.NewCommonResponse(), nil
62	}
63
64	updater.responseCallBack = func(response *responses.CommonResponse) error {
65		return fmt.Errorf("response callback fail")
66	}
67
68	err = updater.updateCredential()
69	assert.NotNil(t, err)
70	// update timestamp
71	assert.True(t, time.Now().Unix()-updater.lastUpdateTimestamp < 10)
72	assert.Equal(t, "response callback fail", err.Error())
73
74	updater.responseCallBack = func(response *responses.CommonResponse) error {
75		return nil
76	}
77
78	err = updater.updateCredential()
79	assert.Nil(t, err)
80}
81