func TestMain(m *testing.M) { db = dynamodb.New(unit.Session, &aws.Config{ MaxRetries: aws.Int(2), }) db.Handlers.Send.Clear() // mock sending os.Exit(m.Run()) }
// Use DynamoDB methods for simplicity func TestPaginationEachPage(t *testing.T) { db := dynamodb.New(unit.Session) tokens, pages, numPages, gotToEnd := []string{}, []string{}, 0, false reqNum := 0 resps := []*dynamodb.ListTablesOutput{ {TableNames: []*string{aws.String("Table1"), aws.String("Table2")}, LastEvaluatedTableName: aws.String("Table2")}, {TableNames: []*string{aws.String("Table3"), aws.String("Table4")}, LastEvaluatedTableName: aws.String("Table4")}, {TableNames: []*string{aws.String("Table5")}}, } db.Handlers.Send.Clear() // mock sending db.Handlers.Unmarshal.Clear() db.Handlers.UnmarshalMeta.Clear() db.Handlers.ValidateResponse.Clear() db.Handlers.Build.PushBack(func(r *request.Request) { in := r.Params.(*dynamodb.ListTablesInput) if in == nil { tokens = append(tokens, "") } else if in.ExclusiveStartTableName != nil { tokens = append(tokens, *in.ExclusiveStartTableName) } }) db.Handlers.Unmarshal.PushBack(func(r *request.Request) { r.Data = resps[reqNum] reqNum++ }) params := &dynamodb.ListTablesInput{Limit: aws.Int64(2)} req, _ := db.ListTablesRequest(params) err := req.EachPage(func(p interface{}, last bool) bool { numPages++ for _, t := range p.(*dynamodb.ListTablesOutput).TableNames { pages = append(pages, *t) } if last { if gotToEnd { assert.Fail(t, "last=true happened twice") } gotToEnd = true } return true }) assert.Equal(t, []string{"Table2", "Table4"}, tokens) assert.Equal(t, []string{"Table1", "Table2", "Table3", "Table4", "Table5"}, pages) assert.Equal(t, 3, numPages) assert.True(t, gotToEnd) assert.Nil(t, err) }
func TestValidateCRC32DoesNotMatchNoComputeChecksum(t *testing.T) { svc := dynamodb.New(unit.Session, &aws.Config{ MaxRetries: aws.Int(2), DisableComputeChecksums: aws.Bool(true), }) svc.Handlers.Send.Clear() // mock sending req := mockCRCResponse(svc, 200, `{"TableNames":["A"]}`, "1234") assert.NoError(t, req.Error) assert.Equal(t, 0, int(req.RetryCount)) // CRC check disabled. Does not affect output parsing out := req.Data.(*dynamodb.ListTablesOutput) assert.Equal(t, "A", *out.TableNames[0]) }
func ExampleDynamoDB_DescribeTable() { svc := dynamodb.New(session.New()) params := &dynamodb.DescribeTableInput{ TableName: aws.String("TableName"), // Required } resp, err := svc.DescribeTable(params) if err != nil { // Print the error, cast err to awserr.Error to get the Code and // Message from an error. fmt.Println(err.Error()) return } // Pretty-print the response data. fmt.Println(resp) }
func ExampleDynamoDB_ListTables() { svc := dynamodb.New(session.New()) params := &dynamodb.ListTablesInput{ ExclusiveStartTableName: aws.String("TableName"), Limit: aws.Int64(1), } resp, err := svc.ListTables(params) if err != nil { // Print the error, cast err to awserr.Error to get the Code and // Message from an error. fmt.Println(err.Error()) return } // Pretty-print the response data. fmt.Println(resp) }
// Use DynamoDB methods for simplicity func TestPaginationEarlyExit(t *testing.T) { db := dynamodb.New(unit.Session) numPages, gotToEnd := 0, false reqNum := 0 resps := []*dynamodb.ListTablesOutput{ {TableNames: []*string{aws.String("Table1"), aws.String("Table2")}, LastEvaluatedTableName: aws.String("Table2")}, {TableNames: []*string{aws.String("Table3"), aws.String("Table4")}, LastEvaluatedTableName: aws.String("Table4")}, {TableNames: []*string{aws.String("Table5")}}, } db.Handlers.Send.Clear() // mock sending db.Handlers.Unmarshal.Clear() db.Handlers.UnmarshalMeta.Clear() db.Handlers.ValidateResponse.Clear() db.Handlers.Unmarshal.PushBack(func(r *request.Request) { r.Data = resps[reqNum] reqNum++ }) params := &dynamodb.ListTablesInput{Limit: aws.Int64(2)} err := db.ListTablesPages(params, func(p *dynamodb.ListTablesOutput, last bool) bool { numPages++ if numPages == 2 { return false } if last { if gotToEnd { assert.Fail(t, "last=true happened twice") } gotToEnd = true } return true }) assert.Equal(t, 2, numPages) assert.False(t, gotToEnd) assert.Nil(t, err) }
func TestCustomRetryRules(t *testing.T) { d := dynamodb.New(unit.Session, &aws.Config{MaxRetries: aws.Int(2)}) assert.Equal(t, d.MaxRetries(), 2) }
func TestDefaultRetryRules(t *testing.T) { d := dynamodb.New(unit.Session, &aws.Config{MaxRetries: aws.Int(-1)}) assert.Equal(t, d.MaxRetries(), 10) }
// Use DynamoDB methods for simplicity func TestPaginationQueryPage(t *testing.T) { db := dynamodb.New(unit.Session) tokens, pages, numPages, gotToEnd := []map[string]*dynamodb.AttributeValue{}, []map[string]*dynamodb.AttributeValue{}, 0, false reqNum := 0 resps := []*dynamodb.QueryOutput{ { LastEvaluatedKey: map[string]*dynamodb.AttributeValue{"key": {S: aws.String("key1")}}, Count: aws.Int64(1), Items: []map[string]*dynamodb.AttributeValue{ map[string]*dynamodb.AttributeValue{ "key": {S: aws.String("key1")}, }, }, }, { LastEvaluatedKey: map[string]*dynamodb.AttributeValue{"key": {S: aws.String("key2")}}, Count: aws.Int64(1), Items: []map[string]*dynamodb.AttributeValue{ map[string]*dynamodb.AttributeValue{ "key": {S: aws.String("key2")}, }, }, }, { LastEvaluatedKey: map[string]*dynamodb.AttributeValue{}, Count: aws.Int64(1), Items: []map[string]*dynamodb.AttributeValue{ map[string]*dynamodb.AttributeValue{ "key": {S: aws.String("key3")}, }, }, }, } db.Handlers.Send.Clear() // mock sending db.Handlers.Unmarshal.Clear() db.Handlers.UnmarshalMeta.Clear() db.Handlers.ValidateResponse.Clear() db.Handlers.Build.PushBack(func(r *request.Request) { in := r.Params.(*dynamodb.QueryInput) if in == nil { tokens = append(tokens, nil) } else if len(in.ExclusiveStartKey) != 0 { tokens = append(tokens, in.ExclusiveStartKey) } }) db.Handlers.Unmarshal.PushBack(func(r *request.Request) { r.Data = resps[reqNum] reqNum++ }) params := &dynamodb.QueryInput{ Limit: aws.Int64(2), TableName: aws.String("tablename"), } err := db.QueryPages(params, func(p *dynamodb.QueryOutput, last bool) bool { numPages++ for _, item := range p.Items { pages = append(pages, item) } if last { if gotToEnd { assert.Fail(t, "last=true happened twice") } gotToEnd = true } return true }) assert.Nil(t, err) assert.Equal(t, []map[string]*dynamodb.AttributeValue{ map[string]*dynamodb.AttributeValue{"key": {S: aws.String("key1")}}, map[string]*dynamodb.AttributeValue{"key": {S: aws.String("key2")}}, }, tokens) assert.Equal(t, []map[string]*dynamodb.AttributeValue{ map[string]*dynamodb.AttributeValue{"key": {S: aws.String("key1")}}, map[string]*dynamodb.AttributeValue{"key": {S: aws.String("key2")}}, map[string]*dynamodb.AttributeValue{"key": {S: aws.String("key3")}}, }, pages) assert.Equal(t, 3, numPages) assert.True(t, gotToEnd) assert.Nil(t, params.ExclusiveStartKey) }
func DynamoDB() *dynamodb.DynamoDB { return dynamodb.New(session.New(), awsConfig()) }
func (p *AWSProvider) dynamodb() *dynamodb.DynamoDB { return dynamodb.New(session.New(), p.config()) }
func ExampleDynamoDB_Scan() { svc := dynamodb.New(session.New()) params := &dynamodb.ScanInput{ TableName: aws.String("TableName"), // Required AttributesToGet: []*string{ aws.String("AttributeName"), // Required // More values... }, ConditionalOperator: aws.String("ConditionalOperator"), ConsistentRead: aws.Bool(true), ExclusiveStartKey: map[string]*dynamodb.AttributeValue{ "Key": { // Required B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, ExpressionAttributeNames: map[string]*string{ "Key": aws.String("AttributeName"), // Required // More values... }, ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{ "Key": { // Required B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, FilterExpression: aws.String("ConditionExpression"), IndexName: aws.String("IndexName"), Limit: aws.Int64(1), ProjectionExpression: aws.String("ProjectionExpression"), ReturnConsumedCapacity: aws.String("ReturnConsumedCapacity"), ScanFilter: map[string]*dynamodb.Condition{ "Key": { // Required ComparisonOperator: aws.String("ComparisonOperator"), // Required AttributeValueList: []*dynamodb.AttributeValue{ { // Required B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, }, // More values... }, Segment: aws.Int64(1), Select: aws.String("Select"), TotalSegments: aws.Int64(1), } resp, err := svc.Scan(params) if err != nil { // Print the error, cast err to awserr.Error to get the Code and // Message from an error. fmt.Println(err.Error()) return } // Pretty-print the response data. fmt.Println(resp) }
func ExampleDynamoDB_BatchWriteItem() { svc := dynamodb.New(session.New()) params := &dynamodb.BatchWriteItemInput{ RequestItems: map[string][]*dynamodb.WriteRequest{ // Required "Key": { // Required { // Required DeleteRequest: &dynamodb.DeleteRequest{ Key: map[string]*dynamodb.AttributeValue{ // Required "Key": { // Required B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, }, PutRequest: &dynamodb.PutRequest{ Item: map[string]*dynamodb.AttributeValue{ // Required "Key": { // Required B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, }, }, // More values... }, // More values... }, ReturnConsumedCapacity: aws.String("ReturnConsumedCapacity"), ReturnItemCollectionMetrics: aws.String("ReturnItemCollectionMetrics"), } resp, err := svc.BatchWriteItem(params) if err != nil { // Print the error, cast err to awserr.Error to get the Code and // Message from an error. fmt.Println(err.Error()) return } // Pretty-print the response data. fmt.Println(resp) }
func ExampleDynamoDB_PutItem() { svc := dynamodb.New(session.New()) params := &dynamodb.PutItemInput{ Item: map[string]*dynamodb.AttributeValue{ // Required "Key": { // Required B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, TableName: aws.String("TableName"), // Required ConditionExpression: aws.String("ConditionExpression"), ConditionalOperator: aws.String("ConditionalOperator"), Expected: map[string]*dynamodb.ExpectedAttributeValue{ "Key": { // Required AttributeValueList: []*dynamodb.AttributeValue{ { // Required B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, ComparisonOperator: aws.String("ComparisonOperator"), Exists: aws.Bool(true), Value: &dynamodb.AttributeValue{ B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, }, // More values... }, ExpressionAttributeNames: map[string]*string{ "Key": aws.String("AttributeName"), // Required // More values... }, ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{ "Key": { // Required B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, ReturnConsumedCapacity: aws.String("ReturnConsumedCapacity"), ReturnItemCollectionMetrics: aws.String("ReturnItemCollectionMetrics"), ReturnValues: aws.String("ReturnValue"), } resp, err := svc.PutItem(params) if err != nil { // Print the error, cast err to awserr.Error to get the Code and // Message from an error. fmt.Println(err.Error()) return } // Pretty-print the response data. fmt.Println(resp) }
func ExampleDynamoDB_GetItem() { svc := dynamodb.New(session.New()) params := &dynamodb.GetItemInput{ Key: map[string]*dynamodb.AttributeValue{ // Required "Key": { // Required B: []byte("PAYLOAD"), BOOL: aws.Bool(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ { // Required // Recursive values... }, // More values... }, M: map[string]*dynamodb.AttributeValue{ "Key": { // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Bool(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, TableName: aws.String("TableName"), // Required AttributesToGet: []*string{ aws.String("AttributeName"), // Required // More values... }, ConsistentRead: aws.Bool(true), ExpressionAttributeNames: map[string]*string{ "Key": aws.String("AttributeName"), // Required // More values... }, ProjectionExpression: aws.String("ProjectionExpression"), ReturnConsumedCapacity: aws.String("ReturnConsumedCapacity"), } resp, err := svc.GetItem(params) if err != nil { // Print the error, cast err to awserr.Error to get the Code and // Message from an error. fmt.Println(err.Error()) return } // Pretty-print the response data. fmt.Println(resp) }
{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, {TableNames: []*string{aws.String("TABLE")}}, } var benchDb = func() *dynamodb.DynamoDB { db := dynamodb.New(unit.Session) db.Handlers.Send.Clear() // mock sending db.Handlers.Unmarshal.Clear() db.Handlers.UnmarshalMeta.Clear() db.Handlers.ValidateResponse.Clear() return db } func BenchmarkCodegenIterator(b *testing.B) { reqNum := 0 db := benchDb() db.Handlers.Unmarshal.PushBack(func(r *request.Request) { r.Data = benchResps[reqNum] reqNum++ })
func DynamoDB() *dynamodb.DynamoDB { return dynamodb.New(awsConfig()) }
func ExampleDynamoDB_CreateTable() { svc := dynamodb.New(session.New()) params := &dynamodb.CreateTableInput{ AttributeDefinitions: []*dynamodb.AttributeDefinition{ // Required { // Required AttributeName: aws.String("KeySchemaAttributeName"), // Required AttributeType: aws.String("ScalarAttributeType"), // Required }, // More values... }, KeySchema: []*dynamodb.KeySchemaElement{ // Required { // Required AttributeName: aws.String("KeySchemaAttributeName"), // Required KeyType: aws.String("KeyType"), // Required }, // More values... }, ProvisionedThroughput: &dynamodb.ProvisionedThroughput{ // Required ReadCapacityUnits: aws.Int64(1), // Required WriteCapacityUnits: aws.Int64(1), // Required }, TableName: aws.String("TableName"), // Required GlobalSecondaryIndexes: []*dynamodb.GlobalSecondaryIndex{ { // Required IndexName: aws.String("IndexName"), // Required KeySchema: []*dynamodb.KeySchemaElement{ // Required { // Required AttributeName: aws.String("KeySchemaAttributeName"), // Required KeyType: aws.String("KeyType"), // Required }, // More values... }, Projection: &dynamodb.Projection{ // Required NonKeyAttributes: []*string{ aws.String("NonKeyAttributeName"), // Required // More values... }, ProjectionType: aws.String("ProjectionType"), }, ProvisionedThroughput: &dynamodb.ProvisionedThroughput{ // Required ReadCapacityUnits: aws.Int64(1), // Required WriteCapacityUnits: aws.Int64(1), // Required }, }, // More values... }, LocalSecondaryIndexes: []*dynamodb.LocalSecondaryIndex{ { // Required IndexName: aws.String("IndexName"), // Required KeySchema: []*dynamodb.KeySchemaElement{ // Required { // Required AttributeName: aws.String("KeySchemaAttributeName"), // Required KeyType: aws.String("KeyType"), // Required }, // More values... }, Projection: &dynamodb.Projection{ // Required NonKeyAttributes: []*string{ aws.String("NonKeyAttributeName"), // Required // More values... }, ProjectionType: aws.String("ProjectionType"), }, }, // More values... }, StreamSpecification: &dynamodb.StreamSpecification{ StreamEnabled: aws.Bool(true), StreamViewType: aws.String("StreamViewType"), }, } resp, err := svc.CreateTable(params) if err != nil { // Print the error, cast err to awserr.Error to get the Code and // Message from an error. fmt.Println(err.Error()) return } // Pretty-print the response data. fmt.Println(resp) }