summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/goamz/goamz/dynamodb/dynamodb_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/goamz/goamz/dynamodb/dynamodb_test.go')
-rwxr-xr-xvendor/github.com/goamz/goamz/dynamodb/dynamodb_test.go166
1 files changed, 166 insertions, 0 deletions
diff --git a/vendor/github.com/goamz/goamz/dynamodb/dynamodb_test.go b/vendor/github.com/goamz/goamz/dynamodb/dynamodb_test.go
new file mode 100755
index 000000000..63dd03da3
--- /dev/null
+++ b/vendor/github.com/goamz/goamz/dynamodb/dynamodb_test.go
@@ -0,0 +1,166 @@
+package dynamodb_test
+
+import (
+ "flag"
+ "testing"
+ "time"
+
+ "github.com/goamz/goamz/aws"
+ "github.com/goamz/goamz/dynamodb"
+ . "gopkg.in/check.v1"
+)
+
+const TIMEOUT = 3 * time.Minute
+
+var amazon = flag.Bool("amazon", false, "Enable tests against dynamodb")
+var local = flag.Bool("local", true, "Use DynamoDB local on 8080 instead of real server on us-east.")
+
+var dynamodb_region aws.Region
+var dynamodb_auth aws.Auth
+
+type DynamoDBTest struct {
+ server *dynamodb.Server
+ aws.Region // Exports Region
+ TableDescriptionT dynamodb.TableDescriptionT
+ table *dynamodb.Table
+}
+
+// Delete all items in the table
+func (s *DynamoDBTest) TearDownTest(c *C) {
+ pk, err := s.TableDescriptionT.BuildPrimaryKey()
+ if err != nil {
+ c.Fatal(err)
+ }
+
+ attrs, err := s.table.Scan(nil)
+ if err != nil {
+ c.Fatal(err)
+ }
+ for _, a := range attrs {
+ key := &dynamodb.Key{
+ HashKey: a[pk.KeyAttribute.Name].Value,
+ }
+ if pk.HasRange() {
+ key.RangeKey = a[pk.RangeAttribute.Name].Value
+ }
+ if ok, err := s.table.DeleteItem(key); !ok {
+ c.Fatal(err)
+ }
+ }
+}
+
+func (s *DynamoDBTest) TearDownSuite(c *C) {
+ // return immediately in the case of calling c.Skip() in SetUpSuite()
+ if s.server == nil {
+ return
+ }
+
+ // check whether the table exists
+ if tables, err := s.server.ListTables(); err != nil {
+ c.Fatal(err)
+ } else {
+ if !findTableByName(tables, s.TableDescriptionT.TableName) {
+ return
+ }
+ }
+
+ // Delete the table and wait
+ if _, err := s.server.DeleteTable(s.TableDescriptionT); err != nil {
+ c.Fatal(err)
+ }
+
+ done := make(chan bool)
+ timeout := time.After(TIMEOUT)
+ go func() {
+ for {
+ select {
+ case <-done:
+ return
+ default:
+ tables, err := s.server.ListTables()
+ if err != nil {
+ c.Fatal(err)
+ }
+ if findTableByName(tables, s.TableDescriptionT.TableName) {
+ time.Sleep(5 * time.Second)
+ } else {
+ done <- true
+ return
+ }
+ }
+ }
+ }()
+ select {
+ case <-done:
+ break
+ case <-timeout:
+ c.Error("Expect the table to be deleted but timed out")
+ close(done)
+ }
+}
+
+func (s *DynamoDBTest) WaitUntilStatus(c *C, status string) {
+ // We should wait until the table is in specified status because a real DynamoDB has some delay for ready
+ done := make(chan bool)
+ timeout := time.After(TIMEOUT)
+ go func() {
+ for {
+ select {
+ case <-done:
+ return
+ default:
+ desc, err := s.table.DescribeTable()
+ if err != nil {
+ c.Fatal(err)
+ }
+ if desc.TableStatus == status {
+ done <- true
+ return
+ }
+ time.Sleep(5 * time.Second)
+ }
+ }
+ }()
+ select {
+ case <-done:
+ break
+ case <-timeout:
+ c.Errorf("Expect a status to be %s, but timed out", status)
+ close(done)
+ }
+}
+
+func setUpAuth(c *C) {
+ if !*amazon {
+ c.Skip("Test against amazon not enabled.")
+ }
+ if *local {
+ c.Log("Using local server")
+ dynamodb_region = aws.Region{
+ DynamoDBEndpoint: "http://127.0.0.1:8000",
+ DynamoDBStreamsEndpoint: "http://127.0.0.1:8000",
+ }
+ dynamodb_auth = aws.Auth{AccessKey: "DUMMY_KEY", SecretKey: "DUMMY_SECRET"}
+ } else {
+ c.Log("Using REAL AMAZON SERVER")
+ dynamodb_region = aws.USEast
+ auth, err := aws.EnvAuth()
+ if err != nil {
+ c.Fatal(err)
+ }
+ dynamodb_auth = auth
+ }
+}
+
+func findTableByName(tables []string, name string) bool {
+ for _, t := range tables {
+ if t == name {
+ return true
+ }
+ }
+ return false
+}
+
+func Test(t *testing.T) {
+ TestingT(t)
+}