Skip to content

Commit fa407cb

Browse files
committed
test: added some tests
1 parent 1e90d34 commit fa407cb

4 files changed

Lines changed: 557 additions & 16 deletions

File tree

‎aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/EventHandlerLoaderTest.java‎

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest;
44
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.params.ParameterizedTest;
6+
import org.junit.jupiter.params.provider.NullSource;
7+
import org.junit.jupiter.params.provider.ValueSource;
58

69
import java.io.ByteArrayOutputStream;
710
import java.util.ArrayList;
@@ -13,7 +16,6 @@
1316
import java.util.concurrent.TimeUnit;
1417

1518
import static org.junit.jupiter.api.Assertions.assertEquals;
16-
import static org.junit.jupiter.api.Assertions.assertFalse;
1719
import static org.junit.jupiter.api.Assertions.assertTrue;
1820

1921
class EventHandlerLoaderTest {
@@ -60,32 +62,48 @@ void PojoHandlerTest_twoParams() throws Exception {
6062
assertSuccessfulInvocation(lambdaRequestHandler);
6163
}
6264

63-
@Test
64-
void PojoHandler_outputSerializer_ignoresClientContextPlatform() throws Exception {
65+
// Before 2.13.0, a client context with env.platform equal to "Android" (case-insensitive) switched POJO
66+
// serialization to Gson, which binds fields: pojoOutputHandler returned {"internalField":"field-based-value"}
67+
// and pojoInputHandler returned "x:true". Every client context must now produce the Jackson result.
68+
69+
@ParameterizedTest(name = "clientContext={0}")
70+
@NullSource
71+
@ValueSource(strings = {
72+
"{\"env\":{\"platform\":\"Android\"}}",
73+
"{\"env\":{\"platform\":\"android\"}}",
74+
"{\"env\":{\"platform\":\"iPhoneOS\"}}",
75+
"{\"env\":{}}",
76+
"{}"
77+
})
78+
void PojoHandler_outputSerializer_ignoresClientContextPlatform(String clientContext) throws Exception {
6579
LambdaRequestHandler handler =
6680
getLambdaRequestHandler("test.lambda.handlers.POJOHanlderImpl::pojoOutputHandler");
6781

6882
InvocationRequest request = getTestInvocationRequest();
69-
request.setClientContext("{\"env\":{\"platform\":\"Android\"}}");
70-
71-
String result = handler.call(request).toString();
83+
request.setClientContext(clientContext);
7284

73-
assertTrue(result.contains("beanProperty"),
74-
"expected property-based (Jackson) serialization, got: " + result);
75-
assertFalse(result.contains("internalField"),
76-
"caller ClientContext must not switch serialization to field-based (Gson), got: " + result);
85+
assertEquals("{\"beanProperty\":\"property-based-value\"}", handler.call(request).toString());
7786
}
7887

79-
@Test
80-
void PojoHandler_inputSerializer_bindsOnlyBeanProperties() throws Exception {
88+
@ParameterizedTest(name = "clientContext={0}")
89+
@NullSource
90+
@ValueSource(strings = {
91+
"{\"env\":{\"platform\":\"Android\"}}",
92+
"{\"env\":{\"platform\":\"android\"}}",
93+
"{\"env\":{\"platform\":\"iPhoneOS\"}}",
94+
"{\"env\":{}}",
95+
"{}"
96+
})
97+
void PojoHandler_inputSerializer_ignoresClientContextPlatform(String clientContext) throws Exception {
8198
LambdaRequestHandler handler =
8299
getLambdaRequestHandler("test.lambda.handlers.POJOHanlderImpl::pojoInputHandler");
83100

84101
InvocationRequest request = getTestInvocationRequest();
85-
request.setClientContext("{\"env\":{\"platform\":\"Android\"}}");
102+
request.setClientContext(clientContext);
86103
request.setContent("{\"name\":\"x\",\"locked\":true}".getBytes());
87104

88-
assertEquals("false", handler.call(request).toString());
105+
// name has a setter and binds; locked has only a getter and keeps its default
106+
assertEquals("\"x:false\"", handler.call(request).toString());
89107
}
90108

91109
private LambdaRequestHandler getLambdaRequestHandler(String handler) throws ClassNotFoundException {

‎aws-lambda-java-runtime-interface-client/src/test/java/test/lambda/handlers/POJOHanlderImpl.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public String getBeanProperty() {
3939
}
4040

4141
@SuppressWarnings("unused")
42-
public boolean pojoInputHandler(PojoInput input) {
43-
return input.isLocked();
42+
public String pojoInputHandler(PojoInput input) {
43+
return input.getName() + ":" + input.isLocked();
4444
}
4545

4646
@SuppressWarnings("unused")

‎aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/LambdaEventAssert.java‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,27 @@ public static <T> void assertSerializationRoundTrip(String fileName, Class<T> ta
5353
PojoSerializer<T> serializer = LambdaEventSerializers.serializerFor(targetClass,
5454
ClassLoader.getSystemClassLoader());
5555

56+
assertSerializationRoundTrip(fileName, serializer);
57+
}
58+
59+
/**
60+
* Round-trip using a caller-supplied {@link PojoSerializer}.
61+
*
62+
* <p>
63+
* Use this overload to check a serializer that is not obtained from
64+
* {@link LambdaEventSerializers}, such as one built by the runtime
65+
* interface client or a custom serializer. It performs the same two
66+
* consecutive round-trips and tree comparison as
67+
* {@link #assertSerializationRoundTrip(String, Class)}.
68+
* </p>
69+
*
70+
* @param fileName classpath resource name (must end with {@code .json})
71+
* @param serializer the serializer used for every deserialize and
72+
* serialize step
73+
* @throws AssertionError if the original and final JSON trees differ
74+
*/
75+
public static <T> void assertSerializationRoundTrip(String fileName, PojoSerializer<T> serializer) {
76+
5677
if (!fileName.endsWith(".json")) {
5778
throw new IllegalArgumentException("File " + fileName + " must have json extension");
5879
}

0 commit comments

Comments
 (0)