diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/MultiEnvFactory.java b/integration-test/src/main/java/org/apache/iotdb/it/env/MultiEnvFactory.java index f2e5f9c1f903d..d9fafd1353a35 100644 --- a/integration-test/src/main/java/org/apache/iotdb/it/env/MultiEnvFactory.java +++ b/integration-test/src/main/java/org/apache/iotdb/it/env/MultiEnvFactory.java @@ -33,11 +33,17 @@ public class MultiEnvFactory { private static final List envList = new ArrayList<>(); private static final Logger logger = IoTDBTestLogger.logger; private static String currentMethodName; + private static String currentClassName; private MultiEnvFactory() { // Empty constructor } + public static void setTestClassName(final String testClassName) { + currentClassName = testClassName; + envList.forEach(baseEnv -> baseEnv.setTestClassName(testClassName)); + } + public static void setTestMethodName(final String testMethodName) { currentMethodName = testMethodName; envList.forEach(baseEnv -> baseEnv.setTestMethodName(testMethodName)); @@ -56,7 +62,7 @@ public static void createEnv(final int num) { for (int i = 0; i < num; ++i) { try { Class.forName(Config.JDBC_DRIVER_NAME); - envList.add(new MultiClusterEnv(startTime, i, currentMethodName)); + envList.add(new MultiClusterEnv(startTime, i, currentClassName, currentMethodName)); } catch (final ClassNotFoundException e) { logger.error("Create env error", e); System.exit(-1); diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java index e5d4e19834d95..ae724c7081dbb 100644 --- a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java +++ b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java @@ -104,6 +104,7 @@ public abstract class AbstractEnv implements BaseEnv { protected List configNodeWrapperList = Collections.emptyList(); protected List dataNodeWrapperList = Collections.emptyList(); protected List extraNodeWrappers = Collections.emptyList(); + protected String testClassName = null; protected String testMethodName = null; protected int index = 0; protected long startTime; @@ -332,6 +333,9 @@ private DataNodeWrapper newDataNode() { } public String getTestClassName() { + if (testClassName != null) { + return testClassName; + } final StackTraceElement[] stack = Thread.currentThread().getStackTrace(); for (final StackTraceElement stackTraceElement : stack) { final String className = stackTraceElement.getClassName(); @@ -1228,6 +1232,17 @@ public String getTestMethodName() { return testMethodName; } + @Override + public void setTestClassName(final String testClassName) { + if (testClassName == null || testClassName.isEmpty()) { + this.testClassName = null; + return; + } + final int lastDotIndex = testClassName.lastIndexOf("."); + this.testClassName = + lastDotIndex >= 0 ? testClassName.substring(lastDotIndex + 1) : testClassName; + } + @Override public void setTestMethodName(final String testMethodName) { this.testMethodName = testMethodName; diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/MultiClusterEnv.java b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/MultiClusterEnv.java index d462b5a668b3b..554fc76858656 100644 --- a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/MultiClusterEnv.java +++ b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/MultiClusterEnv.java @@ -26,8 +26,17 @@ public class MultiClusterEnv extends AbstractEnv { public MultiClusterEnv(final long startTime, final int index, final String currentMethodName) { + this(startTime, index, null, currentMethodName); + } + + public MultiClusterEnv( + final long startTime, + final int index, + final String currentClassName, + final String currentMethodName) { super(startTime); this.index = index; + setTestClassName(currentClassName); this.testMethodName = currentMethodName; } diff --git a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java index 0aed2cfdf1912..fb2196943e40a 100644 --- a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java +++ b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java @@ -205,6 +205,10 @@ default Connection getConnectionWithSpecifiedDataNode(DataNodeWrapper dataNode) Connection getConnectionWithSpecifiedDataNode( DataNodeWrapper dataNode, String username, String password) throws SQLException; + default void setTestClassName(String testClassName) { + // Default no-op for env implementations that do not create local node log directories. + } + void setTestMethodName(String testCaseName); void dumpTestJVMSnapshot(); diff --git a/integration-test/src/test/java/org/apache/iotdb/it/framework/IoTDBTestRunner.java b/integration-test/src/test/java/org/apache/iotdb/it/framework/IoTDBTestRunner.java index 31981f8727086..fb512603481e8 100644 --- a/integration-test/src/test/java/org/apache/iotdb/it/framework/IoTDBTestRunner.java +++ b/integration-test/src/test/java/org/apache/iotdb/it/framework/IoTDBTestRunner.java @@ -44,6 +44,11 @@ public IoTDBTestRunner(final Class testClass) throws InitializationError { @Override public void run(final RunNotifier notifier) { TimeZone.setDefault(TimeZone.getTimeZone("UTC+08:00")); + final String testClassName = getTestClass().getJavaClass().getSimpleName(); + if (EnvType.getSystemEnvType() != EnvType.MultiCluster) { + EnvFactory.getEnv().setTestClassName(testClassName); + } + MultiEnvFactory.setTestClassName(testClassName); listener = new IoTDBTestListener(this.getName()); notifier.addListener(listener); super.run(notifier); @@ -54,9 +59,12 @@ protected void runChild(final FrameworkMethod method, final RunNotifier notifier final Description description = describeChild(method); logger.info("Run {}", description.getMethodName()); final long currentTime = System.currentTimeMillis(); + final String testClassName = getTestClass().getJavaClass().getSimpleName(); if (EnvType.getSystemEnvType() != EnvType.MultiCluster) { + EnvFactory.getEnv().setTestClassName(testClassName); EnvFactory.getEnv().setTestMethodName(description.getMethodName()); } + MultiEnvFactory.setTestClassName(testClassName); MultiEnvFactory.setTestMethodName(description.getMethodName()); if (Thread.currentThread().getName().equals("main")) { Thread.currentThread().setName("main-" + description.getMethodName()); diff --git a/integration-test/src/test/java/org/apache/iotdb/it/framework/IoTDBTestRunnerWithParameters.java b/integration-test/src/test/java/org/apache/iotdb/it/framework/IoTDBTestRunnerWithParameters.java index e11a930f5ad14..312e29bea775e 100644 --- a/integration-test/src/test/java/org/apache/iotdb/it/framework/IoTDBTestRunnerWithParameters.java +++ b/integration-test/src/test/java/org/apache/iotdb/it/framework/IoTDBTestRunnerWithParameters.java @@ -20,6 +20,8 @@ package org.apache.iotdb.it.framework; import org.apache.iotdb.it.env.EnvFactory; +import org.apache.iotdb.it.env.EnvType; +import org.apache.iotdb.it.env.MultiEnvFactory; import org.junit.runner.Description; import org.junit.runner.notification.RunNotifier; @@ -40,6 +42,11 @@ public IoTDBTestRunnerWithParameters(TestWithParameters test) throws Initializat @Override public void run(RunNotifier notifier) { + final String testClassName = getTestClass().getJavaClass().getSimpleName(); + if (EnvType.getSystemEnvType() != EnvType.MultiCluster) { + EnvFactory.getEnv().setTestClassName(testClassName); + } + MultiEnvFactory.setTestClassName(testClassName); listener = new IoTDBTestListener(this.getName()); notifier.addListener(listener); super.run(notifier); @@ -50,7 +57,13 @@ protected synchronized void runChild(final FrameworkMethod method, RunNotifier n Description description = describeChild(method); logger.info("Run {}", description.getMethodName()); long currentTime = System.currentTimeMillis(); - EnvFactory.getEnv().setTestMethodName(description.getMethodName()); + final String testClassName = getTestClass().getJavaClass().getSimpleName(); + if (EnvType.getSystemEnvType() != EnvType.MultiCluster) { + EnvFactory.getEnv().setTestClassName(testClassName); + EnvFactory.getEnv().setTestMethodName(description.getMethodName()); + } + MultiEnvFactory.setTestClassName(testClassName); + MultiEnvFactory.setTestMethodName(description.getMethodName()); super.runChild(method, notifier); double timeCost = (System.currentTimeMillis() - currentTime) / 1000.0; String testName = description.getClassName() + "." + description.getMethodName();