From 522aa94bb8b88d8586d887799c4d88faa431b68d Mon Sep 17 00:00:00 2001 From: Ferenc Csaky Date: Wed, 1 Jul 2026 13:13:06 +0200 Subject: [PATCH] fix: JaCoCo reports for containered tests --- .circleci/config.yml | 11 ++- .mvn/extensions.xml | 26 ------- CLAUDE.md | 7 +- pom.xml | 78 ++++++++++++------- sqrl-cli/pom.xml | 40 ---------- sqrl-server/sqrl-server-vertx/entrypoint.sh | 2 +- sqrl-server/sqrl-server-vertx/pom.xml | 31 -------- sqrl-testing/sqrl-testing-container/pom.xml | 7 ++ .../testing/SqrlContainerExtension.java | 36 +++++++++ 9 files changed, 104 insertions(+), 134 deletions(-) delete mode 100644 .mvn/extensions.xml diff --git a/.circleci/config.yml b/.circleci/config.yml index e4a23a2662..05c397d1c9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -165,7 +165,10 @@ commands: name: Save package results command: | mkdir -p ~/test-results/junit/ - find . -type f -regex ".*/target/surefire-reports/.*xml" \ + find . -type f \( \ + -regex ".*/target/surefire-reports/.*xml" \ + -o -regex ".*/target/failsafe-reports/.*xml" \ + \) \ -exec cp {} ~/test-results/junit/ \; when: always - store_test_results: @@ -311,7 +314,7 @@ jobs: export MAVEN_OPTS="-Xmx3g -XX:MaxMetaspaceSize=768m -Djava.awt.headless=true" mvn -U -T1 -B install \ -DonlyUTs \ - -DargLine="@{argLine} -Xmx2g -XX:MaxMetaspaceSize=512m" + -DargLine="-Xmx2g -XX:MaxMetaspaceSize=512m" - save-test-results integration-tests: @@ -367,6 +370,8 @@ jobs: -pl :sqrl-testing-container \ -Ddocker.image.tag=local-${CIRCLE_SHA1} \ -Dmcp.inspector.version=$MCP_TAG + mvn -B -DonlyContainerE2E jacoco:report-aggregate + - save-test-results deploy: docker: @@ -386,7 +391,7 @@ jobs: echo "pinentry-mode loopback" >> ~/.gnupg/gpg.conf - run: name: Build shaded JAR - command: mvn -U clean -T1C -B deploy -DonlyJars ${CIRCLE_TAG:+-Prelease} -Deasyjacoco.skip=true + command: mvn -U clean -T1C -B deploy -DonlyJars ${CIRCLE_TAG:+-Prelease} build-images: # use a full VM so we can run Docker / Buildx diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml deleted file mode 100644 index d477ef5cfe..0000000000 --- a/.mvn/extensions.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - com.marvinformatics.jacoco - easy-jacoco-maven-plugin - 0.1.4 - - diff --git a/CLAUDE.md b/CLAUDE.md index c7bd846ebf..bd35c558f0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -33,7 +33,6 @@ mvn -P dev initialize # Server-specific builds mvn clean package # Build fat JAR (vertx-server.jar) mvn clean package -Pskip-shade-plugin # Build without fat JAR -mvn clean package -Pinstrument # Build with JaCoCo instrumentation ``` ### Testing Commands @@ -47,11 +46,11 @@ mvn verify # Coverage report mvn jacoco:report -# Test specific module (ALWAYS include -Deasyjacoco.skip when using -pl) -mvn test -pl sqrl-planner -Deasyjacoco.skip +# Test specific module +mvn test -pl sqrl-planner # Test specific test method in module -mvn test -pl sqrl-tools/sqrl-config -Dtest=TestClassName#testMethodName -Deasyjacoco.skip +mvn test -pl sqrl-tools/sqrl-config -Dtest=TestClassName#testMethodName # Container tests (requires Docker images to be built) mvn -B install -DonlyContainerE2E -pl :sqrl-testing-container -Dit.test=TestClassName diff --git a/pom.xml b/pom.xml index 993bd0d1a4..0560abfeb0 100644 --- a/pom.xml +++ b/pom.xml @@ -135,12 +135,14 @@ 2.4.240 7.0.8 7.1.0 + 3.3.4 4.5.14 1.11.0 2.22.0 + 0.8.15 3.0.0 2.0.1 @@ -173,7 +175,6 @@ 0.48.1 - 0.1.4 5.6 5.0.0 3.2.8 @@ -870,33 +871,47 @@ org.jacoco jacoco-maven-plugin ${jacoco.version} - - - org/** - - - - - - com.marvinformatics.jacoco - easy-jacoco-maven-plugin - 0.1.4 - - - - - - INSTRUCTION - COVEREDRATIO - 0.70 - - - - - - true - - + + + prepare-agent + + prepare-agent + + + true + ${project.build.directory}/jacoco.exec + jacocoArgLine + + + + report + + report + + verify + + + org/** + + + + + report-aggregate + + report-aggregate + + verify + false + + + target/*.exec + + + org/** + + + + @@ -982,6 +997,10 @@ America/Los_Angeles + @{jacocoArgLine} ${argLine} + + ${settings.localRepository}/org/jacoco/org.jacoco.agent/${jacoco.version}/org.jacoco.agent-${jacoco.version}-runtime.jar + @@ -998,8 +1017,9 @@ ${flinkrunner.image.repo} ${flinkrunner.version} + ${settings.localRepository}/org/jacoco/org.jacoco.agent/${jacoco.version}/org.jacoco.agent-${jacoco.version}-runtime.jar - ${argLine} + @{jacocoArgLine} ${argLine} --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED diff --git a/sqrl-cli/pom.xml b/sqrl-cli/pom.xml index 1231dddbdd..47129c17c5 100644 --- a/sqrl-cli/pom.xml +++ b/sqrl-cli/pom.xml @@ -427,44 +427,4 @@ - - - - instrument - - - - org.jacoco - org.jacoco.agent - ${jacoco.version} - runtime - - - - - - - com.marvinformatics.jacoco - easy-jacoco-maven-plugin - ${easy-jacoco-maven-plugin.version} - - - instrument-uber-jar - - instrument-jar - - - ${project.build.directory}/sqrl-cli.jar - ${project.build.directory}/sqrl-cli.jar - - com/datasqrl/* - - - - - - - - - diff --git a/sqrl-server/sqrl-server-vertx/entrypoint.sh b/sqrl-server/sqrl-server-vertx/entrypoint.sh index 88bcdb921c..3f0d12940a 100755 --- a/sqrl-server/sqrl-server-vertx/entrypoint.sh +++ b/sqrl-server/sqrl-server-vertx/entrypoint.sh @@ -19,7 +19,7 @@ set -e # Enable debug mode if DEBUG environment variable is set if [[ -n "${SQRL_DEBUG+x}" && -n "$SQRL_DEBUG" ]]; then - SQRL_JVM_ARGS="-Dlog4j2.configurationFile=/opt/sqrl/app/log4j2-debug.properties" + SQRL_JVM_ARGS="$SQRL_JVM_ARGS -Dlog4j2.configurationFile=/opt/sqrl/app/log4j2-debug.properties" set -x fi diff --git a/sqrl-server/sqrl-server-vertx/pom.xml b/sqrl-server/sqrl-server-vertx/pom.xml index 1ce87b9913..38fce9d453 100644 --- a/sqrl-server/sqrl-server-vertx/pom.xml +++ b/sqrl-server/sqrl-server-vertx/pom.xml @@ -83,35 +83,4 @@ - - - - instrument - - - - - com.marvinformatics.jacoco - easy-jacoco-maven-plugin - ${easy-jacoco-maven-plugin.version} - - - instrument-uber-jar - - instrument-jar - - - ${project.build.directory}/vertx-server.jar - ${project.build.directory}/vertx-server.jar - - com/datasqrl/* - - - - - - - - - diff --git a/sqrl-testing/sqrl-testing-container/pom.xml b/sqrl-testing/sqrl-testing-container/pom.xml index e5b0ea9692..77c55fc676 100644 --- a/sqrl-testing/sqrl-testing-container/pom.xml +++ b/sqrl-testing/sqrl-testing-container/pom.xml @@ -155,6 +155,13 @@ + + org.jacoco + org.jacoco.agent + ${jacoco.version} + runtime + test + diff --git a/sqrl-testing/sqrl-testing-container/src/test/java/com/datasqrl/container/testing/SqrlContainerExtension.java b/sqrl-testing/sqrl-testing-container/src/test/java/com/datasqrl/container/testing/SqrlContainerExtension.java index 4cef094011..a8cf9972c4 100644 --- a/sqrl-testing/sqrl-testing-container/src/test/java/com/datasqrl/container/testing/SqrlContainerExtension.java +++ b/sqrl-testing/sqrl-testing-container/src/test/java/com/datasqrl/container/testing/SqrlContainerExtension.java @@ -71,6 +71,10 @@ public class SqrlContainerExtension REDPANDA_NETWORK_ALIAS + ":" + REDPANDA_INTERNAL_PORT; private static final String REDPANDA_IMAGE = "redpandadata/redpanda:v23.1.2"; private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final String JACOCO_AGENT_PATH_PROPERTY = "jacoco.agent.path"; + private static final String JACOCO_AGENT_CONTAINER_PATH = "/opt/sqrl/jacocoagent.jar"; + private static final String JACOCO_OUTPUT_CONTAINER_DIR = "/jacoco"; + private static final Path JACOCO_OUTPUT_HOST_DIR = Path.of("target"); private final String testCaseName; @@ -150,6 +154,7 @@ public GenericContainer createCmdContainer(boolean debug) { if (debug) { cmd = cmd.withEnv("SQRL_DEBUG", "1"); } + cmd = configureJacoco(cmd, "sqrl-cli.exec"); commandContainers.add(cmd); return cmd; @@ -189,10 +194,41 @@ public GenericContainer createServerContainer(Path projectRoot, boolean withR serverContainer = serverContainer.withEnv(KAFKA_BOOTSTRAP_SERVERS, REDPANDA_INTERNAL_BOOTSTRAP); } + serverContainer = configureJacoco(serverContainer, "sqrl-server.exec"); return serverContainer; } + @SneakyThrows + private GenericContainer configureJacoco(GenericContainer container, String destFileName) { + var agentPathProperty = System.getProperty(JACOCO_AGENT_PATH_PROPERTY); + if (StringUtils.isBlank(agentPathProperty)) { + return container; + } + + var agentPath = Path.of(agentPathProperty); + if (!Files.isRegularFile(agentPath)) { + log.warn("JaCoCo agent not found at {}, Docker coverage disabled", agentPath); + return container; + } + + var outputDir = JACOCO_OUTPUT_HOST_DIR.toAbsolutePath(); + Files.createDirectories(outputDir); + + var jacocoArg = + String.format( + "-javaagent:%s=destfile=%s/%s,append=true,includes=com.datasqrl.*", + JACOCO_AGENT_CONTAINER_PATH, JACOCO_OUTPUT_CONTAINER_DIR, destFileName); + var existingJvmArgs = container.getEnvMap().get("SQRL_JVM_ARGS"); + var jvmArgs = + StringUtils.isBlank(existingJvmArgs) ? jacocoArg : existingJvmArgs + " " + jacocoArg; + + return container + .withFileSystemBind(agentPath.toString(), JACOCO_AGENT_CONTAINER_PATH, BindMode.READ_ONLY) + .withFileSystemBind(outputDir.toString(), JACOCO_OUTPUT_CONTAINER_DIR, BindMode.READ_WRITE) + .withEnv("SQRL_JVM_ARGS", jvmArgs); + } + public void compileSqrlProject() { compileSqrlProject(null); }