| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- package endpoints
- import (
- "bytes"
- "io/ioutil"
- "net/http"
- "strconv"
- "testing"
- "github.com/stretchr/testify/assert"
- "github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
- "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
- "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
- )
- func TestLocationResolver_GetName(t *testing.T) {
- resolver := &LocationResolver{}
- assert.Equal(t, "location resolver", resolver.GetName())
- }
- func TestLocationResolver_TryResolve_EmptyLocationProduct(t *testing.T) {
- resolver := &LocationResolver{}
- resolveParam := &ResolveParam{}
- endpoint, support, err := resolver.TryResolve(resolveParam)
- assert.Nil(t, err)
- assert.Equal(t, "", endpoint)
- assert.Equal(t, false, support)
- }
- func TestLocationResolver_TryResolve_LocationWithError(t *testing.T) {
- resolver := &LocationResolver{}
- resolveParam := &ResolveParam{
- LocationProduct: "ecs",
- RegionId: "cn-hangzhou",
- Product: "ecs",
- CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
- err = errors.NewClientError("SDK.MockError", "Mock error", nil)
- return
- },
- }
- endpoint, support, err := resolver.TryResolve(resolveParam)
- assert.Equal(t, "", endpoint)
- assert.Equal(t, false, support)
- assert.Equal(t, "[SDK.MockError] Mock error", err.Error())
- }
- func makeHTTPResponse(statusCode int, content string) (res *http.Response) {
- header := make(http.Header)
- status := strconv.Itoa(statusCode)
- res = &http.Response{
- Proto: "HTTP/1.1",
- ProtoMajor: 1,
- Header: header,
- StatusCode: statusCode,
- Status: status + " " + http.StatusText(statusCode),
- }
- res.Header = make(http.Header)
- res.Body = ioutil.NopCloser(bytes.NewReader([]byte(content)))
- return
- }
- func TestLocationResolver_TryResolve_LocationWith404(t *testing.T) {
- resolver := &LocationResolver{}
- resolveParam := &ResolveParam{
- LocationProduct: "ecs",
- RegionId: "cn-hangzhou",
- Product: "ecs",
- CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
- response = responses.NewCommonResponse()
- responses.Unmarshal(response, makeHTTPResponse(404, "content"), "JSON")
- return
- },
- }
- endpoint, support, err := resolver.TryResolve(resolveParam)
- assert.Equal(t, "", endpoint)
- assert.Equal(t, false, support)
- assert.Nil(t, err)
- }
- func TestLocationResolver_TryResolve_LocationWith200InvalidJSON(t *testing.T) {
- resolver := &LocationResolver{}
- resolveParam := &ResolveParam{
- LocationProduct: "ecs",
- RegionId: "cn-hangzhou",
- Product: "ecs",
- CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
- response = responses.NewCommonResponse()
- responses.Unmarshal(response, makeHTTPResponse(200, "content"), "JSON")
- return
- },
- }
- endpoint, support, err := resolver.TryResolve(resolveParam)
- assert.Equal(t, "", endpoint)
- assert.Equal(t, false, support)
- assert.Equal(t, "invalid character 'c' looking for beginning of value", err.Error())
- }
- func TestLocationResolver_TryResolve_LocationWith200ValidJSON(t *testing.T) {
- resolver := &LocationResolver{}
- resolveParam := &ResolveParam{
- LocationProduct: "ecs",
- RegionId: "cn-hangzhou",
- Product: "ecs",
- CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
- response = responses.NewCommonResponse()
- responses.Unmarshal(response, makeHTTPResponse(200, `{"Code":"Success","RequestId":"request id"}`), "JSON")
- return
- },
- }
- endpoint, support, err := resolver.TryResolve(resolveParam)
- assert.Equal(t, "", endpoint)
- assert.Equal(t, false, support)
- assert.Nil(t, err)
- // assert.Equal(t, "json: cannot unmarshal array into Go struct field GetEndpointResponse.Endpoints of type endpoints.EndpointsObj", err.Error())
- }
- func TestLocationResolver_TryResolve_LocationWith200(t *testing.T) {
- resolver := &LocationResolver{}
- resolveParam := &ResolveParam{
- LocationProduct: "ecs",
- RegionId: "cn-hangzhou",
- Product: "ecs",
- CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
- response = responses.NewCommonResponse()
- responses.Unmarshal(response, makeHTTPResponse(200, `{"Success":true,"RequestId":"request id","Endpoints":{"Endpoint":[]}}`), "JSON")
- return
- },
- }
- endpoint, support, err := resolver.TryResolve(resolveParam)
- assert.Equal(t, "", endpoint)
- assert.Equal(t, false, support)
- assert.Nil(t, err)
- }
- func TestLocationResolver_TryResolve_Location_With_Endpoint(t *testing.T) {
- resolver := &LocationResolver{}
- resolveParam := &ResolveParam{
- LocationProduct: "ecs",
- RegionId: "cn-hangzhou",
- Product: "ecs",
- CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
- response = responses.NewCommonResponse()
- responses.Unmarshal(response, makeHTTPResponse(200, `{"Success":true,"RequestId":"request id","Endpoints":{"Endpoint":[{"Endpoint":"domain.com"}]}}`), "JSON")
- return
- },
- }
- endpoint, support, err := resolver.TryResolve(resolveParam)
- assert.Equal(t, "domain.com", endpoint)
- assert.Equal(t, true, support)
- assert.Nil(t, err)
- // hit the cache
- endpoint, support, err = resolver.TryResolve(resolveParam)
- assert.Equal(t, "domain.com", endpoint)
- assert.Equal(t, true, support)
- assert.Nil(t, err)
- }
- func TestLocationResolver_TryResolve_Location_With_EmptyEndpoint(t *testing.T) {
- resolver := &LocationResolver{}
- resolveParam := &ResolveParam{
- LocationProduct: "ecs2",
- RegionId: "cn-hangzhou",
- Product: "ecs2",
- CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
- response = responses.NewCommonResponse()
- responses.Unmarshal(response, makeHTTPResponse(200, `{"Success":true,"RequestId":"request id","Endpoints":{"Endpoint":[{"Endpoint":""}]}}`), "JSON")
- return
- },
- }
- endpoint, support, err := resolver.TryResolve(resolveParam)
- assert.Equal(t, "", endpoint)
- assert.Equal(t, false, support)
- assert.Nil(t, err)
- }
|