github.com/smugmug/godynamo@v0.0.0-20151122084750-7913028f6623/endpoints/batch_write_item/batch_write_item_test.go (about) 1 package batch_write_item 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/smugmug/godynamo/types/attributevalue" 7 "github.com/smugmug/godynamo/types/item" 8 "testing" 9 ) 10 11 func TestNil(t *testing.T) { 12 b := NewBatchWriteItem() 13 _,_,err := b.DoBatchWriteWithConf(nil) 14 if err == nil { 15 t.Errorf("nil conf should result in error") 16 } 17 } 18 19 func TestRequestUnmarshal(t *testing.T) { 20 s := []string{ 21 `{"RequestItems":{"Forum":[{"PutRequest":{"Item":{"Name":{"S":"AmazonDynamoDB"},"Category":{"S":"AmazonWebServices"}}}},{"PutRequest":{"Item":{"Name":{"S":"AmazonRDS"},"Category":{"S":"AmazonWebServices"}}}},{"PutRequest":{"Item":{"Name":{"S":"AmazonRedshift"},"Category":{"S":"AmazonWebServices"}}}},{"PutRequest":{"Item":{"Name":{"S":"AmazonElastiCache"},"Category":{"S":"AmazonWebServices"}}}}]},"ReturnConsumedCapacity":"TOTAL"}`, 22 } 23 for _, v := range s { 24 b := NewBatchWriteItem() 25 um_err := json.Unmarshal([]byte(v), b) 26 if um_err != nil { 27 e := fmt.Sprintf("unmarshal BatchWriteItem: %v", um_err) 28 t.Errorf(e) 29 } 30 _, jerr := json.Marshal(*b) 31 if jerr != nil { 32 t.Errorf("cannot marshal\n") 33 } 34 } 35 } 36 37 func TestResponseUnmarshal(t *testing.T) { 38 s := []string{ 39 `{"UnprocessedItems":{"Forum":[{"PutRequest":{"Item":{"Name":{"S":"AmazonElastiCache"},"Category":{"S":"AmazonWebServices"}}}}]},"ConsumedCapacity":[{"TableName":"Forum","CapacityUnits":3}]}`, 40 } 41 for _, v := range s { 42 var b Response 43 um_err := json.Unmarshal([]byte(v), &b) 44 if um_err != nil { 45 e := fmt.Sprintf("unmarshal BatchWriteItem: %v", um_err) 46 t.Errorf(e) 47 } 48 _, jerr := json.Marshal(b) 49 if jerr != nil { 50 t.Errorf("cannot marshal\n") 51 } 52 } 53 } 54 55 func TestUnprocessed(t *testing.T) { 56 resp := `{ 57 "UnprocessedItems": { 58 "Forum": [ 59 { 60 "PutRequest": { 61 "Item": { 62 "Name": { 63 "S": "Amazon ElastiCache" 64 }, 65 "Category": { 66 "S": "Amazon Web Services" 67 } 68 } 69 } 70 } 71 ] 72 }, 73 "ConsumedCapacity": [ 74 { 75 "TableName": "Forum", 76 "CapacityUnits": 3 77 } 78 ] 79 }` 80 req := `{ 81 "RequestItems": { 82 "Forum": [ 83 { 84 "PutRequest": { 85 "Item": { 86 "Name": { 87 "S": "Amazon DynamoDB" 88 }, 89 "Category": { 90 "S": "Amazon Web Services" 91 } 92 } 93 } 94 }, 95 { 96 "PutRequest": { 97 "Item": { 98 "Name": { 99 "S": "Amazon RDS" 100 }, 101 "Category": { 102 "S": "Amazon Web Services" 103 } 104 } 105 } 106 }, 107 { 108 "PutRequest": { 109 "Item": { 110 "Name": { 111 "S": "Amazon Redshift" 112 }, 113 "Category": { 114 "S": "Amazon Web Services" 115 } 116 } 117 } 118 }, 119 { 120 "PutRequest": { 121 "Item": { 122 "Name": { 123 "S": "Amazon ElastiCache" 124 }, 125 "Category": { 126 "S": "Amazon Web Services" 127 } 128 } 129 } 130 } 131 ] 132 }, 133 "ReturnConsumedCapacity": "TOTAL" 134 }` 135 var r_resp Response 136 um_err := json.Unmarshal([]byte(resp), &r_resp) 137 if um_err != nil { 138 e := fmt.Sprintf("unmarshal BatchWriteItem: %v", um_err) 139 t.Errorf(e) 140 } 141 _, jerr := json.Marshal(r_resp) 142 if jerr != nil { 143 t.Errorf("cannot marshal\n") 144 } 145 var r_req BatchWriteItem 146 um_err = json.Unmarshal([]byte(req), &r_req) 147 if um_err != nil { 148 e := fmt.Sprintf("unmarshal BatchWriteItem: %v", um_err) 149 t.Errorf(e) 150 } 151 _, jerr2 := json.Marshal(r_req) 152 if jerr2 != nil { 153 t.Errorf("cannot marshal\n") 154 } 155 n_req, n_req_err := unprocessedItems2BatchWriteItems(&r_req, &r_resp) 156 if n_req_err != nil { 157 e := fmt.Sprintf("cannot make new batchwrite:%v", n_req_err) 158 t.Errorf(e) 159 } 160 n_json, n_jerr := json.Marshal(*n_req) 161 if n_jerr != nil { 162 t.Errorf("cannot marshal\n") 163 } 164 _ = fmt.Sprintf("NEW:%s\n", string(n_json)) 165 } 166 167 func TestSplit1(t *testing.T) { 168 b := NewBatchWriteItem() 169 b.RequestItems["foo"] = make([]RequestInstance, 0) 170 for i := 0; i < 100; i++ { 171 var p PutRequest 172 p.Item = make(item.Item) 173 k := fmt.Sprintf("TheKey%d", i) 174 v := fmt.Sprintf("TheVal%d", i) 175 p.Item["Key"] = &attributevalue.AttributeValue{S: k} 176 p.Item["Val"] = &attributevalue.AttributeValue{S: v} 177 b.RequestItems["foo"] = append(b.RequestItems["foo"], RequestInstance{PutRequest: &p}) 178 } 179 bs, _ := Split(b) 180 if len(bs) != 4 { 181 e := fmt.Sprintf("len should be 4, it is %d\n", len(bs)) 182 t.Errorf(e) 183 } 184 i := 0 185 for _, bsi := range bs { 186 for _, ris := range bsi.RequestItems { 187 if len(ris) != 25 { 188 t.Errorf("requests len should be 25, it is not") 189 190 } 191 } 192 i++ 193 } 194 } 195 196 func TestSplit2(t *testing.T) { 197 b := NewBatchWriteItem() 198 b.RequestItems["foo"] = make([]RequestInstance, 0) 199 for i := 0; i < 23; i++ { 200 var p PutRequest 201 p.Item = make(item.Item) 202 k := fmt.Sprintf("TheKey%d", i) 203 v := fmt.Sprintf("TheVal%d", i) 204 p.Item["Key"] = &attributevalue.AttributeValue{S: k} 205 p.Item["Val"] = &attributevalue.AttributeValue{S: v} 206 b.RequestItems["foo"] = append(b.RequestItems["foo"], RequestInstance{PutRequest: &p}) 207 } 208 bs, _ := Split(b) 209 if len(bs) != 1 { 210 t.Errorf("list should have been split in 4, it is not") 211 } 212 i := 0 213 for _, bsi := range bs { 214 for _, ris := range bsi.RequestItems { 215 if len(ris) != 23 { 216 t.Errorf("requests len should be 25, it is not") 217 } 218 } 219 i++ 220 } 221 }