You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

212 lines
4.8 KiB

  1. package aws_test
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "strings"
  6. "testing"
  7. "time"
  8. "github.com/goamz/goamz/aws"
  9. . "gopkg.in/check.v1"
  10. )
  11. func Test(t *testing.T) {
  12. TestingT(t)
  13. }
  14. var _ = Suite(&S{})
  15. type S struct {
  16. environ []string
  17. }
  18. func (s *S) SetUpSuite(c *C) {
  19. s.environ = os.Environ()
  20. }
  21. func (s *S) TearDownTest(c *C) {
  22. os.Clearenv()
  23. for _, kv := range s.environ {
  24. l := strings.SplitN(kv, "=", 2)
  25. os.Setenv(l[0], l[1])
  26. }
  27. }
  28. func (s *S) TestSharedAuthNoHome(c *C) {
  29. os.Clearenv()
  30. os.Setenv("AWS_PROFILE", "foo")
  31. _, err := aws.SharedAuth()
  32. c.Assert(err, ErrorMatches, "Could not get HOME")
  33. }
  34. func (s *S) TestSharedAuthNoCredentialsFile(c *C) {
  35. os.Clearenv()
  36. os.Setenv("AWS_PROFILE", "foo")
  37. os.Setenv("HOME", "/tmp")
  38. _, err := aws.SharedAuth()
  39. c.Assert(err, ErrorMatches, "Couldn't parse AWS credentials file")
  40. }
  41. func (s *S) TestSharedAuthNoProfileInFile(c *C) {
  42. os.Clearenv()
  43. os.Setenv("AWS_PROFILE", "foo")
  44. d, err := ioutil.TempDir("", "")
  45. if err != nil {
  46. panic(err)
  47. }
  48. defer os.RemoveAll(d)
  49. err = os.Mkdir(d+"/.aws", 0755)
  50. if err != nil {
  51. panic(err)
  52. }
  53. ioutil.WriteFile(d+"/.aws/credentials", []byte("[bar]\n"), 0644)
  54. os.Setenv("HOME", d)
  55. _, err = aws.SharedAuth()
  56. c.Assert(err, ErrorMatches, "Couldn't find profile in AWS credentials file")
  57. }
  58. func (s *S) TestSharedAuthNoKeysInProfile(c *C) {
  59. os.Clearenv()
  60. os.Setenv("AWS_PROFILE", "bar")
  61. d, err := ioutil.TempDir("", "")
  62. if err != nil {
  63. panic(err)
  64. }
  65. defer os.RemoveAll(d)
  66. err = os.Mkdir(d+"/.aws", 0755)
  67. if err != nil {
  68. panic(err)
  69. }
  70. ioutil.WriteFile(d+"/.aws/credentials", []byte("[bar]\nawsaccesskeyid = AK.."), 0644)
  71. os.Setenv("HOME", d)
  72. _, err = aws.SharedAuth()
  73. c.Assert(err, ErrorMatches, "AWS_SECRET_ACCESS_KEY not found in credentials file")
  74. }
  75. func (s *S) TestSharedAuthDefaultCredentials(c *C) {
  76. os.Clearenv()
  77. d, err := ioutil.TempDir("", "")
  78. if err != nil {
  79. panic(err)
  80. }
  81. defer os.RemoveAll(d)
  82. err = os.Mkdir(d+"/.aws", 0755)
  83. if err != nil {
  84. panic(err)
  85. }
  86. ioutil.WriteFile(d+"/.aws/credentials", []byte("[default]\naws_access_key_id = access\naws_secret_access_key = secret\n"), 0644)
  87. os.Setenv("HOME", d)
  88. auth, err := aws.SharedAuth()
  89. c.Assert(err, IsNil)
  90. c.Assert(auth, Equals, aws.Auth{SecretKey: "secret", AccessKey: "access"})
  91. }
  92. func (s *S) TestSharedAuth(c *C) {
  93. os.Clearenv()
  94. os.Setenv("AWS_PROFILE", "bar")
  95. d, err := ioutil.TempDir("", "")
  96. if err != nil {
  97. panic(err)
  98. }
  99. defer os.RemoveAll(d)
  100. err = os.Mkdir(d+"/.aws", 0755)
  101. if err != nil {
  102. panic(err)
  103. }
  104. ioutil.WriteFile(d+"/.aws/credentials", []byte("[bar]\naws_access_key_id = access\naws_secret_access_key = secret\n"), 0644)
  105. os.Setenv("HOME", d)
  106. auth, err := aws.SharedAuth()
  107. c.Assert(err, IsNil)
  108. c.Assert(auth, Equals, aws.Auth{SecretKey: "secret", AccessKey: "access"})
  109. }
  110. func (s *S) TestEnvAuthNoSecret(c *C) {
  111. os.Clearenv()
  112. _, err := aws.EnvAuth()
  113. c.Assert(err, ErrorMatches, "AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment")
  114. }
  115. func (s *S) TestEnvAuthNoAccess(c *C) {
  116. os.Clearenv()
  117. os.Setenv("AWS_SECRET_ACCESS_KEY", "foo")
  118. _, err := aws.EnvAuth()
  119. c.Assert(err, ErrorMatches, "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment")
  120. }
  121. func (s *S) TestEnvAuth(c *C) {
  122. os.Clearenv()
  123. os.Setenv("AWS_SECRET_ACCESS_KEY", "secret")
  124. os.Setenv("AWS_ACCESS_KEY_ID", "access")
  125. auth, err := aws.EnvAuth()
  126. c.Assert(err, IsNil)
  127. c.Assert(auth, Equals, aws.Auth{SecretKey: "secret", AccessKey: "access"})
  128. }
  129. func (s *S) TestEnvAuthAlt(c *C) {
  130. os.Clearenv()
  131. os.Setenv("AWS_SECRET_KEY", "secret")
  132. os.Setenv("AWS_ACCESS_KEY", "access")
  133. auth, err := aws.EnvAuth()
  134. c.Assert(err, IsNil)
  135. c.Assert(auth, Equals, aws.Auth{SecretKey: "secret", AccessKey: "access"})
  136. }
  137. func (s *S) TestEnvAuthToken(c *C) {
  138. os.Clearenv()
  139. os.Setenv("AWS_SECRET_KEY", "secret")
  140. os.Setenv("AWS_ACCESS_KEY", "access")
  141. os.Setenv("AWS_SESSION_TOKEN", "token")
  142. auth, err := aws.EnvAuth()
  143. c.Assert(err, IsNil)
  144. c.Assert(auth.SecretKey, Equals, "secret")
  145. c.Assert(auth.AccessKey, Equals, "access")
  146. c.Assert(auth.Token(), Equals, "token")
  147. }
  148. func (s *S) TestGetAuthStatic(c *C) {
  149. exptdate := time.Now().Add(time.Hour)
  150. auth, err := aws.GetAuth("access", "secret", "token", exptdate)
  151. c.Assert(err, IsNil)
  152. c.Assert(auth.AccessKey, Equals, "access")
  153. c.Assert(auth.SecretKey, Equals, "secret")
  154. c.Assert(auth.Token(), Equals, "token")
  155. c.Assert(auth.Expiration(), Equals, exptdate)
  156. }
  157. func (s *S) TestGetAuthEnv(c *C) {
  158. os.Clearenv()
  159. os.Setenv("AWS_SECRET_ACCESS_KEY", "secret")
  160. os.Setenv("AWS_ACCESS_KEY_ID", "access")
  161. auth, err := aws.GetAuth("", "", "", time.Time{})
  162. c.Assert(err, IsNil)
  163. c.Assert(auth, Equals, aws.Auth{SecretKey: "secret", AccessKey: "access"})
  164. }
  165. func (s *S) TestEncode(c *C) {
  166. c.Assert(aws.Encode("foo"), Equals, "foo")
  167. c.Assert(aws.Encode("/"), Equals, "%2F")
  168. }
  169. func (s *S) TestRegionsAreNamed(c *C) {
  170. for n, r := range aws.Regions {
  171. c.Assert(n, Equals, r.Name)
  172. }
  173. }