github.com/smugmug/godynamo@v0.0.0-20151122084750-7913028f6623/endpoints/batch_get_item/batch_get_item_test.go (about) 1 // Tests JSON formats as described on the AWS docs site. For live tests, see ../../tests 2 package batch_get_item 3 4 import ( 5 "encoding/json" 6 "fmt" 7 "github.com/smugmug/godynamo/types/attributevalue" 8 "github.com/smugmug/godynamo/types/item" 9 "testing" 10 ) 11 12 func TestNil(t *testing.T) { 13 b := NewBatchGetItem() 14 _,_,err := b.DoBatchGetWithConf(nil) 15 if err == nil { 16 t.Errorf("nil conf should result in error") 17 } 18 } 19 20 func TestRequestUnmarshal(t *testing.T) { 21 s := []string{`{"RequestItems":{"Forum":{"Keys":[{"Name":{"S":"AmazonDynamoDB"}},{"Name":{"S":"AmazonRDS"}},{"Name":{"S":"AmazonRedshift"}}],"AttributesToGet":["Name","Threads","Messages","Views"]},"Thread":{"Keys":[{"ForumName":{"S":"AmazonDynamoDB"}},{"Subject":{"S":"Concurrentreads"}}],"AttributesToGet":["Tags","Message"]}},"ReturnConsumedCapacity":"TOTAL"}`} 22 for _, v := range s { 23 b := NewBatchGetItem() 24 um_err := json.Unmarshal([]byte(v), b) 25 if um_err != nil { 26 e := fmt.Sprintf("unmarshal BatchGetItem: %v", um_err) 27 t.Errorf(e) 28 } 29 _, jerr := json.Marshal(*b) 30 if jerr != nil { 31 t.Errorf("cannot marshal\n") 32 } 33 } 34 } 35 36 func TestResponseUnmarshal(t *testing.T) { 37 s := []string{`{"Responses":{"Forum":[{"Name":{"S":"AmazonDynamoDB"},"Threads":{"N":"5"},"Messages":{"N":"19"},"Views":{"N":"35"}},{"Name":{"S":"AmazonRDS"},"Threads":{"N":"8"},"Messages":{"N":"32"},"Views":{"N":"38"}},{"Name":{"S":"AmazonRedshift"},"Threads":{"N":"12"},"Messages":{"N":"55"},"Views":{"N":"47"}}],"Thread":[{"Tags":{"SS":["Reads","MultipleUsers"]},"Message":{"S":"Howmanyuserscanreadasingledataitematatime?Arethereanylimits?"}}]},"UnprocessedKeys":{"Forum":{"Keys":[{"Name":{"S":"AmazonDynamoDB"}},{"Name":{"S":"AmazonRDS"}},{"Name":{"S":"AmazonRedshift"}}],"AttributesToGet":["Name","Threads","Messages","Views"]}},"ConsumedCapacity":[{"TableName":"Forum","CapacityUnits":3},{"TableName":"Thread","CapacityUnits":1}]}`, 38 `{"Responses":{"Forum":[{"Name":{"S":"AmazonDynamoDB"},"Threads":{"N":"5"},"Messages":{"N":"19"},"Views":{"N":"35"}},{"Name":{"S":"AmazonRDS"},"Threads":{"N":"8"},"Messages":{"N":"32"},"Views":{"N":"38"}},{"Name":{"S":"AmazonRedshift"},"Threads":{"N":"12"},"Messages":{"N":"55"},"Views":{"N":"47"}}],"Thread":[{"Tags":{"SS":["Reads","MultipleUsers"]},"Message":{"S":"Howmanyuserscanreadasingledataitematatime?Arethereanylimits?"}}]},"UnprocessedKeys":{"Forum":{"Keys":[{"Name":{"S":"AmazonDynamoDB"}},{"Name":{"S":"AmazonRDS"}},{"Name":{"S":"AmazonRedshift"}}],"AttributesToGet":["Name","Threads","Messages","Views"],"ConsumedCapacity":[]}}}`, 39 } 40 for _, v := range s { 41 b := NewResponse() 42 um_err := json.Unmarshal([]byte(v), b) 43 if um_err != nil { 44 e := fmt.Sprintf("unmarshal BatchGetItem: %v", um_err) 45 t.Errorf(e) 46 } 47 j, jerr := json.Marshal(b) 48 if jerr != nil { 49 t.Errorf("cannot marshal\n") 50 } 51 _ = fmt.Sprintf("OUT:%s\n", string(j)) 52 c, cerr := b.ToResponseItemsJSON() 53 if cerr != nil { 54 e := fmt.Sprintf("%v", cerr) 55 t.Errorf(e) 56 } 57 j2, jerr2 := json.Marshal(c) 58 if jerr2 != nil { 59 t.Errorf("cannot marshal\n") 60 } 61 _ = fmt.Sprintf("JSON:%s\n", string(j2)) 62 63 } 64 } 65 66 func TestUnprocessedToBatchGet(t *testing.T) { 67 s := []string{`{"Responses":{"Forum":[{"Name":{"S":"AmazonDynamoDB"},"Threads":{"N":"5"},"Messages":{"N":"19"},"Views":{"N":"35"}},{"Name":{"S":"AmazonRDS"},"Threads":{"N":"8"},"Messages":{"N":"32"},"Views":{"N":"38"}},{"Name":{"S":"AmazonRedshift"},"Threads":{"N":"12"},"Messages":{"N":"55"},"Views":{"N":"47"}}],"Thread":[{"Tags":{"SS":["Reads","MultipleUsers"]},"Message":{"S":"Howmanyuserscanreadasingledataitematatime?Arethereanylimits?"}}]},"UnprocessedKeys":{"Forum":{"Keys":[{"Name":{"S":"AmazonDynamoDB"}},{"Name":{"S":"AmazonRDS"}},{"Name":{"S":"AmazonRedshift"}}],"AttributesToGet":["Name","Threads","Messages","Views"]}},"ConsumedCapacity":[{"TableName":"Forum","CapacityUnits":3},{"TableName":"Thread","CapacityUnits":1}]}`} 68 for _, v := range s { 69 bg := NewBatchGetItem() 70 r := NewResponse() 71 um_err := json.Unmarshal([]byte(v), r) 72 if um_err != nil { 73 e := fmt.Sprintf("unmarshal BatchGetItem: %v", um_err) 74 t.Errorf(e) 75 } 76 nbg, _ := unprocessedKeys2BatchGetItems(bg, r) 77 json, jerr := json.Marshal(*nbg) 78 if jerr != nil { 79 t.Errorf("cannot marshal\n") 80 } 81 _ = fmt.Sprintf("%s\n", string(json)) 82 } 83 } 84 85 func TestSplit1(t *testing.T) { 86 b := NewBatchGetItem() 87 b.RequestItems["foo"] = NewRequestInstance() 88 for i := 0; i < 400; i++ { 89 key := make(item.Item) 90 k := fmt.Sprintf("TheKey%d", i) 91 key["KeyName"] = &attributevalue.AttributeValue{S: k} 92 b.RequestItems["foo"].Keys = append(b.RequestItems["foo"].Keys, key) 93 } 94 bs, _ := Split(b) 95 if len(bs) != 4 { 96 e := fmt.Sprintf("len should be 4, it is %d\n", len(bs)) 97 t.Errorf(e) 98 } 99 i := 0 100 for _, bsi := range bs { 101 json, _ := json.Marshal(bsi) 102 _ = fmt.Sprintf("\n\n%s\n\n", string(json)) 103 i++ 104 } 105 }