|
|
@@ -1,6 +1,10 @@
|
|
|
package endpoints
|
|
|
|
|
|
import (
|
|
|
+ "bytes"
|
|
|
+ "io/ioutil"
|
|
|
+ "net/http"
|
|
|
+ "strconv"
|
|
|
"testing"
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
@@ -40,3 +44,132 @@ func TestLocationResolver_TryResolve_LocationWithError(t *testing.T) {
|
|
|
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)
|
|
|
+}
|