Browse Source

support endpointmap

wenzuochao 6 years ago
parent
commit
4fb175c277

+ 2 - 1
integration/api_test.go

@@ -1,6 +1,7 @@
 package integration
 
 import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/endpoints"
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
 	"github.com/aliyun/alibaba-cloud-sdk-go/services/bssopenapi"
 	"github.com/aliyun/alibaba-cloud-sdk-go/services/cdn"
@@ -262,7 +263,7 @@ func Test_QueryAvaliableInstances(t *testing.T) {
 	client, err := bssopenapi.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
 	assert.Nil(t, err)
 	request := bssopenapi.CreateQueryAvailableInstancesRequest()
-	request.Domain = "business.aliyuncs.com"
+	endpoints.AddEndpointMapping(os.Getenv("REGION_ID"), "BssOpenApi", "business.aliyuncs.com")
 	response, err := client.QueryAvailableInstances(request)
 	assert.Nil(t, err)
 	assert.True(t, response.IsSuccess())

+ 4 - 0
sdk/client.go

@@ -337,6 +337,10 @@ func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer
 
 	// resolve endpoint
 	endpoint := request.GetDomain()
+	if endpoint == "" {
+		endpoint = endpoints.GetEndpointFromMap(regionId, request.GetProduct())
+	}
+
 	if endpoint == "" && client.EndpointType != "" && request.GetProduct() != "Sts" {
 		if client.EndpointMap != nil && client.Network == "" || client.Network == "public" {
 			endpoint = client.EndpointMap[regionId]

+ 5 - 15
sdk/endpoints/mapping_resolver.go

@@ -30,19 +30,9 @@ func AddEndpointMapping(regionId, productId, endpoint string) (err error) {
 	return nil
 }
 
-// MappingResolver the mapping resolver type
-type MappingResolver struct {
-}
-
-// GetName get the resolver name: "mapping resolver"
-func (resolver *MappingResolver) GetName() (name string) {
-	name = "mapping resolver"
-	return
-}
-
-// TryResolve use Product and RegionId as key to find endpoint from inner map
-func (resolver *MappingResolver) TryResolve(param *ResolveParam) (endpoint string, support bool, err error) {
-	key := fmt.Sprintf(keyFormatter, strings.ToLower(param.RegionId), strings.ToLower(param.Product))
-	endpoint, contains := endpointMapping[key]
-	return endpoint, contains, nil
+// GetEndpointFromMap use Product and RegionId as key to find endpoint from inner map
+func GetEndpointFromMap(regionId, productId string) string {
+	key := fmt.Sprintf(keyFormatter, strings.ToLower(regionId), strings.ToLower(productId))
+	endpoint, _ := endpointMapping[key]
+	return endpoint
 }

+ 5 - 16
sdk/endpoints/mapping_resolver_test.go

@@ -6,26 +6,15 @@ import (
 	"github.com/stretchr/testify/assert"
 )
 
-func TestMappingResolver_GetName(t *testing.T) {
-	resolver := &MappingResolver{}
-	assert.Equal(t, "mapping resolver", resolver.GetName())
-}
-
 func TestMappingResolver_TryResolve(t *testing.T) {
-	resolver := &MappingResolver{}
-	resolveParam := &ResolveParam{
-		RegionId: "cn-hangzhou",
-		Product:  "ecs",
-	}
-	endpoint, support, err := resolver.TryResolve(resolveParam)
-	assert.Nil(t, err)
+
+	regionId := "cn-hangzhou"
+	productId := "ecs"
+	endpoint := GetEndpointFromMap(regionId, productId)
 	assert.Equal(t, "", endpoint)
-	assert.Equal(t, false, support)
 
 	AddEndpointMapping("cn-hangzhou", "Ecs", "unreachable.aliyuncs.com")
 
-	endpoint, support, err = resolver.TryResolve(resolveParam)
-	assert.Nil(t, err)
+	endpoint = GetEndpointFromMap(regionId, productId)
 	assert.Equal(t, "unreachable.aliyuncs.com", endpoint)
-	assert.Equal(t, true, support)
 }

+ 0 - 1
sdk/endpoints/resolver.go

@@ -71,7 +71,6 @@ func getAllResolvers() []Resolver {
 	once.Do(func() {
 		resolvers = []Resolver{
 			&SimpleHostResolver{},
-			&MappingResolver{},
 			&LocationResolver{},
 			&LocalRegionalResolver{},
 			&LocalGlobalResolver{},

+ 3 - 4
sdk/endpoints/resolver_test.go

@@ -13,19 +13,18 @@ func TestResolver_ResolveParam_String(t *testing.T) {
 
 func TestResolve(t *testing.T) {
 	param := &ResolveParam{
-		Product: "Ecs",
+		Product:  "Ecs",
 		RegionId: "cn-hangzhou",
 	}
-	AddEndpointMapping("cn-hangzhou", "Ecs", "unreachable.aliyuncs.com")
 	endpoint, err := Resolve(param)
 
 	assert.Nil(t, err)
-	assert.Equal(t, "unreachable.aliyuncs.com", endpoint)
+	assert.Equal(t, "ecs-cn-hangzhou.aliyuncs.com", endpoint)
 }
 
 func TestResolve_WithInvalidProduct(t *testing.T) {
 	param := &ResolveParam{
-		Product: "Invalid",
+		Product:  "Invalid",
 		RegionId: "cn-hangzhou",
 	}
 	endpoint, err := Resolve(param)