This is an automated email from the ASF dual-hosted git repository. dcapwell pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push: new bf6a82ec82 SSTableLoaderEncryptionOptionsTest#bulkLoaderSuccessfullyStreamsOverSslWithDeprecatedSslStoragePort failing on missing stdout content bf6a82ec82 is described below commit bf6a82ec82277ac9f20117cce8635be83ea56010 Author: David Capwell <dcapw...@apache.org> AuthorDate: Tue Aug 26 17:04:22 2025 -0700 SSTableLoaderEncryptionOptionsTest#bulkLoaderSuccessfullyStreamsOverSslWithDeprecatedSslStoragePort failing on missing stdout content patch by David Capwell; reviewed by Caleb Rackliffe for CASSANDRA-20698 --- .../test/SSTableLoaderEncryptionOptionsTest.java | 2 +- .../org/apache/cassandra/tools/ToolRunner.java | 58 ++++++++++++++++++++-- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/test/distributed/org/apache/cassandra/distributed/test/SSTableLoaderEncryptionOptionsTest.java b/test/distributed/org/apache/cassandra/distributed/test/SSTableLoaderEncryptionOptionsTest.java index ea3c980586..305788f30b 100644 --- a/test/distributed/org/apache/cassandra/distributed/test/SSTableLoaderEncryptionOptionsTest.java +++ b/test/distributed/org/apache/cassandra/distributed/test/SSTableLoaderEncryptionOptionsTest.java @@ -109,7 +109,7 @@ public class SSTableLoaderEncryptionOptionsTest extends AbstractEncryptionOption public void bulkLoaderSuccessfullyStreamsOverSslWithDeprecatedSslStoragePort() throws Throwable { File sstables_to_upload = prepareSstablesForUpload(); - ToolRunner.ToolResult tool = ToolRunner.invokeClass(BulkLoader.class, + ToolRunner.ToolResult tool = ToolRunner.invokeClass(BulkLoader.class, true, "--nodes", NODES, "--port", Integer.toString(NATIVE_PORT), "--storage-port", Integer.toString(STORAGE_PORT), diff --git a/test/unit/org/apache/cassandra/tools/ToolRunner.java b/test/unit/org/apache/cassandra/tools/ToolRunner.java index cb2e5b06bd..3d4d4588fd 100644 --- a/test/unit/org/apache/cassandra/tools/ToolRunner.java +++ b/test/unit/org/apache/cassandra/tools/ToolRunner.java @@ -43,6 +43,10 @@ import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.core.OutputStreamAppender; +import ch.qos.logback.classic.encoder.PatternLayoutEncoder; +import ch.qos.logback.classic.spi.ILoggingEvent; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.distributed.api.IInstance; @@ -271,15 +275,25 @@ public class ToolRunner public static ToolResult invokeClass(String klass, String... args) { - return invokeClass(klass, null, args); + return invokeClass(klass, null, false, args); } public static ToolResult invokeClass(Class<?> klass, String... args) { - return invokeClass(klass.getName(), null, args); + return invokeClass(klass.getName(), null, false, args); + } + + public static ToolResult invokeClass(Class<?> klass, boolean captureLogging, String... args) + { + return invokeClass(klass.getName(), null, captureLogging, args); } public static ToolResult invokeClass(String klass, InputStream stdin, String... args) + { + return invokeClass(klass, stdin, false, args); + } + + public static ToolResult invokeClass(String klass, InputStream stdin, boolean captureLogging, String... args) { List<String> allArgs = new ArrayList<>(); allArgs.add(klass); @@ -294,13 +308,12 @@ public class ToolRunner } }; - Pair<Integer, ToolResult> res = invokeSupplier(runMe, stdin); + Pair<Integer, ToolResult> res = invokeSupplier(runMe, stdin, captureLogging); return new ToolResult(allArgs, res.right.getExitCode() == -1 ? -1 : res.left, res.right.getStdout(), res.right.getStderr(), res.right.getException()); - } public static ToolResult invokeNodetoolJvmDtestIsolated(IInstance node, String... args) @@ -399,6 +412,11 @@ public class ToolRunner } public static <T> Pair<T, ToolResult> invokeSupplier(Supplier<T> runMe, InputStream stdin) + { + return invokeSupplier(runMe, stdin, false); + } + + public static <T> Pair<T, ToolResult> invokeSupplier(Supplier<T> runMe, InputStream stdin, boolean captureLogging) { PrintStream originalSysOut = System.out; PrintStream originalSysErr = System.err; @@ -410,6 +428,10 @@ public class ToolRunner System.setIn(stdin == null ? originalSysIn : stdin); + Runnable loggerCleanup = null; + if (captureLogging) + loggerCleanup = registerLoggerAppender(out); + T res = null; try(PrintStream newOut = new PrintStream(out); PrintStream newErr = new PrintStream(err)) { @@ -434,9 +456,37 @@ public class ToolRunner System.setOut(originalSysOut); System.setErr(originalSysErr); System.setIn(originalSysIn); + + if (captureLogging) + loggerCleanup.run(); } } + private static Runnable registerLoggerAppender(ByteArrayOutputStream out) + { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + ch.qos.logback.classic.Logger rootLogger = context.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME); + + OutputStreamAppender<ILoggingEvent> logAppender = new OutputStreamAppender<>(); + logAppender.setContext(context); + logAppender.setName("ToolRunnerCapture"); + + PatternLayoutEncoder encoder = new PatternLayoutEncoder(); + encoder.setContext(context); + encoder.setPattern("%msg%n"); + encoder.start(); + + logAppender.setEncoder(encoder); + logAppender.setOutputStream(out); + logAppender.start(); + + rootLogger.addAppender(logAppender); + return () -> { + rootLogger.detachAppender(logAppender); + logAppender.stop(); + }; + } + public static Builder builder(List<String> args) { return new Builder(args); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org