You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/10/31 11:26:27 UTC

[iotdb] branch CrossTest created (now d2e0aaed66)

This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a change to branch CrossTest
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at d2e0aaed66 Move IT cross-test module into integration-test

This branch includes the following new commits:

     new d2e0aaed66 Move IT cross-test module into integration-test

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/01: Move IT cross-test module into integration-test

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch CrossTest
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d2e0aaed66060463cfa6800df4154884e6716791
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Mon Oct 31 19:25:55 2022 +0800

    Move IT cross-test module into integration-test
---
 cross-tests/pom.xml                                | 125 ------
 .../src/test/resources/iotdb-engine.properties     |  21 -
 integration-test/import-control.xml                |  11 +
 integration-test/pom.xml                           |  11 +
 .../org/apache/iotdb/tool/it}/AbstractScript.java  |  18 +-
 .../org/apache/iotdb/tool/it}/ExportCsvTestIT.java |  83 ++--
 .../apache/iotdb/tool/it}/ExportTsFileTestIT.java  |  28 +-
 .../org/apache/iotdb/tool/it}/ImportCsvTestIT.java | 148 +++----
 pom.xml                                            |   1 -
 test/e2e/base/docker-compose.yaml                  |  51 ---
 test/e2e/cases/README.md                           |  53 ---
 test/e2e/cases/cli/README.md                       |  24 --
 test/e2e/cases/cli/cleanup.sh                      |  27 --
 test/e2e/cases/cli/docker-compose.yaml             |  41 --
 test/e2e/cases/cli/res/init.sql                    |  26 --
 test/e2e/cases/cli/run.sh                          |  48 ---
 testcontainer/Readme.md                            |  62 ---
 .../java/org/apache/iotdb/db/sql/ClusterIT.java    | 105 -----
 .../iotdb/db/sql/ClusterSessionSimpleIT.java       |  85 ----
 .../java/org/apache/iotdb/db/sql/SingleNodeIT.java |  88 -----
 .../iotdb/db/sql/node1/OneNodeClusterIT.java       |  54 ---
 .../db/sql/nodes3/AbstractThreeNodeClusterIT.java  |  61 ---
 .../iotdb/db/sql/nodes3/ThreeNodeCluster1IT.java   |  23 --
 .../iotdb/db/sql/nodes3/ThreeNodeCluster2IT.java   |  32 --
 .../db/sql/nodes5/AbstractFiveNodeClusterIT.java   |  85 ----
 .../iotdb/db/sql/nodes5/FiveNodeCluster1IT.java    |  23 --
 .../iotdb/db/sql/nodes5/FiveNodeCluster2IT.java    |  32 --
 .../iotdb/db/sql/nodes5/FiveNodeCluster4IT.java    |  32 --
 .../test/java/org/apache/iotdb/db/sync/SyncIT.java | 426 ---------------------
 .../apache/iotdb/db/sync/SyncWeakNetworkIT.java    |  40 --
 .../NoProjectNameDockerComposeContainer.java       |  38 --
 .../src/test/resources/logback-container.xml       |  39 --
 testcontainer/src/test/resources/logback.xml       |  52 ---
 .../src/test/resources/sync/docker-compose.yaml    |  52 ---
 testcontainer/src/tool/README.md                   |  33 --
 testcontainer/src/tool/parser.py                   |  79 ----
 36 files changed, 140 insertions(+), 2017 deletions(-)

diff --git a/cross-tests/pom.xml b/cross-tests/pom.xml
deleted file mode 100644
index d65af955c1..0000000000
--- a/cross-tests/pom.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>iotdb-parent</artifactId>
-        <groupId>org.apache.iotdb</groupId>
-        <version>0.14.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>cross-tests</artifactId>
-    <properties>
-        <cross.test.test.skip>false</cross.test.test.skip>
-        <cross.test.it.skip>${cross.test.test.skip}</cross.test.it.skip>
-        <cross.ut.skip>${cross.test.test.skip}</cross.ut.skip>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.iotdb</groupId>
-            <artifactId>iotdb-cli</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.iotdb</groupId>
-            <artifactId>iotdb-server</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.iotdb</groupId>
-            <artifactId>iotdb-server</artifactId>
-            <version>${project.version}</version>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-csv</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <!--using `mvn test` to run UT, `mvn verify` to run ITs
-            Reference: https://antoniogoncalves.org/2012/12/13/lets-turn-integration-tests-with-maven-to-a-first-class-citizen/-->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <skipTests>${cross.ut.skip}</skipTests>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>run-integration-tests</id>
-                        <phase>integration-test</phase>
-                        <goals>
-                            <goal>integration-test</goal>
-                            <goal>verify</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <skipTests>${cross.test.test.skip}</skipTests>
-                    <skipITs>${cross.test.it.skip}</skipITs>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-    <profiles>
-        <profile>
-            <id>skipCrossTests</id>
-            <activation>
-                <property>
-                    <name>skipTests</name>
-                    <value>true</value>
-                </property>
-            </activation>
-            <properties>
-                <cross.test.it.skip>true</cross.test.it.skip>
-                <cross.ut.skip>true</cross.ut.skip>
-                <cross.test.test.skip>true</cross.test.test.skip>
-            </properties>
-        </profile>
-        <profile>
-            <id>skipUT_CrossTests</id>
-            <activation>
-                <property>
-                    <name>skipUTs</name>
-                    <value>true</value>
-                </property>
-            </activation>
-            <properties>
-                <cross.ut.skip>true</cross.ut.skip>
-            </properties>
-        </profile>
-    </profiles>
-</project>
diff --git a/cross-tests/src/test/resources/iotdb-engine.properties b/cross-tests/src/test/resources/iotdb-engine.properties
deleted file mode 100644
index b213e4cad9..0000000000
--- a/cross-tests/src/test/resources/iotdb-engine.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-#Licensed to the Apache Software Foundation (ASF) under one
-#or more contributor license agreements.  See the NOTICE file
-#distributed with this work for additional information
-#regarding copyright ownership.  The ASF licenses this file
-#to you under the Apache License, Version 2.0 (the
-#"License"); you may not use this file except in compliance
-#with the License.  You may obtain a copy of the License at
-#
-#http://www.apache.org/licenses/LICENSE-2.0
-#
-#Unless required by applicable law or agreed to in writing,
-#software distributed under the License is distributed on an
-#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#KIND, either express or implied.  See the License for the
-#specific language governing permissions and limitations
-#under the License.
-
-
-base_dir=target/tmp
-data_dirs=target/data
-wal_dir=target/wal
\ No newline at end of file
diff --git a/integration-test/import-control.xml b/integration-test/import-control.xml
index f801fafdc8..80104d913d 100644
--- a/integration-test/import-control.xml
+++ b/integration-test/import-control.xml
@@ -95,4 +95,15 @@
     <allow pkg="org.apache.iotdb.db.metadata.idtable.trigger_example" />
     <allow pkg="org.apache.iotdb.session.template" />
   </subpackage>
+  <subpackage name="tool.it">
+    <allow class="org.apache.commons.csv.CSVParser" />
+    <allow class="org.apache.commons.csv.CSVRecord" />
+    <allow class="org.apache.iotdb.session.ISession" />
+    <allow class="org.apache.iotdb.tsfile.read.TsFileReader" />
+    <allow class="org.apache.iotdb.tsfile.read.TsFileSequenceReader" />
+    <allow class="org.apache.iotdb.tsfile.read.common.Path" />
+    <allow class="org.apache.iotdb.tsfile.read.common.RowRecord" />
+    <allow class="org.apache.iotdb.tsfile.read.expression.QueryExpression" />
+    <allow class="org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet" />
+  </subpackage>
 </import-control>
diff --git a/integration-test/pom.xml b/integration-test/pom.xml
index e5d8b9fe1a..2a23456af0 100644
--- a/integration-test/pom.xml
+++ b/integration-test/pom.xml
@@ -77,6 +77,17 @@
             <artifactId>rewrite-tsfile-tool</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.iotdb</groupId>
+            <artifactId>iotdb-cli</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-csv</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <dependencyManagement>
         <dependencies>
diff --git a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/AbstractScript.java b/integration-test/src/test/java/org/apache/iotdb/tool/it/AbstractScript.java
similarity index 89%
rename from cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/AbstractScript.java
rename to integration-test/src/test/java/org/apache/iotdb/tool/it/AbstractScript.java
index c90cf0691c..c9cb3dc25e 100644
--- a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/AbstractScript.java
+++ b/integration-test/src/test/java/org/apache/iotdb/tool/it/AbstractScript.java
@@ -16,12 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.cross.tests.tools.importCsv;
+package org.apache.iotdb.tool.it;
+
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
 
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVParser;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.thrift.annotation.Nullable;
+import org.junit.runner.RunWith;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -35,6 +39,7 @@ import java.util.Properties;
 
 import static org.junit.Assert.assertTrue;
 
+@RunWith(IoTDBTestRunner.class)
 public abstract class AbstractScript {
   protected String[] command;
   protected final String CSV_FILE = "target" + File.separator + "test.csv";
@@ -105,7 +110,16 @@ public abstract class AbstractScript {
   protected void testMethod(@Nullable String[] params, @Nullable String[] output)
       throws IOException {
     String[] basicParams =
-        new String[] {"-h", "127.0.0.1", "-p", "6667", "-u", "root", "-pw", "root"};
+        new String[] {
+          "-h",
+          EnvFactory.getEnv().getDataNodeWrapperList().get(0).getIp(),
+          "-p",
+          String.valueOf(EnvFactory.getEnv().getDataNodeWrapperList().get(0).getPort()),
+          "-u",
+          "root",
+          "-pw",
+          "root"
+        };
     command = ArrayUtils.addAll(command, basicParams);
     command = ArrayUtils.addAll(command, params);
     if (params != null) {
diff --git a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ExportCsvTestIT.java b/integration-test/src/test/java/org/apache/iotdb/tool/it/ExportCsvTestIT.java
similarity index 62%
rename from cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ExportCsvTestIT.java
rename to integration-test/src/test/java/org/apache/iotdb/tool/it/ExportCsvTestIT.java
index a492dd5505..6eaef41195 100644
--- a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ExportCsvTestIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/tool/it/ExportCsvTestIT.java
@@ -17,12 +17,14 @@
  * under the License.
  */
 
-package org.apache.iotdb.cross.tests.tools.importCsv;
+package org.apache.iotdb.tool.it;
 
-import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.iotdb.session.Session;
+import org.apache.iotdb.session.ISession;
 
 import org.apache.commons.csv.CSVParser;
 import org.apache.commons.csv.CSVRecord;
@@ -30,6 +32,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
 
 import java.io.File;
 import java.io.IOException;
@@ -38,11 +42,13 @@ import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 
+@RunWith(IoTDBTestRunner.class)
+@Category({ClusterIT.class})
 public class ExportCsvTestIT extends AbstractScript {
 
   @Before
-  public void setUp() {
-    EnvironmentUtils.envSetUp();
+  public void setUp() throws Exception {
+    EnvFactory.getEnv().initBeforeTest();
     String os = System.getProperty("os.name").toLowerCase();
     if (os.startsWith("windows")) {
       command =
@@ -61,7 +67,7 @@ public class ExportCsvTestIT extends AbstractScript {
 
   @After
   public void tearDown() throws Exception {
-    EnvironmentUtils.cleanEnv();
+    EnvFactory.getEnv().cleanAfterTest();
   }
 
   @Test
@@ -70,15 +76,16 @@ public class ExportCsvTestIT extends AbstractScript {
     String[] params = {"-td", "target/", "-q", "select c1,c2,c3 from root.test.t1"};
     prepareData();
     testMethod(params, null);
-    CSVParser parser = readCsvFile("target/dump0_0.csv");
-    String[] realRecords = {
-      "root.test.t1.c1,root.test.t1.c2,root.test.t1.c3", "1.0,\"\"abc\",aa\",\"abbe's\""
-    };
-    List<CSVRecord> records = parser.getRecords();
-    for (int i = 0; i < records.size(); i++) {
-      String record = StringUtils.join(records.get(i).toList(), ',');
-      record = record.substring(record.indexOf(',') + 1);
-      assertEquals(realRecords[i], record);
+    try (CSVParser parser = readCsvFile("target/dump0_0.csv")) {
+      String[] realRecords = {
+        "root.test.t1.c1,root.test.t1.c2,root.test.t1.c3", "1.0,\"\"abc\",aa\",\"abbe's\""
+      };
+      List<CSVRecord> records = parser.getRecords();
+      for (int i = 0; i < records.size(); i++) {
+        String record = StringUtils.join(records.get(i).toList(), ',');
+        record = record.substring(record.indexOf(',') + 1);
+        assertEquals(realRecords[i], record);
+      }
     }
   }
 
@@ -90,16 +97,17 @@ public class ExportCsvTestIT extends AbstractScript {
     };
     prepareData();
     testMethod(params, null);
-    CSVParser parser = readCsvFile("target/dump0_0.csv");
-    String[] realRecords = {
-      "root.test.t1.c1(FLOAT),root.test.t1.c2(TEXT),root.test.t1.c3(TEXT)",
-      "1.0,\"\"abc\",aa\",\"abbe's\""
-    };
-    List<CSVRecord> records = parser.getRecords();
-    for (int i = 0; i < records.size(); i++) {
-      String record = StringUtils.join(records.get(i).toList(), ',');
-      record = record.substring(record.indexOf(',') + 1);
-      assertEquals(realRecords[i], record);
+    try (CSVParser parser = readCsvFile("target/dump0_0.csv")) {
+      String[] realRecords = {
+        "root.test.t1.c1(FLOAT),root.test.t1.c2(TEXT),root.test.t1.c3(TEXT)",
+        "1.0,\"\"abc\",aa\",\"abbe's\""
+      };
+      List<CSVRecord> records = parser.getRecords();
+      for (int i = 0; i < records.size(); i++) {
+        String record = StringUtils.join(records.get(i).toList(), ',');
+        record = record.substring(record.indexOf(',') + 1);
+        assertEquals(realRecords[i], record);
+      }
     }
   }
 
@@ -111,21 +119,20 @@ public class ExportCsvTestIT extends AbstractScript {
     };
     prepareData();
     testMethod(params, null);
-    CSVParser parser = readCsvFile("target/dump0_0.csv");
-    String[] realRecords = {
-      "count(root.test.t1.c1),count(root.test.t1.c2),count(root.test.t1.c3)", "1,1,1"
-    };
-    List<CSVRecord> records = parser.getRecords();
-    for (int i = 0; i < records.size(); i++) {
-      String record = StringUtils.join(records.get(i).toList(), ',');
-      assertEquals(realRecords[i], record);
+    try (CSVParser parser = readCsvFile("target/dump0_0.csv")) {
+      String[] realRecords = {
+        "count(root.test.t1.c1),count(root.test.t1.c2),count(root.test.t1.c3)", "1,1,1"
+      };
+      List<CSVRecord> records = parser.getRecords();
+      for (int i = 0; i < records.size(); i++) {
+        String record = StringUtils.join(records.get(i).toList(), ',');
+        assertEquals(realRecords[i], record);
+      }
     }
   }
 
   private void prepareData() throws IoTDBConnectionException, StatementExecutionException {
-    Session session = null;
-    try {
-      session = new Session("127.0.0.1", 6667, "root", "root");
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
       session.open();
 
       String deviceId = "root.test.t1";
@@ -139,10 +146,6 @@ public class ExportCsvTestIT extends AbstractScript {
       values.add("\"abc\",aa");
       values.add("abbe's");
       session.insertRecord(deviceId, 1L, measurements, values);
-    } finally {
-      if (session != null) {
-        session.close();
-      }
     }
   }
 }
diff --git a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/tsfile/ExportTsFileTestIT.java b/integration-test/src/test/java/org/apache/iotdb/tool/it/ExportTsFileTestIT.java
similarity index 86%
rename from cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/tsfile/ExportTsFileTestIT.java
rename to integration-test/src/test/java/org/apache/iotdb/tool/it/ExportTsFileTestIT.java
index 9370af45af..9b4b166514 100644
--- a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/tsfile/ExportTsFileTestIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/tool/it/ExportTsFileTestIT.java
@@ -17,13 +17,14 @@
  * under the License.
  */
 
-package org.apache.iotdb.cross.tests.tools.tsfile;
+package org.apache.iotdb.tool.it;
 
-import org.apache.iotdb.cross.tests.tools.importCsv.AbstractScript;
-import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.iotdb.session.Session;
+import org.apache.iotdb.session.ISession;
 import org.apache.iotdb.tsfile.read.TsFileReader;
 import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
 import org.apache.iotdb.tsfile.read.common.Path;
@@ -35,6 +36,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
 
 import java.io.File;
 import java.io.IOException;
@@ -43,11 +46,13 @@ import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 
+@RunWith(IoTDBTestRunner.class)
+@Category({ClusterIT.class})
 public class ExportTsFileTestIT extends AbstractScript {
 
   @Before
-  public void setUp() {
-    EnvironmentUtils.envSetUp();
+  public void setUp() throws Exception {
+    EnvFactory.getEnv().initBeforeTest();
     String os = System.getProperty("os.name").toLowerCase();
     if (os.startsWith("windows")) {
       command =
@@ -66,7 +71,7 @@ public class ExportTsFileTestIT extends AbstractScript {
 
   @After
   public void tearDown() throws Exception {
-    EnvironmentUtils.cleanEnv();
+    EnvFactory.getEnv().cleanAfterTest();
   }
 
   @Test
@@ -98,9 +103,7 @@ public class ExportTsFileTestIT extends AbstractScript {
   }
 
   private void prepareData() throws IoTDBConnectionException, StatementExecutionException {
-    Session session = null;
-    try {
-      session = new Session("127.0.0.1", 6667, "root", "root");
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
       session.open();
 
       String deviceId = "root.test.t2";
@@ -114,11 +117,6 @@ public class ExportTsFileTestIT extends AbstractScript {
       values.add("bbbbb");
       values.add("abbes");
       session.insertRecord(deviceId, 1L, measurements, values);
-
-    } finally {
-      if (session != null) {
-        session.close();
-      }
     }
   }
 }
diff --git a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ImportCsvTestIT.java b/integration-test/src/test/java/org/apache/iotdb/tool/it/ImportCsvTestIT.java
similarity index 69%
rename from cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ImportCsvTestIT.java
rename to integration-test/src/test/java/org/apache/iotdb/tool/it/ImportCsvTestIT.java
index 13fb2e0315..72709e9fe5 100644
--- a/cross-tests/src/test/java/org/apache/iotdb/cross/tests/tools/importCsv/ImportCsvTestIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/tool/it/ImportCsvTestIT.java
@@ -17,23 +17,25 @@
  * under the License.
  */
 
-package org.apache.iotdb.cross.tests.tools.importCsv;
+package org.apache.iotdb.tool.it;
 
-import org.apache.iotdb.db.utils.EnvironmentUtils;
-import org.apache.iotdb.jdbc.Config;
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
 
 import org.apache.commons.csv.CSVRecord;
 import org.apache.commons.lang3.StringUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
 
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
@@ -43,20 +45,10 @@ import java.util.List;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+@RunWith(IoTDBTestRunner.class)
+@Category({ClusterIT.class})
 public class ImportCsvTestIT extends AbstractScript {
 
-  private static final String[] sqls =
-      new String[] {
-        "SET STORAGE GROUP TO root.fit.d1",
-        "SET STORAGE GROUP TO root.fit.d2",
-        "SET STORAGE GROUP TO root.fit.p",
-        "CREATE TIMESERIES root.fit.d1.s1 WITH DATATYPE=INT32,ENCODING=RLE",
-        "CREATE TIMESERIES root.fit.d1.s2 WITH DATATYPE=TEXT,ENCODING=PLAIN",
-        "CREATE TIMESERIES root.fit.d2.s1 WITH DATATYPE=INT32,ENCODING=RLE",
-        "CREATE TIMESERIES root.fit.d2.s3 WITH DATATYPE=INT32,ENCODING=RLE",
-        "CREATE TIMESERIES root.fit.p.s1 WITH DATATYPE=INT32,ENCODING=RLE",
-      };
-
   private final String[] noDataOutput = {
     "````````````````````````````````````````````````",
     "Starting IoTDB Client Import Script",
@@ -80,9 +72,9 @@ public class ImportCsvTestIT extends AbstractScript {
   };
 
   @Before
-  public void setUp() {
+  public void setUp() throws Exception {
     // start an IotDB server environment
-    EnvironmentUtils.envSetUp();
+    EnvFactory.getEnv().initBeforeTest();
     // choose an execute command by system.
     String os = System.getProperty("os.name").toLowerCase();
     if (os.startsWith("windows")) {
@@ -103,28 +95,12 @@ public class ImportCsvTestIT extends AbstractScript {
   @After
   public void tearDown() throws Exception {
     // shutdown IotDB server environment
-    EnvironmentUtils.cleanEnv();
-  }
-
-  private static void createSchema() throws ClassNotFoundException {
-    Class.forName(Config.JDBC_DRIVER_NAME);
-    try (Connection connection =
-            DriverManager.getConnection(
-                Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
-        Statement statement = connection.createStatement()) {
-
-      for (String sql : sqls) {
-        statement.execute(sql);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
+    EnvFactory.getEnv().cleanAfterTest();
   }
-
   /**
    * test the situation that the schema has not been created and CSV file has no records
    *
-   * @throws IOException
+   * @throws java.io.IOException
    */
   @Test
   public void testImportNoRecordsCSV() throws IOException {
@@ -140,7 +116,7 @@ public class ImportCsvTestIT extends AbstractScript {
   /**
    * test the situation that the CSV file has no headers
    *
-   * @throws IOException
+   * @throws java.io.IOException
    */
   @Test
   public void testNoHeader() throws IOException {
@@ -152,7 +128,7 @@ public class ImportCsvTestIT extends AbstractScript {
   /**
    * test the situation that the CSV file is an empty file
    *
-   * @throws IOException
+   * @throws java.io.IOException
    */
   @Test
   public void testEmptyCSV() throws IOException {
@@ -164,24 +140,18 @@ public class ImportCsvTestIT extends AbstractScript {
   /**
    * test the situation that the schema has been created and CSV file has no problem
    *
-   * @throws IOException
+   * @throws java.io.IOException
    */
   @Test
-  public void test() throws IOException, ClassNotFoundException {
+  public void test() throws IOException {
     assertTrue(generateTestCSV(false, false, false, false, false));
     String[] params = {"-f", CSV_FILE};
     testMethod(params, null);
     File file = new File(CSV_FILE);
-    Class.forName(Config.JDBC_DRIVER_NAME);
-    try (Connection connection =
-            DriverManager.getConnection(
-                Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
-        Statement statement = connection.createStatement()) {
-      if (statement.execute("select * from root.**")) {
-        ResultSet resultSet = statement.getResultSet();
-        testResult(resultSet, 6, 3);
-        resultSet.close();
-      }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement();
+        ResultSet resultSet = statement.executeQuery("select * from root.**")) {
+      testResult(resultSet, 6, 3);
     } catch (Exception e) {
       e.printStackTrace();
     }
@@ -193,25 +163,19 @@ public class ImportCsvTestIT extends AbstractScript {
   /**
    * test the situation that the schema has been created and CSV file has no problem
    *
-   * @throws IOException
+   * @throws java.io.IOException
    */
   @Test
-  public void testAligned() throws IOException, ClassNotFoundException {
+  public void testAligned() throws IOException {
     assertTrue(generateTestCSV(false, false, false, false, false));
     String[] params = {"-f", CSV_FILE, "-aligned "};
     testMethod(params, null);
     File file = new File(CSV_FILE);
-    Class.forName(Config.JDBC_DRIVER_NAME);
-    try (Connection connection =
-            DriverManager.getConnection(
-                Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
-        Statement statement = connection.createStatement()) {
-      if (statement.execute("show devices")) {
-        ResultSet resultSet = statement.getResultSet();
-        while (resultSet.next()) {
-          assertTrue("true".equals(resultSet.getString(2)));
-        }
-        resultSet.close();
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement();
+        ResultSet resultSet = statement.executeQuery("show devices")) {
+      while (resultSet.next()) {
+        assertEquals("true", resultSet.getString(2));
       }
     } catch (Exception e) {
       e.printStackTrace();
@@ -224,24 +188,18 @@ public class ImportCsvTestIT extends AbstractScript {
   /**
    * test the situation that the schema has not been created and CSV file has no problem
    *
-   * @throws IOException
+   * @throws java.io.IOException
    */
   @Test
-  public void testWithoutCreateSchema() throws IOException, ClassNotFoundException {
+  public void testWithoutCreateSchema() throws IOException {
     assertTrue(generateTestCSV(false, false, false, false, false));
     String[] params = {"-f", CSV_FILE};
     testMethod(params, null);
     File file = new File(CSV_FILE);
-    Class.forName(Config.JDBC_DRIVER_NAME);
-    try (Connection connection =
-            DriverManager.getConnection(
-                Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
-        Statement statement = connection.createStatement()) {
-      if (statement.execute("select * from root.**")) {
-        ResultSet resultSet = statement.getResultSet();
-        testResult(resultSet, 6, 3);
-        resultSet.close();
-      }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement();
+        ResultSet resultSet = statement.executeQuery("select * from root.**")) {
+      testResult(resultSet, 6, 3);
     } catch (Exception e) {
       e.printStackTrace();
     }
@@ -253,25 +211,18 @@ public class ImportCsvTestIT extends AbstractScript {
   /**
    * test the situation that the schema has not been created and CSV file has no data type
    *
-   * @throws IOException
-   * @throws ClassNotFoundException
+   * @throws java.io.IOException
    */
   @Test
-  public void testWithDataType() throws IOException, ClassNotFoundException {
+  public void testWithDataType() throws IOException {
     assertTrue(generateTestCSV(false, false, false, false, true));
     String[] params = {"-f", CSV_FILE};
     testMethod(params, null);
     File file = new File(CSV_FILE);
-    Class.forName(Config.JDBC_DRIVER_NAME);
-    try (Connection connection =
-            DriverManager.getConnection(
-                Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
-        Statement statement = connection.createStatement()) {
-      if (statement.execute("select * from root.**")) {
-        ResultSet resultSet = statement.getResultSet();
-        testResult(resultSet, 6, 3);
-        resultSet.close();
-      }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement();
+        ResultSet resultSet = statement.executeQuery("select * from root.**")) {
+      testResult(resultSet, 6, 3);
     } catch (Exception e) {
       e.printStackTrace();
     }
@@ -283,25 +234,18 @@ public class ImportCsvTestIT extends AbstractScript {
   /**
    * test the situation that the schema has not been created and CSV file has no data type
    *
-   * @throws IOException
-   * @throws ClassNotFoundException
+   * @throws java.io.IOException
    */
   @Test
-  public void testWithException() throws IOException, ClassNotFoundException {
+  public void testWithException() throws IOException {
     assertTrue(generateTestCSV(false, false, false, true, true));
     String[] params = {"-f", CSV_FILE};
     testMethod(params, null);
     File file = new File(CSV_FILE);
-    Class.forName(Config.JDBC_DRIVER_NAME);
-    try (Connection connection =
-            DriverManager.getConnection(
-                Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
-        Statement statement = connection.createStatement()) {
-      if (statement.execute("select ** from root")) {
-        ResultSet resultSet = statement.getResultSet();
-        testResult(resultSet, 6, 3);
-        resultSet.close();
-      }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement();
+        ResultSet resultSet = statement.executeQuery("select ** from root")) {
+      testResult(resultSet, 6, 3);
     } catch (Exception e) {
       e.printStackTrace();
     }
@@ -323,7 +267,7 @@ public class ImportCsvTestIT extends AbstractScript {
   /**
    * test whether the shape of data is correct
    *
-   * @throws IOException
+   * @throws java.io.IOException
    */
   private static void testResult(
       ResultSet resultSet, int expectedColumnNumber, int expectedRowNumber) throws SQLException {
diff --git a/pom.xml b/pom.xml
index 192c89a951..50f6fa64c2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -105,7 +105,6 @@
         <module>hive-connector</module>
         <module>node-commons</module>
         <module>confignode</module>
-        <module>cross-tests</module>
         <module>zeppelin-interpreter</module>
         <module>client-py</module>
         <module>compile-tools</module>
diff --git a/test/e2e/base/docker-compose.yaml b/test/e2e/base/docker-compose.yaml
index f536ec6966..e69de29bb2 100644
--- a/test/e2e/base/docker-compose.yaml
+++ b/test/e2e/base/docker-compose.yaml
@@ -1,51 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-version: '3.8'
-
-services:
-  server-prototype:
-    build:
-      context: ../../..
-      dockerfile: docker/src/main/Dockerfile-single
-    ports:
-      - 6667:6667
-    networks:
-      iotdb:
-    healthcheck:
-      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/6667" ]
-      interval: 5s
-      timeout: 60s
-      retries: 120
-
-  initializer:
-    build:
-      context: ../../..
-      dockerfile: docker/src/main/Dockerfile-single
-    networks:
-      iotdb:
-    entrypoint:
-      - bash
-      - -c
-      - |
-        cat /res/init.sql | grep -v '^--' | xargs -I {} /iotdb/sbin/start-cli.sh -h server -e {}
-        echo "Ready to Run IoTDB E2E Tests"
-
-networks:
-  iotdb:
diff --git a/test/e2e/cases/README.md b/test/e2e/cases/README.md
index c4a15e3b96..e69de29bb2 100644
--- a/test/e2e/cases/README.md
+++ b/test/e2e/cases/README.md
@@ -1,53 +0,0 @@
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-# IoTDB E2E tests cases
-
-Test cases are organized into sub-directories, each of which contains the following files:
-
-* `run.sh`: the entry of the test case.
-* `cleanup.sh`: a cleanup script to clean up resources that are created during the test.
-* `res`: resources files that will be mounted into the container(s) and be used there.
-* `docker-compose.yaml`: orchestrates the services used in the test process.
-* `README.md` (Optional): docs or notes when running this case manually.
-
-any other additional files are completely acceptable here, for example, when building
-a case to test the JDBC SDK, the files structure may be something like:
-
-```text
-.
-├── README.md
-├── cleanup.sh
-├── docker-compose.yaml
-├── app      <------- Java application that uses JDBC SDK to communicate with IoTDB
-│   ├── pom.xml
-│   ├── src
-│   │   ├── main
-│   │   │   └── java
-│   │   └── test
-│   │       └── java
-│   └── src
-│       ├── main
-│       └── test
-├── res
-│   └── init.sql
-└── run.sh
-```
diff --git a/test/e2e/cases/cli/README.md b/test/e2e/cases/cli/README.md
index 343abebc56..e69de29bb2 100644
--- a/test/e2e/cases/cli/README.md
+++ b/test/e2e/cases/cli/README.md
@@ -1,24 +0,0 @@
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-# Standalone Server Test
-
-The simplest test case that starts up an IoTDB server and verifies that the CLI works.
diff --git a/test/e2e/cases/cli/cleanup.sh b/test/e2e/cases/cli/cleanup.sh
old mode 100755
new mode 100644
index a96f4d06c5..e69de29bb2
--- a/test/e2e/cases/cli/cleanup.sh
+++ b/test/e2e/cases/cli/cleanup.sh
@@ -1,27 +0,0 @@
-#!/usr/bin/env bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-set -x
-
-cd "$(dirname "$0")" || exit 1
-
-docker-compose down
-
-cd - || exit 1
diff --git a/test/e2e/cases/cli/docker-compose.yaml b/test/e2e/cases/cli/docker-compose.yaml
index 2e9da0422e..e69de29bb2 100644
--- a/test/e2e/cases/cli/docker-compose.yaml
+++ b/test/e2e/cases/cli/docker-compose.yaml
@@ -1,41 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-version: '3.8'
-
-services:
-  server:
-    extends:
-      file: ../../base/docker-compose.yaml
-      service: server-prototype
-    volumes:
-      - ./res:/resources
-
-  initializer:
-    extends:
-      service: initializer
-      file: ../../base/docker-compose.yaml
-    volumes:
-      - ./res:/res:ro
-    depends_on:
-      server:
-        condition: service_healthy
-
-networks:
-  iotdb:
diff --git a/test/e2e/cases/cli/res/init.sql b/test/e2e/cases/cli/res/init.sql
index cb9f6aade0..e69de29bb2 100644
--- a/test/e2e/cases/cli/res/init.sql
+++ b/test/e2e/cases/cli/res/init.sql
@@ -1,26 +0,0 @@
---
--- Licensed to the Apache Software Foundation (ASF) under one
--- or more contributor license agreements.  See the NOTICE file
--- distributed with this work for additional information
--- regarding copyright ownership.  The ASF licenses this file
--- to you under the Apache License, Version 2.0 (the
--- "License"); you may not use this file except in compliance
--- with the License.  You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing,
--- software distributed under the License is distributed on an
--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
--- KIND, either express or implied.  See the License for the
--- specific language governing permissions and limitations
--- under the License.
---
-
-SET STORAGE GROUP TO root.ln;
-SHOW STORAGE GROUP;
-
-CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=PLAIN;
-
-INSERT INTO root.ln.wf01.wt01(timestamp,temperature) values(100, 16);
-INSERT INTO root.ln.wf01.wt01(timestamp,temperature) values(200, 26);
diff --git a/test/e2e/cases/cli/run.sh b/test/e2e/cases/cli/run.sh
old mode 100755
new mode 100644
index a62bba7ecb..e69de29bb2
--- a/test/e2e/cases/cli/run.sh
+++ b/test/e2e/cases/cli/run.sh
@@ -1,48 +0,0 @@
-#!/usr/bin/env bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-set -e
-
-cd "$(dirname "$0")"
-
-docker-compose up -d
-
-max_attempts=10
-attempts=1
-
-while ! docker-compose logs | grep -c 'Ready to Run IoTDB E2E Tests' > /dev/null 2>&1; do
-  if [[ $attempts -gt $max_attempts ]]; then
-    echo "Preparation is not ready after $max_attempts attempts, will exit now"
-    exit 1
-  fi
-  echo "Preparation is not ready yet, retrying ($attempts/$max_attempts)"
-  sleep 3
-  attempts=$((attempts+1))
-done
-
-results=$(docker-compose exec -T server /iotdb/sbin/start-cli.sh -e 'SELECT temperature FROM root.ln.wf01.wt01')
-
-if [[ $results != *"Total line number = 2"* ]]; then
-  echo "Total line number should be 2"
-  echo "$results"
-  exit 1
-fi
-
-cd -
diff --git a/testcontainer/Readme.md b/testcontainer/Readme.md
index d4899781d4..e69de29bb2 100644
--- a/testcontainer/Readme.md
+++ b/testcontainer/Readme.md
@@ -1,62 +0,0 @@
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-# Description
-
-This module is for using Docker and TestContainer for end to end test.
-
-## Requirements
-
-You have to install Docker before you runn this module.
-See [Docker Version Requirement](https://www.testcontainers.org/supported_docker_environment/).
-
-IoTDB project will detect whether a Docker is installed (but do not check the docker's version).
-
-The logic is, for Unix-like system, it checks whether `/var/run/docker.sock` exists.
-For Window system, it checks whether `C:\Program Files\Docker\Docker\resources\bin\docker.exe` exists.
-
-If you are sure you have installed the Docker but `testcontainer` module is not loaed, use `-P unixDockerCheck`
-in your maven command, which also works on Windows OS.
-
-## Behavior
-
-Before running `integration-test` in this module, binaries must be generated in the `distribution` module,
-e.g, call `mvn package -Dmaven.test.skip=true`.
-
-In this module, when running `mvn pre-integration-test` (or `mvn integration-test`, `mvn post-integration-test`),
-the module will build docker image, `apache/iotdb:maven-development`.
-
-In the `post-integration-test` phase, the above images will be removed.
-
-In the `integration-test` phase, all `src/test/java/**/*IT.java` will be tested.
-
-## How it runs
-
-`apache/iotdb:maven-development` is generated following the Dockerfile `${basedir}/docker/src/main/Dockerfile-single`, and
-
-For testing sync module only, we use `mvn integration-test -P sync`.
-
-TestContainer can start the docker (or docker compose) automatically.
-
-But these docker compose files can also be used independently.
-e.g., `docker-compose up`.
-
-
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/ClusterIT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/ClusterIT.java
index 71d8882608..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/ClusterIT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/ClusterIT.java
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql;
-
-import org.apache.iotdb.jdbc.Config;
-import org.apache.iotdb.session.Session;
-
-import org.junit.After;
-import org.junit.Before;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.DockerComposeContainer;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.Statement;
-import java.util.concurrent.TimeUnit;
-
-// do not add tests here.
-// add tests into Cases.java instead.
-public abstract class ClusterIT extends Cases {
-
-  private static Logger logger = LoggerFactory.getLogger(ClusterIT.class);
-
-  // "root.sg1" is a special storage for testing whether the read and write operations can be run
-  // correctly if the data is not on the connected node.
-  public String defaultSG = "root.sg1";
-
-  protected int getWriteRpcPort() {
-    return getContainer().getServicePort("iotdb-server_1", 6667);
-  }
-
-  protected String getWriteRpcIp() {
-    return getContainer().getServiceHost("iotdb-server_1", 6667);
-  }
-
-  protected int[] getReadRpcPorts() {
-    return new int[] {getContainer().getServicePort("iotdb-server_1", 6667)};
-  }
-
-  protected String[] getReadRpcIps() {
-    return new String[] {getContainer().getServiceHost("iotdb-server_1", 6667)};
-  }
-
-  protected void startCluster() {}
-
-  protected abstract DockerComposeContainer getContainer();
-
-  @Before
-  public void init() throws Exception {
-    startCluster();
-
-    Class.forName(Config.JDBC_DRIVER_NAME);
-    writeConnection =
-        DriverManager.getConnection(
-            "jdbc:iotdb://" + getWriteRpcIp() + ":" + getWriteRpcPort(), "root", "root");
-    writeStatement = writeConnection.createStatement();
-
-    int[] readPorts = getReadRpcPorts();
-    String[] readIps = getReadRpcIps();
-    readConnections = new Connection[readPorts.length];
-    readStatements = new Statement[readPorts.length];
-    for (int i = 0; i < readPorts.length; i++) {
-      readConnections[i] =
-          DriverManager.getConnection(
-              "jdbc:iotdb://" + readIps[i] + ":" + readPorts[i], "root", "root");
-      readStatements[i] = readConnections[i].createStatement();
-    }
-    session =
-        new Session.Builder()
-            .host(getWriteRpcIp())
-            .port(getWriteRpcPort())
-            .username("root")
-            .password("root")
-            .enableRedirection(false)
-            .build();
-    session.open();
-    TimeUnit.MILLISECONDS.sleep(3000);
-  }
-
-  @After
-  public void clean() throws Exception {
-    super.clean();
-  }
-
-  // do not add tests here.
-  // add tests into Cases.java instead.
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/ClusterSessionSimpleIT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/ClusterSessionSimpleIT.java
index 6f9189fd5e..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/ClusterSessionSimpleIT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/ClusterSessionSimpleIT.java
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql;
-
-import org.apache.iotdb.rpc.IoTDBConnectionException;
-import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.iotdb.session.Session;
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.DockerComposeContainer;
-import org.testcontainers.containers.NoProjectNameDockerComposeContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.Wait;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-public class ClusterSessionSimpleIT {
-
-  private static Logger node1Logger = LoggerFactory.getLogger("iotdb-server_1");
-  private static Logger node2Logger = LoggerFactory.getLogger("iotdb-server_2");
-  private static Logger node3Logger = LoggerFactory.getLogger("iotdb-server_3");
-
-  private Session session;
-
-  @Rule
-  public DockerComposeContainer environment =
-      new NoProjectNameDockerComposeContainer(
-              "3nodes", new File("src/test/resources/3nodes/docker-compose.yaml"))
-          .withExposedService("iotdb-server_1", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_1", new Slf4jLogConsumer(node1Logger))
-          .withExposedService("iotdb-server_2", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_2", new Slf4jLogConsumer(node2Logger))
-          .withExposedService("iotdb-server_3", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_3", new Slf4jLogConsumer(node3Logger))
-          .withLocalCompose(true);
-
-  protected DockerComposeContainer getContainer() {
-    return environment;
-  }
-
-  @Test
-  public void testSessionCluster() throws IoTDBConnectionException, StatementExecutionException {
-    List<String> stringList = new ArrayList<>();
-    Integer service1Port = getContainer().getServicePort("iotdb-server_1", 6667);
-    Integer service2Port = getContainer().getServicePort("iotdb-server_2", 6667);
-    Integer service3Port = getContainer().getServicePort("iotdb-server_3", 6667);
-    stringList.add("localhost:" + service1Port);
-    stringList.add("localhost:" + service2Port);
-    stringList.add("localhost:" + service3Port);
-    session = new Session(stringList, "root", "root");
-    session.open();
-    session.setStorageGroup("root.sg1");
-    session.createTimeseries(
-        "root.sg1.d1.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
-
-    session.createTimeseries(
-        "root.sg1.d2.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
-    session.close();
-  }
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/SingleNodeIT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/SingleNodeIT.java
index fa75d1e63c..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/SingleNodeIT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/SingleNodeIT.java
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.sql;
-
-import org.apache.iotdb.jdbc.Config;
-import org.apache.iotdb.session.Session;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.BindMode;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.Wait;
-import org.testcontainers.images.PullPolicy;
-import org.testcontainers.utility.DockerImageName;
-
-import java.io.File;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.Statement;
-
-// do not add tests here.
-// add tests into Cases.java instead.
-public class SingleNodeIT extends Cases {
-  private static Logger logger = LoggerFactory.getLogger(SingleNodeIT.class);
-
-  @Rule
-  public GenericContainer dslContainer =
-      new GenericContainer(DockerImageName.parse("apache/iotdb:maven-development"))
-          .withImagePullPolicy(PullPolicy.defaultPolicy())
-          // mount another properties for changing parameters, e.g., open 5555 port (sync module)
-          .withFileSystemBind(
-              new File("src/test/resources/iotdb-datanode.properties").getAbsolutePath(),
-              "/iotdb/conf/iotdb-datanode.properties",
-              BindMode.READ_ONLY)
-          .withFileSystemBind(
-              new File("src/test/resources/logback-container.xml").getAbsolutePath(),
-              "/iotdb/conf/logback.xml",
-              BindMode.READ_ONLY)
-          .withLogConsumer(new Slf4jLogConsumer(logger))
-          .withExposedPorts(6667)
-          .waitingFor(Wait.forListeningPort());
-
-  int rpcPort = 6667;
-  int syncPort = 5555;
-
-  @Before
-  public void init() throws Exception {
-    rpcPort = dslContainer.getMappedPort(6667);
-    syncPort = dslContainer.getMappedPort(5555);
-    Class.forName(Config.JDBC_DRIVER_NAME);
-    readConnections = new Connection[1];
-    readStatements = new Statement[1];
-    writeConnection =
-        readConnections[0] =
-            DriverManager.getConnection("jdbc:iotdb://127.0.0.1:" + rpcPort, "root", "root");
-    writeStatement = readStatements[0] = writeConnection.createStatement();
-    session = new Session("127.0.0.1", rpcPort);
-    session.open();
-  }
-
-  @After
-  public void clean() throws Exception {
-    super.clean();
-  }
-
-  // do not add tests here.
-  // add tests into Cases.java instead.
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/node1/OneNodeClusterIT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/node1/OneNodeClusterIT.java
deleted file mode 100644
index daa7161ac1..0000000000
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/node1/OneNodeClusterIT.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql.node1;
-
-import org.apache.iotdb.db.sql.ClusterIT;
-
-import org.junit.Rule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.DockerComposeContainer;
-import org.testcontainers.containers.NoProjectNameDockerComposeContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.Wait;
-
-import java.io.File;
-
-// a cluster with only one node.
-// in this case, the read and write connection must be on the same node,
-// the data is also
-public class OneNodeClusterIT extends ClusterIT {
-  private static Logger node1Logger = LoggerFactory.getLogger("iotdb-server_1");
-
-  // in TestContainer's document, it is @ClassRule, and the environment is `public static`
-  // I am not sure the difference now.
-  @Rule
-  public DockerComposeContainer environment =
-      new NoProjectNameDockerComposeContainer(
-              "1node", new File("src/test/resources/1node/docker-compose.yaml"))
-          .withExposedService("iotdb-server_1", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_1", new Slf4jLogConsumer(node1Logger))
-          .withLocalCompose(true);
-
-  @Override
-  protected DockerComposeContainer getContainer() {
-    return environment;
-  }
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/AbstractThreeNodeClusterIT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/AbstractThreeNodeClusterIT.java
index 2729581ff2..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/AbstractThreeNodeClusterIT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/AbstractThreeNodeClusterIT.java
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql.nodes3;
-
-import org.apache.iotdb.db.sql.ClusterIT;
-
-import org.junit.Rule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.DockerComposeContainer;
-import org.testcontainers.containers.NoProjectNameDockerComposeContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.Wait;
-
-import java.io.File;
-
-// just add real ITs into AbstractClusterIT.
-// in this case, the data must be on all nodes.
-// we just simulate write data on node A and read data on either node A or B.
-public abstract class AbstractThreeNodeClusterIT extends ClusterIT {
-
-  private static Logger node1Logger = LoggerFactory.getLogger("iotdb-server_1");
-  private static Logger node2Logger = LoggerFactory.getLogger("iotdb-server_2");
-  private static Logger node3Logger = LoggerFactory.getLogger("iotdb-server_3");
-
-  // in TestContainer's document, it is @ClassRule, and the environment is `public static`
-  // I am not sure the difference now.
-  @Rule
-  public DockerComposeContainer environment =
-      new NoProjectNameDockerComposeContainer(
-              "3nodes", new File("src/test/resources/3nodes/docker-compose.yaml"))
-          .withExposedService("iotdb-server_1", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_1", new Slf4jLogConsumer(node1Logger))
-          .withExposedService("iotdb-server_2", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_2", new Slf4jLogConsumer(node2Logger))
-          .withExposedService("iotdb-server_3", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_3", new Slf4jLogConsumer(node3Logger))
-          .withLocalCompose(true);
-
-  @Override
-  protected DockerComposeContainer getContainer() {
-    return environment;
-  }
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/ThreeNodeCluster1IT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/ThreeNodeCluster1IT.java
index 4802100fbd..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/ThreeNodeCluster1IT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/ThreeNodeCluster1IT.java
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql.nodes3;
-
-// read and the write statements are on the same node.
-public class ThreeNodeCluster1IT extends AbstractThreeNodeClusterIT {}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/ThreeNodeCluster2IT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/ThreeNodeCluster2IT.java
index 69ee3a57bf..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/ThreeNodeCluster2IT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes3/ThreeNodeCluster2IT.java
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql.nodes3;
-
-// read and the write statements are on the different nodes.
-public class ThreeNodeCluster2IT extends AbstractThreeNodeClusterIT {
-
-  protected String getWriteRpcIp() {
-    return getContainer().getServiceHost("iotdb-server_2", 6667);
-  }
-
-  protected int getWriteRpcPort() {
-    return getContainer().getServicePort("iotdb-server_2", 6667);
-  }
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/AbstractFiveNodeClusterIT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/AbstractFiveNodeClusterIT.java
index 4535fdb299..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/AbstractFiveNodeClusterIT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/AbstractFiveNodeClusterIT.java
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql.nodes5;
-
-import org.apache.iotdb.db.sql.ClusterIT;
-
-import org.junit.Rule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.DockerComposeContainer;
-import org.testcontainers.containers.NoProjectNameDockerComposeContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.Wait;
-
-import java.io.File;
-
-// just add real ITs into AbstractClusterIT.
-// in this case, the data may be not on the node that a read client connects.
-// So, we have: write data on node A and read data on either node A, B, and C.
-public abstract class AbstractFiveNodeClusterIT extends ClusterIT {
-
-  private static Logger node1Logger = LoggerFactory.getLogger("iotdb-server_1");
-  private static Logger node2Logger = LoggerFactory.getLogger("iotdb-server_2");
-  private static Logger node3Logger = LoggerFactory.getLogger("iotdb-server_3");
-  private static Logger node4Logger = LoggerFactory.getLogger("iotdb-server_4");
-  private static Logger node5Logger = LoggerFactory.getLogger("iotdb-server_5");
-
-  // in TestContainer's document, it is @ClassRule, and the environment is `public static`
-  // I am not sure the difference now.
-  @Rule
-  public DockerComposeContainer environment =
-      new NoProjectNameDockerComposeContainer(
-              "5nodes", new File("src/test/resources/5nodes/docker-compose.yaml"))
-          .withExposedService("iotdb-server_1", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_1", new Slf4jLogConsumer(node1Logger))
-          .withExposedService("iotdb-server_2", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_2", new Slf4jLogConsumer(node2Logger))
-          .withExposedService("iotdb-server_3", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_3", new Slf4jLogConsumer(node3Logger))
-          .withExposedService("iotdb-server_4", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_4", new Slf4jLogConsumer(node4Logger))
-          .withExposedService("iotdb-server_5", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-server_5", new Slf4jLogConsumer(node5Logger))
-          .withLocalCompose(true);
-
-  @Override
-  protected DockerComposeContainer getContainer() {
-    return environment;
-  }
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster1IT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster1IT.java
index 328de27a48..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster1IT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster1IT.java
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql.nodes5;
-
-// read and the write statements are on the different nodes.
-public class FiveNodeCluster1IT extends AbstractFiveNodeClusterIT {}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster2IT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster2IT.java
index 6a455bccb5..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster2IT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster2IT.java
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql.nodes5;
-
-// read and the write statements are on the different nodes, and maybe in the same raft group.
-public class FiveNodeCluster2IT extends AbstractFiveNodeClusterIT {
-
-  protected String getWriteRpcIp() {
-    return getContainer().getServiceHost("iotdb-server_2", 6667);
-  }
-
-  protected int getWriteRpcPort() {
-    return getContainer().getServicePort("iotdb-server_2", 6667);
-  }
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster4IT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster4IT.java
index 2b8491f5ff..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster4IT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/nodes5/FiveNodeCluster4IT.java
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.sql.nodes5;
-
-// read and the write statements are on the different nodes, and maybe in the different raft groups.
-public class FiveNodeCluster4IT extends AbstractFiveNodeClusterIT {
-
-  protected String getWriteRpcIp() {
-    return getContainer().getServiceHost("iotdb-server_4", 6667);
-  }
-
-  protected int getWriteRpcPort() {
-    return getContainer().getServicePort("iotdb-server_4", 6667);
-  }
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sync/SyncIT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sync/SyncIT.java
index c7caf1918d..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sync/SyncIT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sync/SyncIT.java
@@ -1,426 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.sync;
-
-import org.apache.iotdb.jdbc.Config;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.DockerComposeContainer;
-import org.testcontainers.containers.NoProjectNameDockerComposeContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.Wait;
-
-import java.io.File;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.Statement;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-
-public class SyncIT {
-  private static Logger receiverLogger = LoggerFactory.getLogger("iotdb-receiver_1");
-  private static Logger senderLogger = LoggerFactory.getLogger("iotdb-sender_1");
-  private static int RETRY_TIME = 30;
-
-  protected Statement senderStatement;
-  protected Connection senderConnection;
-  protected Statement receiverStatement;
-  protected Connection receiverConnection;
-
-  // in TestContainer's document, it is @ClassRule, and the environment is `public static`
-  // I am not sure the difference now.
-  @Rule
-  public DockerComposeContainer environment =
-      new NoProjectNameDockerComposeContainer(
-              "sync", new File("src/test/resources/sync/docker-compose.yaml"))
-          .withExposedService("iotdb-sender_1", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-sender_1", new Slf4jLogConsumer(senderLogger))
-          .withExposedService("iotdb-receiver_1", 6667, Wait.forListeningPort())
-          .withLogConsumer("iotdb-receiver_1", new Slf4jLogConsumer(receiverLogger))
-          .withLocalCompose(true);
-
-  protected int getSenderRpcPort() {
-    return environment.getServicePort("iotdb-sender_1", 6667);
-  }
-
-  protected String getSenderIp() {
-    return environment.getServiceHost("iotdb-sender_1", 6667);
-  }
-
-  protected int getReceiverRpcPort() {
-    return environment.getServicePort("iotdb-receiver_1", 6667);
-  }
-
-  protected String getReceiverIp() {
-    return environment.getServiceHost("iotdb-receiver_1", 6667);
-  }
-
-  @Before
-  public void init() throws Exception {
-    Class.forName(Config.JDBC_DRIVER_NAME);
-    senderConnection =
-        DriverManager.getConnection(
-            "jdbc:iotdb://" + getSenderIp() + ":" + getSenderRpcPort(), "root", "root");
-    senderStatement = senderConnection.createStatement();
-    receiverConnection =
-        DriverManager.getConnection(
-            "jdbc:iotdb://" + getReceiverIp() + ":" + getReceiverRpcPort(), "root", "root");
-    receiverStatement = receiverConnection.createStatement();
-  }
-
-  @After
-  public void clean() throws Exception {
-    senderStatement.close();
-    senderConnection.close();
-    receiverStatement.close();
-    receiverConnection.close();
-  }
-
-  private void prepareSchema() throws Exception {
-    senderStatement.execute("set storage group to root.sg1");
-    senderStatement.execute("set storage group to root.sg2");
-    senderStatement.execute("create timeseries root.sg1.d1.s1 with datatype=int32, encoding=PLAIN");
-    senderStatement.execute("create timeseries root.sg1.d1.s2 with datatype=float, encoding=RLE");
-    senderStatement.execute("create timeseries root.sg1.d1.s3 with datatype=TEXT, encoding=PLAIN");
-    senderStatement.execute("create timeseries root.sg1.d2.s4 with datatype=int64, encoding=PLAIN");
-    senderStatement.execute("create timeseries root.sg2.d1.s0 with datatype=int32, encoding=PLAIN");
-    senderStatement.execute(
-        "create timeseries root.sg2.d2.s1 with datatype=boolean, encoding=PLAIN");
-  }
-
-  /* add one seq tsfile in sg1 */
-  private void prepareIns1() throws Exception {
-    senderStatement.execute(
-        "insert into root.sg1.d1(timestamp, s1, s2, s3) values(1, 1, 16.0, 'a')");
-    senderStatement.execute(
-        "insert into root.sg1.d1(timestamp, s1, s2, s3) values(2, 2, 25.16, 'b')");
-    senderStatement.execute(
-        "insert into root.sg1.d1(timestamp, s1, s2, s3) values(3, 3, 65.25, 'c')");
-    senderStatement.execute(
-        "insert into root.sg1.d1(timestamp, s1, s2, s3) values(16, 25, 100.0, 'd')");
-    senderStatement.execute("insert into root.sg1.d2(timestamp, s4) values(1, 1)");
-    senderStatement.execute("flush");
-  }
-
-  /* add one seq tsfile in sg1 */
-  private void prepareIns2() throws Exception {
-    senderStatement.execute(
-        "insert into root.sg1.d1(timestamp, s1, s2, s3) values(100, 65, 16.25, 'e')");
-    senderStatement.execute(
-        "insert into root.sg1.d1(timestamp, s1, s2, s3) values(65, 100, 25.0, 'f')");
-    senderStatement.execute("insert into root.sg1.d2(timestamp, s4) values(200, 100)");
-    senderStatement.execute("flush");
-  }
-
-  /* add one seq tsfile in sg1, one unseq tsfile in sg1, one seq tsfile in sg2 */
-  private void prepareIns3() throws Exception {
-    senderStatement.execute("insert into root.sg2.d1(timestamp, s0) values(100, 100)");
-    senderStatement.execute("insert into root.sg2.d1(timestamp, s0) values(65, 65)");
-    senderStatement.execute("insert into root.sg2.d2(timestamp, s1) values(1, true)");
-    senderStatement.execute(
-        "insert into root.sg1.d1(timestamp, s1, s2, s3) values(25, 16, 65.16, 'g')");
-    senderStatement.execute(
-        "insert into root.sg1.d1(timestamp, s1, s2, s3) values(200, 100, 16.65, 'h')");
-    senderStatement.execute("flush");
-  }
-
-  private void prepareDel1() throws Exception { // after ins1, add 2 deletions
-    senderStatement.execute("delete from root.sg1.d1.s1 where time == 3");
-    senderStatement.execute("delete from root.sg1.d1.s2 where time >= 1 and time <= 2");
-  }
-
-  private void prepareDel2() throws Exception { // after ins2, add 3 deletions
-    senderStatement.execute("delete from root.sg1.d1.s3 where time <= 65");
-  }
-
-  private void prepareDel3() throws Exception { // after ins3, add 5 deletions, 2 schemas{
-    senderStatement.execute("delete from root.sg1.d1.* where time <= 2");
-    senderStatement.execute("delete timeseries root.sg1.d2.*");
-    senderStatement.execute("delete storage group root.sg2");
-  }
-
-  private void preparePipe() throws Exception {
-    receiverStatement.execute("start pipeserver");
-    senderStatement.execute(
-        "create pipesink my_iotdb as iotdb(ip='sync_iotdb-receiver_1',port=6670)");
-    senderStatement.execute("create pipe p to my_iotdb");
-  }
-
-  private void startPipe() throws Exception {
-    senderStatement.execute("start pipe p");
-  }
-
-  private void stopPipe() throws Exception {
-    senderStatement.execute("stop pipe p");
-  }
-
-  private void dropPipe() throws Exception {
-    senderStatement.execute("drop pipe p");
-  }
-
-  private void checkResult() throws Exception {
-    String[] columnNames =
-        new String[] {
-          "root.sg1.d1.s3",
-          "root.sg1.d1.s1",
-          "root.sg1.d1.s2",
-          "root.sg1.d2.s4",
-          "root.sg2.d1.s0",
-          "root.sg2.d2.s1"
-        };
-    String[] results =
-        new String[] {
-          "1,a,1,16.0,1,null,true",
-          "2,b,2,25.16,null,null,null",
-          "3,c,3,65.25,null,null,null",
-          "16,d,25,100.0,null,null,null",
-          "25,g,16,65.16,null,null,null",
-          "65,f,100,25.0,null,65,null",
-          "100,e,65,16.25,null,100,null",
-          "200,h,100,16.65,100,null,null"
-        };
-    checkResult(receiverStatement, "select ** from root", columnNames, results, true);
-  }
-
-  private void checkResultWithDeletion() throws Exception {
-    String[] columnNames =
-        new String[] {
-          "root.sg1.d1.s3", "root.sg1.d1.s1", "root.sg1.d1.s2",
-        };
-    String[] results =
-        new String[] {
-          "3,null,null,65.25",
-          "16,null,25,100.0",
-          "25,null,16,65.16",
-          "65,null,100,25.0",
-          "100,e,65,16.25",
-          "200,h,100,16.65"
-        };
-    checkResult(receiverStatement, "select ** from root", columnNames, results, true);
-  }
-
-  @Test
-  public void testCreatePipe() throws Exception {
-    preparePipe();
-    checkResult(
-        receiverStatement,
-        "show pipe",
-        new String[] {"name", "role", "status"},
-        new String[] {"p,receiver,STOP"},
-        false);
-    dropPipe();
-    checkResult(
-        senderStatement,
-        "show pipe",
-        new String[] {"name", "role", "remote", "status"},
-        new String[] {"p,sender,my_iotdb,DROP"},
-        false);
-  }
-
-  @Test
-  public void testHistoryInsert() {
-    try {
-      prepareSchema();
-      prepareIns1();
-      prepareIns2();
-      prepareIns3();
-      preparePipe();
-      startPipe();
-      checkResult();
-    } catch (Exception e) {
-      e.printStackTrace();
-      Assert.fail(e.getMessage());
-    }
-  }
-
-  @Test
-  public void testHistoryAndRealTimeInsert() {
-    try {
-      prepareSchema();
-      prepareIns1();
-      prepareIns2();
-      preparePipe();
-      startPipe();
-      prepareIns3();
-      checkResult();
-    } catch (Exception e) {
-      e.printStackTrace();
-      Assert.fail(e.getMessage());
-    }
-  }
-
-  @Test
-  public void testStopAndStartInsert() {
-    try {
-      prepareSchema();
-      prepareIns1();
-      preparePipe();
-      startPipe();
-      prepareIns2();
-      stopPipe();
-      prepareIns3();
-      startPipe();
-      checkResult();
-    } catch (Exception e) {
-      e.printStackTrace();
-      Assert.fail(e.getMessage());
-    }
-  }
-
-  @Test
-  public void testRealTimeAndStopInsert() {
-    try {
-      preparePipe(); // realtime
-      startPipe();
-      prepareSchema();
-      prepareIns1();
-      stopPipe();
-      prepareIns2();
-      startPipe();
-      prepareIns3();
-      checkResult();
-    } catch (Exception e) {
-      e.printStackTrace();
-      Assert.fail(e.getMessage());
-    }
-  }
-
-  @Test
-  public void testHistoryDel() {
-    try {
-      prepareSchema(); // history
-      prepareIns1();
-      prepareIns2();
-      prepareIns3();
-      prepareDel1();
-      prepareDel2();
-      prepareDel3();
-      preparePipe(); // realtime
-      startPipe();
-      checkResultWithDeletion();
-    } catch (Exception e) {
-      e.printStackTrace();
-      Assert.fail(e.getMessage());
-    }
-  }
-
-  @Test
-  public void testRealtimeDel() {
-    try {
-      prepareSchema(); // history
-      prepareIns1();
-      preparePipe(); // realtime
-      startPipe();
-      prepareIns2();
-      prepareDel1();
-      stopPipe();
-      prepareIns3();
-      startPipe();
-      prepareDel2();
-      prepareDel3();
-      checkResultWithDeletion();
-    } catch (Exception e) {
-      e.printStackTrace();
-      Assert.fail();
-    }
-  }
-
-  /**
-   * Execute sql in IoTDB and compare resultSet with expected result. This method only check columns
-   * that is explicitly declared in columnNames. This method will compare expected result with
-   * actual result RETRY_TIME times. Interval of each run is 1000ms.
-   *
-   * @param statement Statement of IoTDB.
-   * @param sql SQL to be executed.
-   * @param columnNames Columns to be compared with.
-   * @param retArray Expected result set. Order of columns is as same as columnNames.
-   * @param hasTimeColumn If result set contains time column (e.g. timeserires query), set
-   *     hasTimeColumn = true.
-   */
-  private static void checkResult(
-      Statement statement,
-      String sql,
-      String[] columnNames,
-      String[] retArray,
-      boolean hasTimeColumn)
-      throws Exception {
-    loop:
-    for (int loop = 0; loop < RETRY_TIME; loop++) {
-      try {
-        Thread.sleep(1000);
-        boolean hasResultSet = statement.execute(sql);
-        if (!assertOrCompareEqual(true, hasResultSet, loop)) {
-          continue;
-        }
-        ResultSet resultSet = statement.getResultSet();
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        Map<String, Integer> map = new HashMap<>();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          map.put(resultSetMetaData.getColumnName(i), i);
-        }
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          if (hasTimeColumn) {
-            builder.append(resultSet.getString(1)).append(",");
-          }
-          for (String columnName : columnNames) {
-            int index = map.get(columnName);
-            builder.append(resultSet.getString(index)).append(",");
-          }
-          if (builder.length() > 0) {
-            builder.deleteCharAt(builder.length() - 1);
-          }
-          if (!assertOrCompareEqual(retArray[cnt], builder.toString(), loop)) {
-            continue loop;
-          }
-          cnt++;
-        }
-        if (!assertOrCompareEqual(retArray.length, cnt, loop)) {
-          continue;
-        }
-        return;
-      } catch (Exception e) {
-        if (loop == RETRY_TIME - 1) {
-          throw e;
-        }
-      }
-    }
-    Assert.fail();
-  }
-
-  private static boolean assertOrCompareEqual(Object expected, Object actual, int loop) {
-    if (loop == RETRY_TIME - 1) {
-      assertEquals(expected, actual);
-      return true;
-    } else {
-      return expected.equals(actual);
-    }
-  }
-}
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sync/SyncWeakNetworkIT.java b/testcontainer/src/test/java/org/apache/iotdb/db/sync/SyncWeakNetworkIT.java
index 09effada3a..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sync/SyncWeakNetworkIT.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sync/SyncWeakNetworkIT.java
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.sync;
-
-import org.junit.Assert;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.ContainerState;
-
-/** Simulate network delay and loss. */
-public class SyncWeakNetworkIT extends SyncIT {
-  @Override
-  public void init() throws Exception {
-    super.init();
-    // set delay is 200±50ms that conform to a normal distribution;
-    // network packet with 10% loss rate, 10% duplicate rate, 10% reorder rate and 10% corrupt rate;
-    Container.ExecResult res =
-        ((ContainerState) environment.getContainerByServiceName("iotdb-sender_1").get())
-            .execInContainer(
-                "sh",
-                "-c",
-                "tc qdisc add dev eth0 root netem delay 200ms 50ms 25% distribution normal loss random 10% duplicate 10% reorder 10% corrupt 10%");
-    Assert.assertEquals(0, res.getExitCode());
-  }
-}
diff --git a/testcontainer/src/test/java/org/testcontainers/containers/NoProjectNameDockerComposeContainer.java b/testcontainer/src/test/java/org/testcontainers/containers/NoProjectNameDockerComposeContainer.java
index 0d1fa76a83..e69de29bb2 100644
--- a/testcontainer/src/test/java/org/testcontainers/containers/NoProjectNameDockerComposeContainer.java
+++ b/testcontainer/src/test/java/org/testcontainers/containers/NoProjectNameDockerComposeContainer.java
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.testcontainers.containers;
-
-import java.io.File;
-import java.lang.reflect.Field;
-
-public class NoProjectNameDockerComposeContainer extends DockerComposeContainer {
-
-  public NoProjectNameDockerComposeContainer(String identifier, File... composeFiles) {
-    super(identifier, composeFiles);
-    Field project = null;
-    try {
-      project = DockerComposeContainer.class.getDeclaredField("project");
-      project.setAccessible(true);
-      project.set(this, "");
-    } catch (NoSuchFieldException | IllegalAccessException e) {
-      e.printStackTrace();
-    }
-  }
-}
diff --git a/testcontainer/src/test/resources/logback-container.xml b/testcontainer/src/test/resources/logback-container.xml
index e897fe24cb..e69de29bb2 100644
--- a/testcontainer/src/test/resources/logback-container.xml
+++ b/testcontainer/src/test/resources/logback-container.xml
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-<configuration debug="false">
-    <property name="LOG_PATH" value="target/logs"/>
-    <!-- prevent logback from outputting its own status at the start of every log -->
-    <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
-    <appender class="ch.qos.logback.core.ConsoleAppender" name="stdout">
-        <Target>System.out</Target>
-        <encoder>
-            <pattern>%-5p [%d] [%thread] %C{25}:%L - %m %n</pattern>
-            <charset>utf-8</charset>
-        </encoder>
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>DEBUG</level>
-        </filter>
-    </appender>
-    <root level="INFO">
-        <appender-ref ref="stdout"/>
-    </root>
-</configuration>
diff --git a/testcontainer/src/test/resources/logback.xml b/testcontainer/src/test/resources/logback.xml
index 098f463a66..e69de29bb2 100644
--- a/testcontainer/src/test/resources/logback.xml
+++ b/testcontainer/src/test/resources/logback.xml
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-<configuration debug="false">
-    <property name="LOG_PATH" value="target/logs"/>
-    <!-- prevent logback from outputting its own status at the start of every log -->
-    <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
-    <appender class="ch.qos.logback.core.ConsoleAppender" name="stdout">
-        <Target>System.out</Target>
-        <encoder>
-            <pattern>%-5p [%d] [%thread] %C{25}:%L - %m %n</pattern>
-            <charset>utf-8</charset>
-        </encoder>
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>DEBUG</level>
-        </filter>
-    </appender>
-    <appender class="ch.qos.logback.core.ConsoleAppender" name="stdout">
-        <Target>System.out</Target>
-        <encoder>
-            <pattern>[%thread] %m %n</pattern>
-            <charset>utf-8</charset>
-        </encoder>
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>DEBUG</level>
-        </filter>
-    </appender>
-    <logger name="org.testcontainers.containers.output.Slf4jLogConsumer" level="INFO">
-        <appender-ref ref="Container"/>
-    </logger>
-    <root level="INFO">
-        <appender-ref ref="stdout"/>
-    </root>
-</configuration>
diff --git a/testcontainer/src/test/resources/sync/docker-compose.yaml b/testcontainer/src/test/resources/sync/docker-compose.yaml
index fa0cedc8a4..e69de29bb2 100644
--- a/testcontainer/src/test/resources/sync/docker-compose.yaml
+++ b/testcontainer/src/test/resources/sync/docker-compose.yaml
@@ -1,52 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-version: '3.8'
-
-services:
-  iotdb-sender:
-    image: apache/iotdb:sync-maven-development
-    networks:
-      - iotdb
-    cap_add:
-      - NET_ADMIN
-    healthcheck:
-      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/6667" ]
-      interval: 5s
-      timeout: 60s
-      retries: 120
-    volumes:
-    - ../logback-container.xml:/iotdb/conf/logback.xml
-  iotdb-receiver:
-    image: apache/iotdb:sync-maven-development
-    networks:
-      - iotdb
-    cap_add:
-      - NET_ADMIN
-    healthcheck:
-      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/6667" ]
-      interval: 5s
-      timeout: 60s
-      retries: 120
-    volumes:
-      - ../logback-container.xml:/iotdb/conf/logback.xml
-
-
-networks:
-  iotdb:
-    driver: bridge
\ No newline at end of file
diff --git a/testcontainer/src/tool/README.md b/testcontainer/src/tool/README.md
index 3b943af7ff..e69de29bb2 100644
--- a/testcontainer/src/tool/README.md
+++ b/testcontainer/src/tool/README.md
@@ -1,33 +0,0 @@
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-## Motivation
-The current E2E framework writes all process logs into a single test log. This approach makes it difficult to find the root cause when there are failed tests with unstable recurrence. So we need a tool that can find the failed tests in this log and separate the logs from the different nodes.
-
-## Usage
-1. Download log archive from CI.
-
-2. Parse log.
-```
-python3 parser.py [filename]
-```
-
-3. View the separated logs in the current directory.
\ No newline at end of file
diff --git a/testcontainer/src/tool/parser.py b/testcontainer/src/tool/parser.py
index 5cee0a85a0..e69de29bb2 100644
--- a/testcontainer/src/tool/parser.py
+++ b/testcontainer/src/tool/parser.py
@@ -1,79 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-import os
-import sys
-import re
-
-pattern = re.compile(r"docker\-java\-stream\-+(\d+)")
-
-
-def getAllLogs(filename):
-    with open(filename, "r") as f:
-        data = f.read()
-        return data.split("up -d")[1:]
-
-
-def writeAllLogs(filename, content):
-    with open(filename, "w") as f:
-        for row in content:
-            f.write(row)
-            f.write("\n")
-
-
-def getNodes(log):
-    ids = pattern.findall(log)
-    nodes = {}
-    for id in ids:
-        if not nodes.__contains__(id):
-            nodes[id] = []
-    return nodes
-
-
-def checkAndMkdir(i):
-    if not os.path.exists("./{}".format(i)):
-        os.mkdir("./{}".format(i))
-
-
-def parse(nodes, rows):
-    for row in rows:
-        for id, content in nodes.items():
-            if row.__contains__(id):
-                content.append(row)
-        if row.__contains__("[ERROR]"):
-            for content in nodes.values():
-                content.append(row)
-
-
-def output(nodes, i):
-    for key, content in nodes.items():
-        writeAllLogs("./{}/{}_{}.txt".format(i, i, key), content)
-
-
-if __name__ == "__main__":
-    logs = getAllLogs(sys.argv[1])
-    count = 0
-    for i in range(len(logs)):
-        if logs[i].__contains__("FAILURE!"):
-            nodes = getNodes(logs[i])
-            parse(nodes, logs[i].split("\n"))
-            checkAndMkdir(i)
-            output(nodes, i)
-            count = count + 1
-
-    print("find {} failed tests".format(count))