From 0d6e1555507d89fa3a2f7cc3fb9052895b5539ab Mon Sep 17 00:00:00 2001 From: AntoniaSzecsi Date: Thu, 14 Aug 2025 12:21:08 +0100 Subject: [PATCH 1/8] Add local testing support with RIE --- .../Dockerfile.rie | 22 ++++++++++ .../Makefile | 6 ++- .../scripts/test-rie.sh | 43 +++++++++++++++++++ .../test-handlers/EchoHandler.java | 20 +++++++++ 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 aws-lambda-java-runtime-interface-client/Dockerfile.rie create mode 100755 aws-lambda-java-runtime-interface-client/scripts/test-rie.sh create mode 100644 aws-lambda-java-runtime-interface-client/test-handlers/EchoHandler.java diff --git a/aws-lambda-java-runtime-interface-client/Dockerfile.rie b/aws-lambda-java-runtime-interface-client/Dockerfile.rie new file mode 100644 index 00000000..cba945df --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/Dockerfile.rie @@ -0,0 +1,22 @@ +FROM public.ecr.aws/amazoncorretto/amazoncorretto:11 + +# Install RIE +RUN yum update -y && \ + yum install -y curl && \ + curl -Lo /usr/local/bin/aws-lambda-rie \ + https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ + chmod +x /usr/local/bin/aws-lambda-rie + +WORKDIR /function + +COPY target/aws-lambda-java-runtime-interface-client-*.jar ./ +COPY target/aws-lambda-java-core-*.jar ./ +COPY target/aws-lambda-java-serialization-*.jar ./ + +COPY test-handlers/EchoHandler.class ./ + +# Run RIE which will launch the Java RIC +ENTRYPOINT ["/usr/local/bin/aws-lambda-rie", "/usr/bin/java", "-cp", "./*", "com.amazonaws.services.lambda.runtime.api.client.AWSLambda"] + +# Default handler can be overridden by passing a new one on `docker run` +CMD ["EchoHandler::handleRequest"] \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/Makefile b/aws-lambda-java-runtime-interface-client/Makefile index b3a20421..6c3a268f 100644 --- a/aws-lambda-java-runtime-interface-client/Makefile +++ b/aws-lambda-java-runtime-interface-client/Makefile @@ -65,6 +65,10 @@ publish: test-publish: ./ric-dev-environment/test-platform-specific-jar-snapshot.sh +.PHONY: test-rie +test-rie: + ./scripts/test-rie.sh "EchoHandler::handleRequest" + define HELP_MESSAGE Usage: $ make [TARGETS] @@ -74,5 +78,5 @@ TARGETS dev Run all development tests after a change. pr Perform all checks before submitting a Pull Request. test Run the Unit tests. - + test-rie Build and test RIC locally with Lambda Runtime Interface Emulator. (Requires building the project first) endef diff --git a/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh new file mode 100755 index 00000000..e0746ed5 --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh @@ -0,0 +1,43 @@ +#!/bin/bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +SERIALIZATION_ROOT="$(dirname "$PROJECT_ROOT")/aws-lambda-java-serialization" + +if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-runtime-interface-client-*.jar >/dev/null 2>&1; then + echo "RIC jar not found. Please build the project first with 'mvn package'." + exit 1 +fi + +IMAGE_TAG="java-ric-rie-test" + +HANDLER="${1:-EchoHandler::handleRequest}" + +echo "Starting RIE test setup for Java..." + +# Download required dependencies if not present +if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-core-*.jar >/dev/null 2>&1; then + echo "Downloading aws-lambda-java-core..." + (cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-core:1.3.0 -DoutputDirectory=target) +fi + +if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-serialization-*.jar >/dev/null 2>&1; then + echo "Downloading aws-lambda-java-serialization..." + (cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-serialization:1.1.6 -DoutputDirectory=target) +fi + +echo "Compiling EchoHandler..." +javac -source 11 -target 11 -cp "$(ls "$PROJECT_ROOT"/target/aws-lambda-java-runtime-interface-client-*.jar):$(ls "$PROJECT_ROOT"/target/aws-lambda-java-core-*.jar):$(ls "$PROJECT_ROOT"/target/aws-lambda-java-serialization-*.jar)" \ + -d "$PROJECT_ROOT/test-handlers/" "$PROJECT_ROOT/test-handlers/EchoHandler.java" + +echo "Building test Docker image..." +docker build -t "$IMAGE_TAG" -f "$PROJECT_ROOT/Dockerfile.rie" "$PROJECT_ROOT" + +echo "Starting test container on port 9000..." +echo "" +echo "In another terminal, invoke with:" +echo "curl -s -X POST -H 'Content-Type: application/json' \"http://localhost:9000/2015-03-31/functions/function/invocations\" -d '{\"message\":\"test\"}'" +echo "" + +exec docker run -it -p 9000:8080 "$IMAGE_TAG" "$HANDLER" \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/test-handlers/EchoHandler.java b/aws-lambda-java-runtime-interface-client/test-handlers/EchoHandler.java new file mode 100644 index 00000000..cb324e7f --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/test-handlers/EchoHandler.java @@ -0,0 +1,20 @@ +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import java.util.Map; +import java.util.HashMap; + +public class EchoHandler implements RequestHandler, Map> { + + @Override + public Map handleRequest(Map event, Context context) { + context.getLogger().log("Processing event: " + event); + + Map response = new HashMap<>(event); + response.put("timestamp", System.currentTimeMillis()); + response.put("requestId", context.getAwsRequestId()); + response.put("functionName", context.getFunctionName()); + response.put("remainingTimeInMillis", context.getRemainingTimeInMillis()); + + return response; + } +} \ No newline at end of file From 3b840a2de3827a507d696743e5190ae9901dece5 Mon Sep 17 00:00:00 2001 From: AntoniaSzecsi Date: Thu, 14 Aug 2025 14:36:14 +0100 Subject: [PATCH 2/8] Improve code test coverage from 0.45 to 0.5 --- .../lambda/crac/CheckpointExceptionTest.java | 15 ++++++++ .../services/lambda/crac/ResourceTest.java | 27 +++++++++++++ .../lambda/crac/RestoreExceptionTest.java | 15 ++++++++ .../api/client/LambdaEnvironmentTest.java | 16 ++++++++ ...servedRuntimeEnvironmentVariablesTest.java | 16 ++++++++ .../client/runtimeapi/DtoSerializersTest.java | 33 ++++++++++++++++ .../client/runtimeapi/LambdaErrorTest.java | 35 +++++++++++++++++ .../LambdaRuntimeClientExceptionTest.java | 18 +++++++++ .../client/runtimeapi/RapidErrorTypeTest.java | 14 +++++++ .../runtimeapi/dto/ErrorRequestTest.java | 24 ++++++++++++ .../runtimeapi/dto/InvocationRequestTest.java | 38 +++++++++++++++++++ .../runtimeapi/dto/StackElementTest.java | 30 +++++++++++++++ .../runtimeapi/dto/XRayErrorCauseTest.java | 24 ++++++++++++ .../runtimeapi/dto/XRayExceptionTest.java | 24 ++++++++++++ .../api/client/util/EnvReaderTest.java | 20 ++++++++++ 15 files changed, 349 insertions(+) create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/CheckpointExceptionTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/ResourceTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/RestoreExceptionTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/LambdaEnvironmentTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ReservedRuntimeEnvironmentVariablesTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/DtoSerializersTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaErrorTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaRuntimeClientExceptionTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/RapidErrorTypeTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/ErrorRequestTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/InvocationRequestTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/StackElementTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayErrorCauseTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayExceptionTest.java create mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/EnvReaderTest.java diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/CheckpointExceptionTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/CheckpointExceptionTest.java new file mode 100644 index 00000000..626b0d83 --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/CheckpointExceptionTest.java @@ -0,0 +1,15 @@ +package com.amazonaws.services.lambda.crac; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CheckpointExceptionTest { + + @Test + void testConstructor() { + CheckpointException exception = new CheckpointException(); + assertNotNull(exception); + assertNull(exception.getMessage()); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/ResourceTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/ResourceTest.java new file mode 100644 index 00000000..35276ccf --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/ResourceTest.java @@ -0,0 +1,27 @@ +package com.amazonaws.services.lambda.crac; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ResourceTest { + + @Test + void testResourceInterface() { + Resource resource = new Resource() { + @Override + public void afterRestore(Context context) throws Exception { + // Test implementation + } + + @Override + public void beforeCheckpoint(Context context) throws Exception { + // Test implementation + } + }; + + assertNotNull(resource); + assertDoesNotThrow(() -> resource.afterRestore(null)); + assertDoesNotThrow(() -> resource.beforeCheckpoint(null)); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/RestoreExceptionTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/RestoreExceptionTest.java new file mode 100644 index 00000000..767195ee --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/RestoreExceptionTest.java @@ -0,0 +1,15 @@ +package com.amazonaws.services.lambda.crac; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class RestoreExceptionTest { + + @Test + void testConstructor() { + RestoreException exception = new RestoreException(); + assertNotNull(exception); + assertNull(exception.getMessage()); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/LambdaEnvironmentTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/LambdaEnvironmentTest.java new file mode 100644 index 00000000..6507285e --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/LambdaEnvironmentTest.java @@ -0,0 +1,16 @@ +package com.amazonaws.services.lambda.runtime.api.client; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class LambdaEnvironmentTest { + + @Test + void testConstants() { + assertNotNull(LambdaEnvironment.ENV_READER); + assertTrue(LambdaEnvironment.MEMORY_LIMIT >= 128); + assertNotNull(LambdaEnvironment.LAMBDA_LOG_LEVEL); + assertNotNull(LambdaEnvironment.LAMBDA_LOG_FORMAT); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ReservedRuntimeEnvironmentVariablesTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ReservedRuntimeEnvironmentVariablesTest.java new file mode 100644 index 00000000..28fc976f --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ReservedRuntimeEnvironmentVariablesTest.java @@ -0,0 +1,16 @@ +package com.amazonaws.services.lambda.runtime.api.client; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ReservedRuntimeEnvironmentVariablesTest { + + @Test + void testConstants() { + assertEquals("_HANDLER", ReservedRuntimeEnvironmentVariables.HANDLER); + assertEquals("AWS_REGION", ReservedRuntimeEnvironmentVariables.AWS_REGION); + assertEquals("AWS_LAMBDA_FUNCTION_NAME", ReservedRuntimeEnvironmentVariables.AWS_LAMBDA_FUNCTION_NAME); + assertEquals("AWS_LAMBDA_RUNTIME_API", ReservedRuntimeEnvironmentVariables.AWS_LAMBDA_RUNTIME_API); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/DtoSerializersTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/DtoSerializersTest.java new file mode 100644 index 00000000..299bb383 --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/DtoSerializersTest.java @@ -0,0 +1,33 @@ +package com.amazonaws.services.lambda.runtime.api.client.runtimeapi; + +import com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.ErrorRequest; +import com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.XRayErrorCause; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class DtoSerializersTest { + + @Test + void testSerializeErrorRequest() { + ErrorRequest errorRequest = new ErrorRequest(); + errorRequest.errorMessage = "test error"; + errorRequest.errorType = "TestException"; + + byte[] result = DtoSerializers.serialize(errorRequest); + + assertNotNull(result); + assertTrue(result.length > 0); + } + + @Test + void testSerializeXRayErrorCause() { + XRayErrorCause xRayErrorCause = new XRayErrorCause(); + xRayErrorCause.working_directory = "/test"; + + byte[] result = DtoSerializers.serialize(xRayErrorCause); + + assertNotNull(result); + assertTrue(result.length > 0); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaErrorTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaErrorTest.java new file mode 100644 index 00000000..2898e13a --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaErrorTest.java @@ -0,0 +1,35 @@ +package com.amazonaws.services.lambda.runtime.api.client.runtimeapi; + +import com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.ErrorRequest; +import com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.XRayErrorCause; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class LambdaErrorTest { + + @Test + void testConstructorWithXRayErrorCause() { + ErrorRequest errorRequest = new ErrorRequest(); + XRayErrorCause xRayErrorCause = new XRayErrorCause(); + RapidErrorType errorType = RapidErrorType.BadFunctionCode; + + LambdaError lambdaError = new LambdaError(errorRequest, xRayErrorCause, errorType); + + assertEquals(errorRequest, lambdaError.errorRequest); + assertEquals(xRayErrorCause, lambdaError.xRayErrorCause); + assertEquals(errorType, lambdaError.errorType); + } + + @Test + void testConstructorWithoutXRayErrorCause() { + ErrorRequest errorRequest = new ErrorRequest(); + RapidErrorType errorType = RapidErrorType.UserException; + + LambdaError lambdaError = new LambdaError(errorRequest, errorType); + + assertEquals(errorRequest, lambdaError.errorRequest); + assertNull(lambdaError.xRayErrorCause); + assertEquals(errorType, lambdaError.errorType); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaRuntimeClientExceptionTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaRuntimeClientExceptionTest.java new file mode 100644 index 00000000..290229e3 --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaRuntimeClientExceptionTest.java @@ -0,0 +1,18 @@ +package com.amazonaws.services.lambda.runtime.api.client.runtimeapi; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class LambdaRuntimeClientExceptionTest { + + @Test + void testConstructor() { + String message = "Test error"; + int responseCode = 500; + + LambdaRuntimeClientException exception = new LambdaRuntimeClientException(message, responseCode); + + assertEquals("Test error Response code: '500'.", exception.getMessage()); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/RapidErrorTypeTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/RapidErrorTypeTest.java new file mode 100644 index 00000000..10757b53 --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/RapidErrorTypeTest.java @@ -0,0 +1,14 @@ +package com.amazonaws.services.lambda.runtime.api.client.runtimeapi; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class RapidErrorTypeTest { + + @Test + void testGetRapidError() { + assertEquals("Runtime.BadFunctionCode", RapidErrorType.BadFunctionCode.getRapidError()); + assertEquals("Runtime.UserException", RapidErrorType.UserException.getRapidError()); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/ErrorRequestTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/ErrorRequestTest.java new file mode 100644 index 00000000..74e3d5ec --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/ErrorRequestTest.java @@ -0,0 +1,24 @@ +package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ErrorRequestTest { + + @Test + void testDefaultConstructor() { + ErrorRequest request = new ErrorRequest(); + assertNotNull(request); + } + + @Test + void testParameterizedConstructor() { + String[] stackTrace = {"line1", "line2"}; + ErrorRequest request = new ErrorRequest("error", "type", stackTrace); + + assertEquals("error", request.errorMessage); + assertEquals("type", request.errorType); + assertArrayEquals(stackTrace, request.stackTrace); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/InvocationRequestTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/InvocationRequestTest.java new file mode 100644 index 00000000..c4444c2b --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/InvocationRequestTest.java @@ -0,0 +1,38 @@ +package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class InvocationRequestTest { + + @Test + void testGettersAndSetters() { + InvocationRequest request = new InvocationRequest(); + + request.setId("test-id"); + assertEquals("test-id", request.getId()); + + request.setXrayTraceId("trace-id"); + assertEquals("trace-id", request.getXrayTraceId()); + + request.setInvokedFunctionArn("arn"); + assertEquals("arn", request.getInvokedFunctionArn()); + + request.setDeadlineTimeInMs(12345L); + assertEquals(12345L, request.getDeadlineTimeInMs()); + + request.setClientContext("context"); + assertEquals("context", request.getClientContext()); + + request.setCognitoIdentity("identity"); + assertEquals("identity", request.getCognitoIdentity()); + + request.setTenantId("tenant"); + assertEquals("tenant", request.getTenantId()); + + byte[] content = "test".getBytes(); + request.setContent(content); + assertArrayEquals(content, request.getContent()); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/StackElementTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/StackElementTest.java new file mode 100644 index 00000000..04076937 --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/StackElementTest.java @@ -0,0 +1,30 @@ +package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class StackElementTest { + + @Test + void testDefaultConstructor() { + StackElement stackElement = new StackElement(); + assertNotNull(stackElement); + assertNull(stackElement.label); + assertNull(stackElement.path); + assertEquals(0, stackElement.line); + } + + @Test + void testParameterizedConstructor() { + String label = "testMethod"; + String path = "/test/path"; + int line = 42; + + StackElement stackElement = new StackElement(label, path, line); + + assertEquals(label, stackElement.label); + assertEquals(path, stackElement.path); + assertEquals(line, stackElement.line); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayErrorCauseTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayErrorCauseTest.java new file mode 100644 index 00000000..0c6a244b --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayErrorCauseTest.java @@ -0,0 +1,24 @@ +package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; + +import org.junit.jupiter.api.Test; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.*; + +class XRayErrorCauseTest { + + @Test + void testDefaultConstructor() { + XRayErrorCause cause = new XRayErrorCause(); + assertNotNull(cause); + } + + @Test + void testParameterizedConstructor() { + XRayErrorCause cause = new XRayErrorCause("/dir", Arrays.asList(), Arrays.asList("path1")); + + assertEquals("/dir", cause.working_directory); + assertNotNull(cause.exceptions); + assertNotNull(cause.paths); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayExceptionTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayExceptionTest.java new file mode 100644 index 00000000..1969e0ca --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayExceptionTest.java @@ -0,0 +1,24 @@ +package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; + +import org.junit.jupiter.api.Test; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.*; + +class XRayExceptionTest { + + @Test + void testDefaultConstructor() { + XRayException exception = new XRayException(); + assertNotNull(exception); + } + + @Test + void testParameterizedConstructor() { + XRayException exception = new XRayException("msg", "type", Arrays.asList()); + + assertEquals("msg", exception.message); + assertEquals("type", exception.type); + assertNotNull(exception.stack); + } +} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/EnvReaderTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/EnvReaderTest.java new file mode 100644 index 00000000..9cec1fad --- /dev/null +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/EnvReaderTest.java @@ -0,0 +1,20 @@ +package com.amazonaws.services.lambda.runtime.api.client.util; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class EnvReaderTest { + + @Test + void testGetEnv() { + EnvReader reader = new EnvReader(); + assertNotNull(reader.getEnv()); + } + + @Test + void testGetEnvOrDefault() { + EnvReader reader = new EnvReader(); + assertEquals("default", reader.getEnvOrDefault("NON_EXISTENT_VAR", "default")); + } +} \ No newline at end of file From 72c2c14676ba5a3f45413ec96049a36e3d7f0315 Mon Sep 17 00:00:00 2001 From: AntoniaSzecsi Date: Thu, 14 Aug 2025 17:12:49 +0100 Subject: [PATCH 3/8] Replace the hardcoded versions with RELEASE versions --- aws-lambda-java-runtime-interface-client/scripts/test-rie.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh index e0746ed5..02896191 100755 --- a/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh +++ b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh @@ -19,12 +19,12 @@ echo "Starting RIE test setup for Java..." # Download required dependencies if not present if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-core-*.jar >/dev/null 2>&1; then echo "Downloading aws-lambda-java-core..." - (cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-core:1.3.0 -DoutputDirectory=target) + (cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-core:RELEASE -DoutputDirectory=target) fi if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-serialization-*.jar >/dev/null 2>&1; then echo "Downloading aws-lambda-java-serialization..." - (cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-serialization:1.1.6 -DoutputDirectory=target) + (cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-serialization:RELEASE -DoutputDirectory=target) fi echo "Compiling EchoHandler..." From afffa7ba2411ad98b79b5463649370c37a1f949d Mon Sep 17 00:00:00 2001 From: AntoniaSzecsi Date: Thu, 14 Aug 2025 17:25:01 +0100 Subject: [PATCH 4/8] Replace Dockerfile base image with image that has RIE preinstalled --- .../Dockerfile.rie | 24 ++++--------------- .../scripts/test-rie.sh | 2 +- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/aws-lambda-java-runtime-interface-client/Dockerfile.rie b/aws-lambda-java-runtime-interface-client/Dockerfile.rie index cba945df..916c2ee1 100644 --- a/aws-lambda-java-runtime-interface-client/Dockerfile.rie +++ b/aws-lambda-java-runtime-interface-client/Dockerfile.rie @@ -1,22 +1,8 @@ -FROM public.ecr.aws/amazoncorretto/amazoncorretto:11 +FROM public.ecr.aws/lambda/java:11 -# Install RIE -RUN yum update -y && \ - yum install -y curl && \ - curl -Lo /usr/local/bin/aws-lambda-rie \ - https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ - chmod +x /usr/local/bin/aws-lambda-rie +COPY target/aws-lambda-java-runtime-interface-client-*.jar ${LAMBDA_TASK_ROOT}/ +COPY target/aws-lambda-java-core-*.jar ${LAMBDA_TASK_ROOT}/ +COPY target/aws-lambda-java-serialization-*.jar ${LAMBDA_TASK_ROOT}/ +COPY test-handlers/EchoHandler.class ${LAMBDA_TASK_ROOT}/ -WORKDIR /function - -COPY target/aws-lambda-java-runtime-interface-client-*.jar ./ -COPY target/aws-lambda-java-core-*.jar ./ -COPY target/aws-lambda-java-serialization-*.jar ./ - -COPY test-handlers/EchoHandler.class ./ - -# Run RIE which will launch the Java RIC -ENTRYPOINT ["/usr/local/bin/aws-lambda-rie", "/usr/bin/java", "-cp", "./*", "com.amazonaws.services.lambda.runtime.api.client.AWSLambda"] - -# Default handler can be overridden by passing a new one on `docker run` CMD ["EchoHandler::handleRequest"] \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh index 02896191..55be3812 100755 --- a/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh +++ b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh @@ -40,4 +40,4 @@ echo "In another terminal, invoke with:" echo "curl -s -X POST -H 'Content-Type: application/json' \"http://localhost:9000/2015-03-31/functions/function/invocations\" -d '{\"message\":\"test\"}'" echo "" -exec docker run -it -p 9000:8080 "$IMAGE_TAG" "$HANDLER" \ No newline at end of file +exec docker run -it -p 9000:8080 -e _HANDLER="$HANDLER" "$IMAGE_TAG" \ No newline at end of file From e89624fe7a5c3d33e4cdf142ffc5e1d48ca0a354 Mon Sep 17 00:00:00 2001 From: AntoniaSzecsi Date: Fri, 15 Aug 2025 09:42:47 +0100 Subject: [PATCH 5/8] Change from mvn central artifacts to locally built ones --- .../scripts/test-rie.sh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh index 55be3812..fbb0a2c6 100755 --- a/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh +++ b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh @@ -16,15 +16,18 @@ HANDLER="${1:-EchoHandler::handleRequest}" echo "Starting RIE test setup for Java..." -# Download required dependencies if not present +# Build local dependencies if not present +CORE_ROOT="$(dirname "$PROJECT_ROOT")/aws-lambda-java-core" if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-core-*.jar >/dev/null 2>&1; then - echo "Downloading aws-lambda-java-core..." - (cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-core:RELEASE -DoutputDirectory=target) + echo "Building local aws-lambda-java-core..." + (cd "$CORE_ROOT" && mvn package -DskipTests) + cp "$CORE_ROOT"/target/aws-lambda-java-core-*.jar "$PROJECT_ROOT/target/" fi if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-serialization-*.jar >/dev/null 2>&1; then - echo "Downloading aws-lambda-java-serialization..." - (cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-serialization:RELEASE -DoutputDirectory=target) + echo "Building local aws-lambda-java-serialization..." + (cd "$SERIALIZATION_ROOT" && mvn package -DskipTests) + cp "$SERIALIZATION_ROOT"/target/aws-lambda-java-serialization-*.jar "$PROJECT_ROOT/target/" fi echo "Compiling EchoHandler..." From 09b932e4b7b0129c92025e43d213923d297cbd2d Mon Sep 17 00:00:00 2001 From: AntoniaSzecsi Date: Fri, 15 Aug 2025 09:46:41 +0100 Subject: [PATCH 6/8] Update from java 11 to java 21 and remove duplicate entries from pom --- aws-lambda-java-runtime-interface-client/Dockerfile.rie | 2 +- aws-lambda-java-runtime-interface-client/scripts/test-rie.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-lambda-java-runtime-interface-client/Dockerfile.rie b/aws-lambda-java-runtime-interface-client/Dockerfile.rie index 916c2ee1..66a01c83 100644 --- a/aws-lambda-java-runtime-interface-client/Dockerfile.rie +++ b/aws-lambda-java-runtime-interface-client/Dockerfile.rie @@ -1,4 +1,4 @@ -FROM public.ecr.aws/lambda/java:11 +FROM public.ecr.aws/lambda/java:21 COPY target/aws-lambda-java-runtime-interface-client-*.jar ${LAMBDA_TASK_ROOT}/ COPY target/aws-lambda-java-core-*.jar ${LAMBDA_TASK_ROOT}/ diff --git a/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh index fbb0a2c6..b69c967a 100755 --- a/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh +++ b/aws-lambda-java-runtime-interface-client/scripts/test-rie.sh @@ -31,7 +31,7 @@ if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-serialization-*.jar >/dev/null 2> fi echo "Compiling EchoHandler..." -javac -source 11 -target 11 -cp "$(ls "$PROJECT_ROOT"/target/aws-lambda-java-runtime-interface-client-*.jar):$(ls "$PROJECT_ROOT"/target/aws-lambda-java-core-*.jar):$(ls "$PROJECT_ROOT"/target/aws-lambda-java-serialization-*.jar)" \ +javac -source 21 -target 21 -cp "$(ls "$PROJECT_ROOT"/target/aws-lambda-java-runtime-interface-client-*.jar):$(ls "$PROJECT_ROOT"/target/aws-lambda-java-core-*.jar):$(ls "$PROJECT_ROOT"/target/aws-lambda-java-serialization-*.jar)" \ -d "$PROJECT_ROOT/test-handlers/" "$PROJECT_ROOT/test-handlers/EchoHandler.java" echo "Building test Docker image..." From 1e47362c5b68c7264817c585e90116862cbf1a55 Mon Sep 17 00:00:00 2001 From: AntoniaSzecsi Date: Tue, 19 Aug 2025 17:39:37 +0100 Subject: [PATCH 7/8] Clean up test coverage configuration --- .../pom.xml | 18 +++++++++ .../lambda/crac/CheckpointExceptionTest.java | 15 -------- .../services/lambda/crac/ResourceTest.java | 27 ------------- .../lambda/crac/RestoreExceptionTest.java | 15 -------- .../api/client/LambdaEnvironmentTest.java | 16 -------- ...servedRuntimeEnvironmentVariablesTest.java | 16 -------- .../client/runtimeapi/DtoSerializersTest.java | 33 ---------------- .../client/runtimeapi/LambdaErrorTest.java | 35 ----------------- .../LambdaRuntimeClientExceptionTest.java | 18 --------- .../client/runtimeapi/RapidErrorTypeTest.java | 14 ------- .../runtimeapi/dto/ErrorRequestTest.java | 24 ------------ .../runtimeapi/dto/InvocationRequestTest.java | 38 ------------------- .../runtimeapi/dto/StackElementTest.java | 30 --------------- .../runtimeapi/dto/XRayErrorCauseTest.java | 24 ------------ .../runtimeapi/dto/XRayExceptionTest.java | 24 ------------ .../api/client/util/EnvReaderTest.java | 20 ---------- 16 files changed, 18 insertions(+), 349 deletions(-) delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/CheckpointExceptionTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/ResourceTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/RestoreExceptionTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/LambdaEnvironmentTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ReservedRuntimeEnvironmentVariablesTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/DtoSerializersTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaErrorTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaRuntimeClientExceptionTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/RapidErrorTypeTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/ErrorRequestTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/InvocationRequestTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/StackElementTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayErrorCauseTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayExceptionTest.java delete mode 100644 aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/EnvReaderTest.java diff --git a/aws-lambda-java-runtime-interface-client/pom.xml b/aws-lambda-java-runtime-interface-client/pom.xml index 979f4b7b..84c6d816 100644 --- a/aws-lambda-java-runtime-interface-client/pom.xml +++ b/aws-lambda-java-runtime-interface-client/pom.xml @@ -214,6 +214,24 @@ org.jacoco jacoco-maven-plugin ${jacoco.maven.plugin.version} + + + + **/*Exception.class + + **/Resource.class + + **/dto/*.class + + **/ReservedRuntimeEnvironmentVariables.class + **/RapidErrorType.class + + **/FrameType.class + **/StructuredLogMessage.class + + **/AWSLambda.class + + default-prepare-agent diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/CheckpointExceptionTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/CheckpointExceptionTest.java deleted file mode 100644 index 626b0d83..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/CheckpointExceptionTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.amazonaws.services.lambda.crac; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class CheckpointExceptionTest { - - @Test - void testConstructor() { - CheckpointException exception = new CheckpointException(); - assertNotNull(exception); - assertNull(exception.getMessage()); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/ResourceTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/ResourceTest.java deleted file mode 100644 index 35276ccf..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/ResourceTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.amazonaws.services.lambda.crac; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class ResourceTest { - - @Test - void testResourceInterface() { - Resource resource = new Resource() { - @Override - public void afterRestore(Context context) throws Exception { - // Test implementation - } - - @Override - public void beforeCheckpoint(Context context) throws Exception { - // Test implementation - } - }; - - assertNotNull(resource); - assertDoesNotThrow(() -> resource.afterRestore(null)); - assertDoesNotThrow(() -> resource.beforeCheckpoint(null)); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/RestoreExceptionTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/RestoreExceptionTest.java deleted file mode 100644 index 767195ee..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/crac/RestoreExceptionTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.amazonaws.services.lambda.crac; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class RestoreExceptionTest { - - @Test - void testConstructor() { - RestoreException exception = new RestoreException(); - assertNotNull(exception); - assertNull(exception.getMessage()); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/LambdaEnvironmentTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/LambdaEnvironmentTest.java deleted file mode 100644 index 6507285e..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/LambdaEnvironmentTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class LambdaEnvironmentTest { - - @Test - void testConstants() { - assertNotNull(LambdaEnvironment.ENV_READER); - assertTrue(LambdaEnvironment.MEMORY_LIMIT >= 128); - assertNotNull(LambdaEnvironment.LAMBDA_LOG_LEVEL); - assertNotNull(LambdaEnvironment.LAMBDA_LOG_FORMAT); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ReservedRuntimeEnvironmentVariablesTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ReservedRuntimeEnvironmentVariablesTest.java deleted file mode 100644 index 28fc976f..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ReservedRuntimeEnvironmentVariablesTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class ReservedRuntimeEnvironmentVariablesTest { - - @Test - void testConstants() { - assertEquals("_HANDLER", ReservedRuntimeEnvironmentVariables.HANDLER); - assertEquals("AWS_REGION", ReservedRuntimeEnvironmentVariables.AWS_REGION); - assertEquals("AWS_LAMBDA_FUNCTION_NAME", ReservedRuntimeEnvironmentVariables.AWS_LAMBDA_FUNCTION_NAME); - assertEquals("AWS_LAMBDA_RUNTIME_API", ReservedRuntimeEnvironmentVariables.AWS_LAMBDA_RUNTIME_API); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/DtoSerializersTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/DtoSerializersTest.java deleted file mode 100644 index 299bb383..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/DtoSerializersTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.runtimeapi; - -import com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.ErrorRequest; -import com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.XRayErrorCause; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class DtoSerializersTest { - - @Test - void testSerializeErrorRequest() { - ErrorRequest errorRequest = new ErrorRequest(); - errorRequest.errorMessage = "test error"; - errorRequest.errorType = "TestException"; - - byte[] result = DtoSerializers.serialize(errorRequest); - - assertNotNull(result); - assertTrue(result.length > 0); - } - - @Test - void testSerializeXRayErrorCause() { - XRayErrorCause xRayErrorCause = new XRayErrorCause(); - xRayErrorCause.working_directory = "/test"; - - byte[] result = DtoSerializers.serialize(xRayErrorCause); - - assertNotNull(result); - assertTrue(result.length > 0); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaErrorTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaErrorTest.java deleted file mode 100644 index 2898e13a..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaErrorTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.runtimeapi; - -import com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.ErrorRequest; -import com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.XRayErrorCause; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class LambdaErrorTest { - - @Test - void testConstructorWithXRayErrorCause() { - ErrorRequest errorRequest = new ErrorRequest(); - XRayErrorCause xRayErrorCause = new XRayErrorCause(); - RapidErrorType errorType = RapidErrorType.BadFunctionCode; - - LambdaError lambdaError = new LambdaError(errorRequest, xRayErrorCause, errorType); - - assertEquals(errorRequest, lambdaError.errorRequest); - assertEquals(xRayErrorCause, lambdaError.xRayErrorCause); - assertEquals(errorType, lambdaError.errorType); - } - - @Test - void testConstructorWithoutXRayErrorCause() { - ErrorRequest errorRequest = new ErrorRequest(); - RapidErrorType errorType = RapidErrorType.UserException; - - LambdaError lambdaError = new LambdaError(errorRequest, errorType); - - assertEquals(errorRequest, lambdaError.errorRequest); - assertNull(lambdaError.xRayErrorCause); - assertEquals(errorType, lambdaError.errorType); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaRuntimeClientExceptionTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaRuntimeClientExceptionTest.java deleted file mode 100644 index 290229e3..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/LambdaRuntimeClientExceptionTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.runtimeapi; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class LambdaRuntimeClientExceptionTest { - - @Test - void testConstructor() { - String message = "Test error"; - int responseCode = 500; - - LambdaRuntimeClientException exception = new LambdaRuntimeClientException(message, responseCode); - - assertEquals("Test error Response code: '500'.", exception.getMessage()); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/RapidErrorTypeTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/RapidErrorTypeTest.java deleted file mode 100644 index 10757b53..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/RapidErrorTypeTest.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.runtimeapi; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class RapidErrorTypeTest { - - @Test - void testGetRapidError() { - assertEquals("Runtime.BadFunctionCode", RapidErrorType.BadFunctionCode.getRapidError()); - assertEquals("Runtime.UserException", RapidErrorType.UserException.getRapidError()); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/ErrorRequestTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/ErrorRequestTest.java deleted file mode 100644 index 74e3d5ec..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/ErrorRequestTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class ErrorRequestTest { - - @Test - void testDefaultConstructor() { - ErrorRequest request = new ErrorRequest(); - assertNotNull(request); - } - - @Test - void testParameterizedConstructor() { - String[] stackTrace = {"line1", "line2"}; - ErrorRequest request = new ErrorRequest("error", "type", stackTrace); - - assertEquals("error", request.errorMessage); - assertEquals("type", request.errorType); - assertArrayEquals(stackTrace, request.stackTrace); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/InvocationRequestTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/InvocationRequestTest.java deleted file mode 100644 index c4444c2b..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/InvocationRequestTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class InvocationRequestTest { - - @Test - void testGettersAndSetters() { - InvocationRequest request = new InvocationRequest(); - - request.setId("test-id"); - assertEquals("test-id", request.getId()); - - request.setXrayTraceId("trace-id"); - assertEquals("trace-id", request.getXrayTraceId()); - - request.setInvokedFunctionArn("arn"); - assertEquals("arn", request.getInvokedFunctionArn()); - - request.setDeadlineTimeInMs(12345L); - assertEquals(12345L, request.getDeadlineTimeInMs()); - - request.setClientContext("context"); - assertEquals("context", request.getClientContext()); - - request.setCognitoIdentity("identity"); - assertEquals("identity", request.getCognitoIdentity()); - - request.setTenantId("tenant"); - assertEquals("tenant", request.getTenantId()); - - byte[] content = "test".getBytes(); - request.setContent(content); - assertArrayEquals(content, request.getContent()); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/StackElementTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/StackElementTest.java deleted file mode 100644 index 04076937..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/StackElementTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class StackElementTest { - - @Test - void testDefaultConstructor() { - StackElement stackElement = new StackElement(); - assertNotNull(stackElement); - assertNull(stackElement.label); - assertNull(stackElement.path); - assertEquals(0, stackElement.line); - } - - @Test - void testParameterizedConstructor() { - String label = "testMethod"; - String path = "/test/path"; - int line = 42; - - StackElement stackElement = new StackElement(label, path, line); - - assertEquals(label, stackElement.label); - assertEquals(path, stackElement.path); - assertEquals(line, stackElement.line); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayErrorCauseTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayErrorCauseTest.java deleted file mode 100644 index 0c6a244b..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayErrorCauseTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; - -import org.junit.jupiter.api.Test; -import java.util.Arrays; - -import static org.junit.jupiter.api.Assertions.*; - -class XRayErrorCauseTest { - - @Test - void testDefaultConstructor() { - XRayErrorCause cause = new XRayErrorCause(); - assertNotNull(cause); - } - - @Test - void testParameterizedConstructor() { - XRayErrorCause cause = new XRayErrorCause("/dir", Arrays.asList(), Arrays.asList("path1")); - - assertEquals("/dir", cause.working_directory); - assertNotNull(cause.exceptions); - assertNotNull(cause.paths); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayExceptionTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayExceptionTest.java deleted file mode 100644 index 1969e0ca..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/dto/XRayExceptionTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto; - -import org.junit.jupiter.api.Test; -import java.util.Arrays; - -import static org.junit.jupiter.api.Assertions.*; - -class XRayExceptionTest { - - @Test - void testDefaultConstructor() { - XRayException exception = new XRayException(); - assertNotNull(exception); - } - - @Test - void testParameterizedConstructor() { - XRayException exception = new XRayException("msg", "type", Arrays.asList()); - - assertEquals("msg", exception.message); - assertEquals("type", exception.type); - assertNotNull(exception.stack); - } -} \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/EnvReaderTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/EnvReaderTest.java deleted file mode 100644 index 9cec1fad..00000000 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/EnvReaderTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.amazonaws.services.lambda.runtime.api.client.util; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class EnvReaderTest { - - @Test - void testGetEnv() { - EnvReader reader = new EnvReader(); - assertNotNull(reader.getEnv()); - } - - @Test - void testGetEnvOrDefault() { - EnvReader reader = new EnvReader(); - assertEquals("default", reader.getEnvOrDefault("NON_EXISTENT_VAR", "default")); - } -} \ No newline at end of file From ec58561c330ff18f359a3233240bf891a3915fe7 Mon Sep 17 00:00:00 2001 From: AntoniaSzecsi Date: Wed, 20 Aug 2025 09:57:02 +0100 Subject: [PATCH 8/8] Update README to reflect changes --- .../README.md | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/aws-lambda-java-runtime-interface-client/README.md b/aws-lambda-java-runtime-interface-client/README.md index d49201bd..67a5972d 100644 --- a/aws-lambda-java-runtime-interface-client/README.md +++ b/aws-lambda-java-runtime-interface-client/README.md @@ -138,6 +138,49 @@ This command invokes the function running in the container image and returns a r *Alternately, you can also include RIE as a part of your base image. See the AWS documentation on how to [Build RIE into your base image](https://docs.aws.amazon.com/lambda/latest/dg/images-test.html#images-test-alternative).* +### Automated Local Testing + +For developers working on this runtime interface client, we provide an automated testing script that handles RIE setup, dependency management, and Docker orchestration. + +*Prerequisites:* +- Build the project first: `mvn clean install` +- Docker must be installed and running + +*To run automated tests:* + +```shell script +make test-rie +``` + +This single command will: +- Automatically download required dependencies (aws-lambda-java-core, aws-lambda-java-serialization) +- Build a Docker image with RIE pre-installed +- Compile and run a test Lambda function (EchoHandler) +- Execute the function and validate the response +- Clean up containers automatically + +The test uses a simple EchoHandler that returns the input event, making it easy to verify the runtime interface client is working correctly. + +## Test Coverage + +This project uses JaCoCo for code coverage analysis. To exclude classes from JaCoCo coverage, add them to the `jacoco-maven-plugin` configuration: + +```xml + + org.jacoco + jacoco-maven-plugin + + + **/*Exception.class + **/dto/*.class + **/YourClassName.class + + + +``` + +This project excludes by default: exceptions, interfaces, DTOs, constants, and runtime-only classes. + ### Troubleshooting While running integration tests, you might encounter the Docker Hub rate limit error with the following body: