From a3ac20f9abcea764ca27308d73813b5ac3fe3c10 Mon Sep 17 00:00:00 2001 From: Davide Melfi Date: Thu, 19 Mar 2026 19:05:45 +0000 Subject: [PATCH 1/8] =?UTF-8?q?ci:=20=F0=9F=9A=9A=20Github=20Actions=20imp?= =?UTF-8?q?rovements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/aws-lambda-java-core.yml | 4 ++-- .github/workflows/aws-lambda-java-events-sdk-transformer.yml | 1 + .github/workflows/aws-lambda-java-events.yml | 4 ++-- .github/workflows/aws-lambda-java-log4j2.yml | 5 +++-- .github/workflows/aws-lambda-java-profiler.yml | 1 + .github/workflows/aws-lambda-java-serialization.yml | 5 +++-- .github/workflows/aws-lambda-java-tests.yml | 5 +++-- .github/workflows/runtime-interface-client_merge_to_main.yml | 1 + .github/workflows/runtime-interface-client_pr.yml | 3 ++- .github/workflows/samples.yml | 1 + 10 files changed, 19 insertions(+), 11 deletions(-) diff --git a/.github/workflows/aws-lambda-java-core.yml b/.github/workflows/aws-lambda-java-core.yml index b1bed919f..6e9745217 100644 --- a/.github/workflows/aws-lambda-java-core.yml +++ b/.github/workflows/aws-lambda-java-core.yml @@ -29,8 +29,8 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + - name: Install core with Maven run: mvn -B install --file aws-lambda-java-core/pom.xml diff --git a/.github/workflows/aws-lambda-java-events-sdk-transformer.yml b/.github/workflows/aws-lambda-java-events-sdk-transformer.yml index 1f1f08870..248aa6fc3 100644 --- a/.github/workflows/aws-lambda-java-events-sdk-transformer.yml +++ b/.github/workflows/aws-lambda-java-events-sdk-transformer.yml @@ -29,6 +29,7 @@ jobs: with: java-version: 8 distribution: corretto + cache: maven # Install base module - name: Install events with Maven diff --git a/.github/workflows/aws-lambda-java-events.yml b/.github/workflows/aws-lambda-java-events.yml index 2d101018d..ecb0e6f76 100644 --- a/.github/workflows/aws-lambda-java-events.yml +++ b/.github/workflows/aws-lambda-java-events.yml @@ -29,8 +29,8 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml diff --git a/.github/workflows/aws-lambda-java-log4j2.yml b/.github/workflows/aws-lambda-java-log4j2.yml index e9f6a56c1..2097758fd 100644 --- a/.github/workflows/aws-lambda-java-log4j2.yml +++ b/.github/workflows/aws-lambda-java-log4j2.yml @@ -29,8 +29,9 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + + # Install dependency - name: Install core with Maven run: mvn -B install --file aws-lambda-java-core/pom.xml # Package target module diff --git a/.github/workflows/aws-lambda-java-profiler.yml b/.github/workflows/aws-lambda-java-profiler.yml index a3afe3729..9fb5d2b18 100644 --- a/.github/workflows/aws-lambda-java-profiler.yml +++ b/.github/workflows/aws-lambda-java-profiler.yml @@ -29,6 +29,7 @@ jobs: with: java-version: 21 distribution: corretto + cache: maven - name: Issue AWS credentials uses: aws-actions/configure-aws-credentials@v4 diff --git a/.github/workflows/aws-lambda-java-serialization.yml b/.github/workflows/aws-lambda-java-serialization.yml index 13b7e08b0..b8215c5e6 100644 --- a/.github/workflows/aws-lambda-java-serialization.yml +++ b/.github/workflows/aws-lambda-java-serialization.yml @@ -29,8 +29,9 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + + # Install dependency - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml diff --git a/.github/workflows/aws-lambda-java-tests.yml b/.github/workflows/aws-lambda-java-tests.yml index 363647cc4..6288118aa 100644 --- a/.github/workflows/aws-lambda-java-tests.yml +++ b/.github/workflows/aws-lambda-java-tests.yml @@ -36,8 +36,9 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + + # Install dependencies - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml - name: Install serialization with Maven diff --git a/.github/workflows/runtime-interface-client_merge_to_main.yml b/.github/workflows/runtime-interface-client_merge_to_main.yml index 3560207f3..917e7f01a 100644 --- a/.github/workflows/runtime-interface-client_merge_to_main.yml +++ b/.github/workflows/runtime-interface-client_merge_to_main.yml @@ -35,6 +35,7 @@ jobs: with: java-version: 8 distribution: corretto + cache: maven - name: Set up QEMU uses: docker/setup-qemu-action@v3 diff --git a/.github/workflows/runtime-interface-client_pr.yml b/.github/workflows/runtime-interface-client_pr.yml index dcad4fa0a..9ba4f0c95 100644 --- a/.github/workflows/runtime-interface-client_pr.yml +++ b/.github/workflows/runtime-interface-client_pr.yml @@ -25,7 +25,8 @@ jobs: with: java-version: 8 distribution: corretto - + cache: maven + - name: Build and install core dependency locally working-directory: ./aws-lambda-java-core run: mvn clean install diff --git a/.github/workflows/samples.yml b/.github/workflows/samples.yml index aebb708a7..79ff3b4ba 100644 --- a/.github/workflows/samples.yml +++ b/.github/workflows/samples.yml @@ -27,6 +27,7 @@ jobs: with: java-version: 8 distribution: corretto + cache: maven # Install events module - name: Install events with Maven From c093beb87cf729779f8632d35dc190df689086ac Mon Sep 17 00:00:00 2001 From: Davide Melfi Date: Thu, 19 Mar 2026 19:06:24 +0000 Subject: [PATCH 2/8] ci: dependent library test fan out --- .github/workflows/aws-lambda-java-core.yml | 13 +----------- ...aws-lambda-java-events-sdk-transformer.yml | 10 +++++---- .github/workflows/aws-lambda-java-events.yml | 9 +------- .github/workflows/aws-lambda-java-log4j2.yml | 7 ++++--- .../aws-lambda-java-serialization.yml | 6 ++++-- .github/workflows/aws-lambda-java-tests.yml | 13 ++++++++++-- .../workflows/runtime-interface-client_pr.yml | 21 ++++++++++++------- .github/workflows/samples.yml | 15 ++++++++----- .gitignore | 2 +- 9 files changed, 52 insertions(+), 44 deletions(-) diff --git a/.github/workflows/aws-lambda-java-core.yml b/.github/workflows/aws-lambda-java-core.yml index 6e9745217..2b9ad50ad 100644 --- a/.github/workflows/aws-lambda-java-core.yml +++ b/.github/workflows/aws-lambda-java-core.yml @@ -1,5 +1,5 @@ # This workflow will be triggered if there will be changes to aws-lambda-java-core -# package and it builds the package and the packages that depend on it. +# package and it builds the package. name: Java CI aws-lambda-java-core @@ -33,14 +33,3 @@ jobs: - name: Install core with Maven run: mvn -B install --file aws-lambda-java-core/pom.xml - - # Package modules that depend on base module - - name: Package log4j2 with Maven - run: mvn -B package --file aws-lambda-java-log4j2/pom.xml - - # Test Runtime Interface Client - - name: Run 'pr' target - working-directory: ./aws-lambda-java-runtime-interface-client - run: make pr - env: - IS_JAVA_8: true diff --git a/.github/workflows/aws-lambda-java-events-sdk-transformer.yml b/.github/workflows/aws-lambda-java-events-sdk-transformer.yml index 248aa6fc3..b96d3467b 100644 --- a/.github/workflows/aws-lambda-java-events-sdk-transformer.yml +++ b/.github/workflows/aws-lambda-java-events-sdk-transformer.yml @@ -1,5 +1,6 @@ -# This workflow will be triggered if there will be changes to -# aws-lambda-java-events-sdk-transformer package and it builds the package. +# This workflow will be triggered if there will be changes to +# aws-lambda-java-events-sdk-transformer package or its dependency (events), +# and it builds the package. name: Java CI aws-lambda-java-events-sdk-transformer @@ -8,10 +9,12 @@ on: branches: [ main ] paths: - 'aws-lambda-java-events-sdk-transformer/**' + - 'aws-lambda-java-events/**' pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-events-sdk-transformer/**' + - 'aws-lambda-java-events/**' - '.github/workflows/aws-lambda-java-events-sdk-transformer.yml' permissions: @@ -31,10 +34,9 @@ jobs: distribution: corretto cache: maven - # Install base module + # Install dependency - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml # Package target module - name: Package events-sdk-transformer with Maven run: mvn -B package --file aws-lambda-java-events-sdk-transformer/pom.xml - diff --git a/.github/workflows/aws-lambda-java-events.yml b/.github/workflows/aws-lambda-java-events.yml index ecb0e6f76..ad3cbe8f9 100644 --- a/.github/workflows/aws-lambda-java-events.yml +++ b/.github/workflows/aws-lambda-java-events.yml @@ -1,5 +1,5 @@ # This workflow will be triggered if there will be changes to aws-lambda-java-events -# package and it builds the package and the packages that depend on it. +# package and it builds the package. name: Java CI aws-lambda-java-events @@ -33,10 +33,3 @@ jobs: - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml - - # Package modules that depend on base module - - name: Package serialization with Maven - run: mvn -B package --file aws-lambda-java-serialization/pom.xml - - name: Package events-sdk-transformer with Maven - run: mvn -B package --file aws-lambda-java-events-sdk-transformer/pom.xml - diff --git a/.github/workflows/aws-lambda-java-log4j2.yml b/.github/workflows/aws-lambda-java-log4j2.yml index 2097758fd..66bbfaa16 100644 --- a/.github/workflows/aws-lambda-java-log4j2.yml +++ b/.github/workflows/aws-lambda-java-log4j2.yml @@ -1,5 +1,5 @@ -# This workflow will be triggered if there will be changes to -# aws-lambda-java-log4j2 package and it builds the package. +# This workflow will be triggered if there will be changes to +# aws-lambda-java-log4j2 package or its dependency (core), and it builds the package. name: Java CI aws-lambda-java-log4j2 @@ -8,10 +8,12 @@ on: branches: [ main ] paths: - 'aws-lambda-java-log4j2/**' + - 'aws-lambda-java-core/**' pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-log4j2/**' + - 'aws-lambda-java-core/**' - '.github/workflows/aws-lambda-java-log4j2.yml' permissions: @@ -37,4 +39,3 @@ jobs: # Package target module - name: Package log4j2 with Maven run: mvn -B package --file aws-lambda-java-log4j2/pom.xml - diff --git a/.github/workflows/aws-lambda-java-serialization.yml b/.github/workflows/aws-lambda-java-serialization.yml index b8215c5e6..737826739 100644 --- a/.github/workflows/aws-lambda-java-serialization.yml +++ b/.github/workflows/aws-lambda-java-serialization.yml @@ -1,5 +1,5 @@ -# This workflow will be triggered if there will be changes to aws-lambda-java-serialization -# package and it builds the package and the packages that depend on it. +# This workflow will be triggered if there will be changes to aws-lambda-java-serialization +# package or its dependency (events), and it builds the package. name: Java CI aws-lambda-java-serialization @@ -8,10 +8,12 @@ on: branches: [ main ] paths: - 'aws-lambda-java-serialization/**' + - 'aws-lambda-java-events/**' pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-serialization/**' + - 'aws-lambda-java-events/**' - '.github/workflows/aws-lambda-java-serialization.yml' permissions: diff --git a/.github/workflows/aws-lambda-java-tests.yml b/.github/workflows/aws-lambda-java-tests.yml index 6288118aa..cdbf8ef79 100644 --- a/.github/workflows/aws-lambda-java-tests.yml +++ b/.github/workflows/aws-lambda-java-tests.yml @@ -1,5 +1,5 @@ # This workflow will be triggered if there will be changes to aws-lambda-java-tests -# package and it builds the package and the packages that depend on it. +# package or its dependencies (events, serialization), and it builds the package. name: Java CI aws-lambda-java-tests @@ -9,16 +9,26 @@ on: branches: [ main ] paths: - 'aws-lambda-java-tests/**' +<<<<<<< Updated upstream - 'aws-lambda-java-runtime-interface-client/**' - 'aws-lambda-java-serialization/**' - 'aws-lambda-java-events/**' +======= + - 'aws-lambda-java-events/**' + - 'aws-lambda-java-serialization/**' +>>>>>>> Stashed changes pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-tests/**' +<<<<<<< Updated upstream - 'aws-lambda-java-runtime-interface-client/**' - 'aws-lambda-java-serialization/**' - 'aws-lambda-java-events/**' +======= + - 'aws-lambda-java-events/**' + - 'aws-lambda-java-serialization/**' +>>>>>>> Stashed changes - '.github/workflows/aws-lambda-java-tests.yml' permissions: @@ -47,4 +57,3 @@ jobs: # Package target module - name: Package tests with Maven run: mvn -B package --file aws-lambda-java-tests/pom.xml - diff --git a/.github/workflows/runtime-interface-client_pr.yml b/.github/workflows/runtime-interface-client_pr.yml index 9ba4f0c95..506f2a720 100644 --- a/.github/workflows/runtime-interface-client_pr.yml +++ b/.github/workflows/runtime-interface-client_pr.yml @@ -1,5 +1,6 @@ -# This workflow will be triggered if there will be changes to -# aws-lambda-java-runtime-interface-client package and it builds the package. +# This workflow will be triggered if there will be changes to +# aws-lambda-java-runtime-interface-client package or its dependencies (core, serialization), +# and it builds the package. name: PR to runtime-interface-client @@ -8,6 +9,8 @@ on: branches: [ '*' ] paths: - 'aws-lambda-java-runtime-interface-client/**' + - 'aws-lambda-java-core/**' + - 'aws-lambda-java-serialization/**' - '.github/workflows/runtime-interface-client_*.yml' permissions: @@ -17,13 +20,16 @@ jobs: smoke-test: runs-on: ubuntu-latest + strategy: + matrix: + java-version: [8, 11, 17, 21, 25] steps: - uses: actions/checkout@v5 - - name: Set up JDK 1.8 + - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@v4 with: - java-version: 8 + java-version: ${{ matrix.java-version }} distribution: corretto cache: maven @@ -39,8 +45,8 @@ jobs: working-directory: ./aws-lambda-java-runtime-interface-client run: make pr env: - IS_JAVA_8: true - + IS_JAVA_8: ${{ matrix.java-version == 8 }} + build: runs-on: ubuntu-latest steps: @@ -51,6 +57,7 @@ jobs: with: java-version: 8 distribution: corretto + cache: maven - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -62,7 +69,7 @@ jobs: - name: Available buildx platforms run: echo ${{ steps.buildx.outputs.platforms }} - + - name: Build and install core dependency locally working-directory: ./aws-lambda-java-core run: mvn clean install diff --git a/.github/workflows/samples.yml b/.github/workflows/samples.yml index 79ff3b4ba..fbc83a8e4 100644 --- a/.github/workflows/samples.yml +++ b/.github/workflows/samples.yml @@ -1,5 +1,5 @@ -# This workflow will be triggered if there will be changes to aws-lambda-java-core -# package and it builds the package and the packages that depend on it. +# This workflow will be triggered if there will be changes to samples +# or their dependencies (events, serialization, tests). name: Java CI samples @@ -8,10 +8,16 @@ on: branches: [ main ] paths: - 'samples/**' + - 'aws-lambda-java-events/**' + - 'aws-lambda-java-serialization/**' + - 'aws-lambda-java-tests/**' pull_request: branches: [ '*' ] paths: - 'samples/**' + - 'aws-lambda-java-events/**' + - 'aws-lambda-java-serialization/**' + - 'aws-lambda-java-tests/**' - '.github/workflows/samples.yml' permissions: @@ -29,13 +35,11 @@ jobs: distribution: corretto cache: maven - # Install events module + # Install dependencies - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml - # Install serialization module - name: Install serialization with Maven run: mvn -B install --file aws-lambda-java-serialization/pom.xml - # Install tests module - name: Install tests with Maven run: mvn -B install --file aws-lambda-java-tests/pom.xml @@ -55,6 +59,7 @@ jobs: 8 21 distribution: corretto + cache: maven # Install events module using Java 8 - name: Install events with Maven diff --git a/.gitignore b/.gitignore index 5eb5456a1..b5d289a8b 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,4 @@ experimental/aws-lambda-java-profiler/integration_tests/helloworld/bin /scratch/ .vscode .kiro -build \ No newline at end of file +build From ce65ed649caa5944f9e2ad8f4f46160600008cf8 Mon Sep 17 00:00:00 2001 From: Davide Melfi Date: Thu, 19 Mar 2026 19:34:32 +0000 Subject: [PATCH 3/8] test: fix tests that are failing after introducint enum matrix --- .github/workflows/aws-lambda-java-tests.yml | 12 ---- .../api/client/ClasspathLoaderTest.java | 57 ++++++++++++------- .../api/client/util/UnsafeUtilTest.java | 39 ++++++++----- 3 files changed, 61 insertions(+), 47 deletions(-) diff --git a/.github/workflows/aws-lambda-java-tests.yml b/.github/workflows/aws-lambda-java-tests.yml index cdbf8ef79..fddae31ad 100644 --- a/.github/workflows/aws-lambda-java-tests.yml +++ b/.github/workflows/aws-lambda-java-tests.yml @@ -9,26 +9,14 @@ on: branches: [ main ] paths: - 'aws-lambda-java-tests/**' -<<<<<<< Updated upstream - - 'aws-lambda-java-runtime-interface-client/**' - - 'aws-lambda-java-serialization/**' - - 'aws-lambda-java-events/**' -======= - 'aws-lambda-java-events/**' - 'aws-lambda-java-serialization/**' ->>>>>>> Stashed changes pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-tests/**' -<<<<<<< Updated upstream - - 'aws-lambda-java-runtime-interface-client/**' - - 'aws-lambda-java-serialization/**' - - 'aws-lambda-java-events/**' -======= - 'aws-lambda-java-events/**' - 'aws-lambda-java-serialization/**' ->>>>>>> Stashed changes - '.github/workflows/aws-lambda-java-tests.yml' permissions: diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ClasspathLoaderTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ClasspathLoaderTest.java index 38147d219..581a6ddae 100644 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ClasspathLoaderTest.java +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/ClasspathLoaderTest.java @@ -6,16 +6,16 @@ package com.amazonaws.services.lambda.runtime.api.client; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.EnabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import org.junit.jupiter.api.io.TempDir; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Path; -import java.util.Collections; -import java.util.Enumeration; import java.util.jar.JarEntry; -import java.util.jar.JarFile; import java.util.jar.JarOutputStream; import static org.junit.jupiter.api.Assertions.*; @@ -27,7 +27,7 @@ void testLoadAllClassesWithNoClasspath() throws IOException { String originalClasspath = System.getProperty("java.class.path"); try { System.clearProperty("java.class.path"); - ClasspathLoader.main(new String[]{}); + ClasspathLoader.main(new String[] {}); } finally { if (originalClasspath != null) { System.setProperty("java.class.path", originalClasspath); @@ -35,13 +35,30 @@ void testLoadAllClassesWithNoClasspath() throws IOException { } } + // On JDK 8-24, new File("").exists() returns false → FileNotFoundException. @Test + @DisabledForJreRange(min = JRE.JAVA_25) void testLoadAllClassesWithEmptyClasspath() { String originalClasspath = System.getProperty("java.class.path"); try { System.setProperty("java.class.path", ""); - assertThrows(FileNotFoundException.class, () -> - ClasspathLoader.main(new String[]{})); + assertThrows(FileNotFoundException.class, () -> ClasspathLoader.main(new String[] {})); + } finally { + if (originalClasspath != null) { + System.setProperty("java.class.path", originalClasspath); + } + } + } + + // On JDK 25+, new File("") resolves to cwd (exists=true, isDirectory=true) → + // skipped with warning, no exception. + @Test + @EnabledForJreRange(min = JRE.JAVA_25) + void testLoadAllClassesWithEmptyClasspathJdk25Plus() throws IOException { + String originalClasspath = System.getProperty("java.class.path"); + try { + System.setProperty("java.class.path", ""); + ClasspathLoader.main(new String[] {}); } finally { if (originalClasspath != null) { System.setProperty("java.class.path", originalClasspath); @@ -54,8 +71,7 @@ void testLoadAllClassesWithInvalidPath() { String originalClasspath = System.getProperty("java.class.path"); try { System.setProperty("java.class.path", "nonexistent/path"); - assertThrows(FileNotFoundException.class, () -> - ClasspathLoader.main(new String[]{})); + assertThrows(FileNotFoundException.class, () -> ClasspathLoader.main(new String[] {})); } finally { if (originalClasspath != null) { System.setProperty("java.class.path", originalClasspath); @@ -69,7 +85,7 @@ void testLoadAllClassesWithValidJar(@TempDir Path tempDir) throws IOException { String originalClasspath = System.getProperty("java.class.path"); try { System.setProperty("java.class.path", jarFile.getAbsolutePath()); - ClasspathLoader.main(new String[]{}); + ClasspathLoader.main(new String[] {}); } finally { if (originalClasspath != null) { System.setProperty("java.class.path", originalClasspath); @@ -82,7 +98,7 @@ void testLoadAllClassesWithDirectory(@TempDir Path tempDir) throws IOException { String originalClasspath = System.getProperty("java.class.path"); try { System.setProperty("java.class.path", tempDir.toString()); - ClasspathLoader.main(new String[]{}); + ClasspathLoader.main(new String[] {}); } finally { if (originalClasspath != null) { System.setProperty("java.class.path", originalClasspath); @@ -94,14 +110,14 @@ void testLoadAllClassesWithDirectory(@TempDir Path tempDir) throws IOException { void testLoadAllClassesWithMultipleEntries(@TempDir Path tempDir) throws IOException { File jarFile1 = createSimpleJar(tempDir, "test1.jar", "TestClass1"); File jarFile2 = createSimpleJar(tempDir, "test2.jar", "TestClass2"); - + String originalClasspath = System.getProperty("java.class.path"); try { - String newClasspath = jarFile1.getAbsolutePath() + - File.pathSeparator + - jarFile2.getAbsolutePath(); + String newClasspath = jarFile1.getAbsolutePath() + + File.pathSeparator + + jarFile2.getAbsolutePath(); System.setProperty("java.class.path", newClasspath); - ClasspathLoader.main(new String[]{}); + ClasspathLoader.main(new String[] {}); } finally { if (originalClasspath != null) { System.setProperty("java.class.path", originalClasspath); @@ -112,7 +128,7 @@ void testLoadAllClassesWithMultipleEntries(@TempDir Path tempDir) throws IOExcep @Test void testLoadAllClassesWithBlocklistedClass(@TempDir Path tempDir) throws IOException { File jarFile = tempDir.resolve("blocklist-test.jar").toFile(); - + try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(jarFile))) { JarEntry blockedEntry = new JarEntry("META-INF/versions/9/module-info.class"); jos.putNextEntry(blockedEntry); @@ -128,8 +144,9 @@ void testLoadAllClassesWithBlocklistedClass(@TempDir Path tempDir) throws IOExce String originalClasspath = System.getProperty("java.class.path"); try { System.setProperty("java.class.path", jarFile.getAbsolutePath()); - ClasspathLoader.main(new String[]{}); - // The test passes if no exception is thrown and the blocklisted class is skipped + ClasspathLoader.main(new String[] {}); + // The test passes if no exception is thrown and the blocklisted class is + // skipped } finally { if (originalClasspath != null) { System.setProperty("java.class.path", originalClasspath); @@ -139,7 +156,7 @@ void testLoadAllClassesWithBlocklistedClass(@TempDir Path tempDir) throws IOExce private File createSimpleJar(Path tempDir, String jarName, String className) throws IOException { File jarFile = tempDir.resolve(jarName).toFile(); - + try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(jarFile))) { // Add a simple non-class file to make it a valid jar JarEntry entry = new JarEntry("com/test/" + className + ".txt"); @@ -147,7 +164,7 @@ private File createSimpleJar(Path tempDir, String jarName, String className) thr jos.write("test content".getBytes()); jos.closeEntry(); } - + return jarFile; } } diff --git a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/UnsafeUtilTest.java b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/UnsafeUtilTest.java index b1f0592f0..c4862719e 100644 --- a/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/UnsafeUtilTest.java +++ b/aws-lambda-java-runtime-interface-client/src/test/java/com/amazonaws/services/lambda/runtime/api/client/util/UnsafeUtilTest.java @@ -6,6 +6,8 @@ package com.amazonaws.services.lambda.runtime.api.client.util; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import java.lang.reflect.Field; import static org.junit.jupiter.api.Assertions.*; @@ -19,7 +21,7 @@ void testTheUnsafeIsInitialized() { @Test void testThrowException() { Exception testException = new Exception("Test exception"); - + try { UnsafeUtil.throwException(testException); fail("Should have thrown an exception"); @@ -29,22 +31,29 @@ void testThrowException() { } } + // IllegalAccessLogger only exists on JDK 9-16; skipped on JDK 8 (no module + // system) and JDK 17+ (class removed). + @Test + @EnabledForJreRange(min = JRE.JAVA_9, max = JRE.JAVA_16) + void testDisableIllegalAccessWarning() throws Exception { + // We disable the warning log for "jdk.internal.module.IllegalAccessLogger" + UnsafeUtil.disableIllegalAccessWarning(); + + Class illegalAccessLoggerClass = Class.forName("jdk.internal.module.IllegalAccessLogger"); + Field loggerField = illegalAccessLoggerClass.getDeclaredField("logger"); + + // Now we are getting it back with getObjectVolatile and verify that the logger + // is null. We are not using default reflection because that will throw because + // that field is private, defeating the point of the test. + Object loggerValue = UnsafeUtil.TheUnsafe.getObjectVolatile( + illegalAccessLoggerClass, + UnsafeUtil.TheUnsafe.staticFieldOffset(loggerField)); + assertNull(loggerValue); + } + @Test - void testDisableIllegalAccessWarning() { + void testDisableIllegalAccessWarningDoesNotThrow() { assertDoesNotThrow(() -> UnsafeUtil.disableIllegalAccessWarning()); - try { - Class illegalAccessLoggerClass = Class.forName("jdk.internal.module.IllegalAccessLogger"); - Field loggerField = illegalAccessLoggerClass.getDeclaredField("logger"); - loggerField.setAccessible(true); - Object loggerValue = loggerField.get(null); - assertNull(loggerValue); - } catch (ClassNotFoundException e) { - assertTrue(true); - } catch (NoSuchFieldException e) { - assertTrue(true); - } catch (Exception e) { - fail("Unexpected exception: " + e.getMessage()); - } } @Test From 7b7752cfd352d9559e21f220a5c8ed4395175849 Mon Sep 17 00:00:00 2001 From: Davide Melfi Date: Thu, 19 Mar 2026 19:12:54 +0000 Subject: [PATCH 4/8] ci: add workflow_dispatch --- .github/workflows/aws-lambda-java-core.yml | 1 + .github/workflows/aws-lambda-java-events-sdk-transformer.yml | 1 + .github/workflows/aws-lambda-java-events.yml | 1 + .github/workflows/aws-lambda-java-log4j2.yml | 1 + .github/workflows/aws-lambda-java-serialization.yml | 1 + .github/workflows/runtime-interface-client_merge_to_main.yml | 2 +- .github/workflows/runtime-interface-client_pr.yml | 1 + .github/workflows/samples.yml | 1 + 8 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/aws-lambda-java-core.yml b/.github/workflows/aws-lambda-java-core.yml index 2b9ad50ad..ecd9e4ea0 100644 --- a/.github/workflows/aws-lambda-java-core.yml +++ b/.github/workflows/aws-lambda-java-core.yml @@ -4,6 +4,7 @@ name: Java CI aws-lambda-java-core on: + workflow_dispatch: push: branches: [ main ] paths: diff --git a/.github/workflows/aws-lambda-java-events-sdk-transformer.yml b/.github/workflows/aws-lambda-java-events-sdk-transformer.yml index b96d3467b..4e3f7bde6 100644 --- a/.github/workflows/aws-lambda-java-events-sdk-transformer.yml +++ b/.github/workflows/aws-lambda-java-events-sdk-transformer.yml @@ -5,6 +5,7 @@ name: Java CI aws-lambda-java-events-sdk-transformer on: + workflow_dispatch: push: branches: [ main ] paths: diff --git a/.github/workflows/aws-lambda-java-events.yml b/.github/workflows/aws-lambda-java-events.yml index ad3cbe8f9..ab6f1a172 100644 --- a/.github/workflows/aws-lambda-java-events.yml +++ b/.github/workflows/aws-lambda-java-events.yml @@ -4,6 +4,7 @@ name: Java CI aws-lambda-java-events on: + workflow_dispatch: push: branches: [ main ] paths: diff --git a/.github/workflows/aws-lambda-java-log4j2.yml b/.github/workflows/aws-lambda-java-log4j2.yml index 66bbfaa16..7df0831f9 100644 --- a/.github/workflows/aws-lambda-java-log4j2.yml +++ b/.github/workflows/aws-lambda-java-log4j2.yml @@ -5,6 +5,7 @@ name: Java CI aws-lambda-java-log4j2 on: push: + workflow_dispatch: branches: [ main ] paths: - 'aws-lambda-java-log4j2/**' diff --git a/.github/workflows/aws-lambda-java-serialization.yml b/.github/workflows/aws-lambda-java-serialization.yml index 737826739..5a7060c74 100644 --- a/.github/workflows/aws-lambda-java-serialization.yml +++ b/.github/workflows/aws-lambda-java-serialization.yml @@ -4,6 +4,7 @@ name: Java CI aws-lambda-java-serialization on: + workflow_dispatch: push: branches: [ main ] paths: diff --git a/.github/workflows/runtime-interface-client_merge_to_main.yml b/.github/workflows/runtime-interface-client_merge_to_main.yml index 917e7f01a..c4dcc8075 100644 --- a/.github/workflows/runtime-interface-client_merge_to_main.yml +++ b/.github/workflows/runtime-interface-client_merge_to_main.yml @@ -11,12 +11,12 @@ name: Publish artifact for aws-lambda-java-runtime-interface-client on: + workflow_dispatch: push: branches: [ main ] paths: - 'aws-lambda-java-runtime-interface-client/**' - '.github/workflows/runtime-interface-client_*.yml' - workflow_dispatch: jobs: diff --git a/.github/workflows/runtime-interface-client_pr.yml b/.github/workflows/runtime-interface-client_pr.yml index 506f2a720..637991ac7 100644 --- a/.github/workflows/runtime-interface-client_pr.yml +++ b/.github/workflows/runtime-interface-client_pr.yml @@ -5,6 +5,7 @@ name: PR to runtime-interface-client on: + workflow_dispatch: pull_request: branches: [ '*' ] paths: diff --git a/.github/workflows/samples.yml b/.github/workflows/samples.yml index fbc83a8e4..3ef55ec22 100644 --- a/.github/workflows/samples.yml +++ b/.github/workflows/samples.yml @@ -4,6 +4,7 @@ name: Java CI samples on: + workflow_dispatch: push: branches: [ main ] paths: From 7946ec4695c65a4bc982b1e40ac237f6402380c8 Mon Sep 17 00:00:00 2001 From: Davide Melfi Date: Fri, 20 Mar 2026 16:38:57 +0000 Subject: [PATCH 5/8] build: upgrading junit-jupiter everywhere --- aws-lambda-java-events-sdk-transformer/pom.xml | 3 ++- aws-lambda-java-events/pom.xml | 3 ++- aws-lambda-java-runtime-interface-client/pom.xml | 2 +- aws-lambda-java-tests/pom.xml | 2 +- experimental/aws-lambda-java-profiler/examples/cdk/pom.xml | 2 +- samples/kinesis-firehose-event-handler/pom.xml | 3 ++- 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/aws-lambda-java-events-sdk-transformer/pom.xml b/aws-lambda-java-events-sdk-transformer/pom.xml index d719ec8ac..7c72e98c4 100644 --- a/aws-lambda-java-events-sdk-transformer/pom.xml +++ b/aws-lambda-java-events-sdk-transformer/pom.xml @@ -38,6 +38,7 @@ 1.8 1.11.914 2.15.40 + 5.14.3 @@ -70,7 +71,7 @@ org.junit.jupiter junit-jupiter-engine - 5.7.0 + ${junit-jupiter.version} test diff --git a/aws-lambda-java-events/pom.xml b/aws-lambda-java-events/pom.xml index 714c825d9..ba93601dc 100644 --- a/aws-lambda-java-events/pom.xml +++ b/aws-lambda-java-events/pom.xml @@ -39,6 +39,7 @@ UTF-8 2.20.1 2.40.1 + 5.14.3 @@ -58,7 +59,7 @@ org.junit.jupiter junit-jupiter-engine - 5.9.2 + ${junit-jupiter.version} test diff --git a/aws-lambda-java-runtime-interface-client/pom.xml b/aws-lambda-java-runtime-interface-client/pom.xml index 65304c61a..f84ffe558 100644 --- a/aws-lambda-java-runtime-interface-client/pom.xml +++ b/aws-lambda-java-runtime-interface-client/pom.xml @@ -37,7 +37,7 @@ 0.8.12 2.4 3.1.1 - 5.9.2 + 5.14.3 3.4.0