client_test.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  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. "crypto/tls"
  17. "encoding/json"
  18. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
  19. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
  20. "github.com/stretchr/testify/assert"
  21. "io/ioutil"
  22. "net/http"
  23. "os"
  24. "os/user"
  25. "testing"
  26. )
  27. var client, clientKeyPair, clientEcs, clientRoleArn *Client
  28. type TestConfig struct {
  29. AccessKeyId string
  30. AccessKeySecret string
  31. PublicKeyId string
  32. PrivateKey string
  33. RoleArn string
  34. ChildAK string
  35. ChildSecret string
  36. }
  37. type MockResponse struct {
  38. Headers map[string]string
  39. Body string
  40. Params map[string]string
  41. RemoteAddr string
  42. RemoteHost string
  43. QueryString string
  44. RequestURL string
  45. }
  46. func TestMain(m *testing.M) {
  47. testSetup()
  48. result := m.Run()
  49. testTearDown()
  50. os.Exit(result)
  51. }
  52. func testSetup() {
  53. usr, err := user.Current()
  54. if err != nil {
  55. panic(err)
  56. }
  57. configFilePath := usr.HomeDir + "/aliyun-sdk.json"
  58. data, err := ioutil.ReadFile(configFilePath)
  59. if err != nil {
  60. panic(err)
  61. }
  62. var config TestConfig
  63. json.Unmarshal(data, &config)
  64. tr := &http.Transport{
  65. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  66. }
  67. client = &Client{
  68. config: &Config{
  69. HttpTransport: tr,
  70. },
  71. }
  72. clientEcs = &Client{}
  73. clientRoleArn = &Client{
  74. config: &Config{
  75. HttpTransport: tr,
  76. },
  77. }
  78. clientKeyPair = &Client{
  79. config: &Config{
  80. HttpTransport: tr,
  81. },
  82. }
  83. err = client.InitWithAccessKey("cn-hangzhou", config.AccessKeyId, config.AccessKeySecret)
  84. if err != nil {
  85. panic(err)
  86. }
  87. err = clientKeyPair.InitWithKeyPair("cn-hangzhou", config.PublicKeyId, config.PrivateKey, 3600)
  88. if err != nil {
  89. panic(err)
  90. }
  91. err = clientEcs.InitWithEcsInstance("cn-hangzhou", "conan")
  92. if err != nil {
  93. panic(err)
  94. }
  95. err = clientRoleArn.InitWithRoleArn("cn-hangzhou", config.ChildAK, config.ChildSecret, config.RoleArn, "clientTest")
  96. if err != nil {
  97. panic(err)
  98. }
  99. }
  100. func testTearDown() {
  101. }
  102. func TestNewClientWithAccessKey(t *testing.T) {
  103. assert.NotNil(t, client, "NewClientWithAccessKey failed")
  104. }
  105. func TestRoaGet(t *testing.T) {
  106. request := getFtTestRoaRequest()
  107. response := &responses.BaseResponse{}
  108. err := client.DoAction(request, response)
  109. assert.Nil(t, err)
  110. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  111. assert.NotNil(t, response.GetHttpContentString())
  112. var responseBean MockResponse
  113. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  114. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  115. assert.Equal(t, "HeaderParamValue", responseBean.Headers["Header-Param"])
  116. }
  117. func TestRoaPostForm(t *testing.T) {
  118. request := getFtTestRoaRequest()
  119. request.Method = requests.POST
  120. request.FormParams["BodyParam"] = "BodyParamValue"
  121. response := &responses.BaseResponse{}
  122. err := client.DoAction(request, response)
  123. assert.Nil(t, err)
  124. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  125. assert.NotNil(t, response.GetHttpContentString())
  126. var responseBean MockResponse
  127. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  128. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  129. assert.Equal(t, "HeaderParamValue", responseBean.Headers["Header-Param"])
  130. assert.Equal(t, "BodyParamValue", responseBean.Params["BodyParam"])
  131. }
  132. func TestRoaPostStream(t *testing.T) {
  133. request := getFtTestRoaRequest()
  134. request.Method = requests.POST
  135. request.Content = []byte("TestContent")
  136. response := &responses.BaseResponse{}
  137. err := client.DoAction(request, response)
  138. assert.Nil(t, err)
  139. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  140. assert.NotNil(t, response.GetHttpContentString())
  141. var responseBean MockResponse
  142. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  143. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  144. assert.Equal(t, "HeaderParamValue", responseBean.Headers["Header-Param"])
  145. assert.Equal(t, "TestContent", responseBean.Body)
  146. }
  147. func TestRoaPostJson(t *testing.T) {
  148. request := getFtTestRoaRequest()
  149. request.Method = requests.POST
  150. dataMap := map[string]string{"key": "value"}
  151. data, err := json.Marshal(dataMap)
  152. assert.Nil(t, err)
  153. request.Content = data
  154. request.SetContentType(requests.Json)
  155. response := &responses.BaseResponse{}
  156. err = client.DoAction(request, response)
  157. assert.Nil(t, err)
  158. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  159. assert.NotNil(t, response.GetHttpContentString())
  160. var responseBean MockResponse
  161. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  162. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  163. assert.Equal(t, "HeaderParamValue", responseBean.Headers["Header-Param"])
  164. assert.Equal(t, requests.Json, responseBean.Headers["Content-Type"])
  165. assert.Equal(t, string(data), responseBean.Body)
  166. }
  167. func TestRpcGet(t *testing.T) {
  168. request := getFtTestRpcRequest()
  169. request.Method = requests.GET
  170. response := &responses.BaseResponse{}
  171. err := client.DoAction(request, response)
  172. assert.Nil(t, err)
  173. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  174. assert.NotNil(t, response.GetHttpContentString())
  175. var responseBean MockResponse
  176. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  177. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  178. }
  179. func TestRpcGetForHttps(t *testing.T) {
  180. request := getFtTestRpcRequest()
  181. request.Method = requests.GET
  182. request.Scheme = requests.HTTPS
  183. response := &responses.BaseResponse{}
  184. err := client.DoAction(request, response)
  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. }
  192. func TestRoaGetForHttps(t *testing.T) {
  193. request := getFtTestRoaRequest()
  194. request.Scheme = requests.HTTPS
  195. response := &responses.BaseResponse{}
  196. err := client.DoAction(request, response)
  197. assert.Nil(t, err)
  198. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  199. assert.NotNil(t, response.GetHttpContentString())
  200. var responseBean MockResponse
  201. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  202. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  203. assert.Equal(t, "HeaderParamValue", responseBean.Headers["Header-Param"])
  204. }
  205. func TestRpcPost(t *testing.T) {
  206. request := getFtTestRpcRequest()
  207. request.FormParams["BodyParam"] = "BodyParamValue"
  208. response := &responses.BaseResponse{}
  209. err := client.DoAction(request, response)
  210. assert.Nil(t, err)
  211. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  212. assert.NotNil(t, response.GetHttpContentString())
  213. var responseBean MockResponse
  214. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  215. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  216. assert.Equal(t, "BodyParamValue", responseBean.Params["BodyParam"])
  217. }
  218. func getFtTestRoaRequest() (request *requests.RoaRequest) {
  219. request = &requests.RoaRequest{}
  220. request.InitWithApiInfo("Ft", "2016-01-02", "TestRoaApi", "/web/cloudapi", "", "")
  221. request.Domain = "ft.aliyuncs.com"
  222. request.Headers["Header-Param"] = "HeaderParamValue"
  223. request.QueryParams["QueryParam"] = "QueryParamValue"
  224. return
  225. }
  226. func getFtTestRpcRequest() (request *requests.RpcRequest) {
  227. request = &requests.RpcRequest{}
  228. request.InitWithApiInfo("Ft", "2016-01-01", "TestRpcApi", "", "")
  229. request.Domain = "ft.aliyuncs.com"
  230. request.QueryParams["QueryParam"] = "QueryParamValue"
  231. return
  232. }
  233. func getFtTestRpcRequestForEndpointLocation() (request *requests.RpcRequest) {
  234. request = &requests.RpcRequest{}
  235. request.InitWithApiInfo("Ft", "2016-01-01", "TestRpcApi", "ft", "openAPI")
  236. request.RegionId = "cn-hangzhou"
  237. request.QueryParams["QueryParam"] = "QueryParamValue"
  238. return
  239. }
  240. func getFtTestRpcRequestForEndpointXml() (request *requests.RpcRequest) {
  241. request = &requests.RpcRequest{}
  242. request.InitWithApiInfo("Ft", "2016-01-01", "TestRpcApi", "", "")
  243. request.RegionId = "cn-hangzhou"
  244. request.QueryParams["QueryParam"] = "QueryParamValue"
  245. return
  246. }
  247. func TestCommonRpcRequest(t *testing.T) {
  248. rpcRequest := requests.NewCommonRequest()
  249. rpcRequest.Product = "Ft"
  250. rpcRequest.Version = "2016-01-01"
  251. rpcRequest.Domain = "ft.aliyuncs.com"
  252. rpcRequest.ApiName = "TestRpcApi"
  253. rpcRequest.Method = "POST"
  254. rpcRequest.QueryParams["QueryParam"] = "QueryParamValue"
  255. rpcRequest.FormParams["BodyParam"] = "BodyParamValue"
  256. response, err := client.ProcessCommonRequest(rpcRequest)
  257. assert.Nil(t, err)
  258. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  259. assert.NotNil(t, response.GetHttpContentString())
  260. var responseBean MockResponse
  261. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  262. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  263. assert.Equal(t, "BodyParamValue", responseBean.Params["BodyParam"])
  264. }
  265. func TestCommonRoaRequest(t *testing.T) {
  266. roaRequest := requests.NewCommonRequest()
  267. roaRequest.Product = "Ft"
  268. roaRequest.Version = "2016-01-02"
  269. roaRequest.ApiName = "TestRoaApi"
  270. roaRequest.PathPattern = "/web/cloudapi"
  271. roaRequest.Domain = "ft.aliyuncs.com"
  272. roaRequest.Method = "POST"
  273. roaRequest.QueryParams["QueryParam"] = "QueryParamValue"
  274. roaRequest.FormParams["BodyParam"] = "BodyParamValue"
  275. response, err := client.ProcessCommonRequest(roaRequest)
  276. assert.Nil(t, err)
  277. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  278. assert.NotNil(t, response.GetHttpContentString())
  279. var responseBean MockResponse
  280. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  281. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  282. assert.Equal(t, "BodyParamValue", responseBean.Params["BodyParam"])
  283. }
  284. func TestRpcGetForEndpointXml(t *testing.T) {
  285. request := getFtTestRpcRequestForEndpointXml()
  286. request.Method = requests.GET
  287. request.RegionId = "cn-shanghai"
  288. response := &responses.BaseResponse{}
  289. err := client.DoAction(request, response)
  290. assert.Nil(t, err)
  291. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  292. assert.NotNil(t, response.GetHttpContentString())
  293. var responseBean MockResponse
  294. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  295. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  296. }
  297. func TestRpcGetForLocation(t *testing.T) {
  298. request := getFtTestRpcRequestForEndpointLocation()
  299. request.Method = requests.GET
  300. response := &responses.BaseResponse{}
  301. err := client.DoAction(request, response)
  302. assert.Nil(t, err)
  303. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  304. assert.NotNil(t, response.GetHttpContentString())
  305. var responseBean MockResponse
  306. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  307. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  308. }
  309. func TestRpcGetForLocationCache(t *testing.T) {
  310. request := getFtTestRpcRequestForEndpointLocation()
  311. request.Method = requests.GET
  312. response := &responses.BaseResponse{}
  313. err := client.DoAction(request, response)
  314. assert.Nil(t, err)
  315. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  316. assert.NotNil(t, response.GetHttpContentString())
  317. var responseBean MockResponse
  318. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  319. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  320. request2 := getFtTestRpcRequestForEndpointLocation()
  321. request2.Method = requests.GET
  322. err = client.DoAction(request2, response)
  323. assert.Nil(t, err)
  324. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  325. assert.NotNil(t, response.GetHttpContentString())
  326. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  327. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  328. }
  329. func TestRpcGetForKeyPair(t *testing.T) {
  330. request := getFtTestRpcRequest()
  331. request.Method = requests.GET
  332. response := &responses.BaseResponse{}
  333. err := clientKeyPair.DoAction(request, response)
  334. assert.Nil(t, err)
  335. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  336. assert.NotNil(t, response.GetHttpContentString())
  337. var responseBean MockResponse
  338. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  339. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  340. }
  341. /*func TestRpcGetForEcs(t *testing.T) {
  342. //测试接口,想测试的时候,要替换掉singer_ecs_instance中对应的变量,并且还要提供一个mock服务
  343. //requestUrl := "http://localhost:3500/latest/meta-data/ram/security-credentials/roleNameTest.json"
  344. request := getFtTestRpcRequest()
  345. request.Method = requests.GET
  346. response := &responses.BaseResponse{}
  347. err := clientEcs.DoAction(request, response)
  348. assert.Nil(t, err)
  349. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  350. assert.NotNil(t, response.GetHttpContentString())
  351. var responseBean MockResponse
  352. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  353. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  354. err = clientEcs.DoAction(request, response)
  355. assert.Nil(t, err)
  356. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  357. assert.NotNil(t, response.GetHttpContentString())
  358. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  359. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  360. }*/
  361. func TestRpcGetForRoleArn(t *testing.T) {
  362. request := getFtTestRpcRequest()
  363. request.Method = requests.GET
  364. response := &responses.BaseResponse{}
  365. err := clientRoleArn.DoAction(request, response)
  366. assert.Nil(t, err)
  367. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  368. assert.NotNil(t, response.GetHttpContentString())
  369. var responseBean MockResponse
  370. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  371. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  372. err = clientRoleArn.DoAction(request, response)
  373. assert.Nil(t, err)
  374. assert.Equal(t, http.StatusOK, response.GetHttpStatus(), response.GetHttpContentString())
  375. assert.NotNil(t, response.GetHttpContentString())
  376. json.Unmarshal([]byte(response.GetHttpContentString()), &responseBean)
  377. assert.Equal(t, "QueryParamValue", responseBean.Params["QueryParam"])
  378. }