client_test.go 16 KB

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