core_test.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package integration
  2. import (
  3. "os"
  4. "strings"
  5. "testing"
  6. "time"
  7. "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
  8. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
  9. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. func Test_DescribeRegionsWithCommonRequestWithRPC(t *testing.T) {
  13. request := requests.NewCommonRequest()
  14. request.Version = "2014-05-26"
  15. request.Product = "Ecs"
  16. request.ApiName = "DescribeRegions"
  17. request.SetDomain("ecs.aliyuncs.com")
  18. request.TransToAcsRequest()
  19. client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  20. assert.Nil(t, err)
  21. response, err := client.ProcessCommonRequest(request)
  22. assert.Nil(t, err)
  23. assert.True(t, response.IsSuccess())
  24. }
  25. func Test_DescribeRegionsWithCommonRequestWithSTStoken(t *testing.T) {
  26. assumeresponse, err := createAssumeRole()
  27. assert.Nil(t, err)
  28. credential := assumeresponse.Credentials
  29. request := requests.NewCommonRequest()
  30. request.Version = "2014-05-26"
  31. request.Product = "Ecs"
  32. request.ApiName = "DescribeRegions"
  33. request.SetDomain("ecs.aliyuncs.com")
  34. request.TransToAcsRequest()
  35. client, err := sdk.NewClientWithStsToken(os.Getenv("REGION_ID"), credential.AccessKeyId, credential.AccessKeySecret, credential.SecurityToken)
  36. assert.Nil(t, err)
  37. response, err := client.ProcessCommonRequest(request)
  38. assert.Nil(t, err)
  39. assert.True(t, response.IsSuccess())
  40. }
  41. func Test_DescribeRegionsWithCommonRequestWithHTTPS(t *testing.T) {
  42. request := requests.NewCommonRequest()
  43. request.Version = "2014-05-26"
  44. request.Product = "Ecs"
  45. request.ApiName = "DescribeRegions"
  46. request.SetDomain("ecs.aliyuncs.com")
  47. request.TransToAcsRequest()
  48. request.SetScheme("HTTPS")
  49. client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  50. assert.Nil(t, err)
  51. response, err := client.ProcessCommonRequest(request)
  52. assert.Nil(t, err)
  53. assert.True(t, response.IsSuccess())
  54. }
  55. func Test_DescribeRegionsWithCommonRequestWithUnicodeSpecificParams(t *testing.T) {
  56. request := requests.NewCommonRequest()
  57. request.Version = "2014-05-26"
  58. request.Product = "Ecs"
  59. request.ApiName = "DescribeRegions"
  60. request.SetDomain("ecs.aliyuncs.com")
  61. request.TransToAcsRequest()
  62. request.SetContent([]byte("sdk&-杭&&&州-test"))
  63. client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  64. assert.Nil(t, err)
  65. response, err := client.ProcessCommonRequest(request)
  66. assert.Nil(t, err)
  67. assert.True(t, response.IsSuccess())
  68. }
  69. func Test_DescribeRegionsWithCommonRequestWithError(t *testing.T) {
  70. request := requests.NewCommonRequest()
  71. request.Version = "2014-05-26"
  72. request.Product = "Ecs"
  73. request.ApiName = "Describe"
  74. request.SetDomain("ecs.aliyuncs.com")
  75. request.TransToAcsRequest()
  76. client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  77. assert.Nil(t, err)
  78. _, err = client.ProcessCommonRequest(request)
  79. realerr := err.(errors.Error)
  80. assert.Equal(t, "InvalidParameter", realerr.ErrorCode())
  81. assert.Equal(t, "The specified parameter \"Action or Version\" is not valid.", realerr.Message())
  82. }
  83. func Test_DescribeRegionsWithCommonRequestWithIncompleteSignature(t *testing.T) {
  84. request := requests.NewCommonRequest()
  85. request.Version = "2014-05-26"
  86. request.AcceptFormat = "json"
  87. request.SetScheme("https")
  88. request.Method = "POST"
  89. request.ApiName = "DescribeRegions"
  90. request.SetDomain("ecs.aliyuncs.com")
  91. request.TransToAcsRequest()
  92. client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), strings.ToUpper(os.Getenv("ACCESS_KEY_SECRET")))
  93. assert.Nil(t, err)
  94. _, err = client.ProcessCommonRequest(request)
  95. realerr := err.(*errors.ServerError)
  96. assert.Equal(t, "IncompleteSignature", realerr.ErrorCode())
  97. assert.Equal(t, "InvalidAccessKeySecret: Please check you AccessKeySecret", realerr.Recommend())
  98. }
  99. func Test_DescribeClustersWithCommonRequestWithROA(t *testing.T) {
  100. client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  101. assert.Nil(t, err)
  102. request := requests.NewCommonRequest()
  103. request.Method = "GET"
  104. request.Domain = "cs.aliyuncs.com"
  105. request.Version = "2015-12-15"
  106. request.PathPattern = "/clusters/[ClusterId]"
  107. request.QueryParams["RegionId"] = os.Getenv("REGION_ID")
  108. request.TransToAcsRequest()
  109. _, err = client.ProcessCommonRequest(request)
  110. assert.NotNil(t, err)
  111. assert.Contains(t, err.Error(), "Request url is invalid")
  112. }
  113. func Test_DescribeClustersWithCommonRequestWithSignatureDostNotMatch(t *testing.T) {
  114. client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), strings.ToUpper(os.Getenv("ACCESS_KEY_SECRET")))
  115. assert.Nil(t, err)
  116. request := requests.NewCommonRequest()
  117. request.Method = "GET"
  118. request.Domain = "cs.aliyuncs.com"
  119. request.Version = "2015-12-15"
  120. request.PathPattern = "/clusters/[ClusterId]"
  121. request.QueryParams["RegionId"] = os.Getenv("REGION_ID")
  122. request.TransToAcsRequest()
  123. _, err = client.ProcessCommonRequest(request)
  124. assert.NotNil(t, err)
  125. real, _ := err.(*errors.ServerError)
  126. assert.Contains(t, real.Recommend(), "InvalidAccessKeySecret: Please check you AccessKeySecret")
  127. assert.Equal(t, real.ErrorCode(), "SignatureDoesNotMatch")
  128. }
  129. func Test_DescribeClustersWithCommonRequestWithROAWithSTStoken(t *testing.T) {
  130. assumeresponse, err := createAssumeRole()
  131. assert.Nil(t, err)
  132. credential := assumeresponse.Credentials
  133. client, err := sdk.NewClientWithStsToken(os.Getenv("REGION_ID"), credential.AccessKeyId, credential.AccessKeySecret, credential.SecurityToken)
  134. assert.Nil(t, err)
  135. assert.Nil(t, err)
  136. request := requests.NewCommonRequest()
  137. request.Method = "GET"
  138. request.Domain = "cs.aliyuncs.com"
  139. request.Version = "2015-12-15"
  140. request.PathPattern = "/clusters/[ClusterId]"
  141. request.QueryParams["RegionId"] = os.Getenv("REGION_ID")
  142. request.TransToAcsRequest()
  143. _, err = client.ProcessCommonRequest(request)
  144. assert.NotNil(t, err)
  145. assert.Contains(t, err.Error(), "Request url is invalid")
  146. }
  147. func Test_DescribeClusterDetailWithCommonRequestWithROAWithHTTPS(t *testing.T) {
  148. client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  149. assert.Nil(t, err)
  150. request := requests.NewCommonRequest()
  151. request.Method = "GET"
  152. request.Domain = "cs.aliyuncs.com"
  153. request.Version = "2015-12-15"
  154. request.SetScheme("HTTPS")
  155. request.PathPattern = "/clusters/[ClusterId]"
  156. request.QueryParams["RegionId"] = os.Getenv("REGION_ID")
  157. request.TransToAcsRequest()
  158. _, err = client.ProcessCommonRequest(request)
  159. assert.NotNil(t, err)
  160. assert.Contains(t, err.Error(), "Request url is invalid")
  161. }
  162. func Test_DescribeClusterDetailWithCommonRequestWithTimeout(t *testing.T) {
  163. client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  164. assert.Nil(t, err)
  165. request := requests.NewCommonRequest()
  166. request.Domain = "cs.aliyuncs.com"
  167. request.Version = "2015-12-15"
  168. request.SetScheme("HTTPS")
  169. request.PathPattern = "/clusters/[ClusterId]"
  170. request.QueryParams["RegionId"] = os.Getenv("REGION_ID")
  171. request.ReadTimeout = 1 * time.Millisecond
  172. request.ConnectTimeout = 1 * time.Millisecond
  173. request.TransToAcsRequest()
  174. _, err = client.ProcessCommonRequest(request)
  175. assert.NotNil(t, err)
  176. assert.Contains(t, err.Error(), "Connect timeout. Please set a valid ConnectTimeout.")
  177. request.ConnectTimeout = 1 * time.Second
  178. _, err = client.ProcessCommonRequest(request)
  179. assert.NotNil(t, err)
  180. assert.Contains(t, err.Error(), "Read timeout. Please set a valid ReadTimeout.")
  181. }
  182. func Test_CreateInstanceWithCommonRequestWithPolicy(t *testing.T) {
  183. err := createAttachPolicyToRole()
  184. assert.Nil(t, err)
  185. subaccesskeyid, subaccesskeysecret, err := createAccessKey()
  186. assert.Nil(t, err)
  187. client, err := sdk.NewClientWithRamRoleArnAndPolicy(os.Getenv("REGION_ID"), subaccesskeyid, subaccesskeysecret, rolearn, "alice_test", "")
  188. assert.Nil(t, err)
  189. request := requests.NewCommonRequest()
  190. request.Method = "POST"
  191. request.Product = "Ecs"
  192. request.Domain = "ecs.aliyuncs.com"
  193. request.Version = "2014-05-26"
  194. request.SetScheme("HTTPS")
  195. request.ApiName = "CreateInstance"
  196. request.QueryParams["ImageId"] = "win2008r2_64_ent_sp1_en-us_40G_alibase_20170915.vhd"
  197. request.QueryParams["InstanceType"] = "ecs.g5.large"
  198. request.TransToAcsRequest()
  199. _, err = client.ProcessCommonRequest(request)
  200. assert.NotNil(t, err)
  201. assert.Contains(t, err.Error(), "This resource type is not supported; please try other resource types.")
  202. policy := `{
  203. "Version": "1",
  204. "Statement": [
  205. {
  206. "Action": "rds:*",
  207. "Resource": "*",
  208. "Effect": "Allow"
  209. },
  210. {
  211. "Action": "dms:LoginDatabase",
  212. "Resource": "acs:rds:*:*:*",
  213. "Effect": "Allow"
  214. }
  215. ]
  216. }`
  217. client, err = sdk.NewClientWithRamRoleArnAndPolicy(os.Getenv("REGION_ID"), subaccesskeyid, subaccesskeysecret, rolearn, "alice_test", policy)
  218. assert.Nil(t, err)
  219. _, err = client.ProcessCommonRequest(request)
  220. assert.NotNil(t, err)
  221. assert.Contains(t, err.Error(), "User not authorized to operate on the specified resource, or this API doesn't support RAM.")
  222. }