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  }