Skip to content

Commit a74a040

Browse files
authored
Merge pull request #4 from brianlaoaws/master-from-brianlao-github-fort
Fix resource targetting for a stack level hook
2 parents c8c005f + c73d8d3 commit a74a040

File tree

2 files changed

+37
-33
lines changed

2 files changed

+37
-33
lines changed

src/main/java/software/amazon/cloudformation/HookAbstractWrapper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,8 +424,7 @@ protected boolean isHookInvocationPayloadRemote(HookRequestData hookRequestData)
424424
throw new TerminalException("No payload data set.");
425425
}
426426

427-
return true;
428-
// return hookRequestData.getTargetModel().isEmpty();
427+
return hookRequestData.getTargetModel().isEmpty();
429428
}
430429

431430
/**

src/test/java/software/amazon/cloudformation/HookLambdaWrapperTest.java

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,29 @@
2323
import com.amazonaws.services.lambda.runtime.Context;
2424
import com.amazonaws.services.lambda.runtime.LambdaLogger;
2525
import com.fasterxml.jackson.core.type.TypeReference;
26+
import com.google.common.collect.ImmutableList;
27+
import com.google.common.collect.ImmutableMap;
2628
import java.io.ByteArrayOutputStream;
2729
import java.io.File;
2830
import java.io.FileInputStream;
2931
import java.io.FileNotFoundException;
3032
import java.io.IOException;
3133
import java.io.InputStream;
3234
import java.io.OutputStream;
35+
import java.util.Collections;
3336
import java.util.List;
3437
import java.util.Map;
38+
import org.junit.jupiter.api.Assertions;
3539
import org.junit.jupiter.api.BeforeEach;
40+
import org.junit.jupiter.api.Test;
3641
import org.junit.jupiter.api.extension.ExtendWith;
3742
import org.junit.jupiter.params.ParameterizedTest;
3843
import org.junit.jupiter.params.provider.CsvSource;
3944
import org.mockito.Mock;
4045
import org.mockito.junit.jupiter.MockitoExtension;
4146
import software.amazon.awssdk.http.SdkHttpClient;
4247
import software.amazon.cloudformation.encryption.KMSCipher;
48+
import software.amazon.cloudformation.exceptions.TerminalException;
4349
import software.amazon.cloudformation.injection.CredentialsProvider;
4450
import software.amazon.cloudformation.loggers.CloudWatchLogPublisher;
4551
import software.amazon.cloudformation.loggers.LogPublisher;
@@ -50,6 +56,7 @@
5056
import software.amazon.cloudformation.proxy.ProgressEvent;
5157
import software.amazon.cloudformation.proxy.hook.HookHandlerRequest;
5258
import software.amazon.cloudformation.proxy.hook.HookProgressEvent;
59+
import software.amazon.cloudformation.proxy.hook.HookRequestData;
5360
import software.amazon.cloudformation.proxy.hook.HookStatus;
5461
import software.amazon.cloudformation.proxy.hook.targetmodel.ChangedResource;
5562
import software.amazon.cloudformation.proxy.hook.targetmodel.StackHookTargetModel;
@@ -387,37 +394,35 @@ public void invokeHandler_WithStackLevelHook_returnsSuccess(final String request
387394
}
388395
}
389396

390-
// @Test
391-
// public void testIsHookInvocationPayloadRemote() {
392-
// List<HookRequestData> invalidHookRequestDataObjects = ImmutableList.of(
393-
// HookRequestData.builder().targetModel(null).build(),
394-
// HookRequestData.builder().targetModel(null).payload(null).build(),
395-
// HookRequestData.builder().targetModel(Collections.emptyMap()).payload(null).build(),
396-
// HookRequestData.builder().targetModel(Collections.emptyMap()).payload(null).build()
397-
// );
398-
//
399-
// invalidHookRequestDataObjects.forEach(requestData -> {
400-
// Assertions.assertThrows(TerminalException.class, () ->
401-
// wrapper.isHookInvocationPayloadRemote(requestData));
402-
// });
403-
//
404-
// Assertions.assertThrows(TerminalException.class, () ->
405-
// wrapper.isHookInvocationPayloadRemote(null));
406-
//
407-
// HookRequestData bothFieldsPopulated =
408-
// HookRequestData.builder().targetModel(ImmutableMap.of("foo", "bar"))
409-
// .payload("http://s3PresignedUrl").build();
410-
// HookRequestData onlyTargetModelPopulated =
411-
// HookRequestData.builder().targetModel(ImmutableMap.of("foo", "bar"))
412-
// .payload(null).build();
413-
// HookRequestData onlyPayloadPopulated =
414-
// HookRequestData.builder().targetModel(Collections.emptyMap())
415-
// .payload("http://s3PresignedUrl").build();
416-
//
417-
// Assertions.assertFalse(wrapper.isHookInvocationPayloadRemote(bothFieldsPopulated));
418-
// Assertions.assertFalse(wrapper.isHookInvocationPayloadRemote(onlyTargetModelPopulated));
419-
// Assertions.assertTrue(wrapper.isHookInvocationPayloadRemote(onlyPayloadPopulated));
420-
// }
397+
@Test
398+
public void testIsHookInvocationPayloadRemote() {
399+
List<HookRequestData> invalidHookRequestDataObjects = ImmutableList.of(
400+
HookRequestData.builder().targetModel(null).build(),
401+
HookRequestData.builder().targetModel(null).payload(null).build(),
402+
HookRequestData.builder().targetModel(Collections.emptyMap()).payload(null).build()
403+
);
404+
405+
invalidHookRequestDataObjects.forEach(requestData -> {
406+
Assertions.assertThrows(TerminalException.class, () -> wrapper.isHookInvocationPayloadRemote(requestData));
407+
});
408+
409+
Assertions.assertThrows(TerminalException.class, () -> wrapper.isHookInvocationPayloadRemote(null));
410+
411+
HookRequestData bothFieldsPopulated = HookRequestData.builder()
412+
.targetModel(ImmutableMap.of("foo", "bar"))
413+
.payload("http://s3PresignedUrl")
414+
.build();
415+
HookRequestData onlyTargetModelPopulated = HookRequestData.builder()
416+
.targetModel(ImmutableMap.of("foo", "bar"))
417+
.payload(null).build();
418+
HookRequestData onlyPayloadPopulated = HookRequestData.builder()
419+
.targetModel(Collections.emptyMap())
420+
.payload("http://s3PresignedUrl").build();
421+
422+
Assertions.assertFalse(wrapper.isHookInvocationPayloadRemote(bothFieldsPopulated));
423+
Assertions.assertFalse(wrapper.isHookInvocationPayloadRemote(onlyTargetModelPopulated));
424+
Assertions.assertTrue(wrapper.isHookInvocationPayloadRemote(onlyPayloadPopulated));
425+
}
421426

422427
private final String expectedStringWhenStrictDeserializingWithExtraneousFields = "Unrecognized field \"targetName\" (class software.amazon.cloudformation.proxy.hook.HookInvocationRequest), not marked as ignorable (10 known properties: \"requestContext\", \"stackId\", \"clientRequestToken\", \"hookModel\", \"hookTypeName\", \"requestData\", \"actionInvocationPoint\", \"awsAccountId\", \"changeSetId\", \"hookTypeVersion\"])\n"
423428
+ " at [Source: (String)\"{\n" + " \"clientRequestToken\": \"123456\",\n" + " \"awsAccountId\": \"123456789012\",\n"

0 commit comments

Comments
 (0)