You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by dc...@apache.org on 2025/08/27 17:33:02 UTC
(cassandra) branch trunk updated: SSTableLoaderEncryptionOptionsTest#bulkLoaderSuccessfullyStreamsOverSslWithDeprecatedSslStoragePort failing on missing stdout content
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 <dc...@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-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org