From 61d5e2582935635e702664d67c1ebe1d817e2f99 Mon Sep 17 00:00:00 2001 From: iulianbudau Date: Thu, 10 Jul 2025 17:19:25 +0300 Subject: [PATCH] add overrideConfiguration to enhanced requests --- .../operations/BatchGetItemOperation.java | 1 + .../operations/BatchWriteItemOperation.java | 1 + .../operations/CreateTableOperation.java | 1 + .../operations/DeleteItemOperation.java | 18 +++ .../internal/operations/GetItemOperation.java | 1 + .../internal/operations/PutItemOperation.java | 18 +++ .../internal/operations/QueryOperation.java | 3 +- .../internal/operations/ScanOperation.java | 3 +- .../operations/TransactGetItemsOperation.java | 1 + .../TransactWriteItemsOperation.java | 1 + .../operations/UpdateItemOperation.java | 18 +++ .../model/BatchGetItemEnhancedRequest.java | 49 ++++++- .../model/BatchWriteItemEnhancedRequest.java | 48 ++++++- .../model/CreateTableEnhancedRequest.java | 49 ++++++- .../model/DeleteItemEnhancedRequest.java | 47 +++++- .../model/GetItemEnhancedRequest.java | 49 ++++++- .../model/PutItemEnhancedRequest.java | 48 ++++++- .../dynamodb/model/QueryEnhancedRequest.java | 49 ++++++- .../dynamodb/model/ScanEnhancedRequest.java | 50 ++++++- .../TransactDeleteItemEnhancedRequest.java | 47 +++++- .../TransactGetItemsEnhancedRequest.java | 50 ++++++- .../model/TransactPutItemEnhancedRequest.java | 49 ++++++- .../TransactUpdateItemEnhancedRequest.java | 49 ++++++- .../TransactWriteItemsEnhancedRequest.java | 44 +++++- .../model/UpdateItemEnhancedRequest.java | 49 ++++++- .../operations/BatchGetItemOperationTest.java | 22 +++ .../BatchWriteItemOperationTest.java | 22 +++ .../operations/CreateTableOperationTest.java | 27 ++++ .../operations/DeleteItemOperationTest.java | 28 ++++ .../operations/GetItemOperationTest.java | 26 ++++ .../operations/PutItemOperationTest.java | 26 ++++ .../operations/QueryOperationTest.java | 25 ++++ .../operations/ScanOperationTest.java | 23 +++ .../TransactGetItemsOperationTest.java | 22 +++ .../TransactWriteItemsOperationTest.java | 23 +++ .../operations/UpdateItemOperationTest.java | 26 ++++ .../BatchGetItemEnhancedRequestTest.java | 129 ++++++++++++++++- .../BatchWriteItemEnhancedRequestTest.java | 129 +++++++++++++++++ .../model/CreateTableEnhancedRequestTest.java | 135 +++++++++++++++++- .../model/DeleteItemEnhancedRequestTest.java | 130 +++++++++++++++++ .../model/GetItemEnhancedRequestTest.java | 131 ++++++++++++++++- .../model/PutItemEnhancedRequestTest.java | 129 +++++++++++++++++ .../model/QueryEnhancedRequestTest.java | 129 +++++++++++++++++ .../model/ScanEnhancedRequestTest.java | 131 +++++++++++++++++ ...TransactDeleteItemEnhancedRequestTest.java | 125 ++++++++++++++++ .../TransactGetItemsEnhancedRequestTest.java | 104 +++++++++++++- .../TransactPutItemEnhancedRequestTest.java | 130 +++++++++++++++++ ...TransactUpdateItemEnhancedRequestTest.java | 131 +++++++++++++++++ ...TransactWriteItemsEnhancedRequestTest.java | 94 +++++++++++- .../model/UpdateItemEnhancedRequestTest.java | 129 +++++++++++++++++ 50 files changed, 2732 insertions(+), 37 deletions(-) diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchGetItemOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchGetItemOperation.java index 541f205f6cae..7d05e502c519 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchGetItemOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchGetItemOperation.java @@ -63,6 +63,7 @@ public BatchGetItemRequest generateRequest(DynamoDbEnhancedClientExtension exten return BatchGetItemRequest.builder() .requestItems(Collections.unmodifiableMap(requestItems)) .returnConsumedCapacity(request.returnConsumedCapacityAsString()) + .overrideConfiguration(request.overrideConfiguration()) .build(); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchWriteItemOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchWriteItemOperation.java index 0b41512a76a2..fca0d717d025 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchWriteItemOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchWriteItemOperation.java @@ -69,6 +69,7 @@ public BatchWriteItemRequest generateRequest(DynamoDbEnhancedClientExtension ext Collections.unmodifiableMap(CollectionUtils.deepCopyMap(allRequestItems))) .returnConsumedCapacity(request.returnConsumedCapacity()) .returnItemCollectionMetrics(request.returnItemCollectionMetrics()) + .overrideConfiguration(request.overrideConfiguration()) .build(); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/CreateTableOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/CreateTableOperation.java index 055b685dbe4d..1c2cd6e0dafd 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/CreateTableOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/CreateTableOperation.java @@ -141,6 +141,7 @@ public CreateTableRequest generateRequest(TableSchema tableSchema, .billingMode(billingMode) .provisionedThroughput(this.request.provisionedThroughput()) .streamSpecification(this.request.streamSpecification()) + .overrideConfiguration(this.request.overrideConfiguration()) .build(); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/DeleteItemOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/DeleteItemOperation.java index 265866177f74..b37556369a28 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/DeleteItemOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/DeleteItemOperation.java @@ -20,6 +20,7 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Function; import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.Key; @@ -94,6 +95,8 @@ public DeleteItemRequest generateRequest(TableSchema tableSchema, requestBuilder = addExpressionsIfExist(requestBuilder); + applyOverrideConfiguration(requestBuilder, request); + return requestBuilder.build(); } @@ -186,4 +189,19 @@ private DeleteItemRequest.Builder addPlainDeleteItemParameters(DeleteItemRequest requestBuilder.returnValuesOnConditionCheckFailure(enhancedRequest.returnValuesOnConditionCheckFailureAsString()); return requestBuilder; } + + private DeleteItemRequest.Builder applyOverrideConfiguration(DeleteItemRequest.Builder requestBuilder, + Either req) { + AwsRequestOverrideConfiguration overrideConfiguration = null; + if (req.left().isPresent()) { + overrideConfiguration = req.left().get().overrideConfiguration(); + } else if (req.right().isPresent()) { + overrideConfiguration = req.right().get().overrideConfiguration(); + } + if (overrideConfiguration != null) { + requestBuilder.overrideConfiguration(overrideConfiguration); + } + return requestBuilder; + } } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/GetItemOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/GetItemOperation.java index 0ebd62538cfb..63cc52b0c436 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/GetItemOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/GetItemOperation.java @@ -76,6 +76,7 @@ public GetItemRequest generateRequest(TableSchema tableSchema, .key(this.request.key().keyMap(tableSchema, context.indexName())) .consistentRead(this.request.consistentRead()) .returnConsumedCapacity(this.request.returnConsumedCapacityAsString()) + .overrideConfiguration(this.request.overrideConfiguration()) .build(); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/PutItemOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/PutItemOperation.java index 3e0b8a2cfa62..1ca59de9c7d1 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/PutItemOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/PutItemOperation.java @@ -20,6 +20,7 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Function; import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.OperationContext; @@ -108,6 +109,8 @@ public PutItemRequest generateRequest(TableSchema tableSchema, .tableName(operationContext.tableName()) .item(itemMap); + applyOverrideConfiguration(requestBuilder, request); + if (request.left().isPresent()) { requestBuilder = addPlainPutItemParameters(requestBuilder, request.left().get()); } @@ -228,4 +231,19 @@ private PutItemRequest.Builder addPlainPutItemParameters(PutItemRequest.Builder requestBuilder.returnValuesOnConditionCheckFailure(enhancedRequest.returnValuesOnConditionCheckFailureAsString()); return requestBuilder; } + + private PutItemRequest.Builder applyOverrideConfiguration(PutItemRequest.Builder requestBuilder, + Either, + TransactPutItemEnhancedRequest> req) { + AwsRequestOverrideConfiguration overrideConfiguration = null; + if (req.left().isPresent()) { + overrideConfiguration = req.left().get().overrideConfiguration(); + } else if (req.right().isPresent()) { + overrideConfiguration = req.right().get().overrideConfiguration(); + } + if (overrideConfiguration != null) { + requestBuilder.overrideConfiguration(overrideConfiguration); + } + return requestBuilder; + } } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/QueryOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/QueryOperation.java index 88a02c353a47..c1617f9bd9d0 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/QueryOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/QueryOperation.java @@ -85,7 +85,8 @@ public QueryRequest generateRequest(TableSchema tableSchema, .exclusiveStartKey(this.request.exclusiveStartKey()) .consistentRead(this.request.consistentRead()) .returnConsumedCapacity(this.request.returnConsumedCapacity()) - .projectionExpression(projectionExpressionAsString); + .projectionExpression(projectionExpressionAsString) + .overrideConfiguration(this.request.overrideConfiguration()); if (!TableMetadata.primaryIndexName().equals(operationContext.indexName())) { queryRequest = queryRequest.indexName(operationContext.indexName()); diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/ScanOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/ScanOperation.java index 94c6f9416d6c..57ddaefe53e8 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/ScanOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/ScanOperation.java @@ -85,7 +85,8 @@ public ScanRequest generateRequest(TableSchema tableSchema, .select(this.request.select()) .expressionAttributeValues(expressionValues) .expressionAttributeNames(expressionNames) - .projectionExpression(projectionExpressionAsString); + .projectionExpression(projectionExpressionAsString) + .overrideConfiguration(this.request.overrideConfiguration()); if (!TableMetadata.primaryIndexName().equals(operationContext.indexName())) { scanRequest = scanRequest.indexName(operationContext.indexName()); diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactGetItemsOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactGetItemsOperation.java index 539b235a531a..520dd7b7731b 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactGetItemsOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactGetItemsOperation.java @@ -52,6 +52,7 @@ public OperationName operationName() { public TransactGetItemsRequest generateRequest(DynamoDbEnhancedClientExtension extension) { return TransactGetItemsRequest.builder() .transactItems(this.request.transactGetItems()) + .overrideConfiguration(this.request.overrideConfiguration()) .build(); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactWriteItemsOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactWriteItemsOperation.java index 67cdecb7d81a..4cd76c1e3a39 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactWriteItemsOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactWriteItemsOperation.java @@ -52,6 +52,7 @@ public TransactWriteItemsRequest generateRequest(DynamoDbEnhancedClientExtension .clientRequestToken(this.request.clientRequestToken()) .returnConsumedCapacity(this.request.returnConsumedCapacity()) .returnItemCollectionMetrics(this.request.returnItemCollectionMetrics()) + .overrideConfiguration(this.request.overrideConfiguration()) .build(); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperation.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperation.java index 0ffe361b5aed..17dbc1403ac1 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperation.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperation.java @@ -28,6 +28,7 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Function; import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.OperationContext; @@ -158,6 +159,8 @@ public UpdateItemRequest generateRequest(TableSchema tableSchema, requestBuilder = requestBuilder.expressionAttributeValues(expressionValues); } + applyOverrideConfiguration(requestBuilder, request); + return requestBuilder.build(); } @@ -355,4 +358,19 @@ private static Map coalesceExpressionValues(Expression f } return expressionValues; } + + private UpdateItemRequest.Builder applyOverrideConfiguration(UpdateItemRequest.Builder requestBuilder, + Either, + TransactUpdateItemEnhancedRequest> req) { + AwsRequestOverrideConfiguration overrideConfiguration = null; + if (req.left().isPresent()) { + overrideConfiguration = req.left().get().overrideConfiguration(); + } else if (req.right().isPresent()) { + overrideConfiguration = req.right().get().overrideConfiguration(); + } + if (overrideConfiguration != null) { + requestBuilder.overrideConfiguration(overrideConfiguration); + } + return requestBuilder; + } } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchGetItemEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchGetItemEnhancedRequest.java index ea2bdc8fd1fc..b4ecb0571608 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchGetItemEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchGetItemEnhancedRequest.java @@ -21,9 +21,11 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.services.dynamodb.model.BatchGetItemRequest; import software.amazon.awssdk.services.dynamodb.model.GetItemRequest; @@ -41,10 +43,12 @@ public final class BatchGetItemEnhancedRequest { private final List readBatches; private final String returnConsumedCapacity; + private final AwsRequestOverrideConfiguration overrideConfiguration; private BatchGetItemEnhancedRequest(Builder builder) { this.readBatches = getListIfExist(builder.readBatches); this.returnConsumedCapacity = builder.returnConsumedCapacity; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -58,7 +62,9 @@ public static Builder builder() { * Returns a builder initialized with all existing values on the request object. */ public Builder toBuilder() { - return new Builder().readBatches(readBatches).returnConsumedCapacity(this.returnConsumedCapacity); + return new Builder().readBatches(readBatches) + .returnConsumedCapacity(this.returnConsumedCapacity) + .overrideConfiguration(this.overrideConfiguration); } /** @@ -87,6 +93,18 @@ public String returnConsumedCapacityAsString() { return returnConsumedCapacity; } + /** + * Returns the override configuration to apply to the low-level {@link BatchGetItemRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -99,13 +117,15 @@ public boolean equals(Object o) { BatchGetItemEnhancedRequest that = (BatchGetItemEnhancedRequest) o; return Objects.equals(this.readBatches, that.readBatches) && - Objects.equals(this.returnConsumedCapacity, that.returnConsumedCapacity); + Objects.equals(this.returnConsumedCapacity, that.returnConsumedCapacity) && + Objects.equals(this.overrideConfiguration, that.overrideConfiguration); } @Override public int hashCode() { int hc = readBatches != null ? readBatches.hashCode() : 0; hc = 31 * hc + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0); + hc = 31 * hc + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); return hc; } @@ -120,6 +140,7 @@ private static List getListIfExist(List readBatches) { public static final class Builder { private List readBatches; private String returnConsumedCapacity; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -183,6 +204,30 @@ public Builder returnConsumedCapacity(String returnConsumedCapacity) { return this; } + /** + * Sets the override configuration to apply to the low-level {@link BatchGetItemRequest}. + * + * @see BatchGetItemRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link BatchGetItemRequest}. + * + * @see BatchGetItemRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public BatchGetItemEnhancedRequest build() { return new BatchGetItemEnhancedRequest(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchWriteItemEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchWriteItemEnhancedRequest.java index 3b1f75860897..cf4451ec34ee 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchWriteItemEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchWriteItemEnhancedRequest.java @@ -21,9 +21,11 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.services.dynamodb.model.BatchWriteItemRequest; import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity; @@ -43,11 +45,13 @@ public final class BatchWriteItemEnhancedRequest { private final List writeBatches; private final String returnConsumedCapacity; private final String returnItemCollectionMetrics; + private final AwsRequestOverrideConfiguration overrideConfiguration; private BatchWriteItemEnhancedRequest(Builder builder) { this.writeBatches = getListIfExist(builder.writeBatches); this.returnConsumedCapacity = builder.returnConsumedCapacity; this.returnItemCollectionMetrics = builder.returnItemCollectionMetrics; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -63,7 +67,8 @@ public static Builder builder() { public Builder toBuilder() { return builder().writeBatches(writeBatches) .returnConsumedCapacity(returnConsumedCapacity) - .returnItemCollectionMetrics(returnItemCollectionMetrics); + .returnItemCollectionMetrics(returnItemCollectionMetrics) + .overrideConfiguration(overrideConfiguration); } /** @@ -111,6 +116,18 @@ public Collection writeBatches() { return writeBatches; } + /** + * Returns the override configuration to apply to the low-level {@link BatchWriteItemRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -122,7 +139,8 @@ public boolean equals(Object o) { BatchWriteItemEnhancedRequest that = (BatchWriteItemEnhancedRequest) o; return Objects.equals(writeBatches, that.writeBatches) && Objects.equals(returnConsumedCapacity, that.returnConsumedCapacity) && - Objects.equals(returnItemCollectionMetrics, that.returnItemCollectionMetrics); + Objects.equals(returnItemCollectionMetrics, that.returnItemCollectionMetrics) && + Objects.equals(overrideConfiguration, that.overrideConfiguration); } @Override @@ -130,6 +148,7 @@ public int hashCode() { int result = writeBatches != null ? writeBatches.hashCode() : 0; result = 31 * result + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0); result = 31 * result + (returnItemCollectionMetrics != null ? returnItemCollectionMetrics.hashCode() : 0); + result = 31 * result + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); return result; } @@ -145,6 +164,7 @@ public static final class Builder { private List writeBatches; private String returnConsumedCapacity; private String returnItemCollectionMetrics; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -228,6 +248,30 @@ public Builder addWriteBatch(WriteBatch writeBatch) { return this; } + /** + * Sets the override configuration to apply to the low-level {@link BatchWriteItemRequest}. + * + * @see BatchWriteItemRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link BatchWriteItemRequest}. + * + * @see BatchWriteItemRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public BatchWriteItemEnhancedRequest build() { return new BatchWriteItemEnhancedRequest(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/CreateTableEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/CreateTableEnhancedRequest.java index 1848e6d19487..709a52ed6c77 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/CreateTableEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/CreateTableEnhancedRequest.java @@ -23,8 +23,10 @@ import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; +import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest; import software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughput; import software.amazon.awssdk.services.dynamodb.model.StreamSpecification; @@ -42,12 +44,14 @@ public final class CreateTableEnhancedRequest { private final StreamSpecification streamSpecification; private final Collection localSecondaryIndices; private final Collection globalSecondaryIndices; + private final AwsRequestOverrideConfiguration overrideConfiguration; private CreateTableEnhancedRequest(Builder builder) { this.provisionedThroughput = builder.provisionedThroughput; this.streamSpecification = builder.streamSpecification; this.localSecondaryIndices = builder.localSecondaryIndices; this.globalSecondaryIndices = builder.globalSecondaryIndices; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -64,7 +68,8 @@ public Builder toBuilder() { return builder().provisionedThroughput(provisionedThroughput) .streamSpecification(streamSpecification) .localSecondaryIndices(localSecondaryIndices) - .globalSecondaryIndices(globalSecondaryIndices); + .globalSecondaryIndices(globalSecondaryIndices) + .overrideConfiguration(overrideConfiguration); } /** @@ -95,6 +100,18 @@ public Collection globalSecondaryIndices() { return globalSecondaryIndices; } + /** + * Returns the override configuration to apply to the low-level {@link CreateTableRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -118,6 +135,10 @@ public boolean equals(Object o) { that.localSecondaryIndices != null) { return false; } + if (overrideConfiguration != null ? ! overrideConfiguration.equals(that.overrideConfiguration) : + that.overrideConfiguration != null) { + return false; + } return globalSecondaryIndices != null ? globalSecondaryIndices.equals(that.globalSecondaryIndices) : that.globalSecondaryIndices == null; } @@ -128,6 +149,7 @@ public int hashCode() { result = 31 * result + (streamSpecification != null ? streamSpecification.hashCode() : 0); result = 31 * result + (localSecondaryIndices != null ? localSecondaryIndices.hashCode() : 0); result = 31 * result + (globalSecondaryIndices != null ? globalSecondaryIndices.hashCode() : 0); + result = 31 * result + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); return result; } @@ -140,6 +162,7 @@ public static final class Builder { private StreamSpecification streamSpecification; private Collection localSecondaryIndices; private Collection globalSecondaryIndices; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -255,6 +278,30 @@ public final Builder globalSecondaryIndices(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public CreateTableEnhancedRequest build() { return new CreateTableEnhancedRequest(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/DeleteItemEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/DeleteItemEnhancedRequest.java index 0a7a01500bfd..0b1505deba5d 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/DeleteItemEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/DeleteItemEnhancedRequest.java @@ -20,6 +20,7 @@ import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.Expression; @@ -46,6 +47,7 @@ public final class DeleteItemEnhancedRequest { private final String returnConsumedCapacity; private final String returnItemCollectionMetrics; private final String returnValuesOnConditionCheckFailure; + private final AwsRequestOverrideConfiguration overrideConfiguration; private DeleteItemEnhancedRequest(Builder builder) { this.key = builder.key; @@ -53,6 +55,7 @@ private DeleteItemEnhancedRequest(Builder builder) { this.returnConsumedCapacity = builder.returnConsumedCapacity; this.returnItemCollectionMetrics = builder.returnItemCollectionMetrics; this.returnValuesOnConditionCheckFailure = builder.returnValuesOnConditionCheckFailure; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -70,7 +73,8 @@ public Builder toBuilder() { .conditionExpression(conditionExpression) .returnConsumedCapacity(returnConsumedCapacity) .returnItemCollectionMetrics(returnItemCollectionMetrics) - .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure); + .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure) + .overrideConfiguration(overrideConfiguration); } /** @@ -145,6 +149,18 @@ public String returnValuesOnConditionCheckFailureAsString() { return returnValuesOnConditionCheckFailure; } + /** + * Returns the override configuration to apply to the low-level {@link DeleteItemRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -158,7 +174,8 @@ public boolean equals(Object o) { && Objects.equals(conditionExpression, that.conditionExpression) && Objects.equals(returnConsumedCapacity, that.returnConsumedCapacity) && Objects.equals(returnItemCollectionMetrics, that.returnItemCollectionMetrics) - && Objects.equals(returnValuesOnConditionCheckFailure, that.returnValuesOnConditionCheckFailure); + && Objects.equals(returnValuesOnConditionCheckFailure, that.returnValuesOnConditionCheckFailure) + && Objects.equals(overrideConfiguration, that.overrideConfiguration); } @Override @@ -168,6 +185,7 @@ public int hashCode() { result = 31 * result + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0); result = 31 * result + (returnItemCollectionMetrics != null ? returnItemCollectionMetrics.hashCode() : 0); result = 31 * result + (returnValuesOnConditionCheckFailure != null ? returnValuesOnConditionCheckFailure.hashCode() : 0); + result = 31 * result + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); return result; } @@ -183,6 +201,7 @@ public static final class Builder { private String returnConsumedCapacity; private String returnItemCollectionMetrics; private String returnValuesOnConditionCheckFailure; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -289,6 +308,30 @@ public Builder returnValuesOnConditionCheckFailure(String returnValuesOnConditio return this; } + /** + * Sets the override configuration to apply to the low-level {@link DeleteItemRequest}. + * + * @see DeleteItemRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link DeleteItemRequest}. + * + * @see DeleteItemRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public DeleteItemEnhancedRequest build() { return new DeleteItemEnhancedRequest(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/GetItemEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/GetItemEnhancedRequest.java index 88a091b8883d..e7e9106515b1 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/GetItemEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/GetItemEnhancedRequest.java @@ -20,6 +20,7 @@ import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.Key; @@ -39,11 +40,13 @@ public final class GetItemEnhancedRequest { private final Key key; private final Boolean consistentRead; private final String returnConsumedCapacity; + private final AwsRequestOverrideConfiguration overrideConfiguration; private GetItemEnhancedRequest(Builder builder) { this.key = builder.key; this.consistentRead = builder.consistentRead; this.returnConsumedCapacity = builder.returnConsumedCapacity; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -58,7 +61,10 @@ public static Builder builder() { * @return a builder with all existing values set */ public Builder toBuilder() { - return builder().key(key).consistentRead(consistentRead).returnConsumedCapacity(returnConsumedCapacity); + return builder().key(key) + .consistentRead(consistentRead) + .returnConsumedCapacity(returnConsumedCapacity) + .overrideConfiguration(overrideConfiguration); } /** @@ -94,6 +100,18 @@ public String returnConsumedCapacityAsString() { return returnConsumedCapacity; } + /** + * Returns the override configuration to apply to the low-level {@link GetItemRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -107,7 +125,8 @@ public boolean equals(Object o) { return Objects.equals(key, that.key) && Objects.equals(consistentRead, that.consistentRead) - && Objects.equals(returnConsumedCapacity, that.returnConsumedCapacity); + && Objects.equals(returnConsumedCapacity, that.returnConsumedCapacity) + && Objects.equals(overrideConfiguration, that.overrideConfiguration); } @Override @@ -115,6 +134,7 @@ public int hashCode() { int result = key != null ? key.hashCode() : 0; result = 31 * result + (consistentRead != null ? consistentRead.hashCode() : 0); result = 31 * result + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0); + result = 31 * result + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); return result; } @@ -128,6 +148,7 @@ public static final class Builder { private Key key; private Boolean consistentRead; private String returnConsumedCapacity; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -190,6 +211,30 @@ public Builder returnConsumedCapacity(String returnConsumedCapacity) { return this; } + /** + * Sets the override configuration to apply to the low-level {@link GetItemRequest}. + * + * @see GetItemRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link GetItemRequest}. + * + * @see GetItemRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public GetItemEnhancedRequest build() { return new GetItemEnhancedRequest(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/PutItemEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/PutItemEnhancedRequest.java index db2e665477db..9c967b79b604 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/PutItemEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/PutItemEnhancedRequest.java @@ -16,9 +16,11 @@ package software.amazon.awssdk.enhanced.dynamodb.model; import java.util.Objects; +import java.util.function.Consumer; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.Expression; @@ -45,6 +47,7 @@ public final class PutItemEnhancedRequest { private final String returnConsumedCapacity; private final String returnItemCollectionMetrics; private final String returnValuesOnConditionCheckFailure; + private final AwsRequestOverrideConfiguration overrideConfiguration; private PutItemEnhancedRequest(Builder builder) { this.item = builder.item; @@ -53,6 +56,7 @@ private PutItemEnhancedRequest(Builder builder) { this.returnConsumedCapacity = builder.returnConsumedCapacity; this.returnItemCollectionMetrics = builder.returnItemCollectionMetrics; this.returnValuesOnConditionCheckFailure = builder.returnValuesOnConditionCheckFailure; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -75,7 +79,8 @@ public Builder toBuilder() { .returnValues(returnValues) .returnConsumedCapacity(returnConsumedCapacity) .returnItemCollectionMetrics(returnItemCollectionMetrics) - .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure); + .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure) + .overrideConfiguration(overrideConfiguration); } /** @@ -169,6 +174,18 @@ public String returnValuesOnConditionCheckFailureAsString() { return returnValuesOnConditionCheckFailure; } + /** + * Returns the override configuration to apply to the low-level {@link PutItemRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -183,7 +200,8 @@ public boolean equals(Object o) { && Objects.equals(returnValues, that.returnValues) && Objects.equals(returnConsumedCapacity, that.returnConsumedCapacity) && Objects.equals(returnItemCollectionMetrics, that.returnItemCollectionMetrics) - && Objects.equals(returnValuesOnConditionCheckFailure, that.returnValuesOnConditionCheckFailure); + && Objects.equals(returnValuesOnConditionCheckFailure, that.returnValuesOnConditionCheckFailure) + && Objects.equals(overrideConfiguration, that.overrideConfiguration); } @Override @@ -194,6 +212,7 @@ public int hashCode() { result = 31 * result + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0); result = 31 * result + (returnItemCollectionMetrics != null ? returnItemCollectionMetrics.hashCode() : 0); result = 31 * result + (returnValuesOnConditionCheckFailure != null ? returnValuesOnConditionCheckFailure.hashCode() : 0); + result = 31 * result + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); return result; } @@ -210,6 +229,7 @@ public static final class Builder { private String returnConsumedCapacity; private String returnItemCollectionMetrics; private String returnValuesOnConditionCheckFailure; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -323,6 +343,30 @@ public Builder returnValuesOnConditionCheckFailure(String returnValuesOnCondi return this; } + /** + * Sets the override configuration to apply to the low-level {@link PutItemRequest}. + * + * @see PutItemRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link PutItemRequest}. + * + * @see PutItemRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public PutItemEnhancedRequest build() { return new PutItemEnhancedRequest<>(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.java index d228c6e36311..09847e959a9c 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.java @@ -22,10 +22,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Consumer; import java.util.stream.Collectors; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncIndex; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.Expression; @@ -59,6 +61,7 @@ public final class QueryEnhancedRequest { private final Expression filterExpression; private final List attributesToProject; private final String returnConsumedCapacity; + private final AwsRequestOverrideConfiguration overrideConfiguration; private QueryEnhancedRequest(Builder builder) { this.queryConditional = builder.queryConditional; @@ -72,6 +75,7 @@ private QueryEnhancedRequest(Builder builder) { this.attributesToProject = builder.attributesToProject != null ? Collections.unmodifiableList(builder.attributesToProject) : null; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -93,7 +97,8 @@ public Builder toBuilder() { .consistentRead(consistentRead) .filterExpression(filterExpression) .returnConsumedCapacity(returnConsumedCapacity) - .addNestedAttributesToProject(attributesToProject); + .addNestedAttributesToProject(attributesToProject) + .overrideConfiguration(overrideConfiguration); } /** @@ -186,6 +191,18 @@ public ReturnConsumedCapacity returnConsumedCapacity() { return ReturnConsumedCapacity.fromValue(returnConsumedCapacity); } + /** + * Returns the override configuration to apply to the low-level {@link QueryRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + /** * Whether to return the capacity consumed by this operation. *

@@ -239,6 +256,10 @@ public boolean equals(Object o) { ? !returnConsumedCapacity.equals(query.returnConsumedCapacity) : query.returnConsumedCapacity != null) { return false; } + if (overrideConfiguration != null + ? !overrideConfiguration.equals(query.overrideConfiguration) : query.overrideConfiguration != null) { + return false; + } return filterExpression != null ? filterExpression.equals(query.filterExpression) : query.filterExpression == null; } @@ -253,6 +274,7 @@ public int hashCode() { result = 31 * result + (filterExpression != null ? filterExpression.hashCode() : 0); result = 31 * result + (attributesToProject != null ? attributesToProject.hashCode() : 0); result = 31 * result + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0); + result = 31 * result + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); return result; } @@ -272,6 +294,7 @@ public static final class Builder { private Expression filterExpression; private List attributesToProject; private String returnConsumedCapacity; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -525,6 +548,30 @@ public Builder returnConsumedCapacity(String returnConsumedCapacity) { return this; } + /** + * Sets the override configuration to apply to the low-level {@link QueryRequest}. + * + * @see QueryRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link QueryRequest}. + * + * @see QueryRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public QueryEnhancedRequest build() { return new QueryEnhancedRequest(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/ScanEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/ScanEnhancedRequest.java index e5f00c5e7da1..16ce3c3b5075 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/ScanEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/ScanEnhancedRequest.java @@ -22,10 +22,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Consumer; import java.util.stream.Collectors; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.NestedAttributeName; @@ -54,6 +56,7 @@ public final class ScanEnhancedRequest { private final Integer segment; private final Integer totalSegments; private final String returnConsumedCapacity; + private final AwsRequestOverrideConfiguration overrideConfiguration; private ScanEnhancedRequest(Builder builder) { this.exclusiveStartKey = builder.exclusiveStartKey; @@ -67,6 +70,7 @@ private ScanEnhancedRequest(Builder builder) { this.attributesToProject = builder.attributesToProject != null ? Collections.unmodifiableList(builder.attributesToProject) : null; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -88,7 +92,8 @@ public Builder toBuilder() { .filterExpression(filterExpression) .select(select) .returnConsumedCapacity(returnConsumedCapacity) - .addNestedAttributesToProject(attributesToProject); + .addNestedAttributesToProject(attributesToProject) + .overrideConfiguration(overrideConfiguration); } /** @@ -191,6 +196,18 @@ public String returnConsumedCapacityAsString() { return returnConsumedCapacity; } + /** + * Returns the override configuration to apply to the low-level {@link ScanRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -231,6 +248,11 @@ public boolean equals(Object o) { return false; } + if (overrideConfiguration != null + ? !overrideConfiguration.equals(scan.overrideConfiguration) : scan.overrideConfiguration != null) { + return false; + } + return filterExpression != null ? filterExpression.equals(scan.filterExpression) : scan.filterExpression == null; } @@ -245,6 +267,7 @@ public int hashCode() { result = 31 * result + (select != null ? select.hashCode() : 0); result = 31 * result + (attributesToProject != null ? attributesToProject.hashCode() : 0); result = 31 * result + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0); + result = 31 * result + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); return result; } @@ -262,6 +285,7 @@ public static final class Builder { private Integer segment; private Integer totalSegments; private String returnConsumedCapacity; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -520,6 +544,30 @@ public Builder returnConsumedCapacity(String returnConsumedCapacity) { return this; } + /** + * Sets the override configuration to apply to the low-level {@link ScanRequest}. + * + * @see ScanRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link ScanRequest}. + * + * @see ScanRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public ScanEnhancedRequest build() { return new ScanEnhancedRequest(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactDeleteItemEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactDeleteItemEnhancedRequest.java index 15c4df8cacd8..04e32bdc20f9 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactDeleteItemEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactDeleteItemEnhancedRequest.java @@ -20,10 +20,12 @@ import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.Key; +import software.amazon.awssdk.services.dynamodb.model.DeleteItemRequest; import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure; /** @@ -42,11 +44,13 @@ public final class TransactDeleteItemEnhancedRequest { private final Key key; private final Expression conditionExpression; private final String returnValuesOnConditionCheckFailure; + private final AwsRequestOverrideConfiguration overrideConfiguration; private TransactDeleteItemEnhancedRequest(Builder builder) { this.key = builder.key; this.conditionExpression = builder.conditionExpression; this.returnValuesOnConditionCheckFailure = builder.returnValuesOnConditionCheckFailure; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -62,7 +66,8 @@ public static Builder builder() { public Builder toBuilder() { return builder().key(key) .conditionExpression(conditionExpression) - .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure); + .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure) + .overrideConfiguration(overrideConfiguration); } /** @@ -107,6 +112,18 @@ public String returnValuesOnConditionCheckFailureAsString() { return returnValuesOnConditionCheckFailure; } + /** + * Returns the override configuration to apply to the low-level {@link DeleteItemRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -124,6 +141,9 @@ public boolean equals(Object o) { if (!Objects.equals(conditionExpression, that.conditionExpression)) { return false; } + if (!Objects.equals(overrideConfiguration, that.overrideConfiguration)) { + return false; + } return Objects.equals(returnValuesOnConditionCheckFailure, that.returnValuesOnConditionCheckFailure); } @@ -132,6 +152,7 @@ public int hashCode() { int result = Objects.hashCode(key); result = 31 * result + Objects.hashCode(conditionExpression); result = 31 * result + Objects.hashCode(returnValuesOnConditionCheckFailure); + result = 31 * result + Objects.hashCode(overrideConfiguration); return result; } @@ -145,6 +166,7 @@ public static final class Builder { private Key key; private Expression conditionExpression; private String returnValuesOnConditionCheckFailure; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -215,6 +237,29 @@ public Builder returnValuesOnConditionCheckFailure(String returnValuesOnConditio return this; } + /** + * Sets the override configuration to apply to the low-level {@link DeleteItemRequest}. + * + * @see DeleteItemRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link DeleteItemRequest}. + * + * @see DeleteItemRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } public TransactDeleteItemEnhancedRequest build() { return new TransactDeleteItemEnhancedRequest(this); diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactGetItemsEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactGetItemsEnhancedRequest.java index c7b8198ee7a1..e7f274456fdf 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactGetItemsEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactGetItemsEnhancedRequest.java @@ -19,10 +19,12 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import java.util.function.Supplier; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.Key; import software.amazon.awssdk.enhanced.dynamodb.MappedTableResource; @@ -30,6 +32,7 @@ import software.amazon.awssdk.enhanced.dynamodb.internal.operations.GetItemOperation; import software.amazon.awssdk.enhanced.dynamodb.internal.operations.TransactableReadOperation; import software.amazon.awssdk.services.dynamodb.model.TransactGetItem; +import software.amazon.awssdk.services.dynamodb.model.TransactGetItemsRequest; /** * Defines parameters used for the transaction operation transactGetItems() (such as @@ -45,9 +48,11 @@ public final class TransactGetItemsEnhancedRequest { private final List transactGetItems; + private final AwsRequestOverrideConfiguration overrideConfiguration; private TransactGetItemsEnhancedRequest(Builder builder) { this.transactGetItems = getItemsFromSupplier(builder.itemSupplierList); + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -64,6 +69,18 @@ public List transactGetItems() { return transactGetItems; } + /** + * Returns the override configuration to apply to the low-level {@link TransactGetItemsRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -75,12 +92,18 @@ public boolean equals(Object o) { TransactGetItemsEnhancedRequest that = (TransactGetItemsEnhancedRequest) o; + if (overrideConfiguration != null ? !overrideConfiguration.equals(that.overrideConfiguration) : + that.overrideConfiguration != null) { + return false; + } return transactGetItems != null ? transactGetItems.equals(that.transactGetItems) : that.transactGetItems == null; } @Override public int hashCode() { - return transactGetItems != null ? transactGetItems.hashCode() : 0; + int result = transactGetItems != null ? transactGetItems.hashCode() : 0; + result = 31 * result + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); + return result; } /** @@ -91,6 +114,7 @@ public int hashCode() { @NotThreadSafe public static final class Builder { private List> itemSupplierList = new ArrayList<>(); + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -131,6 +155,30 @@ public Builder addGetItem(MappedTableResource mappedTableResource, return addGetItem(mappedTableResource, mappedTableResource.keyFrom(keyItem)); } + /** + * Sets the override configuration to apply to the low-level {@link TransactGetItemsRequest}. + * + * @see TransactGetItemsRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link TransactGetItemsRequest}. + * + * @see TransactGetItemsRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + /** * Builds a {@link TransactGetItemsEnhancedRequest} from the values stored in this builder. */ diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactPutItemEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactPutItemEnhancedRequest.java index 6d665a2e3b15..8497d5f1e4b2 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactPutItemEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactPutItemEnhancedRequest.java @@ -16,12 +16,15 @@ package software.amazon.awssdk.enhanced.dynamodb.model; import java.util.Objects; +import java.util.function.Consumer; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.Expression; +import software.amazon.awssdk.services.dynamodb.model.PutItemRequest; import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure; /** @@ -39,11 +42,13 @@ public final class TransactPutItemEnhancedRequest { private final T item; private final Expression conditionExpression; private final String returnValuesOnConditionCheckFailure; + private final AwsRequestOverrideConfiguration overrideConfiguration; private TransactPutItemEnhancedRequest(Builder builder) { this.item = builder.item; this.conditionExpression = builder.conditionExpression; this.returnValuesOnConditionCheckFailure = builder.returnValuesOnConditionCheckFailure; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -63,7 +68,8 @@ public static Builder builder(Class itemClass) { public Builder toBuilder() { return new Builder().item(item) .conditionExpression(conditionExpression) - .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailureAsString()); + .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailureAsString()) + .overrideConfiguration(overrideConfiguration); } /** @@ -108,6 +114,18 @@ public String returnValuesOnConditionCheckFailureAsString() { return returnValuesOnConditionCheckFailure; } + /** + * Returns the override configuration to apply to the low-level {@link PutItemRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -125,6 +143,9 @@ public boolean equals(Object o) { if (!Objects.equals(conditionExpression, that.conditionExpression)) { return false; } + if (!Objects.equals(overrideConfiguration, that.overrideConfiguration)) { + return false; + } return Objects.equals(returnValuesOnConditionCheckFailure, that.returnValuesOnConditionCheckFailure); } @@ -133,6 +154,7 @@ public int hashCode() { int result = Objects.hashCode(item); result = 31 * result + Objects.hashCode(conditionExpression); result = 31 * result + Objects.hashCode(returnValuesOnConditionCheckFailure); + result = 31 * result + Objects.hashCode(overrideConfiguration); return result; } @@ -146,6 +168,7 @@ public static final class Builder { private T item; private Expression conditionExpression; private String returnValuesOnConditionCheckFailure; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -203,6 +226,30 @@ public Builder returnValuesOnConditionCheckFailure(String returnValuesOnCondi return this; } + /** + * Sets the override configuration to apply to the low-level {@link PutItemRequest}. + * + * @see PutItemRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link PutItemRequest}. + * + * @see PutItemRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public TransactPutItemEnhancedRequest build() { return new TransactPutItemEnhancedRequest<>(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactUpdateItemEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactUpdateItemEnhancedRequest.java index 4f163992f6e8..75828aa697a1 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactUpdateItemEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactUpdateItemEnhancedRequest.java @@ -16,13 +16,16 @@ package software.amazon.awssdk.enhanced.dynamodb.model; import java.util.Objects; +import java.util.function.Consumer; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure; +import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest; /** * Defines parameters used to update an item to a DynamoDb table using the @@ -43,6 +46,7 @@ public class TransactUpdateItemEnhancedRequest { private final IgnoreNullsMode ignoreNullsMode; private final Expression conditionExpression; private final String returnValuesOnConditionCheckFailure; + private final AwsRequestOverrideConfiguration overrideConfiguration; private TransactUpdateItemEnhancedRequest(Builder builder) { this.item = builder.item; @@ -50,6 +54,7 @@ private TransactUpdateItemEnhancedRequest(Builder builder) { this.ignoreNullsMode = builder.ignoreNullsMode; this.conditionExpression = builder.conditionExpression; this.returnValuesOnConditionCheckFailure = builder.returnValuesOnConditionCheckFailure; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -71,7 +76,8 @@ public Builder toBuilder() { .ignoreNulls(ignoreNulls) .ignoreNullsMode(ignoreNullsMode) .conditionExpression(conditionExpression) - .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure); + .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure) + .overrideConfiguration(overrideConfiguration); } /** @@ -132,6 +138,18 @@ public String returnValuesOnConditionCheckFailureAsString() { return returnValuesOnConditionCheckFailure; } + /** + * Returns the override configuration to apply to the low-level {@link UpdateItemRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -152,6 +170,9 @@ public boolean equals(Object o) { if (!Objects.equals(conditionExpression, that.conditionExpression)) { return false; } + if (!Objects.equals(overrideConfiguration, that.overrideConfiguration)) { + return false; + } return Objects.equals(returnValuesOnConditionCheckFailure, that.returnValuesOnConditionCheckFailure); } @@ -161,6 +182,7 @@ public int hashCode() { result = 31 * result + Objects.hashCode(ignoreNulls); result = 31 * result + Objects.hashCode(conditionExpression); result = 31 * result + Objects.hashCode(returnValuesOnConditionCheckFailure); + result = 31 * result + Objects.hashCode(overrideConfiguration); return result; } @@ -176,6 +198,7 @@ public static final class Builder { private IgnoreNullsMode ignoreNullsMode; private Expression conditionExpression; private String returnValuesOnConditionCheckFailure; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -255,6 +278,30 @@ public Builder returnValuesOnConditionCheckFailure(String returnValuesOnCondi return this; } + /** + * Sets the override configuration to apply to the low-level {@link UpdateItemRequest}. + * + * @see UpdateItemRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link UpdateItemRequest}. + * + * @see UpdateItemRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public TransactUpdateItemEnhancedRequest build() { return new TransactUpdateItemEnhancedRequest<>(this); } diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactWriteItemsEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactWriteItemsEnhancedRequest.java index f322dd67dde2..109f5fc56ded 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactWriteItemsEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactWriteItemsEnhancedRequest.java @@ -25,6 +25,7 @@ import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.Key; @@ -65,12 +66,14 @@ public final class TransactWriteItemsEnhancedRequest { private final String clientRequestToken; private final String returnConsumedCapacity; private final String returnItemCollectionMetrics; + private final AwsRequestOverrideConfiguration overrideConfiguration; private TransactWriteItemsEnhancedRequest(Builder builder) { this.transactWriteItems = getItemsFromSupplier(builder.itemSupplierList); this.clientRequestToken = builder.clientRequestToken; this.returnConsumedCapacity = builder.returnConsumedCapacity; this.returnItemCollectionMetrics = builder.returnItemCollectionMetrics; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -145,6 +148,18 @@ public List transactWriteItems() { return transactWriteItems; } + /** + * Returns the override configuration to apply to the low-level {@link TransactWriteItemsRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -157,7 +172,8 @@ public boolean equals(Object o) { return Objects.equals(transactWriteItems, that.transactWriteItems) && Objects.equals(clientRequestToken, that.clientRequestToken) && Objects.equals(returnConsumedCapacity, that.returnConsumedCapacity) && - Objects.equals(returnItemCollectionMetrics, that.returnItemCollectionMetrics); + Objects.equals(returnItemCollectionMetrics, that.returnItemCollectionMetrics) && + Objects.equals(overrideConfiguration, that.overrideConfiguration); } @Override @@ -166,6 +182,7 @@ public int hashCode() { result = 31 * result + Objects.hashCode(clientRequestToken); result = 31 * result + Objects.hashCode(returnConsumedCapacity); result = 31 * result + Objects.hashCode(returnItemCollectionMetrics); + result = 31 * result + Objects.hashCode(overrideConfiguration); return result; } @@ -182,6 +199,7 @@ public static final class Builder { private String clientRequestToken; private String returnConsumedCapacity; private String returnItemCollectionMetrics; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -441,6 +459,30 @@ public Builder clientRequestToken(String clientRequestToken) { return this; } + /** + * Sets the override configuration to apply to the low-level {@link TransactWriteItemsRequest}. + * + * @see TransactWriteItemsRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link TransactWriteItemsRequest}. + * + * @see TransactWriteItemsRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + /** * Builds a {@link TransactWriteItemsEnhancedRequest} from the values stored in this builder. */ diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/UpdateItemEnhancedRequest.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/UpdateItemEnhancedRequest.java index f7e714c7a690..08291821276c 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/UpdateItemEnhancedRequest.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/model/UpdateItemEnhancedRequest.java @@ -18,9 +18,11 @@ import static software.amazon.awssdk.services.dynamodb.model.ReturnValue.ALL_NEW; import java.util.Objects; +import java.util.function.Consumer; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.Expression; @@ -53,7 +55,7 @@ public final class UpdateItemEnhancedRequest { private final String returnConsumedCapacity; private final String returnItemCollectionMetrics; private final String returnValuesOnConditionCheckFailure; - + private final AwsRequestOverrideConfiguration overrideConfiguration; private UpdateItemEnhancedRequest(Builder builder) { this.item = builder.item; @@ -64,6 +66,7 @@ private UpdateItemEnhancedRequest(Builder builder) { this.returnConsumedCapacity = builder.returnConsumedCapacity; this.returnItemCollectionMetrics = builder.returnItemCollectionMetrics; this.returnValuesOnConditionCheckFailure = builder.returnValuesOnConditionCheckFailure; + this.overrideConfiguration = builder.overrideConfiguration; } /** @@ -88,7 +91,8 @@ public Builder toBuilder() { .returnValues(returnValues) .returnConsumedCapacity(returnConsumedCapacity) .returnItemCollectionMetrics(returnItemCollectionMetrics) - .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure); + .returnValuesOnConditionCheckFailure(returnValuesOnConditionCheckFailure) + .overrideConfiguration(overrideConfiguration); } /** @@ -198,6 +202,18 @@ public String returnValuesOnConditionCheckFailureAsString() { return returnValuesOnConditionCheckFailure; } + /** + * Returns the override configuration to apply to the low-level {@link UpdateItemRequest}. + *

+ * This can be used to customize the request, such as adding custom headers, MetricPublisher or AwsCredentialsProvider. + *

+ * + * @return the {@link AwsRequestOverrideConfiguration} to apply to the underlying service call. + */ + public AwsRequestOverrideConfiguration overrideConfiguration() { + return overrideConfiguration; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -213,7 +229,8 @@ public boolean equals(Object o) { && Objects.equals(returnValues, that.returnValues) && Objects.equals(returnConsumedCapacity, that.returnConsumedCapacity) && Objects.equals(returnItemCollectionMetrics, that.returnItemCollectionMetrics) - && Objects.equals(returnValuesOnConditionCheckFailure, that.returnValuesOnConditionCheckFailure); + && Objects.equals(returnValuesOnConditionCheckFailure, that.returnValuesOnConditionCheckFailure) + && Objects.equals(overrideConfiguration, that.overrideConfiguration); } @Override @@ -225,6 +242,7 @@ public int hashCode() { result = 31 * result + (returnConsumedCapacity != null ? returnConsumedCapacity.hashCode() : 0); result = 31 * result + (returnItemCollectionMetrics != null ? returnItemCollectionMetrics.hashCode() : 0); result = 31 * result + (returnValuesOnConditionCheckFailure != null ? returnValuesOnConditionCheckFailure.hashCode() : 0); + result = 31 * result + (overrideConfiguration != null ? overrideConfiguration.hashCode() : 0); return result; } @@ -243,6 +261,7 @@ public static final class Builder { private String returnConsumedCapacity; private String returnItemCollectionMetrics; private String returnValuesOnConditionCheckFailure; + private AwsRequestOverrideConfiguration overrideConfiguration; private Builder() { } @@ -377,6 +396,30 @@ public Builder returnValuesOnConditionCheckFailure(String returnValuesOnCondi return this; } + /** + * Sets the override configuration to apply to the low-level {@link UpdateItemRequest}. + * + * @see UpdateItemRequest.Builder#overrideConfiguration(AwsRequestOverrideConfiguration) + * @return a builder of this type + */ + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + this.overrideConfiguration = overrideConfiguration; + return this; + } + + /** + * Sets the override configuration to apply to the low-level {@link UpdateItemRequest}. + * + * @see UpdateItemRequest.Builder#overrideConfiguration(Consumer) + * @return a builder of this type + */ + public Builder overrideConfiguration(Consumer overrideConfigurationBuilder) { + AwsRequestOverrideConfiguration.Builder builder = AwsRequestOverrideConfiguration.builder(); + overrideConfigurationBuilder.accept(builder); + this.overrideConfiguration = builder.build(); + return this; + } + public UpdateItemEnhancedRequest build() { return new UpdateItemEnhancedRequest<>(this); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchGetItemOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchGetItemOperationTest.java index a95b3aebda8a..0da28f71de56 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchGetItemOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchGetItemOperationTest.java @@ -47,6 +47,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.core.pagination.sync.SdkIterable; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; @@ -59,6 +60,7 @@ import software.amazon.awssdk.enhanced.dynamodb.model.BatchGetResultPage; import software.amazon.awssdk.enhanced.dynamodb.model.GetItemEnhancedRequest; import software.amazon.awssdk.enhanced.dynamodb.model.ReadBatch; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.BatchGetItemRequest; @@ -425,4 +427,24 @@ private static BatchGetItemResponse generateFakeResults( .build(); } + @Test + public void generateRequest_withOverrideConfiguration() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchGetItemEnhancedRequest batchGetItemEnhancedRequest = BatchGetItemEnhancedRequest.builder() + .readBatches() + .overrideConfiguration(overrideConfiguration) + .build(); + + BatchGetItemOperation batchGetItemOperation = BatchGetItemOperation.create(batchGetItemEnhancedRequest); + + BatchGetItemRequest batchGetItemRequest = batchGetItemOperation.generateRequest(null); + + assertThat(batchGetItemRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } + } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchWriteItemOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchWriteItemOperationTest.java index 42558ce659af..b6eadb5031bc 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchWriteItemOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/BatchWriteItemOperationTest.java @@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem.createUniqueFakeItem; @@ -43,6 +44,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbExtensionContext; @@ -56,6 +58,7 @@ import software.amazon.awssdk.enhanced.dynamodb.model.BatchWriteItemEnhancedRequest; import software.amazon.awssdk.enhanced.dynamodb.model.BatchWriteResult; import software.amazon.awssdk.enhanced.dynamodb.model.WriteBatch; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.BatchWriteItemRequest; @@ -388,6 +391,25 @@ public void transformResults_noUnprocessedOperations() { assertThat(results.unprocessedPutItemsForTable(fakeItemMappedTable), is(emptyList())); } + @Test + public void generateRequest_withOverrideConfiguration() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchWriteItemEnhancedRequest batchWriteItemEnhancedRequest = BatchWriteItemEnhancedRequest.builder() + .writeBatches() + .overrideConfiguration(overrideConfiguration) + .build(); + + BatchWriteItemOperation batchWriteItemOperation = BatchWriteItemOperation.create(batchWriteItemEnhancedRequest); + + BatchWriteItemRequest batchWriteItemRequest = batchWriteItemOperation.generateRequest(null); + + assertThat(batchWriteItemRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } private static BatchWriteItemEnhancedRequest emptyRequest() { return BatchWriteItemEnhancedRequest.builder().writeBatches().build(); diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/CreateTableOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/CreateTableOperationTest.java index 5347119b26dc..9ec223c8235b 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/CreateTableOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/CreateTableOperationTest.java @@ -23,8 +23,10 @@ import static org.hamcrest.Matchers.sameInstance; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.same; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static software.amazon.awssdk.enhanced.dynamodb.model.QueryConditional.keyEqualTo; import static software.amazon.awssdk.services.dynamodb.model.KeyType.HASH; import static software.amazon.awssdk.services.dynamodb.model.KeyType.RANGE; @@ -37,6 +39,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.core.util.DefaultSdkAutoConstructList; import software.amazon.awssdk.enhanced.dynamodb.OperationContext; import software.amazon.awssdk.enhanced.dynamodb.TableMetadata; @@ -48,6 +51,8 @@ import software.amazon.awssdk.enhanced.dynamodb.model.CreateTableEnhancedRequest; import software.amazon.awssdk.enhanced.dynamodb.model.EnhancedGlobalSecondaryIndex; import software.amazon.awssdk.enhanced.dynamodb.model.EnhancedLocalSecondaryIndex; +import software.amazon.awssdk.enhanced.dynamodb.model.QueryEnhancedRequest; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeDefinition; import software.amazon.awssdk.services.dynamodb.model.BillingMode; @@ -57,6 +62,7 @@ import software.amazon.awssdk.services.dynamodb.model.Projection; import software.amazon.awssdk.services.dynamodb.model.ProjectionType; import software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughput; +import software.amazon.awssdk.services.dynamodb.model.QueryRequest; import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType; import software.amazon.awssdk.services.dynamodb.model.StreamSpecification; import software.amazon.awssdk.services.dynamodb.model.StreamViewType; @@ -473,4 +479,25 @@ public void transformResults_doesNothing() { operation.transformResponse(response, FakeItem.getTableSchema(), PRIMARY_CONTEXT, null); } + + @Test + public void generateRequest_withOverrideConfiguration() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + CreateTableEnhancedRequest createTableEnhancedRequest = CreateTableEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + CreateTableOperation createTableOperation = CreateTableOperation.create(createTableEnhancedRequest); + + CreateTableRequest createTableRequest = createTableOperation.generateRequest(FakeItem.getTableSchema(), + PRIMARY_CONTEXT, + null); + + assertThat(createTableRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/DeleteItemOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/DeleteItemOperationTest.java index c8a2ab5fb7f9..5719ee214fd0 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/DeleteItemOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/DeleteItemOperationTest.java @@ -23,6 +23,7 @@ import static org.hamcrest.Matchers.sameInstance; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -40,6 +41,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbExtensionContext; import software.amazon.awssdk.enhanced.dynamodb.Expression; @@ -50,10 +52,13 @@ import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItemComposedClass; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItemWithSort; import software.amazon.awssdk.enhanced.dynamodb.internal.extensions.DefaultDynamoDbExtensionContext; +import software.amazon.awssdk.enhanced.dynamodb.model.CreateTableEnhancedRequest; import software.amazon.awssdk.enhanced.dynamodb.model.DeleteItemEnhancedRequest; import software.amazon.awssdk.enhanced.dynamodb.model.TransactDeleteItemEnhancedRequest; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; +import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest; import software.amazon.awssdk.services.dynamodb.model.Delete; import software.amazon.awssdk.services.dynamodb.model.DeleteItemRequest; import software.amazon.awssdk.services.dynamodb.model.DeleteItemResponse; @@ -556,4 +561,27 @@ public void generateTransactWriteItem_returnValuesOnConditionCheckFailure_genera assertThat(actualResult, is(expectedResult)); verify(deleteItemOperation).generateRequest(FakeItem.getTableSchema(), context, mockDynamoDbEnhancedClientExtension); } + + @Test + public void generateRequest_withOverrideConfiguration() { + FakeItem fakeItem = createUniqueFakeItem(); + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + DeleteItemEnhancedRequest deleteItemEnhancedRequest = DeleteItemEnhancedRequest.builder() + .key(k -> k.partitionValue(fakeItem.getId())) + .overrideConfiguration(overrideConfiguration) + .build(); + + DeleteItemOperation deleteItemOperation = DeleteItemOperation.create(deleteItemEnhancedRequest); + + DeleteItemRequest deleteItemRequest = deleteItemOperation.generateRequest(FakeItem.getTableSchema(), + PRIMARY_CONTEXT, + null); + + assertThat(deleteItemRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/GetItemOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/GetItemOperationTest.java index ec213dfe6852..fde7f5952bbc 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/GetItemOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/GetItemOperationTest.java @@ -22,6 +22,7 @@ import static org.hamcrest.Matchers.sameInstance; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -35,6 +36,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbExtensionContext; import software.amazon.awssdk.enhanced.dynamodb.Key; @@ -47,6 +49,7 @@ import software.amazon.awssdk.enhanced.dynamodb.internal.extensions.DefaultDynamoDbExtensionContext; import software.amazon.awssdk.enhanced.dynamodb.model.GetItemEnhancedRequest; import software.amazon.awssdk.enhanced.dynamodb.model.GetItemEnhancedResponse; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.GetItemRequest; @@ -266,4 +269,27 @@ public void transformResponse_withExtension_appliesItemModification() { .items(baseFakeItemMap).build()); } + @Test + public void generateRequest_withOverrideConfiguration() { + FakeItem fakeItem = createUniqueFakeItem(); + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + GetItemEnhancedRequest getItemEnhancedRequest = GetItemEnhancedRequest.builder() + .key(k -> k.partitionValue(fakeItem.getId())) + .overrideConfiguration(overrideConfiguration) + .build(); + + GetItemOperation getItemOperation = GetItemOperation.create(getItemEnhancedRequest); + + GetItemRequest getItemRequest = getItemOperation.generateRequest(FakeItem.getTableSchema(), + PRIMARY_CONTEXT, + null); + + assertThat(getItemRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } + } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/PutItemOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/PutItemOperationTest.java index 195d94974059..9c1ab5ff14e8 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/PutItemOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/PutItemOperationTest.java @@ -22,6 +22,7 @@ import static org.hamcrest.Matchers.sameInstance; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -37,6 +38,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbExtensionContext; import software.amazon.awssdk.enhanced.dynamodb.Expression; @@ -48,6 +50,7 @@ import software.amazon.awssdk.enhanced.dynamodb.internal.extensions.DefaultDynamoDbExtensionContext; import software.amazon.awssdk.enhanced.dynamodb.model.PutItemEnhancedRequest; import software.amazon.awssdk.enhanced.dynamodb.model.TransactPutItemEnhancedRequest; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.Put; @@ -633,4 +636,27 @@ public void generateTransactWriteItem_returnValuesOnConditionCheckFailure_genera assertThat(actualResult, is(expectedResult)); verify(putItemOperation).generateRequest(FakeItem.getTableSchema(), context, mockDynamoDbEnhancedClientExtension); } + + @Test + public void generateRequest_withOverrideConfiguration() { + FakeItem fakeItem = createUniqueFakeItem(); + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + PutItemEnhancedRequest putItemEnhancedRequest = PutItemEnhancedRequest.builder(FakeItem.class) + .item(fakeItem) + .overrideConfiguration(overrideConfiguration) + .build(); + + PutItemOperation putItemOperation = PutItemOperation.create(putItemEnhancedRequest); + + PutItemRequest putItemRequest = putItemOperation.generateRequest(FakeItem.getTableSchema(), + PRIMARY_CONTEXT, + null); + + assertThat(putItemRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/QueryOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/QueryOperationTest.java index fba0cb2328fa..c21fdd05a8a7 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/QueryOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/QueryOperationTest.java @@ -35,6 +35,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -44,6 +45,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.core.async.SdkPublisher; import software.amazon.awssdk.core.pagination.sync.SdkIterable; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; @@ -59,6 +61,7 @@ import software.amazon.awssdk.enhanced.dynamodb.model.Page; import software.amazon.awssdk.enhanced.dynamodb.model.QueryConditional; import software.amazon.awssdk.enhanced.dynamodb.model.QueryEnhancedRequest; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; @@ -434,6 +437,28 @@ public void queryItem_withExtension_correctlyTransformsItem() { .items(attributeMap).build())); } + @Test + public void generateRequest_withOverrideConfiguration() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + QueryEnhancedRequest queryEnhancedRequest = QueryEnhancedRequest.builder() + .queryConditional(keyEqualTo(k -> k.partitionValue(keyItem.getId()))) + .overrideConfiguration(overrideConfiguration) + .build(); + + QueryOperation queryOperation = QueryOperation.create(queryEnhancedRequest); + + QueryRequest queryRequest = queryOperation.generateRequest(FakeItem.getTableSchema(), + PRIMARY_CONTEXT, + null); + + assertThat(queryRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } + private static QueryResponse generateFakeQueryResults(List> queryItemMapsPage) { return QueryResponse.builder().items(queryItemMapsPage).build(); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/ScanOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/ScanOperationTest.java index 661fb9be8915..dc09418a2a67 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/ScanOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/ScanOperationTest.java @@ -41,6 +41,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.core.async.SdkPublisher; import software.amazon.awssdk.core.pagination.sync.SdkIterable; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; @@ -55,6 +56,7 @@ import software.amazon.awssdk.enhanced.dynamodb.internal.extensions.DefaultDynamoDbExtensionContext; import software.amazon.awssdk.enhanced.dynamodb.model.Page; import software.amazon.awssdk.enhanced.dynamodb.model.ScanEnhancedRequest; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; @@ -332,6 +334,27 @@ public void scanItem_withExtension_correctlyTransformsItems() { .items(attributeMap).build())); } + @Test + public void generateRequest_withOverrideConfiguration() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + ScanEnhancedRequest scanEnhancedRequest = ScanEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + ScanOperation scanOperation = ScanOperation.create(scanEnhancedRequest); + + ScanRequest scanRequest = scanOperation.generateRequest(FakeItem.getTableSchema(), + PRIMARY_CONTEXT, + null); + + assertThat(scanRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } + private static ScanResponse generateFakeScanResults(List> scanItemMapsPage) { return ScanResponse.builder().items(scanItemMapsPage).build(); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactGetItemsOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactGetItemsOperationTest.java index 09d39a435f2f..424fc01dd630 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactGetItemsOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactGetItemsOperationTest.java @@ -23,6 +23,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.sameInstance; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @@ -38,6 +39,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Document; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; @@ -47,6 +49,7 @@ import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItemWithSort; import software.amazon.awssdk.enhanced.dynamodb.internal.DefaultDocument; import software.amazon.awssdk.enhanced.dynamodb.model.TransactGetItemsEnhancedRequest; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.Get; @@ -232,6 +235,25 @@ public void transformResponse_noExtension_returnsEmptyAsNull() { DefaultDocument.create(emptyMap()))); } + @Test + public void generateRequest_withOverrideConfiguration() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactGetItemsEnhancedRequest transactGetItemsEnhancedRequest = TransactGetItemsEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + TransactGetItemsOperation transactGetItemsOperation = TransactGetItemsOperation.create(transactGetItemsEnhancedRequest); + + TransactGetItemsRequest transactGetItemsRequest = transactGetItemsOperation.generateRequest(null); + + assertThat(transactGetItemsRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } + private static TransactGetItemsEnhancedRequest emptyRequest() { return TransactGetItemsEnhancedRequest.builder().build(); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactWriteItemsOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactWriteItemsOperationTest.java index 16a0adcfa880..bbc4aa4d8335 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactWriteItemsOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactWriteItemsOperationTest.java @@ -20,6 +20,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.sameInstance; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @@ -31,11 +32,13 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.ConsumedCapacity; @@ -160,6 +163,26 @@ public void transformResponse_doesNothing() { verifyNoMoreInteractions(mockDynamoDbEnhancedClientExtension); } + @Test + public void generateRequest_withOverrideConfiguration() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactWriteItemsEnhancedRequest transactWriteItemsEnhancedRequest = TransactWriteItemsEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + TransactWriteItemsOperation transactWriteItemsOperation = + TransactWriteItemsOperation.create(transactWriteItemsEnhancedRequest); + + TransactWriteItemsRequest transactWriteItemsRequest = transactWriteItemsOperation.generateRequest(null); + + assertThat(transactWriteItemsRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } + private TransactWriteItemsEnhancedRequest emptyRequest() { return TransactWriteItemsEnhancedRequest.builder().build(); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperationTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperationTest.java index baaaeeddad6f..11eca4101981 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperationTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/UpdateItemOperationTest.java @@ -26,6 +26,7 @@ import static org.hamcrest.Matchers.sameInstance; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem.createUniqueFakeItem; @@ -43,6 +44,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbExtensionContext; import software.amazon.awssdk.enhanced.dynamodb.Expression; @@ -56,6 +58,7 @@ import software.amazon.awssdk.enhanced.dynamodb.model.UpdateItemEnhancedRequest; import software.amazon.awssdk.enhanced.dynamodb.update.DeleteAction; import software.amazon.awssdk.enhanced.dynamodb.update.UpdateExpression; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity; @@ -671,6 +674,29 @@ public void transformResponse_afterReadThrowsException_throwsIllegalStateExcepti transformResponse(createUniqueFakeItem()); } + @Test + public void generateRequest_withOverrideConfiguration() { + FakeItem fakeItem = createUniqueFakeItem(); + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + UpdateItemEnhancedRequest updateItemEnhancedRequest = UpdateItemEnhancedRequest.builder(FakeItem.class) + .item(fakeItem) + .overrideConfiguration(overrideConfiguration) + .build(); + + UpdateItemOperation updateItemOperation = UpdateItemOperation.create(updateItemEnhancedRequest); + + UpdateItemRequest updateItemRequest = updateItemOperation.generateRequest(FakeItem.getTableSchema(), + PRIMARY_CONTEXT, + null); + + assertThat(updateItemRequest.overrideConfiguration().get(), is(overrideConfiguration)); + } + private Map ddbKey(String partitionKey) { return singletonMap("id", AttributeValue.builder().s(partitionKey).build()); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchGetItemEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchGetItemEnhancedRequestTest.java index c424363d8465..3b02cb93e703 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchGetItemEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchGetItemEnhancedRequestTest.java @@ -20,6 +20,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import java.util.Collections; import org.junit.Before; @@ -27,11 +28,12 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; -import software.amazon.awssdk.services.dynamodb.model.ConsumedCapacity; import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity; @RunWith(MockitoJUnitRunner.class) @@ -155,4 +157,129 @@ public void returnConsumedCapacity_unknownToSdkVersion() { assertThat(builtObject.returnConsumedCapacityAsString(), equalTo("abcdefg")); } + @Test + public void test_hashCode_includes_overrideConfiguration() { + BatchGetItemEnhancedRequest emptyRequest = BatchGetItemEnhancedRequest.builder().build(); + BatchGetItemEnhancedRequest requestWithOverrideConfig = BatchGetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + BatchGetItemEnhancedRequest builtObject1 = BatchGetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + BatchGetItemEnhancedRequest builtObject2 = BatchGetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + BatchGetItemEnhancedRequest builtObject1 = BatchGetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + BatchGetItemEnhancedRequest builtObject2 = BatchGetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchGetItemEnhancedRequest request = BatchGetItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + BatchGetItemEnhancedRequest request = BatchGetItemEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchGetItemEnhancedRequest request = BatchGetItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchGetItemEnhancedRequest originalRequest = BatchGetItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + BatchGetItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchGetItemEnhancedRequest originalRequest = BatchGetItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + BatchGetItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchWriteItemEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchWriteItemEnhancedRequestTest.java index c4e6a89809ab..d7192c2f8833 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchWriteItemEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/BatchWriteItemEnhancedRequestTest.java @@ -20,6 +20,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import java.util.Collections; import java.util.UUID; @@ -28,9 +29,11 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity; @@ -127,6 +130,93 @@ public void test_returnConsumedCapacity_unknownToSdkVersion() { assertThat(builtObject.returnConsumedCapacity(), equalTo(ReturnConsumedCapacity.UNKNOWN_TO_SDK_VERSION)); } + @Test + public void test_hashCode_includes_overrideConfiguration() { + BatchWriteItemEnhancedRequest emptyRequest = BatchWriteItemEnhancedRequest.builder().build(); + BatchWriteItemEnhancedRequest requestWithOverrideConfig = BatchWriteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + BatchWriteItemEnhancedRequest builtObject1 = BatchWriteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + BatchWriteItemEnhancedRequest builtObject2 = BatchWriteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + BatchWriteItemEnhancedRequest builtObject1 = BatchWriteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + BatchWriteItemEnhancedRequest builtObject2 = BatchWriteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchWriteItemEnhancedRequest request = BatchWriteItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + BatchWriteItemEnhancedRequest request = BatchWriteItemEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchWriteItemEnhancedRequest request = BatchWriteItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + @Test public void toBuilder() { BatchWriteItemEnhancedRequest builtObject = BatchWriteItemEnhancedRequest.builder().build(); @@ -136,4 +226,43 @@ public void toBuilder() { assertThat(copiedObject, is(builtObject)); } + + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchWriteItemEnhancedRequest originalRequest = BatchWriteItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + BatchWriteItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + BatchWriteItemEnhancedRequest originalRequest = BatchWriteItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + BatchWriteItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/CreateTableEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/CreateTableEnhancedRequestTest.java index 4c4251262d59..70a9494ad94f 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/CreateTableEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/CreateTableEnhancedRequestTest.java @@ -16,17 +16,19 @@ package software.amazon.awssdk.enhanced.dynamodb.model; import static java.util.Arrays.asList; -import static java.util.function.Predicate.isEqual; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import java.util.Collections; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; -import software.amazon.awssdk.services.dynamodb.model.LocalSecondaryIndex; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.Projection; import software.amazon.awssdk.services.dynamodb.model.ProjectionType; import software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughput; @@ -87,17 +89,142 @@ public void builder_consumerBuilder() { equalTo(ProvisionedThroughput.builder().readCapacityUnits(10L).build())); } + @Test + public void test_hashCode_includes_overrideConfiguration() { + CreateTableEnhancedRequest emptyRequest = CreateTableEnhancedRequest.builder().build(); + CreateTableEnhancedRequest requestWithOverrideConfig = CreateTableEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + CreateTableEnhancedRequest builtObject1 = CreateTableEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + CreateTableEnhancedRequest builtObject2 = CreateTableEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + CreateTableEnhancedRequest builtObject1 = CreateTableEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + CreateTableEnhancedRequest builtObject2 = CreateTableEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + CreateTableEnhancedRequest request = CreateTableEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + CreateTableEnhancedRequest request = CreateTableEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + CreateTableEnhancedRequest request = CreateTableEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + @Test public void toBuilder() { CreateTableEnhancedRequest builtObject = CreateTableEnhancedRequest.builder() - .provisionedThroughput(getDefaultProvisionedThroughput()) - .build(); + .provisionedThroughput(getDefaultProvisionedThroughput()) + .build(); CreateTableEnhancedRequest copiedObject = builtObject.toBuilder().build(); assertThat(copiedObject, is(builtObject)); } + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + CreateTableEnhancedRequest originalRequest = CreateTableEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + CreateTableEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + CreateTableEnhancedRequest originalRequest = CreateTableEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + CreateTableEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + private ProvisionedThroughput getDefaultProvisionedThroughput() { return ProvisionedThroughput.builder() .writeCapacityUnits(1L) diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/DeleteItemEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/DeleteItemEnhancedRequestTest.java index 1a75d402e275..ca606a2a5644 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/DeleteItemEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/DeleteItemEnhancedRequestTest.java @@ -20,13 +20,17 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue; +import java.util.Collections; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.Key; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity; import software.amazon.awssdk.services.dynamodb.model.ReturnItemCollectionMetrics; import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure; @@ -269,4 +273,130 @@ public void hashCode_returnValuesOnConditionCheckFailure() { assertThat(containsKey.hashCode(), not(equalTo(emptyRequest.hashCode()))); } + + @Test + public void test_hashCode_includes_overrideConfiguration() { + DeleteItemEnhancedRequest emptyRequest = DeleteItemEnhancedRequest.builder().build(); + DeleteItemEnhancedRequest requestWithOverrideConfig = DeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + DeleteItemEnhancedRequest builtObject1 = DeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + DeleteItemEnhancedRequest builtObject2 = DeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + DeleteItemEnhancedRequest builtObject1 = DeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + DeleteItemEnhancedRequest builtObject2 = DeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + DeleteItemEnhancedRequest request = DeleteItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + DeleteItemEnhancedRequest request = DeleteItemEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + DeleteItemEnhancedRequest request = DeleteItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + DeleteItemEnhancedRequest originalRequest = DeleteItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + DeleteItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + DeleteItemEnhancedRequest originalRequest = DeleteItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + DeleteItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/GetItemEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/GetItemEnhancedRequestTest.java index d745382deb5c..7037f3874e20 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/GetItemEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/GetItemEnhancedRequestTest.java @@ -20,12 +20,16 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; +import java.util.Collections; import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Key; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity; @RunWith(MockitoJUnitRunner.class) @@ -109,7 +113,6 @@ public void test_equalsAndHashCode_when_allValuesAreSame() { assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); } - @Test public void test_hashCode_includes_returnConsumedCapacity() { GetItemEnhancedRequest emptyRequest = GetItemEnhancedRequest.builder().build(); @@ -126,7 +129,6 @@ public void test_hashCode_includes_returnConsumedCapacity() { assertThat(requestWithCC1.hashCode(), not(equalTo(requestWithCC2.hashCode()))); } - @Test public void test_returnConsumedCapacity_unknownToSdkVersion() { String newValue = UUID.randomUUID().toString(); @@ -139,6 +141,93 @@ public void test_returnConsumedCapacity_unknownToSdkVersion() { assertThat(request.returnConsumedCapacity(), equalTo(ReturnConsumedCapacity.UNKNOWN_TO_SDK_VERSION)); } + @Test + public void test_hashCode_includes_overrideConfiguration() { + GetItemEnhancedRequest emptyRequest = GetItemEnhancedRequest.builder().build(); + GetItemEnhancedRequest requestWithOverrideConfig = GetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + GetItemEnhancedRequest builtObject1 = GetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + GetItemEnhancedRequest builtObject2 = GetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + GetItemEnhancedRequest builtObject1 = GetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + GetItemEnhancedRequest builtObject2 = GetItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + GetItemEnhancedRequest request = GetItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + GetItemEnhancedRequest request = GetItemEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + GetItemEnhancedRequest request = GetItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } @Test public void toBuilder() { @@ -152,4 +241,42 @@ public void toBuilder() { GetItemEnhancedRequest copiedObject = builtObject.toBuilder().build(); assertThat(copiedObject, is(builtObject)); } + + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + GetItemEnhancedRequest originalRequest = GetItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + GetItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + GetItemEnhancedRequest originalRequest = GetItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + GetItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/PutItemEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/PutItemEnhancedRequestTest.java index 9ab818be7297..76ca4db070b9 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/PutItemEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/PutItemEnhancedRequestTest.java @@ -20,15 +20,19 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem.createUniqueFakeItem; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue; +import java.util.Collections; import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity; import software.amazon.awssdk.services.dynamodb.model.ReturnItemCollectionMetrics; import software.amazon.awssdk.services.dynamodb.model.ReturnValue; @@ -398,4 +402,129 @@ public void returnValuesOnConditionCheckFailure_newValue_stringGetter_returnsVal assertThat(builtObject.returnValuesOnConditionCheckFailureAsString(), equalTo(returnValuesOnConditionCheckFailure)); } + + @Test + public void test_hashCode_includes_overrideConfiguration() { + PutItemEnhancedRequest emptyRequest = PutItemEnhancedRequest.builder(FakeItem.class).build(); + PutItemEnhancedRequest requestWithOverrideConfig = PutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + PutItemEnhancedRequest builtObject1 = PutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + PutItemEnhancedRequest builtObject2 = PutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + PutItemEnhancedRequest builtObject1 = PutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + PutItemEnhancedRequest builtObject2 = PutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + PutItemEnhancedRequest request = PutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + PutItemEnhancedRequest request = PutItemEnhancedRequest.builder(FakeItem.class).build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + PutItemEnhancedRequest request = PutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + PutItemEnhancedRequest originalRequest = PutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(overrideConfiguration) + .build(); + + PutItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + PutItemEnhancedRequest originalRequest = PutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + PutItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequestTest.java index 73098e94eb6f..ac8fe63c09c8 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequestTest.java @@ -18,8 +18,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.NestedAttributeName; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import java.util.*; @@ -27,8 +29,11 @@ import static java.util.Collections.singletonMap; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.numberValue; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue; import static software.amazon.awssdk.enhanced.dynamodb.model.QueryConditional.keyEqualTo; @@ -174,6 +179,93 @@ public void test_nestedAttributesNullNestedAttributeElement() { .build()).isInstanceOf(IllegalArgumentException.class); } + @Test + public void test_hashCode_includes_overrideConfiguration() { + QueryEnhancedRequest emptyRequest = QueryEnhancedRequest.builder().build(); + QueryEnhancedRequest requestWithOverrideConfig = QueryEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + QueryEnhancedRequest builtObject1 = QueryEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + QueryEnhancedRequest builtObject2 = QueryEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + QueryEnhancedRequest builtObject1 = QueryEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + QueryEnhancedRequest builtObject2 = QueryEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + QueryEnhancedRequest request = QueryEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + QueryEnhancedRequest request = QueryEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + QueryEnhancedRequest request = QueryEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + @Test public void toBuilder() { QueryEnhancedRequest builtObject = QueryEnhancedRequest.builder().build(); @@ -183,4 +275,41 @@ public void toBuilder() { assertThat(copiedObject, is(builtObject)); } + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + QueryEnhancedRequest originalRequest = QueryEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + QueryEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + QueryEnhancedRequest originalRequest = QueryEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + QueryEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/ScanEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/ScanEnhancedRequestTest.java index 271cfbe8561c..4a03e77b1ee0 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/ScanEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/ScanEnhancedRequestTest.java @@ -18,21 +18,27 @@ import static java.util.Collections.singletonMap; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.numberValue; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.NestedAttributeName; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; @RunWith(MockitoJUnitRunner.class) @@ -188,6 +194,93 @@ public void test_nestedAttributesNullNestedAttributeElement() { .build()).isInstanceOf(IllegalArgumentException.class); } + @Test + public void test_hashCode_includes_overrideConfiguration() { + ScanEnhancedRequest emptyRequest = ScanEnhancedRequest.builder().build(); + ScanEnhancedRequest requestWithOverrideConfig = ScanEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + ScanEnhancedRequest builtObject1 = ScanEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + ScanEnhancedRequest builtObject2 = ScanEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + ScanEnhancedRequest builtObject1 = ScanEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + ScanEnhancedRequest builtObject2 = ScanEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + ScanEnhancedRequest request = ScanEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + ScanEnhancedRequest request = ScanEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + ScanEnhancedRequest request = ScanEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + @Test public void toBuilder() { ScanEnhancedRequest builtObject = ScanEnhancedRequest.builder().exclusiveStartKey(null).build(); @@ -197,4 +290,42 @@ public void toBuilder() { assertThat(copiedObject, is(builtObject)); } + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + ScanEnhancedRequest originalRequest = ScanEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + ScanEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + ScanEnhancedRequest originalRequest = ScanEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + ScanEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactDeleteItemEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactDeleteItemEnhancedRequestTest.java index dc33f4c07696..4f64e8f29846 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactDeleteItemEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactDeleteItemEnhancedRequestTest.java @@ -20,13 +20,17 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue; +import java.util.Collections; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.Key; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure; @RunWith(MockitoJUnitRunner.class) @@ -227,4 +231,125 @@ public void builder_returnValuesOnConditionCheckFailureSetterString() { assertThat(builtObject.returnValuesOnConditionCheckFailureAsString(), is(returnValues)); } + @Test + public void test_hashCode_includes_overrideConfiguration() { + TransactDeleteItemEnhancedRequest emptyRequest = TransactDeleteItemEnhancedRequest.builder().build(); + TransactDeleteItemEnhancedRequest requestWithOverrideConfig = TransactDeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactDeleteItemEnhancedRequest builtObject1 = TransactDeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactDeleteItemEnhancedRequest builtObject2 = TransactDeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactDeleteItemEnhancedRequest builtObject1 = TransactDeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactDeleteItemEnhancedRequest builtObject2 = TransactDeleteItemEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactDeleteItemEnhancedRequest request = TransactDeleteItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + TransactDeleteItemEnhancedRequest request = TransactDeleteItemEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactDeleteItemEnhancedRequest request = TransactDeleteItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactDeleteItemEnhancedRequest originalRequest = TransactDeleteItemEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + TransactDeleteItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi").version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactDeleteItemEnhancedRequest originalRequest = TransactDeleteItemEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + TransactDeleteItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactGetItemsEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactGetItemsEnhancedRequestTest.java index d3ad194e64ae..c9bfcb24b8fd 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactGetItemsEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactGetItemsEnhancedRequestTest.java @@ -16,11 +16,15 @@ package software.amazon.awssdk.enhanced.dynamodb.model; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem.createUniqueFakeItem; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import org.junit.Before; @@ -28,9 +32,11 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.Get; @@ -92,16 +98,102 @@ public void builder_maximal_builder_style() { assertThat(builtObject.transactGetItems(), is(getTransactGetItems(fakeItem))); } - + @Test + public void test_hashCode_includes_overrideConfiguration() { + TransactGetItemsEnhancedRequest emptyRequest = TransactGetItemsEnhancedRequest.builder().build(); + TransactGetItemsEnhancedRequest requestWithOverrideConfig = TransactGetItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactGetItemsEnhancedRequest builtObject1 = TransactGetItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactGetItemsEnhancedRequest builtObject2 = TransactGetItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactGetItemsEnhancedRequest builtObject1 = TransactGetItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactGetItemsEnhancedRequest builtObject2 = TransactGetItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactGetItemsEnhancedRequest request = TransactGetItemsEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + TransactGetItemsEnhancedRequest request = TransactGetItemsEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactGetItemsEnhancedRequest request = TransactGetItemsEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + private List getTransactGetItems(FakeItem fakeItem) { final Map fakeItemMap = FakeItem.getTableSchema().itemToMap(fakeItem, true); TransactGetItem getItem = TransactGetItem.builder() - .get(Get.builder() - .key(fakeItemMap) - .tableName(TABLE_NAME) - .build()) - .build(); + .get(Get.builder() + .key(fakeItemMap) + .tableName(TABLE_NAME) + .build()) + .build(); return Arrays.asList(getItem, getItem); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactPutItemEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactPutItemEnhancedRequestTest.java index 459cf095fe38..83a4b0102cf3 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactPutItemEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactPutItemEnhancedRequestTest.java @@ -20,14 +20,18 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem.createUniqueFakeItem; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue; +import java.util.Collections; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure; @RunWith(MockitoJUnitRunner.class) @@ -259,4 +263,130 @@ public void builder_returnValuesOnConditionCheckFailureNewValue_stringGetter() { .build(); assertThat(builtObject.returnValuesOnConditionCheckFailureAsString(), is(returnValues)); } + + @Test + public void test_hashCode_includes_overrideConfiguration() { + TransactPutItemEnhancedRequest emptyRequest = TransactPutItemEnhancedRequest.builder(FakeItem.class).build(); + TransactPutItemEnhancedRequest requestWithOverrideConfig = + TransactPutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactPutItemEnhancedRequest builtObject1 = TransactPutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactPutItemEnhancedRequest builtObject2 = TransactPutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactPutItemEnhancedRequest builtObject1 = TransactPutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactPutItemEnhancedRequest builtObject2 = TransactPutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactPutItemEnhancedRequest request = TransactPutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + TransactPutItemEnhancedRequest request = TransactPutItemEnhancedRequest.builder(FakeItem.class).build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactPutItemEnhancedRequest request = TransactPutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactPutItemEnhancedRequest originalRequest = TransactPutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(overrideConfiguration) + .build(); + + TransactPutItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactPutItemEnhancedRequest originalRequest = TransactPutItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + TransactPutItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactUpdateItemEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactUpdateItemEnhancedRequestTest.java index 855d426fa8c7..a68981e3389b 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactUpdateItemEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactUpdateItemEnhancedRequestTest.java @@ -20,14 +20,18 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem.createUniqueFakeItem; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue; +import java.util.Collections; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure; @RunWith(MockitoJUnitRunner.class) @@ -284,4 +288,131 @@ public void builder_returnValuesOnConditionCheckFailureNewValue_stringGetter() { .build(); assertThat(builtObject.returnValuesOnConditionCheckFailureAsString(), is(returnValues)); } + + @Test + public void test_hashCode_includes_overrideConfiguration() { + TransactUpdateItemEnhancedRequest emptyRequest = + TransactUpdateItemEnhancedRequest.builder(FakeItem.class).build(); + TransactUpdateItemEnhancedRequest requestWithOverrideConfig = + TransactUpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactUpdateItemEnhancedRequest builtObject1 = TransactUpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactUpdateItemEnhancedRequest builtObject2 = TransactUpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactUpdateItemEnhancedRequest builtObject1 = TransactUpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactUpdateItemEnhancedRequest builtObject2 = TransactUpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactUpdateItemEnhancedRequest request = TransactUpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + TransactUpdateItemEnhancedRequest request = TransactUpdateItemEnhancedRequest.builder(FakeItem.class).build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactUpdateItemEnhancedRequest request = TransactUpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactUpdateItemEnhancedRequest originalRequest = TransactUpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(overrideConfiguration) + .build(); + + TransactUpdateItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactUpdateItemEnhancedRequest originalRequest = TransactUpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + TransactUpdateItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } } \ No newline at end of file diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactWriteItemsEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactWriteItemsEnhancedRequestTest.java index e8a9f4881ce7..2422b52adee8 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactWriteItemsEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/TransactWriteItemsEnhancedRequestTest.java @@ -17,14 +17,18 @@ import static java.util.Collections.singletonMap; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem.createUniqueFakeItem; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.UUID; @@ -33,6 +37,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; @@ -41,10 +46,10 @@ import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; import software.amazon.awssdk.enhanced.dynamodb.internal.client.ExtensionResolver; import software.amazon.awssdk.enhanced.dynamodb.internal.operations.TransactWriteItemsOperation; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.Delete; -import software.amazon.awssdk.services.dynamodb.model.ItemCollectionMetrics; import software.amazon.awssdk.services.dynamodb.model.Put; import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity; import software.amazon.awssdk.services.dynamodb.model.ReturnItemCollectionMetrics; @@ -194,6 +199,93 @@ public void builder_passRequestToken_shouldWork() { assertEquals(token, request.clientRequestToken()); } + @Test + public void test_hashCode_includes_overrideConfiguration() { + TransactWriteItemsEnhancedRequest emptyRequest = TransactWriteItemsEnhancedRequest.builder().build(); + TransactWriteItemsEnhancedRequest requestWithOverrideConfig = TransactWriteItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactWriteItemsEnhancedRequest builtObject1 = TransactWriteItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactWriteItemsEnhancedRequest builtObject2 = TransactWriteItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + TransactWriteItemsEnhancedRequest builtObject1 = TransactWriteItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + TransactWriteItemsEnhancedRequest builtObject2 = TransactWriteItemsEnhancedRequest.builder() + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactWriteItemsEnhancedRequest request = TransactWriteItemsEnhancedRequest.builder() + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + TransactWriteItemsEnhancedRequest request = TransactWriteItemsEnhancedRequest.builder().build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + TransactWriteItemsEnhancedRequest request = TransactWriteItemsEnhancedRequest.builder() + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + private List getTransactWriteItems(FakeItem fakeItem) { final Map fakeItemMap = FakeItem.getTableSchema().itemToMap(fakeItem, true); diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/UpdateItemEnhancedRequestTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/UpdateItemEnhancedRequestTest.java index 539546a4fab3..44deb3c217b4 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/UpdateItemEnhancedRequestTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/model/UpdateItemEnhancedRequestTest.java @@ -20,14 +20,18 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; +import static org.mockito.Mockito.mock; import static software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem.createUniqueFakeItem; import static software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues.stringValue; +import java.util.Collections; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; import software.amazon.awssdk.enhanced.dynamodb.Expression; import software.amazon.awssdk.enhanced.dynamodb.functionaltests.models.FakeItem; +import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.services.dynamodb.model.ReturnConsumedCapacity; import software.amazon.awssdk.services.dynamodb.model.ReturnItemCollectionMetrics; import software.amazon.awssdk.services.dynamodb.model.ReturnValuesOnConditionCheckFailure; @@ -304,4 +308,129 @@ public void hashCode_returnValuesOnConditionCheckFailure() { assertThat(containsItem.hashCode(), not(equalTo(emptyRequest.hashCode()))); } + + @Test + public void test_hashCode_includes_overrideConfiguration() { + UpdateItemEnhancedRequest emptyRequest = UpdateItemEnhancedRequest.builder(FakeItem.class).build(); + UpdateItemEnhancedRequest requestWithOverrideConfig = UpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder().build()) + .build(); + + assertThat(emptyRequest.hashCode(), not(equalTo(requestWithOverrideConfig.hashCode()))); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isSame() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + UpdateItemEnhancedRequest builtObject1 = UpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + UpdateItemEnhancedRequest builtObject2 = UpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + assertThat(builtObject1, equalTo(builtObject2)); + assertThat(builtObject1.hashCode(), equalTo(builtObject2.hashCode())); + } + + @Test + public void test_equalsAndHashCode_when_overrideConfiguration_isDifferent() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + UpdateItemEnhancedRequest builtObject1 = UpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .addMetricPublisher(mockMetricPublisher) + .build()) + .build(); + + UpdateItemEnhancedRequest builtObject2 = UpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(AwsRequestOverrideConfiguration.builder() + .build()) + .build(); + + assertThat(builtObject1, not(equalTo(builtObject2))); + assertThat(builtObject1.hashCode(), not(equalTo(builtObject2.hashCode()))); + } + + @Test + public void builder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + UpdateItemEnhancedRequest request = UpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(overrideConfiguration) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void builder_withoutOverrideConfiguration() { + UpdateItemEnhancedRequest request = UpdateItemEnhancedRequest.builder(FakeItem.class).build(); + + assertThat(request.overrideConfiguration(), is(nullValue())); + } + + @Test + public void builder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + UpdateItemEnhancedRequest request = UpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(b -> b.addApiName(api -> api.name("TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + assertThat(request.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + UpdateItemEnhancedRequest originalRequest = UpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(overrideConfiguration) + .build(); + + UpdateItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } + + @Test + public void toBuilder_withOverrideConfigurationConsumerAndMetricPublisher() { + MetricPublisher mockMetricPublisher = mock(MetricPublisher.class); + AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() + .addApiName(b -> b.name("TestApi" + ).version("1.0")) + .addMetricPublisher(mockMetricPublisher) + .build(); + + UpdateItemEnhancedRequest originalRequest = UpdateItemEnhancedRequest.builder(FakeItem.class) + .overrideConfiguration(b -> b.addApiName(api -> api.name( + "TestApi").version("1.0")) + .metricPublishers(Collections.singletonList(mockMetricPublisher))) + .build(); + + UpdateItemEnhancedRequest copiedRequest = originalRequest.toBuilder().build(); + + assertThat(copiedRequest.overrideConfiguration(), is(overrideConfiguration)); + } }