summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/goamz/goamz/dynamodb/marshaller_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/goamz/goamz/dynamodb/marshaller_test.go')
-rw-r--r--vendor/github.com/goamz/goamz/dynamodb/marshaller_test.go283
1 files changed, 283 insertions, 0 deletions
diff --git a/vendor/github.com/goamz/goamz/dynamodb/marshaller_test.go b/vendor/github.com/goamz/goamz/dynamodb/marshaller_test.go
new file mode 100644
index 000000000..8b9d2fc08
--- /dev/null
+++ b/vendor/github.com/goamz/goamz/dynamodb/marshaller_test.go
@@ -0,0 +1,283 @@
+package dynamodb_test
+
+import (
+ "time"
+
+ "github.com/goamz/goamz/dynamodb"
+ . "gopkg.in/check.v1"
+)
+
+type TestSubStruct struct {
+ SubBool bool
+ SubInt int
+ SubString string
+ SubStringArray []string
+}
+
+type TestStruct struct {
+ TestBool bool
+ TestInt int
+ TestInt32 int32
+ TestInt64 int64
+ TestUint uint
+ TestFloat32 float32
+ TestFloat64 float64
+ TestString string
+ TestByteArray []byte
+ TestStringArray []string
+ TestIntArray []int
+ TestInt8Array []int8
+ TestFloatArray []float64
+ TestSub TestSubStruct
+}
+
+type TestStructTime struct {
+ TestTime time.Time
+}
+
+func testObject() *TestStruct {
+ return &TestStruct{
+ TestBool: true,
+ TestInt: -99,
+ TestInt32: 999,
+ TestInt64: 9999,
+ TestUint: 99,
+ TestFloat32: 9.9999,
+ TestFloat64: 99.999999,
+ TestString: "test",
+ TestByteArray: []byte("bytes"),
+ TestStringArray: []string{"test1", "test2", "test3", "test4"},
+ TestIntArray: []int{0, 1, 12, 123, 1234, 12345},
+ TestInt8Array: []int8{0, 1, 12, 123},
+ TestFloatArray: []float64{0.1, 1.1, 1.2, 1.23, 1.234, 1.2345},
+ TestSub: TestSubStruct{
+ SubBool: true,
+ SubInt: 2,
+ SubString: "subtest",
+ SubStringArray: []string{"sub1", "sub2", "sub3"},
+ },
+ }
+}
+
+func testObjectTime() *TestStructTime {
+ t, _ := time.Parse("Jan 2, 2006 at 3:04pm", "Mar 3, 2003 at 5:03pm")
+ return &TestStructTime{
+ TestTime: t,
+ }
+}
+
+func testObjectWithZeroValues() *TestStruct {
+ return &TestStruct{}
+}
+
+func testObjectWithNilSets() *TestStruct {
+ return &TestStruct{
+ TestBool: true,
+ TestInt: -99,
+ TestInt32: 999,
+ TestInt64: 9999,
+ TestUint: 99,
+ TestFloat32: 9.9999,
+ TestFloat64: 99.999999,
+ TestString: "test",
+ TestByteArray: []byte("bytes"),
+ TestStringArray: []string(nil),
+ TestIntArray: []int(nil),
+ TestFloatArray: []float64(nil),
+ TestSub: TestSubStruct{
+ SubBool: true,
+ SubInt: 2,
+ SubString: "subtest",
+ SubStringArray: []string{"sub1", "sub2", "sub3"},
+ },
+ }
+}
+func testObjectWithEmptySets() *TestStruct {
+ return &TestStruct{
+ TestBool: true,
+ TestInt: -99,
+ TestInt32: 999,
+ TestInt64: 9999,
+ TestUint: 99,
+ TestFloat32: 9.9999,
+ TestFloat64: 99.999999,
+ TestString: "test",
+ TestByteArray: []byte("bytes"),
+ TestStringArray: []string{},
+ TestIntArray: []int{},
+ TestFloatArray: []float64{},
+ TestSub: TestSubStruct{
+ SubBool: true,
+ SubInt: 2,
+ SubString: "subtest",
+ SubStringArray: []string{"sub1", "sub2", "sub3"},
+ },
+ }
+}
+
+func testAttrs() []dynamodb.Attribute {
+ return []dynamodb.Attribute{
+ dynamodb.Attribute{Type: "N", Name: "TestBool", Value: "1", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestInt", Value: "-99", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestInt32", Value: "999", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestInt64", Value: "9999", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestUint", Value: "99", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestFloat32", Value: "9.9999", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestFloat64", Value: "99.999999", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "S", Name: "TestString", Value: "test", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "S", Name: "TestByteArray", Value: "Ynl0ZXM=", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "SS", Name: "TestStringArray", Value: "", SetValues: []string{"test1", "test2", "test3", "test4"}},
+ dynamodb.Attribute{Type: "NS", Name: "TestIntArray", Value: "", SetValues: []string{"0", "1", "12", "123", "1234", "12345"}},
+ dynamodb.Attribute{Type: "NS", Name: "TestInt8Array", Value: "", SetValues: []string{"0", "1", "12", "123"}},
+ dynamodb.Attribute{Type: "NS", Name: "TestFloatArray", Value: "", SetValues: []string{"0.1", "1.1", "1.2", "1.23", "1.234", "1.2345"}},
+ dynamodb.Attribute{Type: "S", Name: "TestSub", Value: `{"SubBool":true,"SubInt":2,"SubString":"subtest","SubStringArray":["sub1","sub2","sub3"]}`, SetValues: []string(nil)},
+ }
+}
+
+func testAttrsTime() []dynamodb.Attribute {
+ return []dynamodb.Attribute{
+ dynamodb.Attribute{Type: "S", Name: "TestTime", Value: "\"2003-03-03T17:03:00Z\"", SetValues: []string(nil)},
+ }
+}
+
+func testAttrsWithZeroValues() []dynamodb.Attribute {
+ return []dynamodb.Attribute{
+ dynamodb.Attribute{Type: "N", Name: "TestBool", Value: "0", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestInt", Value: "0", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestInt32", Value: "0", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestInt64", Value: "0", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestUint", Value: "0", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestFloat32", Value: "0", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestFloat64", Value: "0", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "S", Name: "TestSub", Value: `{"SubBool":false,"SubInt":0,"SubString":"","SubStringArray":null}`, SetValues: []string(nil)},
+ }
+}
+
+func testAttrsWithNilSets() []dynamodb.Attribute {
+ return []dynamodb.Attribute{
+ dynamodb.Attribute{Type: "N", Name: "TestBool", Value: "1", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestInt", Value: "-99", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestInt32", Value: "999", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestInt64", Value: "9999", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestUint", Value: "99", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestFloat32", Value: "9.9999", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "N", Name: "TestFloat64", Value: "99.999999", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "S", Name: "TestString", Value: "test", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "S", Name: "TestByteArray", Value: "Ynl0ZXM=", SetValues: []string(nil)},
+ dynamodb.Attribute{Type: "S", Name: "TestSub", Value: `{"SubBool":true,"SubInt":2,"SubString":"subtest","SubStringArray":["sub1","sub2","sub3"]}`, SetValues: []string(nil)},
+ }
+}
+
+type MarshallerSuite struct {
+}
+
+var _ = Suite(&MarshallerSuite{})
+
+func (s *MarshallerSuite) TestMarshal(c *C) {
+ testObj := testObject()
+ attrs, err := dynamodb.MarshalAttributes(testObj)
+ if err != nil {
+ c.Errorf("Error from dynamodb.MarshalAttributes: %#v", err)
+ }
+
+ expected := testAttrs()
+ c.Check(attrs, DeepEquals, expected)
+}
+
+func (s *MarshallerSuite) TestUnmarshal(c *C) {
+ testObj := &TestStruct{}
+
+ attrMap := map[string]*dynamodb.Attribute{}
+ attrs := testAttrs()
+ for i, _ := range attrs {
+ attrMap[attrs[i].Name] = &attrs[i]
+ }
+
+ err := dynamodb.UnmarshalAttributes(&attrMap, testObj)
+ if err != nil {
+ c.Fatalf("Error from dynamodb.UnmarshalAttributes: %#v (Built: %#v)", err, testObj)
+ }
+
+ expected := testObject()
+ c.Check(testObj, DeepEquals, expected)
+}
+
+func (s *MarshallerSuite) TestMarshalTime(c *C) {
+ testObj := testObjectTime()
+ attrs, err := dynamodb.MarshalAttributes(testObj)
+ if err != nil {
+ c.Errorf("Error from dynamodb.MarshalAttributes: %#v", err)
+ }
+
+ expected := testAttrsTime()
+ c.Check(attrs, DeepEquals, expected)
+}
+
+func (s *MarshallerSuite) TestUnmarshalTime(c *C) {
+ testObj := &TestStructTime{}
+
+ attrMap := map[string]*dynamodb.Attribute{}
+ attrs := testAttrsTime()
+ for i, _ := range attrs {
+ attrMap[attrs[i].Name] = &attrs[i]
+ }
+
+ err := dynamodb.UnmarshalAttributes(&attrMap, testObj)
+ if err != nil {
+ c.Fatalf("Error from dynamodb.UnmarshalAttributes: %#v (Built: %#v)", err, testObj)
+ }
+
+ expected := testObjectTime()
+ c.Check(testObj, DeepEquals, expected)
+}
+
+func (s *MarshallerSuite) TestMarshalNilSets(c *C) {
+ testObj := testObjectWithNilSets()
+ attrs, err := dynamodb.MarshalAttributes(testObj)
+ if err != nil {
+ c.Errorf("Error from dynamodb.MarshalAttributes: %#v", err)
+ }
+
+ expected := testAttrsWithNilSets()
+ c.Check(attrs, DeepEquals, expected)
+}
+
+func (s *MarshallerSuite) TestMarshalZeroValues(c *C) {
+ testObj := testObjectWithZeroValues()
+ attrs, err := dynamodb.MarshalAttributes(testObj)
+ if err != nil {
+ c.Errorf("Error from dynamodb.MarshalAttributes: %#v", err)
+ }
+
+ expected := testAttrsWithZeroValues()
+ c.Check(attrs, DeepEquals, expected)
+}
+
+func (s *MarshallerSuite) TestMarshalEmptySets(c *C) {
+ testObj := testObjectWithEmptySets()
+ attrs, err := dynamodb.MarshalAttributes(testObj)
+ if err != nil {
+ c.Errorf("Error from dynamodb.MarshalAttributes: %#v", err)
+ }
+
+ expected := testAttrsWithNilSets()
+ c.Check(attrs, DeepEquals, expected)
+}
+
+func (s *MarshallerSuite) TestUnmarshalEmptySets(c *C) {
+ testObj := &TestStruct{}
+
+ attrMap := map[string]*dynamodb.Attribute{}
+ attrs := testAttrsWithNilSets()
+ for i, _ := range attrs {
+ attrMap[attrs[i].Name] = &attrs[i]
+ }
+
+ err := dynamodb.UnmarshalAttributes(&attrMap, testObj)
+ if err != nil {
+ c.Fatalf("Error from dynamodb.UnmarshalAttributes: %#v (Built: %#v)", err, testObj)
+ }
+
+ expected := testObjectWithNilSets()
+ c.Check(testObj, DeepEquals, expected)
+}