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.
 
 
 

220 lines
7.2 KiB

  1. package sdb_test
  2. import (
  3. "testing"
  4. "github.com/goamz/goamz/aws"
  5. "github.com/goamz/goamz/exp/sdb"
  6. "github.com/goamz/goamz/testutil"
  7. . "gopkg.in/check.v1"
  8. )
  9. func Test(t *testing.T) {
  10. TestingT(t)
  11. }
  12. var _ = Suite(&S{})
  13. type S struct {
  14. sdb *sdb.SDB
  15. }
  16. var testServer = testutil.NewHTTPServer()
  17. func (s *S) SetUpSuite(c *C) {
  18. testServer.Start()
  19. auth := aws.Auth{AccessKey: "abc", SecretKey: "123"}
  20. s.sdb = sdb.New(auth, aws.Region{SDBEndpoint: testServer.URL})
  21. }
  22. func (s *S) TearDownTest(c *C) {
  23. testServer.Flush()
  24. }
  25. func (s *S) TestCreateDomainOK(c *C) {
  26. testServer.Response(200, nil, TestCreateDomainXmlOK)
  27. domain := s.sdb.Domain("domain")
  28. resp, err := domain.CreateDomain()
  29. req := testServer.WaitRequest()
  30. c.Assert(req.Method, Equals, "GET")
  31. c.Assert(req.URL.Path, Equals, "/")
  32. c.Assert(req.Header["Date"], Not(Equals), "")
  33. c.Assert(resp.ResponseMetadata.RequestId, Equals, "63264005-7a5f-e01a-a224-395c63b89f6d")
  34. c.Assert(resp.ResponseMetadata.BoxUsage, Equals, 0.0055590279)
  35. c.Assert(err, IsNil)
  36. }
  37. func (s *S) TestListDomainsOK(c *C) {
  38. testServer.Response(200, nil, TestListDomainsXmlOK)
  39. resp, err := s.sdb.ListDomains()
  40. req := testServer.WaitRequest()
  41. c.Assert(req.Method, Equals, "GET")
  42. c.Assert(req.URL.Path, Equals, "/")
  43. c.Assert(req.Header["Date"], Not(Equals), "")
  44. c.Assert(resp.ResponseMetadata.RequestId, Equals, "15fcaf55-9914-63c2-21f3-951e31193790")
  45. c.Assert(resp.ResponseMetadata.BoxUsage, Equals, 0.0000071759)
  46. c.Assert(resp.Domains, DeepEquals, []string{"Account", "Domain", "Record"})
  47. c.Assert(err, IsNil)
  48. }
  49. func (s *S) TestListDomainsWithNextTokenXmlOK(c *C) {
  50. testServer.Response(200, nil, TestListDomainsWithNextTokenXmlOK)
  51. resp, err := s.sdb.ListDomains()
  52. req := testServer.WaitRequest()
  53. c.Assert(req.Method, Equals, "GET")
  54. c.Assert(req.URL.Path, Equals, "/")
  55. c.Assert(req.Header["Date"], Not(Equals), "")
  56. c.Assert(resp.ResponseMetadata.RequestId, Equals, "eb13162f-1b95-4511-8b12-489b86acfd28")
  57. c.Assert(resp.ResponseMetadata.BoxUsage, Equals, 0.0000219907)
  58. c.Assert(resp.Domains, DeepEquals, []string{"Domain1-200706011651", "Domain2-200706011652"})
  59. c.Assert(resp.NextToken, Equals, "TWV0ZXJpbmdUZXN0RG9tYWluMS0yMDA3MDYwMTE2NTY=")
  60. c.Assert(err, IsNil)
  61. }
  62. func (s *S) TestDeleteDomainOK(c *C) {
  63. testServer.Response(200, nil, TestDeleteDomainXmlOK)
  64. domain := s.sdb.Domain("domain")
  65. resp, err := domain.DeleteDomain()
  66. req := testServer.WaitRequest()
  67. c.Assert(req.Method, Equals, "GET")
  68. c.Assert(req.URL.Path, Equals, "/")
  69. c.Assert(req.Header["Date"], Not(Equals), "")
  70. c.Assert(resp.ResponseMetadata.RequestId, Equals, "039e1e25-9a64-2a74-93da-2fda36122a97")
  71. c.Assert(resp.ResponseMetadata.BoxUsage, Equals, 0.0055590278)
  72. c.Assert(err, IsNil)
  73. }
  74. func (s *S) TestPutAttrsOK(c *C) {
  75. testServer.Response(200, nil, TestPutAttrsXmlOK)
  76. domain := s.sdb.Domain("MyDomain")
  77. item := domain.Item("Item123")
  78. putAttrs := new(sdb.PutAttrs)
  79. putAttrs.Add("FirstName", "john")
  80. putAttrs.Add("LastName", "smith")
  81. putAttrs.Replace("MiddleName", "jacob")
  82. putAttrs.IfValue("FirstName", "john")
  83. putAttrs.IfMissing("FirstName")
  84. resp, err := item.PutAttrs(putAttrs)
  85. req := testServer.WaitRequest()
  86. c.Assert(req.Method, Equals, "GET")
  87. c.Assert(req.URL.Path, Equals, "/")
  88. c.Assert(req.Form["Action"], DeepEquals, []string{"PutAttributes"})
  89. c.Assert(req.Form["ItemName"], DeepEquals, []string{"Item123"})
  90. c.Assert(req.Form["DomainName"], DeepEquals, []string{"MyDomain"})
  91. c.Assert(req.Form["Attribute.1.Name"], DeepEquals, []string{"FirstName"})
  92. c.Assert(req.Form["Attribute.1.Value"], DeepEquals, []string{"john"})
  93. c.Assert(req.Form["Attribute.2.Name"], DeepEquals, []string{"LastName"})
  94. c.Assert(req.Form["Attribute.2.Value"], DeepEquals, []string{"smith"})
  95. c.Assert(req.Form["Attribute.3.Name"], DeepEquals, []string{"MiddleName"})
  96. c.Assert(req.Form["Attribute.3.Value"], DeepEquals, []string{"jacob"})
  97. c.Assert(req.Form["Attribute.3.Replace"], DeepEquals, []string{"true"})
  98. c.Assert(req.Form["Expected.1.Name"], DeepEquals, []string{"FirstName"})
  99. c.Assert(req.Form["Expected.1.Value"], DeepEquals, []string{"john"})
  100. c.Assert(req.Form["Expected.1.Exists"], DeepEquals, []string{"false"})
  101. c.Assert(err, IsNil)
  102. c.Assert(resp.ResponseMetadata.RequestId, Equals, "490206ce-8292-456c-a00f-61b335eb202b")
  103. c.Assert(resp.ResponseMetadata.BoxUsage, Equals, 0.0000219907)
  104. }
  105. func (s *S) TestAttrsOK(c *C) {
  106. testServer.Response(200, nil, TestAttrsXmlOK)
  107. domain := s.sdb.Domain("MyDomain")
  108. item := domain.Item("Item123")
  109. resp, err := item.Attrs(nil, true)
  110. req := testServer.WaitRequest()
  111. c.Assert(req.Method, Equals, "GET")
  112. c.Assert(req.URL.Path, Equals, "/")
  113. c.Assert(req.Header["Date"], Not(Equals), "")
  114. c.Assert(req.Form["Action"], DeepEquals, []string{"GetAttributes"})
  115. c.Assert(req.Form["ItemName"], DeepEquals, []string{"Item123"})
  116. c.Assert(req.Form["DomainName"], DeepEquals, []string{"MyDomain"})
  117. c.Assert(req.Form["ConsistentRead"], DeepEquals, []string{"true"})
  118. c.Assert(resp.Attrs[0].Name, Equals, "Color")
  119. c.Assert(resp.Attrs[0].Value, Equals, "Blue")
  120. c.Assert(resp.Attrs[1].Name, Equals, "Size")
  121. c.Assert(resp.Attrs[1].Value, Equals, "Med")
  122. c.Assert(resp.ResponseMetadata.RequestId, Equals, "b1e8f1f7-42e9-494c-ad09-2674e557526d")
  123. c.Assert(resp.ResponseMetadata.BoxUsage, Equals, 0.0000219942)
  124. c.Assert(err, IsNil)
  125. }
  126. func (s *S) TestAttrsSelectOK(c *C) {
  127. testServer.Response(200, nil, TestAttrsXmlOK)
  128. domain := s.sdb.Domain("MyDomain")
  129. item := domain.Item("Item123")
  130. resp, err := item.Attrs([]string{"Color", "Size"}, true)
  131. req := testServer.WaitRequest()
  132. c.Assert(req.Method, Equals, "GET")
  133. c.Assert(req.URL.Path, Equals, "/")
  134. c.Assert(req.Header["Date"], Not(Equals), "")
  135. c.Assert(req.Form["Action"], DeepEquals, []string{"GetAttributes"})
  136. c.Assert(req.Form["ItemName"], DeepEquals, []string{"Item123"})
  137. c.Assert(req.Form["DomainName"], DeepEquals, []string{"MyDomain"})
  138. c.Assert(req.Form["ConsistentRead"], DeepEquals, []string{"true"})
  139. c.Assert(req.Form["AttributeName.1"], DeepEquals, []string{"Color"})
  140. c.Assert(req.Form["AttributeName.2"], DeepEquals, []string{"Size"})
  141. c.Assert(resp.Attrs[0].Name, Equals, "Color")
  142. c.Assert(resp.Attrs[0].Value, Equals, "Blue")
  143. c.Assert(resp.Attrs[1].Name, Equals, "Size")
  144. c.Assert(resp.Attrs[1].Value, Equals, "Med")
  145. c.Assert(resp.ResponseMetadata.RequestId, Equals, "b1e8f1f7-42e9-494c-ad09-2674e557526d")
  146. c.Assert(resp.ResponseMetadata.BoxUsage, Equals, 0.0000219942)
  147. c.Assert(err, IsNil)
  148. }
  149. func (s *S) TestSelectOK(c *C) {
  150. testServer.Response(200, nil, TestSelectXmlOK)
  151. resp, err := s.sdb.Select("select Color from MyDomain where Color like 'Blue%'", true)
  152. req := testServer.WaitRequest()
  153. c.Assert(req.Method, Equals, "GET")
  154. c.Assert(req.URL.Path, Equals, "/")
  155. c.Assert(req.Header["Date"], Not(Equals), "")
  156. c.Assert(req.Form["Action"], DeepEquals, []string{"Select"})
  157. c.Assert(req.Form["ConsistentRead"], DeepEquals, []string{"true"})
  158. c.Assert(resp.ResponseMetadata.RequestId, Equals, "b1e8f1f7-42e9-494c-ad09-2674e557526d")
  159. c.Assert(resp.ResponseMetadata.BoxUsage, Equals, 0.0000219907)
  160. c.Assert(len(resp.Items), Equals, 2)
  161. c.Assert(resp.Items[0].Name, Equals, "Item_03")
  162. c.Assert(resp.Items[1].Name, Equals, "Item_06")
  163. c.Assert(resp.Items[0].Attrs[0].Name, Equals, "Category")
  164. c.Assert(resp.Items[0].Attrs[0].Value, Equals, "Clothes")
  165. c.Assert(err, IsNil)
  166. }