1 package service
2
3 import (
4 "io"
5 "reflect"
6 "strings"
7 "testing"
8
9 "github.com/alibabacloud-go/tea/tea"
10 "github.com/alibabacloud-go/tea/utils"
11 )
12
13 func Test_GetROASignature(t *testing.T) {
14 request := tea.NewRequest()
15 sign := GetStringToSign(request)
16 signature := GetROASignature(sign, tea.String("secret"))
17 utils.AssertEqual(t, 28, len(tea.StringValue(signature)))
18 }
19
20 func Test_Sorter(t *testing.T) {
21 tmp := map[string]string{
22 "key": "ccp",
23 "value": "ok",
24 }
25 sort := newSorter(tmp)
26 sort.Sort()
27
28 len := sort.Len()
29 utils.AssertEqual(t, len, 2)
30
31 isLess := sort.Less(0, 1)
32 utils.AssertEqual(t, isLess, true)
33
34 sort.Swap(0, 1)
35 isLess = sort.Less(0, 1)
36 utils.AssertEqual(t, isLess, false)
37 }
38
39 type TestCommon struct {
40 Body io.Reader `json:"Body"`
41 Test string `json:"Test"`
42 }
43
44 func Test_Convert(t *testing.T) {
45 in := &TestCommon{
46 Body: strings.NewReader("common"),
47 Test: "ok",
48 }
49 out := new(TestCommon)
50 Convert(in, &out)
51 utils.AssertEqual(t, "ok", out.Test)
52 }
53
54 func Test_getStringToSign(t *testing.T) {
55 request := tea.NewRequest()
56 request.Query = map[string]*string{
57 "roa": tea.String("ok"),
58 "null": tea.String(""),
59 }
60 request.Headers = map[string]*string{
61 "x-acs-meta": tea.String("user"),
62 }
63 str := getStringToSign(request)
64 utils.AssertEqual(t, 33, len(str))
65 }
66
67 func Test_ToForm(t *testing.T) {
68 filter := map[string]interface{}{
69 "client": "test",
70 "tag": map[string]*string{
71 "key": tea.String("value"),
72 },
73 "strs": []string{"str1", "str2"},
74 }
75
76 result := ToForm(filter)
77 utils.AssertEqual(t, "client=test&strs.1=str1&strs.2=str2&tag.key=value", tea.StringValue(result))
78 }
79
80 func Test_flatRepeatedList(t *testing.T) {
81 filter := map[string]interface{}{
82 "client": "test",
83 "version": "1",
84 "null": nil,
85 "slice": []interface{}{
86 map[string]interface{}{
87 "map": "valid",
88 },
89 6,
90 },
91 "map": map[string]interface{}{
92 "value": "ok",
93 },
94 }
95
96 result := make(map[string]*string)
97 for key, value := range filter {
98 filterValue := reflect.ValueOf(value)
99 flatRepeatedList(filterValue, result, key)
100 }
101 utils.AssertEqual(t, tea.StringValue(result["slice.1.map"]), "valid")
102 utils.AssertEqual(t, tea.StringValue(result["slice.2"]), "6")
103 utils.AssertEqual(t, tea.StringValue(result["map.value"]), "ok")
104 utils.AssertEqual(t, tea.StringValue(result["client"]), "test")
105 utils.AssertEqual(t, tea.StringValue(result["slice.1.map"]), "valid")
106 }
107
108 func Test_GetRPCSignature(t *testing.T) {
109 signed := map[string]*string{
110 "test": tea.String("ok"),
111 }
112
113 sign := GetRPCSignature(signed, tea.String(""), tea.String("accessKeySecret"))
114 utils.AssertEqual(t, "jHx/oHoHNrbVfhncHEvPdHXZwHU=", tea.StringValue(sign))
115 }
116
117 func Test_GetTimestamp(t *testing.T) {
118 stamp := GetTimestamp()
119 utils.AssertNotNil(t, stamp)
120 }
121
122 func Test_Query(t *testing.T) {
123 filter := map[string]interface{}{
124 "client": "test",
125 "tag": map[string]string{
126 "key": "value",
127 },
128 "strs": []string{"str1", "str2"},
129 }
130
131 result := Query(filter)
132 res := Query(result)
133 utils.AssertEqual(t, "test", tea.StringValue(res["client"]))
134 utils.AssertEqual(t, "test", tea.StringValue(result["client"]))
135 utils.AssertEqual(t, "value", tea.StringValue(result["tag.key"]))
136 utils.AssertEqual(t, "str1", tea.StringValue(result["strs.1"]))
137 utils.AssertEqual(t, "str2", tea.StringValue(result["strs.2"]))
138 }
139
140 func Test_ArrayToStringWithSpecifiedStyle(t *testing.T) {
141 strs := []interface{}{tea.String("ok"), "test", 2, tea.Int(3)}
142
143 result := ArrayToStringWithSpecifiedStyle(strs, tea.String("instance"), tea.String("repeatList"))
144 utils.AssertEqual(t, "instance.1=ok&&instance.2=test&&instance.3=2&&instance.4=3", tea.StringValue(result))
145 result = ArrayToStringWithSpecifiedStyle(strs, tea.String("instance"), tea.String("json"))
146 utils.AssertEqual(t, "[\"ok\",\"test\",2,3]", tea.StringValue(result))
147 result = ArrayToStringWithSpecifiedStyle(strs, tea.String("instance"), tea.String("simple"))
148 utils.AssertEqual(t, "ok,test,2,3", tea.StringValue(result))
149 result = ArrayToStringWithSpecifiedStyle(strs, tea.String("instance"), tea.String("spaceDelimited"))
150 utils.AssertEqual(t, "ok test 2 3", tea.StringValue(result))
151 result = ArrayToStringWithSpecifiedStyle(strs, tea.String("instance"), tea.String("pipeDelimited"))
152 utils.AssertEqual(t, "ok|test|2|3", tea.StringValue(result))
153 result = ArrayToStringWithSpecifiedStyle(strs, tea.String("instance"), tea.String("piDelimited"))
154 utils.AssertEqual(t, "", tea.StringValue(result))
155 result = ArrayToStringWithSpecifiedStyle(nil, tea.String("instance"), tea.String("pipeDelimited"))
156 utils.AssertEqual(t, "", tea.StringValue(result))
157 }
158
159 type Str struct {
160 Key string `json:"key"`
161 }
162
163 func Test_ParseToMap(t *testing.T) {
164 in := &Str{
165 Key: "value",
166 }
167 res := ParseToMap(in)
168 utils.AssertEqual(t, res["key"], "value")
169
170 in0 := map[string]*Str{"test": in}
171 res = ParseToMap(in0)
172 utils.AssertEqual(t, res["test"], map[string]interface{}{"key": "value"})
173
174 res = ParseToMap(nil)
175 utils.AssertNil(t, res)
176 }
177
178 func Test_GetEndpoint(t *testing.T) {
179 endpoint := GetEndpoint(tea.String("common.aliyuncs.com"), tea.Bool(true), tea.String("internal"))
180 utils.AssertEqual(t, "common-internal.aliyuncs.com", tea.StringValue(endpoint))
181
182 endpoint = GetEndpoint(tea.String("common.aliyuncs.com"), tea.Bool(true), tea.String("accelerate"))
183 utils.AssertEqual(t, "oss-accelerate.aliyuncs.com", tea.StringValue(endpoint))
184
185 endpoint = GetEndpoint(tea.String("common.aliyuncs.com"), tea.Bool(true), tea.String(""))
186 utils.AssertEqual(t, "common.aliyuncs.com", tea.StringValue(endpoint))
187 }
188
189 func Test_HexEncode(t *testing.T) {
190 res := HexEncode(Hash([]byte("test"), tea.String("ACS3-HMAC-SHA256")))
191 utils.AssertEqual(t, "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", tea.StringValue(res))
192
193 res = HexEncode(Hash([]byte("test"), tea.String("ACS3-RSA-SHA256")))
194 utils.AssertEqual(t, "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", tea.StringValue(res))
195
196 res = HexEncode(Hash([]byte("test"), tea.String("ACS3-HMAC-SM3")))
197 utils.AssertEqual(t, "55e12e91650d2fec56ec74e1d3e4ddbfce2ef3a65890c2a19ecf88a307e76a23", tea.StringValue(res))
198
199 res = HexEncode(Hash([]byte("test"), tea.String("ACS3-HM-SM3")))
200 utils.AssertEqual(t, "", tea.StringValue(res))
201 }
202
203 func Test_GetEncodePath(t *testing.T) {
204 res := GetEncodePath(tea.String("/path/ test"))
205 utils.AssertEqual(t, "/path/%20test", tea.StringValue(res))
206 }
207
208 func Test_GetEncodeParam(t *testing.T) {
209 res := GetEncodeParam(tea.String("a/b/c/ test"))
210 utils.AssertEqual(t, "a%2Fb%2Fc%2F%20test", tea.StringValue(res))
211 }
212
213 func Test_GetAuthorization(t *testing.T) {
214 query := map[string]*string{
215 "test": tea.String("ok"),
216 "empty": tea.String(""),
217 }
218
219 headers := map[string]*string{
220 "x-acs-test": tea.String("http"),
221 "x-acs-TEST": tea.String("https"),
222 }
223 req := &tea.Request{
224 Query: query,
225 Headers: headers,
226 }
227 req.Pathname = tea.String("")
228 res := GetAuthorization(req, tea.String("ACS3-HMAC-SHA256"),
229 tea.String("55e12e91650d2fec56ec74e1d3e4ddbfce2ef3a65890c2a19ecf88a307e76a23"),
230 tea.String("acesskey"), tea.String("secret"))
231 utils.AssertEqual(t, "ACS3-HMAC-SHA256 Credential=acesskey,SignedHeaders=x-acs-test,Signature=4ab59fffe3c5738ff8a2729f90cc04fe18b02a4b15b2102cbaf92f9ff3df2ea3", tea.StringValue(res))
232 }
233
234 func Test_SignatureMethod(t *testing.T) {
235 priKey := `MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKzSQmrnH0YnezZ9
236 8NK50WjMuci0hgGVcSthIZOTWMIySznY9Jj1hlvek7W0uYagtFHz03BHQnHAb5Xs
237 0DZm0Sj9+5r79GggwEzTJDYEsLyFwXM3ZOIxqxL4sRg94MHsa81M9NXGHMyMvvff
238 QTn1OBVLTVz5jgJ48foMn7j7r9kRAgMBAAECgYEAnZppw3/ef2XF8Z3Mnv+iP0Zk
239 LuqiQpN8TykXK7P1/7NJ8wktlshhrSo/3jdf8axghVQsgHob2Ay8Nidugg4lsxIL
240 AUBHvfQsQp1MAWvxslsVj+ddw01MQnt8kHmC/qhok+YuNqqAGBcoD6cthRUjEri6
241 hfs599EfPs2DcWW06qECQQDfNqUUhcDQ/SQHRhfY9UIlaSEs2CVagDrSYFG1wyG+
242 PXDSMes9ZRHsvVVBmNGmtUTg/jioTU3yuPsis5s9ppbVAkEAxjTAQxv5lBBm/ikM
243 TzPShljxDZnXh6lKWG9gR1p5fKoQTzLyyhHzkBSFe848sMm68HWCX2wgIpQLHj0G
244 ccYPTQJAduMKBeY/jpBlkiI5LWtj8b0O2G2/Z3aI3ehDXQYzgLoEz0+bNbYRWAB3
245 2lpkv+AocZW1455Y+ACichcrhiimiQJAW/6L5hoL4u8h/oFq1zAEXJrXdyqaYLrw
246 aM947mVN0dDVNQ0+pw9h7tO3iNkWTi+zdnv0APociDASYPyOCyyUWQJACMNRM1/r
247 boXuKfMmVjmmz0XhaDUC/JkqSwIiaZi+47M21e9BTp1218NA6VaPgJJHeJr4sNOn
248 Ysx+1cwXO5cuZg==`
249 res := SignatureMethod("secret", "source", "ACS3-HMAC-SM3")
250 utils.AssertEqual(t, "b9ff646822f41ef647c1416fa2b8408923828abc0464af6706e18db3e8553da8", tea.StringValue(HexEncode(res)))
251
252 res = SignatureMethod("secret", "source", "ACS3-RSA-SHA256")
253 utils.AssertEqual(t, "", tea.StringValue(HexEncode(res)))
254
255 res = SignatureMethod(priKey, "source", "ACS3-RSA-SHA256")
256 utils.AssertEqual(t, "a00b88ae04f651a8ab645e724949ff435bbb2cf9a37aa54323024477f8031f4e13dc948484c5c5a81ba53a55eb0571dffccc1e953c93269d6da23ed319e0f1ef699bcc9823a646574628ae1b70ed569b5a07d139dda28996b5b9231f5ba96141f0893deec2fbf54a0fa2c203b8ae74dd26f457ac29c873745a5b88273d2b3d12", tea.StringValue(HexEncode(res)))
257 }
258
View as plain text