Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

210 linhas
6.6 KiB

  1. package iam_test
  2. import (
  3. "net/url"
  4. "github.com/goamz/goamz/aws"
  5. "github.com/goamz/goamz/iam"
  6. "github.com/goamz/goamz/testutil"
  7. . "gopkg.in/check.v1"
  8. )
  9. // AmazonServer represents an Amazon AWS server.
  10. type AmazonServer struct {
  11. auth aws.Auth
  12. }
  13. func (s *AmazonServer) SetUp(c *C) {
  14. auth, err := aws.EnvAuth()
  15. if err != nil {
  16. c.Fatal(err)
  17. }
  18. s.auth = auth
  19. }
  20. var _ = Suite(&AmazonClientSuite{})
  21. // AmazonClientSuite tests the client against a live AWS server.
  22. type AmazonClientSuite struct {
  23. srv AmazonServer
  24. ClientTests
  25. }
  26. func (s *AmazonClientSuite) SetUpSuite(c *C) {
  27. if !testutil.Amazon {
  28. c.Skip("AmazonClientSuite tests not enabled")
  29. }
  30. s.srv.SetUp(c)
  31. s.iam = iam.New(s.srv.auth, aws.USEast)
  32. }
  33. // ClientTests defines integration tests designed to test the client.
  34. // It is not used as a test suite in itself, but embedded within
  35. // another type.
  36. type ClientTests struct {
  37. iam *iam.IAM
  38. }
  39. func (s *ClientTests) TestCreateAndDeleteUser(c *C) {
  40. createResp, err := s.iam.CreateUser("gopher", "/gopher/")
  41. c.Assert(err, IsNil)
  42. getResp, err := s.iam.GetUser("gopher")
  43. c.Assert(err, IsNil)
  44. c.Assert(createResp.User, DeepEquals, getResp.User)
  45. _, err = s.iam.DeleteUser("gopher")
  46. c.Assert(err, IsNil)
  47. }
  48. func (s *ClientTests) TestCreateUserError(c *C) {
  49. _, err := s.iam.CreateUser("gopher", "/gopher/")
  50. c.Assert(err, IsNil)
  51. defer s.iam.DeleteUser("gopher")
  52. _, err = s.iam.CreateUser("gopher", "/")
  53. iamErr, ok := err.(*iam.Error)
  54. c.Assert(ok, Equals, true)
  55. c.Assert(iamErr.StatusCode, Equals, 409)
  56. c.Assert(iamErr.Code, Equals, "EntityAlreadyExists")
  57. c.Assert(iamErr.Message, Equals, "User with name gopher already exists.")
  58. }
  59. func (s *ClientTests) TestDeleteUserError(c *C) {
  60. _, err := s.iam.DeleteUser("gopher")
  61. iamErr, ok := err.(*iam.Error)
  62. c.Assert(ok, Equals, true)
  63. c.Assert(iamErr.StatusCode, Equals, 404)
  64. c.Assert(iamErr.Code, Equals, "NoSuchEntity")
  65. c.Assert(iamErr.Message, Equals, "The user with name gopher cannot be found.")
  66. }
  67. func (s *ClientTests) TestGetUserError(c *C) {
  68. _, err := s.iam.GetUser("gopher")
  69. iamErr, ok := err.(*iam.Error)
  70. c.Assert(ok, Equals, true)
  71. c.Assert(iamErr.StatusCode, Equals, 404)
  72. c.Assert(iamErr.Code, Equals, "NoSuchEntity")
  73. c.Assert(iamErr.Message, Equals, "The user with name gopher cannot be found.")
  74. }
  75. func (s *ClientTests) TestCreateListAndDeleteAccessKey(c *C) {
  76. createUserResp, err := s.iam.CreateUser("gopher", "/gopher/")
  77. c.Assert(err, IsNil)
  78. defer s.iam.DeleteUser(createUserResp.User.Name)
  79. createKeyResp, err := s.iam.CreateAccessKey(createUserResp.User.Name)
  80. c.Assert(err, IsNil)
  81. listKeyResp, err := s.iam.AccessKeys(createUserResp.User.Name)
  82. c.Assert(err, IsNil)
  83. c.Assert(listKeyResp.AccessKeys, HasLen, 1)
  84. createKeyResp.AccessKey.Secret = ""
  85. c.Assert(listKeyResp.AccessKeys[0], DeepEquals, createKeyResp.AccessKey)
  86. _, err = s.iam.DeleteAccessKey(createKeyResp.AccessKey.Id, createUserResp.User.Name)
  87. c.Assert(err, IsNil)
  88. }
  89. func (s *ClientTests) TestCreateAccessKeyError(c *C) {
  90. _, err := s.iam.CreateAccessKey("unknowngopher")
  91. c.Assert(err, NotNil)
  92. iamErr, ok := err.(*iam.Error)
  93. c.Assert(ok, Equals, true)
  94. c.Assert(iamErr.StatusCode, Equals, 404)
  95. c.Assert(iamErr.Code, Equals, "NoSuchEntity")
  96. c.Assert(iamErr.Message, Equals, "The user with name unknowngopher cannot be found.")
  97. }
  98. func (s *ClientTests) TestListAccessKeysUserNotFound(c *C) {
  99. _, err := s.iam.AccessKeys("unknowngopher")
  100. c.Assert(err, NotNil)
  101. iamErr, ok := err.(*iam.Error)
  102. c.Assert(ok, Equals, true)
  103. c.Assert(iamErr.StatusCode, Equals, 404)
  104. c.Assert(iamErr.Code, Equals, "NoSuchEntity")
  105. c.Assert(iamErr.Message, Equals, "The user with name unknowngopher cannot be found.")
  106. }
  107. func (s *ClientTests) TestListAccessKeysUserWithoutKeys(c *C) {
  108. createUserResp, err := s.iam.CreateUser("gopher", "/")
  109. c.Assert(err, IsNil)
  110. defer s.iam.DeleteUser(createUserResp.User.Name)
  111. resp, err := s.iam.AccessKeys(createUserResp.User.Name)
  112. c.Assert(err, IsNil)
  113. c.Assert(resp.AccessKeys, HasLen, 0)
  114. }
  115. func (s *ClientTests) TestCreateListAndDeleteGroup(c *C) {
  116. cResp1, err := s.iam.CreateGroup("Finances", "/finances/")
  117. c.Assert(err, IsNil)
  118. cResp2, err := s.iam.CreateGroup("DevelopmentManagers", "/development/managers/")
  119. c.Assert(err, IsNil)
  120. lResp, err := s.iam.Groups("/development/")
  121. c.Assert(err, IsNil)
  122. c.Assert(lResp.Groups, HasLen, 1)
  123. c.Assert(cResp2.Group, DeepEquals, lResp.Groups[0])
  124. lResp, err = s.iam.Groups("")
  125. c.Assert(err, IsNil)
  126. c.Assert(lResp.Groups, HasLen, 2)
  127. if lResp.Groups[0].Name == cResp1.Group.Name {
  128. c.Assert([]iam.Group{cResp1.Group, cResp2.Group}, DeepEquals, lResp.Groups)
  129. } else {
  130. c.Assert([]iam.Group{cResp2.Group, cResp1.Group}, DeepEquals, lResp.Groups)
  131. }
  132. _, err = s.iam.DeleteGroup("DevelopmentManagers")
  133. c.Assert(err, IsNil)
  134. lResp, err = s.iam.Groups("/development/")
  135. c.Assert(err, IsNil)
  136. c.Assert(lResp.Groups, HasLen, 0)
  137. _, err = s.iam.DeleteGroup("Finances")
  138. c.Assert(err, IsNil)
  139. }
  140. func (s *ClientTests) TestCreateGroupError(c *C) {
  141. _, err := s.iam.CreateGroup("Finances", "/finances/")
  142. c.Assert(err, IsNil)
  143. defer s.iam.DeleteGroup("Finances")
  144. _, err = s.iam.CreateGroup("Finances", "/something-else/")
  145. iamErr, ok := err.(*iam.Error)
  146. c.Assert(ok, Equals, true)
  147. c.Assert(iamErr.StatusCode, Equals, 409)
  148. c.Assert(iamErr.Code, Equals, "EntityAlreadyExists")
  149. c.Assert(iamErr.Message, Equals, "Group with name Finances already exists.")
  150. }
  151. func (s *ClientTests) TestDeleteGroupError(c *C) {
  152. _, err := s.iam.DeleteGroup("Finances")
  153. iamErr, ok := err.(*iam.Error)
  154. c.Assert(ok, Equals, true)
  155. c.Assert(iamErr.StatusCode, Equals, 404)
  156. c.Assert(iamErr.Code, Equals, "NoSuchEntity")
  157. c.Assert(iamErr.Message, Equals, "The group with name Finances cannot be found.")
  158. }
  159. func (s *ClientTests) TestPutGetAndDeleteUserPolicy(c *C) {
  160. userResp, err := s.iam.CreateUser("gopher", "/gopher/")
  161. c.Assert(err, IsNil)
  162. defer s.iam.DeleteUser(userResp.User.Name)
  163. document := `{
  164. "Statement": [
  165. {
  166. "Action": [
  167. "s3:*"
  168. ],
  169. "Effect": "Allow",
  170. "Resource": [
  171. "arn:aws:s3:::8shsns19s90ajahadsj/*",
  172. "arn:aws:s3:::8shsns19s90ajahadsj"
  173. ]
  174. }]
  175. }`
  176. _, err = s.iam.PutUserPolicy(userResp.User.Name, "EverythingS3", document)
  177. c.Assert(err, IsNil)
  178. resp, err := s.iam.GetUserPolicy(userResp.User.Name, "EverythingS3")
  179. c.Assert(err, IsNil)
  180. c.Assert(resp.Policy.Name, Equals, "EverythingS3")
  181. c.Assert(resp.Policy.UserName, Equals, userResp.User.Name)
  182. gotDocument, err := url.QueryUnescape(resp.Policy.Document)
  183. c.Assert(err, IsNil)
  184. c.Assert(gotDocument, Equals, document)
  185. _, err = s.iam.DeleteUserPolicy(userResp.User.Name, "EverythingS3")
  186. c.Assert(err, IsNil)
  187. _, err = s.iam.GetUserPolicy(userResp.User.Name, "EverythingS3")
  188. c.Assert(err, NotNil)
  189. }