浏览代码

fix:when region id is nil, don't put it into endpoint

wenzuochao 6 年之前
父节点
当前提交
50fbb50e9e
共有 2 个文件被更改,包括 17 次插入5 次删除
  1. 10 3
      sdk/client.go
  2. 7 2
      sdk/client_test.go

+ 10 - 3
sdk/client.go

@@ -307,8 +307,12 @@ func (client *Client) DoAction(request requests.AcsRequest, response responses.A
 	return client.DoActionWithSigner(request, response, nil)
 	return client.DoActionWithSigner(request, response, nil)
 }
 }
 
 
-func (client *Client) GetEndpointRules(regionId string, product string) (endpointRaw string) {
+func (client *Client) GetEndpointRules(regionId string, product string) (endpointRaw string, err error) {
 	if client.EndpointType == "regional" {
 	if client.EndpointType == "regional" {
+		if regionId == "" {
+			err = fmt.Errorf("RegionId is empty, please set a valid RegionId.")
+			return "", err
+		}
 		endpointRaw = strings.Replace("<product><network>.<region_id>.aliyuncs.com", "<region_id>", regionId, 1)
 		endpointRaw = strings.Replace("<product><network>.<region_id>.aliyuncs.com", "<region_id>", regionId, 1)
 	} else {
 	} else {
 		endpointRaw = "<product><network>.aliyuncs.com"
 		endpointRaw = "<product><network>.aliyuncs.com"
@@ -319,7 +323,7 @@ func (client *Client) GetEndpointRules(regionId string, product string) (endpoin
 	} else {
 	} else {
 		endpointRaw = strings.Replace(endpointRaw, "<network>", "-"+client.Network, 1)
 		endpointRaw = strings.Replace(endpointRaw, "<network>", "-"+client.Network, 1)
 	}
 	}
-	return endpointRaw
+	return endpointRaw, nil
 }
 }
 
 
 func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer auth.Signer) (httpRequest *http.Request, err error) {
 func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer auth.Signer) (httpRequest *http.Request, err error) {
@@ -339,7 +343,10 @@ func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer
 		}
 		}
 
 
 		if endpoint == "" {
 		if endpoint == "" {
-			endpoint = client.GetEndpointRules(regionId, request.GetProduct())
+			endpoint, err = client.GetEndpointRules(regionId, request.GetProduct())
+			if err != nil {
+				return
+			}
 		}
 		}
 	}
 	}
 
 

+ 7 - 2
sdk/client_test.go

@@ -540,7 +540,6 @@ func TestClient_BuildRequestWithSigner2(t *testing.T) {
 
 
 	request.QueryParams["PageNumber"] = "1"
 	request.QueryParams["PageNumber"] = "1"
 	request.QueryParams["PageSize"] = "30"
 	request.QueryParams["PageSize"] = "30"
-	request.RegionId = "regionid"
 	request.Product = "Ecs"
 	request.Product = "Ecs"
 	request.TransToAcsRequest()
 	request.TransToAcsRequest()
 	signer := &signertest{
 	signer := &signertest{
@@ -553,8 +552,14 @@ func TestClient_BuildRequestWithSigner2(t *testing.T) {
 	assert.Nil(t, err)
 	assert.Nil(t, err)
 	assert.Equal(t, "ecs.regionid.aliyuncs.com", httprequest.URL.Host)
 	assert.Equal(t, "ecs.regionid.aliyuncs.com", httprequest.URL.Host)
 
 
-	//Test: exceptional rule
+	client.regionId = ""
 	request.Domain = ""
 	request.Domain = ""
+	httprequest, err = client.buildRequestWithSigner(request, signer)
+	assert.Nil(t, httprequest)
+	assert.Equal(t, "RegionId is empty, please set a valid RegionId.", err.Error())
+
+	//Test: exceptional rule
+	client.regionId = "regionid"
 	client.EndpointMap = map[string]string{
 	client.EndpointMap = map[string]string{
 		"regionid": "ecs.test.com",
 		"regionid": "ecs.test.com",
 	}
 	}