Skip to content

Commit 5841de1

Browse files
committed
Adds all fields in RequestOverrideConfiguration when a builder is created from an instance
1 parent 6a11ab8 commit 5841de1

File tree

7 files changed

+149
-1
lines changed

7 files changed

+149
-1
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"contributor": "",
4+
"type": "bugfix",
5+
"description": "Adds all fields in RequestOverrideConfiguration when a builder is created from an instance"
6+
}

core/sdk-core/src/main/java/software/amazon/awssdk/core/RequestOverrideConfiguration.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,11 @@ protected BuilderImpl(RequestOverrideConfiguration sdkRequestOverrideConfig) {
428428
headers(sdkRequestOverrideConfig.headers);
429429
rawQueryParameters(sdkRequestOverrideConfig.rawQueryParameters);
430430
sdkRequestOverrideConfig.apiNames.forEach(this::addApiName);
431+
apiCallTimeout(sdkRequestOverrideConfig.apiCallTimeout);
432+
apiCallAttemptTimeout(sdkRequestOverrideConfig.apiCallAttemptTimeout);
433+
signer(sdkRequestOverrideConfig.signer().orElse(null));
434+
metricPublishers(sdkRequestOverrideConfig.metricPublishers());
435+
executionAttributes(sdkRequestOverrideConfig.executionAttributes());
431436
}
432437

433438
@Override

core/sdk-core/src/test/java/software/amazon/awssdk/core/RequestOverrideConfigurationTest.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
package software.amazon.awssdk.core;
1717

18-
1918
import static org.assertj.core.api.Assertions.assertThat;
2019
import static org.junit.Assert.fail;
2120
import static org.mockito.Mockito.mock;
@@ -27,16 +26,53 @@
2726
import java.util.HashMap;
2827
import java.util.List;
2928
import java.util.Map;
29+
import nl.jqno.equalsverifier.EqualsVerifier;
3030
import org.junit.Test;
3131
import software.amazon.awssdk.core.interceptor.ExecutionAttribute;
3232
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
33+
import software.amazon.awssdk.core.signer.Signer;
34+
import software.amazon.awssdk.http.SdkHttpFullRequest;
3335
import software.amazon.awssdk.metrics.MetricPublisher;
3436
import software.amazon.awssdk.utils.ImmutableMap;
3537

3638
public class RequestOverrideConfigurationTest {
3739
private static final String HEADER = "header";
3840
private static final String QUERY_PARAM = "queryparam";
3941

42+
@Test
43+
public void equalsHashcode() {
44+
EqualsVerifier.forClass(RequestOverrideConfiguration.class)
45+
.usingGetClass()
46+
.verify();
47+
}
48+
49+
@Test
50+
public void toBuilder_minimal() {
51+
RequestOverrideConfiguration configuration = SdkRequestOverrideConfiguration.builder()
52+
.build();
53+
54+
assertThat(configuration.toBuilder().build()).usingRecursiveComparison().isEqualTo(configuration);
55+
}
56+
57+
@Test
58+
public void toBuilder_maximal() {
59+
ExecutionAttribute testAttribute = new ExecutionAttribute("TestAttribute");
60+
String expectedValue = "Value1";
61+
62+
RequestOverrideConfiguration configuration = SdkRequestOverrideConfiguration.builder()
63+
.putHeader(HEADER, "foo")
64+
.putRawQueryParameter(QUERY_PARAM, "foo")
65+
.addApiName(a -> a.name("test1").version("1"))
66+
.apiCallTimeout(Duration.ofSeconds(1))
67+
.apiCallAttemptTimeout(Duration.ofSeconds(1))
68+
.signer(new NoOpSigner())
69+
.executionAttributes(ExecutionAttributes.builder().put(testAttribute, expectedValue).build())
70+
.addMetricPublisher(mock(MetricPublisher.class))
71+
.build();
72+
73+
assertThat(configuration.toBuilder().build()).usingRecursiveComparison().isEqualTo(configuration);
74+
}
75+
4076
@Test
4177
public void addingSameItemTwice_shouldOverride() {
4278
RequestOverrideConfiguration configuration = SdkRequestOverrideConfiguration.builder()
@@ -284,4 +320,12 @@ public void testConfigurationEquals() {
284320
assertThat(request1Override).isEqualTo(request2Override);
285321
assertThat(request1Override).isNotEqualTo(null);
286322
}
323+
324+
private static class NoOpSigner implements Signer {
325+
326+
@Override
327+
public SdkHttpFullRequest sign(SdkHttpFullRequest request, ExecutionAttributes executionAttributes) {
328+
return null;
329+
}
330+
}
287331
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"pagination": {
3+
"PaginatedOperationWithResultKey": {
4+
"input_token": "NextToken",
5+
"output_token": "NextToken",
6+
"limit_key": "MaxResults",
7+
"result_key": "Items"
8+
}
9+
}
10+
}

test/codegen-generated-classes-test/src/main/resources/codegen-resources/customresponsemetadata/service-2.json

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,20 @@
143143
"requestUri":"/2016-03-11/operationWithNoInputOrOutput"
144144
}
145145
},
146+
"PaginatedOperationWithResultKey": {
147+
"name": "PaginatedOperationWithResultKey",
148+
"http": {
149+
"method": "POST",
150+
"requestUri": "/"
151+
},
152+
"input": {
153+
"shape": "PaginatedOperationWithResultKeyRequest"
154+
},
155+
"output": {
156+
"shape": "PaginatedOperationWithResultKeyResponse"
157+
},
158+
"documentation": "Some paginated operation with result_key in paginators.json file"
159+
},
146160
"QueryParamWithoutValue":{
147161
"name":"QueryParamWithoutValue",
148162
"http":{
@@ -572,6 +586,33 @@
572586
}
573587
}
574588
},
589+
"PaginatedOperationWithResultKeyRequest": {
590+
"type": "structure",
591+
"members": {
592+
"NextToken": {
593+
"shape": "String",
594+
"documentation": "<p>Token for the next set of results</p>"
595+
},
596+
"MaxResults": {
597+
"shape": "String",
598+
"documentation": "<p>Maximum number of results in a single page</p>"
599+
}
600+
}
601+
},
602+
"PaginatedOperationWithResultKeyResponse": {
603+
"type": "structure",
604+
"members": {
605+
"NextToken": {
606+
"shape": "String",
607+
"documentation": "<p>Token for the next set of results</p>"
608+
},
609+
"Items": {
610+
"shape": "ListOfSimpleStructs",
611+
"documentation": "<p>Maximum number of results in a single page</p>"
612+
}
613+
},
614+
"documentation": "<p>Response type of a single page</p>"
615+
},
575616
"PayloadStructType":{
576617
"type":"structure",
577618
"members":{

test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/metrics/CoreMetricsTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import java.io.ByteArrayInputStream;
2626
import java.io.IOException;
2727
import java.time.Duration;
28+
import java.util.List;
29+
import java.util.stream.Collectors;
2830
import org.junit.After;
2931
import org.junit.Before;
3032
import org.junit.Rule;
@@ -49,6 +51,8 @@
4951
import software.amazon.awssdk.regions.Region;
5052
import software.amazon.awssdk.services.protocolrestjson.ProtocolRestJsonClient;
5153
import software.amazon.awssdk.services.protocolrestjson.model.EmptyModeledException;
54+
import software.amazon.awssdk.services.protocolrestjson.model.SimpleStruct;
55+
import software.amazon.awssdk.services.protocolrestjson.paginators.PaginatedOperationWithResultKeyIterable;
5256

5357
@RunWith(MockitoJUnitRunner.class)
5458
public class CoreMetricsTest {
@@ -141,6 +145,20 @@ public void testApiCall_publisherOverriddenOnRequest_requestPublisherTakesPreced
141145
verifyZeroInteractions(mockPublisher);
142146
}
143147

148+
@Test
149+
public void testPaginatingApiCall_publisherOverriddenOnRequest_requestPublisherTakesPrecedence() {
150+
MetricPublisher requestMetricPublisher = mock(MetricPublisher.class);
151+
152+
PaginatedOperationWithResultKeyIterable iterable =
153+
client.paginatedOperationWithResultKeyPaginator(
154+
r -> r.overrideConfiguration(o -> o.addMetricPublisher(requestMetricPublisher)));
155+
156+
List<SimpleStruct> resultingItems = iterable.items().stream().collect(Collectors.toList());
157+
158+
verify(requestMetricPublisher).publish(any(MetricCollection.class));
159+
verifyZeroInteractions(mockPublisher);
160+
}
161+
144162
@Test
145163
public void testApiCall_operationSuccessful_addsMetrics() {
146164
client.allTypes();

test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/metrics/async/AsyncCoreMetricsTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,12 @@
2424
import com.github.tomakehurst.wiremock.junit.WireMockRule;
2525
import java.io.IOException;
2626
import java.net.URI;
27+
import java.util.ArrayList;
28+
import java.util.List;
2729
import java.util.concurrent.CompletableFuture;
30+
import java.util.concurrent.ExecutionException;
2831
import java.util.function.Supplier;
32+
import java.util.stream.Collectors;
2933
import org.junit.After;
3034
import org.junit.Before;
3135
import org.junit.Rule;
@@ -39,6 +43,10 @@
3943
import software.amazon.awssdk.metrics.MetricPublisher;
4044
import software.amazon.awssdk.regions.Region;
4145
import software.amazon.awssdk.services.protocolrestjson.ProtocolRestJsonAsyncClient;
46+
import software.amazon.awssdk.services.protocolrestjson.model.PaginatedOperationWithResultKeyResponse;
47+
import software.amazon.awssdk.services.protocolrestjson.model.SimpleStruct;
48+
import software.amazon.awssdk.services.protocolrestjson.paginators.PaginatedOperationWithResultKeyIterable;
49+
import software.amazon.awssdk.services.protocolrestjson.paginators.PaginatedOperationWithResultKeyPublisher;
4250

4351
/**
4452
* Core metrics test for async non-streaming API
@@ -123,4 +131,20 @@ public void apiCall_publisherOverriddenOnRequest_requestPublisherTakesPrecedence
123131
verify(requestMetricPublisher).publish(any(MetricCollection.class));
124132
verifyZeroInteractions(mockPublisher);
125133
}
134+
135+
@Test
136+
public void testPaginatingApiCall_publisherOverriddenOnRequest_requestPublisherTakesPrecedence() throws Exception {
137+
stubSuccessfulResponse();
138+
MetricPublisher requestMetricPublisher = mock(MetricPublisher.class);
139+
140+
PaginatedOperationWithResultKeyPublisher paginatedPublisher =
141+
client.paginatedOperationWithResultKeyPaginator(
142+
r -> r.overrideConfiguration(o -> o.addMetricPublisher(requestMetricPublisher)));
143+
144+
CompletableFuture<Void> future = paginatedPublisher.subscribe(PaginatedOperationWithResultKeyResponse::items);
145+
future.get();
146+
147+
verify(requestMetricPublisher).publish(any(MetricCollection.class));
148+
verifyZeroInteractions(mockPublisher);
149+
}
126150
}

0 commit comments

Comments
 (0)