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  }