client_test.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. /*
  2. * Licensed under the Apache License, Version 2.0 (the "License");
  3. * you may not use this file except in compliance with the License.
  4. * You may obtain a copy of the License at
  5. *
  6. * http://www.apache.org/licenses/LICENSE-2.0
  7. *
  8. * Unless required by applicable law or agreed to in writing, software
  9. * distributed under the License is distributed on an "AS IS" BASIS,
  10. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. * See the License for the specific language governing permissions and
  12. * limitations under the License.
  13. */
  14. package sdk
  15. import (
  16. "encoding/json"
  17. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
  18. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
  19. "github.com/stretchr/testify/assert"
  20. "io/ioutil"
  21. "net/http"
  22. "os"
  23. "os/user"
  24. "testing"
  25. )
  26. var client *Client
  27. type TestConfig struct {
  28. AccessKeyId string
  29. AccessKeySecret string
  30. }
  31. type MockResponse struct {
  32. Headers map[string]string
  33. Body string
  34. Params map[string]string
  35. RemoteAddr string
  36. RemoteHost string
  37. QueryString string
  38. RequestURL string
  39. }
  40. func TestMain(m *testing.M) {
  41. testSetup()
  42. result := m.Run()
  43. testTearDown()
  44. os.Exit(result)
  45. }
  46. func testSetup() {
  47. usr, err := user.Current()
  48. if err != nil {
  49. panic(err)
  50. }
  51. configFilePath := usr.HomeDir + "/aliyun-sdk.json"
  52. data, err := ioutil.ReadFile(configFilePath)
  53. if err != nil {
  54. panic(err)
  55. }
  56. var config TestConfig
  57. json.Unmarshal(data, &config)
  58. client = &Client{}
  59. err = client.InitWithAccessKey("cn-hangzhou", config.AccessKeyId, config.AccessKeySecret)
  60. }
  61. func testTearDown() {
  62. }
  63. func TestNewClientWithAccessKey(t *testing.T) {
  64. assert.NotNil(t, client, "NewClientWithAccessKey failed")
  65. }
  66. func TestRoaGet(t *testing.T) {
  67. request := getFtTestRoaRequest()
  68. response := &responses.BaseResponse{}
  69. err := client.DoAction(request, response)
  70. assert.Nil(t, err)
  71. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  72. assert.NotNil(t, response.GetHttpContentString())
  73. var responseBean MockResponse
  74. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  75. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  76. assert.Equal(t, "HeaderParamValue", responseBean.Headers["Header-Param"])
  77. }
  78. func TestRoaPostForm(t *testing.T) {
  79. request := getFtTestRoaRequest()
  80. request.Method = requests.POST
  81. request.FormParams["BodyParam"] = "BodyParamValue"
  82. response := &responses.BaseResponse{}
  83. err := client.DoAction(request, response)
  84. assert.Nil(t, err)
  85. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  86. assert.NotNil(t, response.GetHttpContentString())
  87. var responseBean MockResponse
  88. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  89. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  90. assert.Equal(t, "HeaderParamValue", responseBean.Headers["Header-Param"])
  91. assert.Equal(t, "BodyParamValue", responseBean.Params["BodyParam"])
  92. }
  93. func TestRoaPostStream(t *testing.T) {
  94. request := getFtTestRoaRequest()
  95. request.Method = requests.POST
  96. request.Content = []byte("TestContent")
  97. response := &responses.BaseResponse{}
  98. err := client.DoAction(request, response)
  99. assert.Nil(t, err)
  100. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  101. assert.NotNil(t, response.GetHttpContentString())
  102. var responseBean MockResponse
  103. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  104. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  105. assert.Equal(t, "HeaderParamValue", responseBean.Headers["Header-Param"])
  106. assert.Equal(t, "TestContent", responseBean.Body)
  107. }
  108. func TestRoaPostJson(t *testing.T) {
  109. request := getFtTestRoaRequest()
  110. request.Method = requests.POST
  111. dataMap := map[string]string{"key": "value"}
  112. data, err := json.Marshal(dataMap)
  113. assert.Nil(t, err)
  114. request.Content = data
  115. request.SetContentType(requests.Json)
  116. response := &responses.BaseResponse{}
  117. err = client.DoAction(request, response)
  118. assert.Nil(t, err)
  119. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  120. assert.NotNil(t, response.GetHttpContentString())
  121. var responseBean MockResponse
  122. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  123. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  124. assert.Equal(t, "HeaderParamValue", responseBean.Headers["Header-Param"])
  125. assert.Equal(t, requests.Json, responseBean.Headers["Content-Type"])
  126. assert.Equal(t, string(data), responseBean.Body)
  127. }
  128. func TestRpcGet(t *testing.T) {
  129. request := getFtTestRpcRequest()
  130. request.Method = requests.GET
  131. response := &responses.BaseResponse{}
  132. err := client.DoAction(request, response)
  133. assert.Nil(t, err)
  134. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  135. assert.NotNil(t, response.GetHttpContentString())
  136. var responseBean MockResponse
  137. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  138. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  139. }
  140. func TestRpcPost(t *testing.T) {
  141. request := getFtTestRpcRequest()
  142. request.FormParams["BodyParam"] = "BodyParamValue"
  143. response := &responses.BaseResponse{}
  144. err := client.DoAction(request, response)
  145. assert.Nil(t, err)
  146. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  147. assert.NotNil(t, response.GetHttpContentString())
  148. var responseBean MockResponse
  149. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  150. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  151. assert.Equal(t, "BodyParamValue", responseBean.Params["BodyParam"])
  152. }
  153. func getFtTestRoaRequest() (request *requests.RoaRequest) {
  154. request = &requests.RoaRequest{}
  155. request.InitWithApiInfo("Ft", "2016-01-02", "TestRoaApi", "/web/cloudapi", "", "")
  156. request.Domain = "ft.aliyuncs.com"
  157. request.Headers["Header-Param"] = "HeaderParamValue"
  158. request.QueryParams["QueryParam"] = "QueryParamValue"
  159. return
  160. }
  161. func getFtTestRpcRequest() (request *requests.RpcRequest) {
  162. request = &requests.RpcRequest{}
  163. request.InitWithApiInfo("Ft", "2016-01-01", "TestRpcApi","", "")
  164. request.Domain = "ft.aliyuncs.com"
  165. request.QueryParams["QueryParam"] = "QueryParamValue"
  166. return
  167. }
  168. func getFtTestRpcRequestForEndpointLocation() (request *requests.RpcRequest) {
  169. request = &requests.RpcRequest{}
  170. request.InitWithApiInfo("Ft", "2016-01-01", "TestRpcApi","ft", "openAPI")
  171. request.RegionId = "cn-hangzhou"
  172. request.QueryParams["QueryParam"] = "QueryParamValue"
  173. return
  174. }
  175. func TestCommonRpcRequest(t *testing.T){
  176. rpcRequest := requests.NewCommonRequest()
  177. rpcRequest.Product = "Ft"
  178. rpcRequest.Version = "2016-01-01"
  179. rpcRequest.Domain = "ft.aliyuncs.com"
  180. rpcRequest.ApiName = "TestRpcApi"
  181. rpcRequest.Method = "POST"
  182. rpcRequest.QueryParams["QueryParam"] = "QueryParamValue"
  183. rpcRequest.FormParams["BodyParam"] = "BodyParamValue"
  184. response,err := client.ProcessCommonRequest(rpcRequest)
  185. assert.Nil(t, err)
  186. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  187. assert.NotNil(t, response.GetHttpContentString())
  188. var responseBean MockResponse
  189. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  190. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  191. assert.Equal(t, "BodyParamValue", responseBean.Params["BodyParam"])
  192. }
  193. func TestCommonRoaRequest(t *testing.T){
  194. roaRequest := requests.NewCommonRequest()
  195. roaRequest.Product = "Ft"
  196. roaRequest.Version = "2016-01-02"
  197. roaRequest.ApiName = "TestRoaApi"
  198. roaRequest.PathPattern = "/web/cloudapi"
  199. roaRequest.Domain = "ft.aliyuncs.com"
  200. roaRequest.Method = "POST"
  201. roaRequest.QueryParams["QueryParam"] = "QueryParamValue"
  202. roaRequest.FormParams["BodyParam"] = "BodyParamValue"
  203. response,err := client.ProcessCommonRequest(roaRequest)
  204. assert.Nil(t, err)
  205. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  206. assert.NotNil(t, response.GetHttpContentString())
  207. var responseBean MockResponse
  208. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  209. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  210. assert.Equal(t, "BodyParamValue", responseBean.Params["BodyParam"])
  211. }
  212. func TestRpcGetForEndpointXml(t *testing.T) {
  213. request := getFtTestRpcRequestForEndpointLocation()
  214. request.Method = requests.GET
  215. request.RegionId = "cn-shanghai"
  216. response := &responses.BaseResponse{}
  217. err := client.DoAction(request, response)
  218. assert.Nil(t, err)
  219. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  220. assert.NotNil(t, response.GetHttpContentString())
  221. var responseBean MockResponse
  222. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  223. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  224. }
  225. func TestRpcGetForLocation(t *testing.T) {
  226. request := getFtTestRpcRequestForEndpointLocation()
  227. request.Method = requests.GET
  228. response := &responses.BaseResponse{}
  229. err := client.DoAction(request, response)
  230. assert.Nil(t, err)
  231. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  232. assert.NotNil(t, response.GetHttpContentString())
  233. var responseBean MockResponse
  234. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  235. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  236. }
  237. func TestRpcGetForLocationCache(t *testing.T) {
  238. request := getFtTestRpcRequestForEndpointLocation()
  239. request.Method = requests.GET
  240. response := &responses.BaseResponse{}
  241. err := client.DoAction(request, response)
  242. assert.Nil(t, err)
  243. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  244. assert.NotNil(t, response.GetHttpContentString())
  245. var responseBean MockResponse
  246. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  247. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  248. request2 := getFtTestRpcRequestForEndpointLocation()
  249. request2.Method = requests.GET
  250. err = client.DoAction(request2, response)
  251. assert.Nil(t, err)
  252. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  253. assert.NotNil(t, response.GetHttpContentString())
  254. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  255. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  256. }