From c6cedcded6cbd7ab645e2a79328deac16bc0a793 Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Sun, 21 Sep 2025 21:39:16 +0200 Subject: [PATCH 1/3] Add a matrix build for Corretto JDK 25 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de889ab..0914eb6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: platform: [ubuntu-latest, macos-latest, windows-latest] - jdk: [17, 21] + jdk: [17, 21, 25] runs-on: ${{ matrix.platform }} name: on ${{ matrix.platform }} with JDK ${{ matrix.jdk }} @@ -22,7 +22,7 @@ jobs: - name: Set up JDK ${{ matrix.jdk }} uses: actions/setup-java@v5 with: - distribution: 'temurin' + distribution: 'corretto' java-version: '${{ matrix.jdk }}' check-latest: true cache: 'maven' From a4f9e99c7c985188388f2cc63b4a2c83d703f3ee Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Tue, 23 Sep 2025 12:58:56 +0200 Subject: [PATCH 2/3] Use latest version of parent pom Use version `10.2792.v9dd09fb_3c255`. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f946e94..e0e70e9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.jvnet.hudson.plugins analysis-pom - 10.2715.v615cde31c843 + 10.2792.v9dd09fb_3c255 From 67cb87114f4aea69a6e711032dc4679386abb1ab Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Tue, 23 Sep 2025 13:58:48 +0200 Subject: [PATCH 3/3] Fix warnings with latest PMD version --- .../plugins/util/AgentFileVisitorTest.java | 13 ++- .../jenkins/plugins/util/LogHandlerTest.java | 110 ++++++++++-------- 2 files changed, 66 insertions(+), 57 deletions(-) diff --git a/src/test/java/io/jenkins/plugins/util/AgentFileVisitorTest.java b/src/test/java/io/jenkins/plugins/util/AgentFileVisitorTest.java index f571c7e..ce43d62 100644 --- a/src/test/java/io/jenkins/plugins/util/AgentFileVisitorTest.java +++ b/src/test/java/io/jenkins/plugins/util/AgentFileVisitorTest.java @@ -1,11 +1,5 @@ package io.jenkins.plugins.util; -import java.io.File; -import java.io.Serial; -import java.nio.charset.Charset; -import java.nio.file.Path; -import java.util.Optional; - import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -17,6 +11,12 @@ import edu.hm.hafner.util.VisibleForTesting; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import java.io.File; +import java.io.Serial; +import java.nio.charset.Charset; +import java.nio.file.Path; +import java.util.Optional; + import io.jenkins.plugins.util.AgentFileVisitor.FileSystemFacade; import io.jenkins.plugins.util.AgentFileVisitor.FileVisitorResult; import io.jenkins.plugins.util.AgentFileVisitorTest.StringScanner; @@ -191,6 +191,7 @@ protected StringScanner(final String filePattern, final String encoding, final b } @Override + @SuppressWarnings("PMD.AssignmentInOperand") protected Optional processFile(final Path file, final Charset charset, final FilteredLog log) { return Optional.of(CONTENT + counter++); } diff --git a/src/test/java/io/jenkins/plugins/util/LogHandlerTest.java b/src/test/java/io/jenkins/plugins/util/LogHandlerTest.java index 17be6c8..a0852dd 100644 --- a/src/test/java/io/jenkins/plugins/util/LogHandlerTest.java +++ b/src/test/java/io/jenkins/plugins/util/LogHandlerTest.java @@ -1,14 +1,16 @@ package io.jenkins.plugins.util; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; - import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import edu.hm.hafner.util.FilteredLog; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.nio.charset.StandardCharsets; + import hudson.model.TaskListener; import static org.assertj.core.api.Assertions.*; @@ -28,60 +30,66 @@ class LogHandlerTest { @ValueSource(booleans = {true, false}) @ParameterizedTest(name = "Log some messages and evaluate quiet flag value (quiet = {0})") - void shouldLogInfoAndErrorMessage(final boolean quiet) { - var outputStream = new ByteArrayOutputStream(); - var printStream = new PrintStream(outputStream); - var taskListener = createTaskListener(printStream); - - var logger = new FilteredLog("Title"); - logger.logInfo(NOT_SHOWN); - logger.logError(NOT_SHOWN); - - var logHandler = new LogHandler(taskListener, LOG_HANDLER_NAME, logger); - logHandler.setQuiet(quiet); - - logger.logInfo(MESSAGE); - logger.logError(MESSAGE); - - logHandler.log(logger); - - if (quiet) { - assertThat(outputStream.toString()).isEmpty(); - } - else { - assertThat(outputStream).hasToString(String.format( - "[%s] [-ERROR-] %s%n" - + "[%s] %s%n", - LOG_HANDLER_NAME, MESSAGE, LOG_HANDLER_NAME, MESSAGE)); - } - logger.logInfo(ADDITIONAL_MESSAGE); - logger.logError(ADDITIONAL_MESSAGE); - logHandler.log(logger); - - if (quiet) { - assertThat(outputStream.toString()).isEmpty(); - } - else { - assertThat(outputStream).hasToString(String.format( - "[%s] [-ERROR-] %s%n" - + "[%s] %s%n" - + "[%s] [-ERROR-] %s%n" - + "[%s] %s%n", - LOG_HANDLER_NAME, MESSAGE, LOG_HANDLER_NAME, MESSAGE, LOG_HANDLER_NAME, - ADDITIONAL_MESSAGE, LOG_HANDLER_NAME, ADDITIONAL_MESSAGE)); + void shouldLogInfoAndErrorMessage(final boolean quiet) throws IOException { + try (var outputStream = new ByteArrayOutputStream(); + var printStream = wrapStream(outputStream)) { + var taskListener = createTaskListener(printStream); + + var logger = new FilteredLog("Title"); + logger.logInfo(NOT_SHOWN); + logger.logError(NOT_SHOWN); + + var logHandler = new LogHandler(taskListener, LOG_HANDLER_NAME, logger); + logHandler.setQuiet(quiet); + + logger.logInfo(MESSAGE); + logger.logError(MESSAGE); + + logHandler.log(logger); + + if (quiet) { + assertThat(outputStream.toString(StandardCharsets.UTF_8)).isEmpty(); + } + else { + assertThat(outputStream).hasToString(String.format( + "[%s] [-ERROR-] %s%n" + + "[%s] %s%n", + LOG_HANDLER_NAME, MESSAGE, LOG_HANDLER_NAME, MESSAGE)); + } + logger.logInfo(ADDITIONAL_MESSAGE); + logger.logError(ADDITIONAL_MESSAGE); + logHandler.log(logger); + + if (quiet) { + assertThat(outputStream.toString(StandardCharsets.UTF_8)).isEmpty(); + } + else { + assertThat(outputStream).hasToString(String.format( + "[%s] [-ERROR-] %s%n" + + "[%s] %s%n" + + "[%s] [-ERROR-] %s%n" + + "[%s] %s%n", + LOG_HANDLER_NAME, MESSAGE, LOG_HANDLER_NAME, MESSAGE, LOG_HANDLER_NAME, + ADDITIONAL_MESSAGE, LOG_HANDLER_NAME, ADDITIONAL_MESSAGE)); + } } } @Test - void shouldLogFormattedMessage() { - var outputStream = new ByteArrayOutputStream(); - var printStream = new PrintStream(outputStream); - var taskListener = createTaskListener(printStream); - var logHandler = new LogHandler(taskListener, LOG_HANDLER_NAME); + void shouldLogFormattedMessage() throws IOException { + try (var outputStream = new ByteArrayOutputStream(); + var printStream = wrapStream(outputStream)) { + var taskListener = createTaskListener(printStream); + var logHandler = new LogHandler(taskListener, LOG_HANDLER_NAME); + + logHandler.log(LOGGER_MESSAGE); - logHandler.log(LOGGER_MESSAGE); + assertThat(outputStream).hasToString("[%s] %s%n".formatted(LOG_HANDLER_NAME, LOGGER_MESSAGE)); + } + } - assertThat(outputStream).hasToString("[%s] %s%n".formatted(LOG_HANDLER_NAME, LOGGER_MESSAGE)); + private PrintStream wrapStream(final ByteArrayOutputStream outputStream) { + return new PrintStream(outputStream, true, StandardCharsets.UTF_8); } private TaskListener createTaskListener(final PrintStream printStream) {