Skip to content

Commit 071c592

Browse files
authored
Handle void response in injectCredentialsAndInvoke (#338)
* Overload function and use Consumer interface
1 parent 3abe4bf commit 071c592

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.Objects;
2828
import java.util.concurrent.CompletableFuture;
2929
import java.util.function.BiFunction;
30+
import java.util.function.Consumer;
3031
import java.util.function.Function;
3132
import java.util.function.Supplier;
3233
import javax.annotation.Nonnull;
@@ -443,9 +444,24 @@ public ProgressEvent<ModelT, CallbackT> done(Function<ResponseT, ProgressEvent<M
443444
request.setRequestCredentialsProvider(v1CredentialsProvider);
444445

445446
try {
446-
ResultT respose = requestFunction.apply(request);
447-
logRequestMetadata(request, respose);
448-
return respose;
447+
ResultT response = requestFunction.apply(request);
448+
logRequestMetadata(request, response);
449+
return response;
450+
} catch (final Throwable e) {
451+
loggerProxy.log(String.format("Failed to execute remote function: {%s}", e.getMessage()));
452+
throw e;
453+
} finally {
454+
request.setRequestCredentialsProvider(null);
455+
}
456+
}
457+
458+
public <RequestT extends AmazonWebServiceRequest> void injectCredentialsAndInvoke(final RequestT request,
459+
final Consumer<RequestT> requestFunction) {
460+
461+
request.setRequestCredentialsProvider(v1CredentialsProvider);
462+
463+
try {
464+
requestFunction.accept(request);
449465
} catch (final Throwable e) {
450466
loggerProxy.log(String.format("Failed to execute remote function: {%s}", e.getMessage()));
451467
throw e;

src/test/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxyTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ public class AmazonWebServicesClientProxyTest {
7676
//
7777
private final AwsSessionCredentials MockCreds = AwsSessionCredentials.create("accessKeyId", "secretKey", "token");
7878

79+
//
80+
// Empty method for testing injectCredentialsAndInvoke with void returns
81+
//
82+
public static void dummyMethod(DescribeStackEventsRequest request) {
83+
}
84+
7985
@Test
8086
public void testInjectCredentialsAndInvoke() {
8187

@@ -102,6 +108,23 @@ public void testInjectCredentialsAndInvoke() {
102108
assertThat(result).isEqualTo(expectedResult);
103109
}
104110

111+
@Test
112+
public void testInjectCredentialsAndInvokeWithVoidFunction() {
113+
114+
final LoggerProxy loggerProxy = mock(LoggerProxy.class);
115+
final Credentials credentials = new Credentials("accessKeyId", "secretAccessKey", "sessionToken");
116+
117+
final AmazonWebServicesClientProxy proxy = new AmazonWebServicesClientProxy(loggerProxy, credentials, () -> 1000L);
118+
119+
final DescribeStackEventsRequest request = mock(DescribeStackEventsRequest.class);
120+
121+
proxy.injectCredentialsAndInvoke(request, AmazonWebServicesClientProxyTest::dummyMethod);
122+
123+
// ensure credentials are injected and then removed
124+
verify(request).setRequestCredentialsProvider(any(AWSStaticCredentialsProvider.class));
125+
verify(request).setRequestCredentialsProvider(eq(null));
126+
}
127+
105128
@Test
106129
public void testInjectCredentialsAndInvokeWithError() {
107130

0 commit comments

Comments
 (0)