1 package credentials
2
3 import (
4 "errors"
5 "net/http"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 )
10
11 func Test_EcsRAmRoleCredential(t *testing.T) {
12 auth := newEcsRAMRoleCredential("go sdk", 0.5, nil)
13 origTestHookDo := hookDo
14 defer func() { hookDo = origTestHookDo }()
15
16 hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
17 return func(req *http.Request) (*http.Response, error) {
18 return mockResponse(300, ``, errors.New("sdk test"))
19 }
20 }
21 accesskeyId, err := auth.GetAccessKeyId()
22 assert.NotNil(t, err)
23 assert.Equal(t, "refresh Ecs sts token err: sdk test", err.Error())
24 assert.Equal(t, "", *accesskeyId)
25
26 hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
27 return func(req *http.Request) (*http.Response, error) {
28 return mockResponse(300, ``, nil)
29 }
30 }
31 accesskeyId, err = auth.GetAccessKeyId()
32 assert.NotNil(t, err)
33 assert.Equal(t, "refresh Ecs sts token err: httpStatus: 300, message = ", err.Error())
34 assert.Equal(t, "", *accesskeyId)
35
36 accesskeySecret, err := auth.GetAccessKeySecret()
37 assert.NotNil(t, err)
38 assert.Equal(t, "refresh Ecs sts token err: httpStatus: 300, message = ", err.Error())
39 assert.Equal(t, "", *accesskeySecret)
40
41 ststoken, err := auth.GetSecurityToken()
42 assert.NotNil(t, err)
43 assert.Equal(t, "refresh Ecs sts token err: httpStatus: 300, message = ", err.Error())
44 assert.Equal(t, "", *ststoken)
45
46 assert.Equal(t, "", *auth.GetBearerToken())
47
48 assert.Equal(t, "ecs_ram_role", *auth.GetType())
49
50 hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
51 return func(req *http.Request) (*http.Response, error) {
52 return mockResponse(400, `role`, nil)
53 }
54 }
55 auth.RoleName = ""
56 accesskeyId, err = auth.GetAccessKeyId()
57 assert.NotNil(t, err)
58 assert.Equal(t, "refresh Ecs sts token err: httpStatus: 400, message = role", err.Error())
59
60 hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
61 return func(req *http.Request) (*http.Response, error) {
62 return mockResponse(200, `role`, nil)
63 }
64 }
65 accesskeyId, err = auth.GetAccessKeyId()
66 assert.NotNil(t, err)
67 assert.Equal(t, "refresh Ecs sts token err: Json Unmarshal fail: invalid character 'r' looking for beginning of value", err.Error())
68 hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
69 return func(req *http.Request) (*http.Response, error) {
70 return mockResponse(200, `"AccessKeyId":"accessKeyId","AccessKeySecret":"accessKeySecret","SecurityToken":"securitytoken","Expiration":"expiration"`, nil)
71 }
72 }
73 auth.RoleName = "role"
74 accesskeyId, err = auth.GetAccessKeyId()
75 assert.NotNil(t, err)
76 assert.Equal(t, "refresh Ecs sts token err: Json Unmarshal fail: invalid character ':' after top-level value", err.Error())
77 assert.Equal(t, "", *accesskeyId)
78
79 hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
80 return func(req *http.Request) (*http.Response, error) {
81 return mockResponse(200, `{"AccessKeySecret":"accessKeySecret","SecurityToken":"securitytoken","Expiration":"expiration","Code":"fail"}`, nil)
82 }
83 }
84 accesskeyId, err = auth.GetAccessKeyId()
85 assert.NotNil(t, err)
86 assert.Equal(t, "refresh Ecs sts token err: Code is not Success", err.Error())
87 assert.Equal(t, "", *accesskeyId)
88
89 hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
90 return func(req *http.Request) (*http.Response, error) {
91 return mockResponse(200, `{"AccessKeySecret":"accessKeySecret","SecurityToken":"securitytoken","Expiration":"expiration","Code":"Success"}`, nil)
92 }
93 }
94 accesskeyId, err = auth.GetAccessKeyId()
95 assert.NotNil(t, err)
96 assert.Equal(t, "refresh Ecs sts token err: AccessKeyId: , AccessKeySecret: accessKeySecret, SecurityToken: securitytoken, Expiration: expiration", err.Error())
97 assert.Equal(t, "", *accesskeyId)
98
99 hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
100 return func(req *http.Request) (*http.Response, error) {
101 return mockResponse(200, `{"AccessKeyId":"accessKeyId","AccessKeySecret":"accessKeySecret","SecurityToken":"securitytoken","Expiration":"2018-01-02T15:04:05Z","Code":"Success"}`, nil)
102 }
103 }
104 accesskeyId, err = auth.GetAccessKeyId()
105 assert.Nil(t, err)
106 assert.Equal(t, "accessKeyId", *accesskeyId)
107
108 accesskeySecret, err = auth.GetAccessKeySecret()
109 assert.Nil(t, err)
110 assert.Equal(t, "accessKeySecret", *accesskeySecret)
111
112 ststoken, err = auth.GetSecurityToken()
113 assert.Nil(t, err)
114 assert.Equal(t, "securitytoken", *ststoken)
115
116 err = errors.New("credentials")
117 err = hookParse(err)
118 assert.Equal(t, "credentials", err.Error())
119
120 cred, err := auth.GetCredential()
121 assert.Nil(t, err)
122 assert.Equal(t, "accessKeyId", *cred.AccessKeyId)
123 assert.Equal(t, "accessKeySecret", *cred.AccessKeySecret)
124 assert.Equal(t, "securitytoken", *cred.SecurityToken)
125 assert.Nil(t, cred.BearerToken)
126 assert.Equal(t, "ecs_ram_role", *cred.Type)
127
128 originHookParse := hookParse
129 hookParse = func(err error) error {
130 return errors.New("error parse")
131 }
132 defer func() {
133 hookParse = originHookParse
134 }()
135 accesskeyId, err = auth.GetAccessKeyId()
136 assert.Equal(t, "refresh Ecs sts token err: error parse", err.Error())
137 assert.Equal(t, "", *accesskeyId)
138 }
139
View as plain text