瀏覽代碼

Merge branch 'test' of github.com:aliyun/alibaba-cloud-sdk-go into test

高汝彤 7 年之前
父節點
當前提交
b161ade6a3
共有 3 個文件被更改,包括 95 次插入59 次删除
  1. 21 0
      sdk/client.go
  2. 52 51
      sdk/client_test.go
  3. 22 8
      sdk/endpoints/location_resolver.go

+ 21 - 0
sdk/client.go

@@ -251,6 +251,27 @@ func NewClientWithAccessKey(regionId, accessKeyId, accessKeySecret string) (clie
 	return
 }
 
+func NewClientWithKeyPair(regionId string, config *Config, publicKeyId, privateKey string, sessionExpiration int) (client *Client, err error) {
+	client = &Client{}
+	client.config = config
+	err = client.InitWithKeyPair(regionId, publicKeyId, privateKey, sessionExpiration)
+	return
+}
+
+func NewClientWithEcsInstance(regionId string, config *Config, roleName string) (client *Client, err error) {
+	client = &Client{}
+	client.config = config
+	err = client.InitWithEcsInstance(regionId, roleName)
+	return
+}
+
+func NewClientWithRoleArn(regionId string, config *Config, accessKeyId, accessKeySecret, roleArn, roleSessionName string) (client *Client, err error) {
+	client = &Client{}
+	client.config = config
+	err = client.InitWithRoleArn(regionId, accessKeyId, accessKeySecret, roleArn, roleSessionName)
+	return
+}
+
 func (client *Client) ProcessCommonRequest(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
 	request.TransToAcsRequest()
 	response = responses.NewCommonResponse()

+ 52 - 51
sdk/client_test.go

@@ -109,18 +109,19 @@ func testSetup() {
 	if err != nil {
 		panic(err)
 	}
-	//err = clientKeyPair.InitWithKeyPair("cn-hangzhou", testConfig.PublicKeyId, testConfig.PrivateKey, 3600)
-	//if err != nil {
-	//	panic(err)
-	//}
-	//err = clientEcs.InitWithEcsInstance("cn-hangzhou", "conan")
-	//if err != nil {
-	//	panic(err)
-	//}
-	//err = clientRoleArn.InitWithRoleArn("cn-hangzhou", testConfig.ChildAK, testConfig.ChildSecret, testConfig.RoleArn, "clientTest")
-	//if err != nil {
-	//	panic(err)
-	//}
+	clientKeyPair, err = NewClientWithKeyPair("cn-hangzhou", clientConfig, testConfig.PublicKeyId, testConfig.PrivateKey, 3600)
+	clientKeyPair.config = clientConfig
+	if err != nil {
+		panic(err)
+	}
+	clientEcs, err = NewClientWithEcsInstance("cn-hangzhou", clientConfig, "conan")
+	if err != nil {
+		panic(err)
+	}
+	clientRoleArn, err = NewClientWithRoleArn("cn-hangzhou", clientConfig, testConfig.ChildAK, testConfig.ChildSecret, testConfig.RoleArn, "clientTest")
+	if err != nil {
+		panic(err)
+	}
 }
 
 func testTearDown() {
@@ -419,21 +420,21 @@ func TestRpcGetForLocationCache(t *testing.T) {
 	assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
 }
 
-//func TestRpcGetForKeyPair(t *testing.T) {
-//	request := getFtTestRpcRequest()
-//	request.Method = requests.GET
-//
-//	response := &responses.BaseResponse{}
-//	err := clientKeyPair.DoAction(request, response)
-//	assert.Nil(t, err)
-//	assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
-//	assert.NotNil(t, response.GetHttpContentString())
-//
-//	var responseBean MockResponse
-//	json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
-//
-//	assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
-//}
+func TestRpcGetForKeyPair(t *testing.T) {
+	request := getFtTestRpcRequest()
+	request.Method = requests.GET
+
+	response := &responses.BaseResponse{}
+	err := clientKeyPair.DoAction(request, response)
+	assert.Nil(t, err)
+	assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
+	assert.NotNil(t, response.GetHttpContentString())
+
+	var responseBean MockResponse
+	json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
+
+	assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
+}
 
 /*func TestRpcGetForEcs(t *testing.T) {
 	//测试接口,想测试的时候,要替换掉singer_ecs_instance中对应的变量,并且还要提供一个mock服务
@@ -462,30 +463,30 @@ func TestRpcGetForLocationCache(t *testing.T) {
 	assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
 }*/
 
-//func TestRpcGetForRoleArn(t *testing.T) {
-//	request := getFtTestRpcRequest()
-//	request.Method = requests.GET
-//
-//	response := &responses.BaseResponse{}
-//	err := clientRoleArn.DoAction(request, response)
-//	assert.Nil(t, err)
-//	assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
-//	assert.NotNil(t, response.GetHttpContentString())
-//
-//	var responseBean MockResponse
-//	json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
-//
-//	assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
-//
-//	err = clientRoleArn.DoAction(request, response)
-//	assert.Nil(t, err)
-//	assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
-//	assert.NotNil(t, response.GetHttpContentString())
-//
-//	json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
-//
-//	assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
-//}
+func TestRpcGetForRoleArn(t *testing.T) {
+	request := getFtTestRpcRequest()
+	request.Method = requests.GET
+
+	response := &responses.BaseResponse{}
+	err := clientRoleArn.DoAction(request, response)
+	assert.Nil(t, err)
+	assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
+	assert.NotNil(t, response.GetHttpContentString())
+
+	var responseBean MockResponse
+	json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
+
+	assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
+
+	err = clientRoleArn.DoAction(request, response)
+	assert.Nil(t, err)
+	assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
+	assert.NotNil(t, response.GetHttpContentString())
+
+	json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
+
+	assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
+}
 
 func TestCommonRoaRequestForAcceptXML(t *testing.T) {
 	roaRequest := requests.NewCommonRequest()

+ 22 - 8
sdk/endpoints/location_resolver.go

@@ -16,6 +16,7 @@ package endpoints
 import (
 	"encoding/json"
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"sync"
 	"time"
 )
 
@@ -23,8 +24,15 @@ const (
 	EndpointCacheExpireTime = 3600 //Seconds
 )
 
-var lastClearTimePerProduct map[string]int64 = make(map[string]int64)
-var endpointCache map[string]string = make(map[string]string)
+var lastClearTimePerProduct = struct {
+	sync.RWMutex
+	cache map[string]int64
+}{cache: make(map[string]int64)}
+
+var endpointCache = struct {
+	sync.RWMutex
+	cache map[string]string
+}{cache: make(map[string]string)}
 
 type LocationResolver struct {
 }
@@ -37,8 +45,8 @@ func (resolver *LocationResolver) TryResolve(param *ResolveParam) (endpoint stri
 
 	//get from cache
 	cacheKey := param.Product + "#" + param.RegionId
-	if endpointCache != nil && len(endpointCache[cacheKey]) > 0 && !CheckCacheIsExpire(cacheKey) {
-		endpoint = endpointCache[cacheKey]
+	if endpointCache.cache != nil && len(endpointCache.cache[cacheKey]) > 0 && !CheckCacheIsExpire(cacheKey) {
+		endpoint = endpointCache.cache[cacheKey]
 		support = true
 		return
 	}
@@ -78,8 +86,12 @@ func (resolver *LocationResolver) TryResolve(param *ResolveParam) (endpoint stri
 	}
 	if len(getEndpointResponse.Endpoints.Endpoint[0].Endpoint) > 0 {
 		endpoint = getEndpointResponse.Endpoints.Endpoint[0].Endpoint
-		endpointCache[cacheKey] = endpoint
-		lastClearTimePerProduct[cacheKey] = time.Now().Unix()
+		endpointCache.Lock()
+		endpointCache.cache[cacheKey] = endpoint
+		endpointCache.Unlock()
+		lastClearTimePerProduct.Lock()
+		lastClearTimePerProduct.cache[cacheKey] = time.Now().Unix()
+		lastClearTimePerProduct.Unlock()
 		support = true
 		return
 	}
@@ -89,10 +101,12 @@ func (resolver *LocationResolver) TryResolve(param *ResolveParam) (endpoint stri
 }
 
 func CheckCacheIsExpire(cacheKey string) bool {
-	lastClearTime := lastClearTimePerProduct[cacheKey]
+	lastClearTime := lastClearTimePerProduct.cache[cacheKey]
 	if lastClearTime <= 0 {
 		lastClearTime = time.Now().Unix()
-		lastClearTimePerProduct[cacheKey] = lastClearTime
+		lastClearTimePerProduct.Lock()
+		lastClearTimePerProduct.cache[cacheKey] = lastClearTime
+		lastClearTimePerProduct.Unlock()
 	}
 
 	now := time.Now().Unix()