location_resolver_test.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package endpoints
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. "net/http"
  6. "strconv"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
  10. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
  11. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
  12. )
  13. func TestLocationResolver_GetName(t *testing.T) {
  14. resolver := &LocationResolver{}
  15. assert.Equal(t, "location resolver", resolver.GetName())
  16. }
  17. func TestLocationResolver_TryResolve_EmptyLocationProduct(t *testing.T) {
  18. resolver := &LocationResolver{}
  19. resolveParam := &ResolveParam{}
  20. endpoint, support, err := resolver.TryResolve(resolveParam)
  21. assert.Nil(t, err)
  22. assert.Equal(t, "", endpoint)
  23. assert.Equal(t, false, support)
  24. }
  25. func TestLocationResolver_TryResolve_LocationWithError(t *testing.T) {
  26. resolver := &LocationResolver{}
  27. resolveParam := &ResolveParam{
  28. LocationProduct: "ecs",
  29. RegionId: "cn-hangzhou",
  30. Product: "ecs",
  31. CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
  32. err = errors.NewClientError("SDK.MockError", "Mock error", nil)
  33. return
  34. },
  35. }
  36. endpoint, support, err := resolver.TryResolve(resolveParam)
  37. assert.Equal(t, "", endpoint)
  38. assert.Equal(t, false, support)
  39. assert.Equal(t, "[SDK.MockError] Mock error", err.Error())
  40. }
  41. func makeHTTPResponse(statusCode int, content string) (res *http.Response) {
  42. header := make(http.Header)
  43. status := strconv.Itoa(statusCode)
  44. res = &http.Response{
  45. Proto: "HTTP/1.1",
  46. ProtoMajor: 1,
  47. Header: header,
  48. StatusCode: statusCode,
  49. Status: status + " " + http.StatusText(statusCode),
  50. }
  51. res.Header = make(http.Header)
  52. res.Body = ioutil.NopCloser(bytes.NewReader([]byte(content)))
  53. return
  54. }
  55. func TestLocationResolver_TryResolve_LocationWith404(t *testing.T) {
  56. resolver := &LocationResolver{}
  57. resolveParam := &ResolveParam{
  58. LocationProduct: "ecs",
  59. RegionId: "cn-hangzhou",
  60. Product: "ecs",
  61. CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
  62. response = responses.NewCommonResponse()
  63. responses.Unmarshal(response, makeHTTPResponse(404, "content"), "JSON")
  64. return
  65. },
  66. }
  67. endpoint, support, err := resolver.TryResolve(resolveParam)
  68. assert.Equal(t, "", endpoint)
  69. assert.Equal(t, false, support)
  70. assert.Nil(t, err)
  71. }
  72. func TestLocationResolver_TryResolve_LocationWith200InvalidJSON(t *testing.T) {
  73. resolver := &LocationResolver{}
  74. resolveParam := &ResolveParam{
  75. LocationProduct: "ecs",
  76. RegionId: "cn-hangzhou",
  77. Product: "ecs",
  78. CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
  79. response = responses.NewCommonResponse()
  80. responses.Unmarshal(response, makeHTTPResponse(200, "content"), "JSON")
  81. return
  82. },
  83. }
  84. endpoint, support, err := resolver.TryResolve(resolveParam)
  85. assert.Equal(t, "", endpoint)
  86. assert.Equal(t, false, support)
  87. assert.Equal(t, "invalid character 'c' looking for beginning of value", err.Error())
  88. }
  89. func TestLocationResolver_TryResolve_LocationWith200ValidJSON(t *testing.T) {
  90. resolver := &LocationResolver{}
  91. resolveParam := &ResolveParam{
  92. LocationProduct: "ecs",
  93. RegionId: "cn-hangzhou",
  94. Product: "ecs",
  95. CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
  96. response = responses.NewCommonResponse()
  97. responses.Unmarshal(response, makeHTTPResponse(200, `{"Code":"Success","RequestId":"request id"}`), "JSON")
  98. return
  99. },
  100. }
  101. endpoint, support, err := resolver.TryResolve(resolveParam)
  102. assert.Equal(t, "", endpoint)
  103. assert.Equal(t, false, support)
  104. assert.Nil(t, err)
  105. // assert.Equal(t, "json: cannot unmarshal array into Go struct field GetEndpointResponse.Endpoints of type endpoints.EndpointsObj", err.Error())
  106. }
  107. func TestLocationResolver_TryResolve_LocationWith200(t *testing.T) {
  108. resolver := &LocationResolver{}
  109. resolveParam := &ResolveParam{
  110. LocationProduct: "ecs",
  111. RegionId: "cn-hangzhou",
  112. Product: "ecs",
  113. CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
  114. response = responses.NewCommonResponse()
  115. responses.Unmarshal(response, makeHTTPResponse(200, `{"Success":true,"RequestId":"request id","Endpoints":{"Endpoint":[]}}`), "JSON")
  116. return
  117. },
  118. }
  119. endpoint, support, err := resolver.TryResolve(resolveParam)
  120. assert.Equal(t, "", endpoint)
  121. assert.Equal(t, false, support)
  122. assert.Nil(t, err)
  123. }
  124. func TestLocationResolver_TryResolve_Location_With_Endpoint(t *testing.T) {
  125. resolver := &LocationResolver{}
  126. resolveParam := &ResolveParam{
  127. LocationProduct: "ecs",
  128. RegionId: "cn-hangzhou",
  129. Product: "ecs",
  130. CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
  131. response = responses.NewCommonResponse()
  132. responses.Unmarshal(response, makeHTTPResponse(200, `{"Success":true,"RequestId":"request id","Endpoints":{"Endpoint":[{"Endpoint":"domain.com"}]}}`), "JSON")
  133. return
  134. },
  135. }
  136. endpoint, support, err := resolver.TryResolve(resolveParam)
  137. assert.Equal(t, "domain.com", endpoint)
  138. assert.Equal(t, true, support)
  139. assert.Nil(t, err)
  140. // hit the cache
  141. endpoint, support, err = resolver.TryResolve(resolveParam)
  142. assert.Equal(t, "domain.com", endpoint)
  143. assert.Equal(t, true, support)
  144. assert.Nil(t, err)
  145. }
  146. func TestLocationResolver_TryResolve_Location_With_EmptyEndpoint(t *testing.T) {
  147. resolver := &LocationResolver{}
  148. resolveParam := &ResolveParam{
  149. LocationProduct: "ecs2",
  150. RegionId: "cn-hangzhou",
  151. Product: "ecs2",
  152. CommonApi: func(request *requests.CommonRequest) (response *responses.CommonResponse, err error) {
  153. response = responses.NewCommonResponse()
  154. responses.Unmarshal(response, makeHTTPResponse(200, `{"Success":true,"RequestId":"request id","Endpoints":{"Endpoint":[{"Endpoint":""}]}}`), "JSON")
  155. return
  156. },
  157. }
  158. endpoint, support, err := resolver.TryResolve(resolveParam)
  159. assert.Equal(t, "", endpoint)
  160. assert.Equal(t, false, support)
  161. assert.Nil(t, err)
  162. }