From bf0af2e739e46bffe62260ef2ebe9ad6fb82ae48 Mon Sep 17 00:00:00 2001 From: Omkar Hegde Date: Tue, 8 Dec 2020 11:34:06 -0800 Subject: [PATCH 1/3] Handle void response in injectCredentialsAndInvoke --- .../proxy/AmazonWebServicesClientProxy.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java b/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java index f2683809..9c73aaaf 100644 --- a/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java +++ b/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java @@ -443,9 +443,12 @@ public ProgressEvent done(Function Date: Tue, 8 Dec 2020 13:27:02 -0800 Subject: [PATCH 2/3] Overload function and use Consumer interface --- .../proxy/AmazonWebServicesClientProxy.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java b/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java index 9c73aaaf..3cb1db09 100644 --- a/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java +++ b/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java @@ -27,6 +27,7 @@ import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; import javax.annotation.Nonnull; @@ -444,10 +445,7 @@ public ProgressEvent done(Function done(Function + void + injectCredentialsAndInvoke(final RequestT request, final Consumer requestFunction) { + + request.setRequestCredentialsProvider(v1CredentialsProvider); + + try { + requestFunction.accept(request); + } catch (final Throwable e) { + loggerProxy.log(String.format("Failed to execute remote function: {%s}", e.getMessage())); + throw e; + } finally { + request.setRequestCredentialsProvider(null); + } + } + public ResultT injectCredentialsAndInvokeV2(final RequestT request, final Function requestFunction) { @@ -477,6 +491,8 @@ public ProgressEvent done(Function CompletableFuture injectCredentialsAndInvokeV2Async(final RequestT request, From d020226b4f9290d3aa9450617fc5c261c4f4b501 Mon Sep 17 00:00:00 2001 From: Omkar Hegde Date: Tue, 8 Dec 2020 14:41:26 -0800 Subject: [PATCH 3/3] Add a test, fix indentation --- .../proxy/AmazonWebServicesClientProxy.java | 7 ++---- .../AmazonWebServicesClientProxyTest.java | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java b/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java index 3cb1db09..420b1cbf 100644 --- a/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java +++ b/src/main/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxy.java @@ -455,9 +455,8 @@ public ProgressEvent done(Function - void - injectCredentialsAndInvoke(final RequestT request, final Consumer requestFunction) { + public void injectCredentialsAndInvoke(final RequestT request, + final Consumer requestFunction) { request.setRequestCredentialsProvider(v1CredentialsProvider); @@ -491,8 +490,6 @@ public ProgressEvent done(Function CompletableFuture injectCredentialsAndInvokeV2Async(final RequestT request, diff --git a/src/test/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxyTest.java b/src/test/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxyTest.java index 9cbf0c32..d60b7d4d 100644 --- a/src/test/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxyTest.java +++ b/src/test/java/software/amazon/cloudformation/proxy/AmazonWebServicesClientProxyTest.java @@ -76,6 +76,12 @@ public class AmazonWebServicesClientProxyTest { // private final AwsSessionCredentials MockCreds = AwsSessionCredentials.create("accessKeyId", "secretKey", "token"); + // + // Empty method for testing injectCredentialsAndInvoke with void returns + // + public static void dummyMethod(DescribeStackEventsRequest request) { + } + @Test public void testInjectCredentialsAndInvoke() { @@ -102,6 +108,23 @@ public void testInjectCredentialsAndInvoke() { assertThat(result).isEqualTo(expectedResult); } + @Test + public void testInjectCredentialsAndInvokeWithVoidFunction() { + + final LoggerProxy loggerProxy = mock(LoggerProxy.class); + final Credentials credentials = new Credentials("accessKeyId", "secretAccessKey", "sessionToken"); + + final AmazonWebServicesClientProxy proxy = new AmazonWebServicesClientProxy(loggerProxy, credentials, () -> 1000L); + + final DescribeStackEventsRequest request = mock(DescribeStackEventsRequest.class); + + proxy.injectCredentialsAndInvoke(request, AmazonWebServicesClientProxyTest::dummyMethod); + + // ensure credentials are injected and then removed + verify(request).setRequestCredentialsProvider(any(AWSStaticCredentialsProvider.class)); + verify(request).setRequestCredentialsProvider(eq(null)); + } + @Test public void testInjectCredentialsAndInvokeWithError() {