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.
 
 
 

152 lines
5.4 KiB

  1. package sts_test
  2. import (
  3. "testing"
  4. "time"
  5. . "gopkg.in/check.v1"
  6. "github.com/goamz/goamz/aws"
  7. "github.com/goamz/goamz/sts"
  8. "github.com/goamz/goamz/testutil"
  9. )
  10. func Test(t *testing.T) {
  11. TestingT(t)
  12. }
  13. var _ = Suite(&S{})
  14. type S struct {
  15. sts *sts.STS
  16. }
  17. var testServer = testutil.NewHTTPServer()
  18. var mockTest bool
  19. func (s *S) SetUpSuite(c *C) {
  20. testServer.Start()
  21. auth := aws.Auth{AccessKey: "abc", SecretKey: "123"}
  22. s.sts = sts.New(auth, aws.Region{STSEndpoint: testServer.URL})
  23. }
  24. func (s *S) TearDownTest(c *C) {
  25. testServer.Flush()
  26. }
  27. func (s *S) TestAssumeRole(c *C) {
  28. testServer.Response(200, nil, AssumeRoleResponse)
  29. request := &sts.AssumeRoleParams{
  30. DurationSeconds: 3600,
  31. ExternalId: "123ABC",
  32. Policy: `{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}`,
  33. RoleArn: "arn:aws:iam::123456789012:role/demo",
  34. RoleSessionName: "Bob",
  35. }
  36. resp, err := s.sts.AssumeRole(request)
  37. c.Assert(err, IsNil)
  38. values := testServer.WaitRequest().PostForm
  39. // Post request test
  40. c.Assert(values.Get("Version"), Equals, "2011-06-15")
  41. c.Assert(values.Get("Action"), Equals, "AssumeRole")
  42. c.Assert(values.Get("DurationSeconds"), Equals, "3600")
  43. c.Assert(values.Get("ExternalId"), Equals, "123ABC")
  44. c.Assert(values.Get("Policy"), Equals, `{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}`)
  45. c.Assert(values.Get("RoleArn"), Equals, "arn:aws:iam::123456789012:role/demo")
  46. c.Assert(values.Get("RoleSessionName"), Equals, "Bob")
  47. // Response test
  48. exp, _ := time.Parse(time.RFC3339, "2011-07-15T23:28:33.359Z")
  49. c.Assert(resp.RequestId, Equals, "c6104cbe-af31-11e0-8154-cbc7ccf896c7")
  50. c.Assert(resp.PackedPolicySize, Equals, 6)
  51. c.Assert(resp.AssumedRoleUser, DeepEquals, sts.AssumedRoleUser{
  52. Arn: "arn:aws:sts::123456789012:assumed-role/demo/Bob",
  53. AssumedRoleId: "ARO123EXAMPLE123:Bob",
  54. })
  55. c.Assert(resp.Credentials, DeepEquals, sts.Credentials{
  56. SessionToken: `
  57. AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW
  58. LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
  59. QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
  60. 9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
  61. +scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
  62. `,
  63. SecretAccessKey: `
  64. wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
  65. `,
  66. AccessKeyId: "AKIAIOSFODNN7EXAMPLE",
  67. Expiration: exp,
  68. })
  69. }
  70. func (s *S) TestGetFederationToken(c *C) {
  71. testServer.Response(200, nil, GetFederationTokenResponse)
  72. resp, err := s.sts.GetFederationToken(
  73. "Bob",
  74. `{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}`,
  75. 3600,
  76. )
  77. c.Assert(err, IsNil)
  78. values := testServer.WaitRequest().PostForm
  79. // Post request test
  80. c.Assert(values.Get("Version"), Equals, "2011-06-15")
  81. c.Assert(values.Get("Action"), Equals, "GetFederationToken")
  82. c.Assert(values.Get("DurationSeconds"), Equals, "3600")
  83. c.Assert(values.Get("Policy"), Equals, `{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}`)
  84. c.Assert(values.Get("Name"), Equals, "Bob")
  85. // Response test
  86. exp, _ := time.Parse(time.RFC3339, "2011-07-15T23:28:33.359Z")
  87. c.Assert(resp.RequestId, Equals, "c6104cbe-af31-11e0-8154-cbc7ccf896c7")
  88. c.Assert(resp.PackedPolicySize, Equals, 6)
  89. c.Assert(resp.FederatedUser, DeepEquals, sts.FederatedUser{
  90. Arn: "arn:aws:sts::123456789012:federated-user/Bob",
  91. FederatedUserId: "123456789012:Bob",
  92. })
  93. c.Assert(resp.Credentials, DeepEquals, sts.Credentials{
  94. SessionToken: `
  95. AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW
  96. LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
  97. QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
  98. 9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
  99. +scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
  100. `,
  101. SecretAccessKey: `
  102. wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
  103. `,
  104. AccessKeyId: "AKIAIOSFODNN7EXAMPLE",
  105. Expiration: exp,
  106. })
  107. }
  108. func (s *S) TestGetSessionToken(c *C) {
  109. testServer.Response(200, nil, GetSessionTokenResponse)
  110. resp, err := s.sts.GetSessionToken(3600, "YourMFADeviceSerialNumber", "123456")
  111. c.Assert(err, IsNil)
  112. values := testServer.WaitRequest().PostForm
  113. // Post request test
  114. c.Assert(values.Get("Version"), Equals, "2011-06-15")
  115. c.Assert(values.Get("Action"), Equals, "GetSessionToken")
  116. c.Assert(values.Get("DurationSeconds"), Equals, "3600")
  117. c.Assert(values.Get("SerialNumber"), Equals, "YourMFADeviceSerialNumber")
  118. c.Assert(values.Get("TokenCode"), Equals, "123456")
  119. // Response test
  120. exp, _ := time.Parse(time.RFC3339, "2011-07-11T19:55:29.611Z")
  121. c.Assert(resp.RequestId, Equals, "58c5dbae-abef-11e0-8cfe-09039844ac7d")
  122. c.Assert(resp.Credentials, DeepEquals, sts.Credentials{
  123. SessionToken: `
  124. AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/L
  125. To6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3z
  126. rkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtp
  127. Z3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE
  128. `,
  129. SecretAccessKey: `
  130. wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
  131. `,
  132. AccessKeyId: "AKIAIOSFODNN7EXAMPLE",
  133. Expiration: exp,
  134. })
  135. }