...

Source file src/github.com/alibabacloud-go/openapi-util/service/service_test.go

Documentation: github.com/alibabacloud-go/openapi-util/service

     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