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

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 8c962be  Decouple ComposedContainer and @rule (#15333)
8c962be is described below

commit 8c962be8d8cdf2d2c87f144c6a566cd57bb2bdb5
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Feb 10 15:20:24 2022 +0800

    Decouple ComposedContainer and @rule (#15333)
    
    * Refactor ShardingSphereContainer
    
    * Decouple ComposedContainer and @Rule
    
    * Fix checkstyle
---
 .../test/integration/engine/BaseITCase.java        |  4 +---
 .../test/integration/engine/dal/GeneralDALIT.java  |  4 +++-
 .../test/integration/engine/dcl/GeneralDCLIT.java  |  4 +++-
 .../test/integration/engine/ddl/GeneralDDLIT.java  |  4 +++-
 .../integration/engine/dml/AdditionalDMLIT.java    |  4 +++-
 .../test/integration/engine/dml/BatchDMLIT.java    |  4 +++-
 .../test/integration/engine/dml/GeneralDMLIT.java  |  4 +++-
 .../integration/engine/dql/AdditionalDQLIT.java    |  4 +++-
 .../test/integration/engine/dql/BaseDQLIT.java     |  2 +-
 .../test/integration/engine/dql/GeneralDQLIT.java  |  4 +++-
 .../test/integration/engine/ral/GeneralRALIT.java  |  4 +++-
 .../test/integration/engine/rdl/GeneralRDLIT.java  |  4 +++-
 .../test/integration/engine/rql/GeneralRQLIT.java  |  4 +++-
 .../framework/compose/ComposedContainer.java       | 23 ++--------------------
 .../compose/ComposedContainerManager.java          | 13 +++++++++++-
 .../container/ShardingSphereContainer.java         | 22 +++++++++------------
 .../container/ShardingSphereContainers.java        | 16 +++++++++------
 17 files changed, 68 insertions(+), 56 deletions(-)

diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/BaseITCase.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/BaseITCase.java
index 7d2a567..7cf0898 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/BaseITCase.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/BaseITCase.java
@@ -31,7 +31,6 @@ import 
org.apache.shardingsphere.test.integration.framework.param.model.Paramete
 import 
org.apache.shardingsphere.test.integration.framework.runner.ShardingSphereIntegrationTestParameterized;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Rule;
 import org.junit.runner.RunWith;
 
 import javax.sql.DataSource;
@@ -48,8 +47,7 @@ public abstract class BaseITCase {
     
     public static final String NOT_VERIFY_FLAG = "NOT_VERIFY";
     
-    @Rule
-    public final ComposedContainer composedContainer;
+    private final ComposedContainer composedContainer;
     
     private final String adapter;
     
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dal/GeneralDALIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dal/GeneralDALIT.java
index 5cd1d22..3d3713e 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dal/GeneralDALIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dal/GeneralDALIT.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.model.Assertio
 import 
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -39,7 +40,8 @@ import java.util.stream.Collectors;
 @ParallelRuntimeStrategy(ParallelLevel.SCENARIO)
 public final class GeneralDALIT extends BaseDALIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDALIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDALIT");
     
     public GeneralDALIT(final AssertionParameterizedArray parameterizedArray) {
         super(parameterizedArray);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dcl/GeneralDCLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dcl/GeneralDCLIT.java
index 59089c8..2e6d9cd 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dcl/GeneralDCLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dcl/GeneralDCLIT.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.model.Assertio
 import 
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -37,7 +38,8 @@ import java.util.stream.Collectors;
 @ParallelRuntimeStrategy(ParallelLevel.SCENARIO)
 public final class GeneralDCLIT extends BaseDCLIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDCLIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDCLIT");
     
     public GeneralDCLIT(final AssertionParameterizedArray parameterizedArray) {
         super(parameterizedArray);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/ddl/GeneralDDLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/ddl/GeneralDDLIT.java
index eaae2fa..5f4c725 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/ddl/GeneralDDLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/ddl/GeneralDDLIT.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.ParameterizedA
 import 
org.apache.shardingsphere.test.integration.framework.param.model.AssertionParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -40,7 +41,8 @@ import static org.junit.Assert.assertFalse;
 @ParallelRuntimeStrategy(ParallelLevel.SCENARIO)
 public final class GeneralDDLIT extends BaseDDLIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDDLIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDDLIT");
     
     public GeneralDDLIT(final AssertionParameterizedArray parameterizedArray) {
         super(parameterizedArray);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/AdditionalDMLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/AdditionalDMLIT.java
index ffc73a6..a6dfffe 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/AdditionalDMLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/AdditionalDMLIT.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.ParameterizedA
 import 
org.apache.shardingsphere.test.integration.framework.param.model.AssertionParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -43,7 +44,8 @@ import static org.junit.Assert.assertFalse;
 @ParallelRuntimeStrategy(ParallelLevel.SCENARIO)
 public final class AdditionalDMLIT extends BaseDMLIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("AdditionalDMLIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("AdditionalDMLIT");
     
     public AdditionalDMLIT(final AssertionParameterizedArray 
parameterizedArray) {
         super(parameterizedArray);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/BatchDMLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/BatchDMLIT.java
index 357805e..c13560d 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/BatchDMLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/BatchDMLIT.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.model.CasePara
 import 
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -43,7 +44,8 @@ import static org.junit.Assert.assertThat;
 @ParallelRuntimeStrategy(ParallelLevel.SCENARIO)
 public final class BatchDMLIT extends BatchITCase {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("BatchDMLIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("BatchDMLIT");
     
     public BatchDMLIT(final CaseParameterizedArray parameterizedArray) {
         super(parameterizedArray);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/GeneralDMLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/GeneralDMLIT.java
index 85b7f2d..b636c89 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/GeneralDMLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/GeneralDMLIT.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.ParameterizedA
 import 
org.apache.shardingsphere.test.integration.framework.param.model.AssertionParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -41,7 +42,8 @@ import static org.junit.Assert.assertFalse;
 @ParallelRuntimeStrategy(ParallelLevel.SCENARIO)
 public final class GeneralDMLIT extends BaseDMLIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDMLIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDMLIT");
     
     public GeneralDMLIT(final AssertionParameterizedArray parameterizedArray) {
         super(parameterizedArray);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/AdditionalDQLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/AdditionalDQLIT.java
index ed4cbe9..86c8c97 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/AdditionalDQLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/AdditionalDQLIT.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.ParameterizedA
 import 
org.apache.shardingsphere.test.integration.framework.param.model.AssertionParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -44,7 +45,8 @@ import static org.junit.Assert.assertTrue;
 @ParallelRuntimeStrategy(ParallelLevel.CASE)
 public final class AdditionalDQLIT extends BaseDQLIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("AdditionalDQLIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("AdditionalDQLIT");
     
     public AdditionalDQLIT(final AssertionParameterizedArray parameter) {
         super(parameter);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/BaseDQLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/BaseDQLIT.java
index 7857ece..5944902 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/BaseDQLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/BaseDQLIT.java
@@ -50,7 +50,7 @@ public abstract class BaseDQLIT extends SingleITCase {
     @Override
     public void init() throws Exception {
         super.init();
-        composedContainer.executeOnStarted(compose -> {
+        getComposedContainer().executeOnStarted(compose -> {
             try {
                 new DataSetEnvironmentManager(
                         EnvironmentPath.getDataSetFile(getScenario()),
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/GeneralDQLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/GeneralDQLIT.java
index abd5a43..baa28ea 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/GeneralDQLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dql/GeneralDQLIT.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.model.Assertio
 import 
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -43,7 +44,8 @@ import static org.junit.Assert.assertTrue;
 @ParallelRuntimeStrategy(ParallelLevel.CASE)
 public final class GeneralDQLIT extends BaseDQLIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDQLIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralDQLIT");
     
     public GeneralDQLIT(final AssertionParameterizedArray parameter) {
         super(parameter);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/ral/GeneralRALIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/ral/GeneralRALIT.java
index 92f482e..cd81593 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/ral/GeneralRALIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/ral/GeneralRALIT.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.model.Assertio
 import 
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -41,7 +42,8 @@ import java.util.stream.Collectors;
 @ParallelRuntimeStrategy(ParallelLevel.SCENARIO)
 public final class GeneralRALIT extends BaseRALIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralRALIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralRALIT");
     
     public GeneralRALIT(final AssertionParameterizedArray parameterizedArray) {
         super(parameterizedArray);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/rdl/GeneralRDLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/rdl/GeneralRDLIT.java
index 4f6423c..2ec87d5 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/rdl/GeneralRDLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/rdl/GeneralRDLIT.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.model.Assertio
 import 
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -41,7 +42,8 @@ import java.util.stream.Collectors;
 @ParallelRuntimeStrategy(ParallelLevel.SCENARIO)
 public final class GeneralRDLIT extends BaseRDLIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralRDLIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralRDLIT");
     
     public GeneralRDLIT(final AssertionParameterizedArray parameterizedArray) {
         super(parameterizedArray);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/rql/GeneralRQLIT.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/rql/GeneralRQLIT.java
index a0627c5..de5eea2 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/rql/GeneralRQLIT.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/rql/GeneralRQLIT.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.test.integration.framework.param.model.Assertio
 import 
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelLevel;
 import 
org.apache.shardingsphere.test.integration.framework.runner.parallel.annotaion.ParallelRuntimeStrategy;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runners.Parameterized.Parameters;
 
@@ -39,7 +40,8 @@ import java.util.stream.Collectors;
 @ParallelRuntimeStrategy(ParallelLevel.CASE)
 public final class GeneralRQLIT extends BaseRQLIT {
     
-    private static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralRQLIT");
+    @ClassRule
+    public static final ComposedContainerManager COMPOSED_CONTAINER_MANAGER = 
new ComposedContainerManager("GeneralRQLIT");
     
     public GeneralRQLIT(final AssertionParameterizedArray parameterizedArray) {
         super(parameterizedArray);
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainer.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainer.java
index 05c42d8..2faa227 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainer.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainer.java
@@ -22,7 +22,6 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.integration.framework.container.ShardingSphereContainers;
 import 
org.apache.shardingsphere.test.integration.framework.container.adapter.AdapterContainer;
 import 
org.apache.shardingsphere.test.integration.framework.container.storage.StorageContainer;
-import org.junit.rules.ExternalResource;
 
 import javax.sql.DataSource;
 import java.util.Map;
@@ -31,7 +30,7 @@ import java.util.function.Consumer;
 /**
  * Composed container.
  */
-public abstract class ComposedContainer extends ExternalResource {
+public abstract class ComposedContainer {
     
     @Getter(AccessLevel.PROTECTED)
     private final ShardingSphereContainers containers;
@@ -66,7 +65,7 @@ public abstract class ComposedContainer extends 
ExternalResource {
     /**
      * Execution initializer one time after container started.
      *
-     * @param consumer initializer
+     * @param consumer initializer consumer
      */
     public final void executeOnStarted(final Consumer<ComposedContainer> 
consumer) {
         if (!executed) {
@@ -78,22 +77,4 @@ public abstract class ComposedContainer extends 
ExternalResource {
             }
         }
     }
-    
-    @Override
-    protected final void before() {
-        if (!containers.isStarted()) {
-            synchronized (this) {
-                if (!containers.isStarted()) {
-                    containers.start();
-                    containers.waitUntilReady();
-                }
-            }
-        }
-    }
-    
-    // TODO close on class rule
-    @Override
-    protected final void after() {
-//        containers.close();
-    }
 }
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainerManager.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainerManager.java
index cc15426..52ea0c3 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainerManager.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainerManager.java
@@ -21,6 +21,7 @@ import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.test.integration.framework.compose.mode.ClusterComposedContainer;
 import 
org.apache.shardingsphere.test.integration.framework.compose.mode.MemoryComposedContainer;
 import 
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
+import org.junit.rules.ExternalResource;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -29,7 +30,7 @@ import java.util.Map;
  * Composed container manager.
  */
 @RequiredArgsConstructor
-public final class ComposedContainerManager {
+public final class ComposedContainerManager extends ExternalResource {
     
     private final String testSuiteName;
     
@@ -60,4 +61,14 @@ public final class ComposedContainerManager {
     private String generateKey(final ParameterizedArray parameter) {
         return String.join("-", testSuiteName, parameter.getScenario(), 
parameter.getAdapter(), parameter.getDatabaseType().getName());
     }
+    
+    @Override
+    protected void before() {
+        composedContainers.values().forEach(each -> 
each.getContainers().start());
+    }
+    
+    @Override
+    protected void after() {
+        composedContainers.values().forEach(each -> 
each.getContainers().close());
+    }
 }
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainer.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainer.java
index c351e6e..1dad9f5 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainer.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainer.java
@@ -67,29 +67,25 @@ public abstract class ShardingSphereContainer extends 
GenericContainer<ShardingS
     }
     
     private void startDependencies() {
-        List<ShardingSphereContainer> dependencies = getDependencies().stream()
-                .map(e -> (ShardingSphereContainer) e)
-                .collect(Collectors.toList());
+        List<ShardingSphereContainer> dependencies = 
getDependencies().stream().map(each -> (ShardingSphereContainer) 
each).collect(Collectors.toList());
+        dependencies.stream().filter(each -> 
!each.isCreated()).forEach(GenericContainer::start);
         dependencies.stream()
-                .filter(c -> !c.isCreated())
-                .forEach(GenericContainer::start);
-        dependencies.stream()
-                .filter(c -> {
+                .filter(each -> {
                     try {
-                        return !c.isHealthy();
+                        return !each.isHealthy();
                         // CHECKSTYLE:OFF
                     } catch (final Exception ex) {
                         // CHECKSTYLE:ON
-                        log.info("Failed to check container {} healthy.", 
c.getName(), ex);
+                        log.info("Failed to check container {} healthy.", 
each.getName(), ex);
                         return false;
                     }
                 })
-                .forEach(c -> {
+                .forEach(each -> {
                     DockerHealthcheckWaitStrategy waitStrategy = new 
DockerHealthcheckWaitStrategy();
-                    log.info("Waiting for container {} healthy.", 
c.getDockerImageName());
+                    log.info("Waiting for container {} healthy.", 
each.getDockerImageName());
                     waitStrategy.withStartupTimeout(Duration.of(90, 
ChronoUnit.SECONDS));
-                    waitStrategy.waitUntilReady(c);
-                    log.info("Container {} is startup.", 
c.getDockerImageName());
+                    waitStrategy.waitUntilReady(each);
+                    log.info("Container {} is startup.", 
each.getDockerImageName());
                 });
     }
     
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainers.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainers.java
index 5d4fc45..c8adc6e 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainers.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainers.java
@@ -62,13 +62,18 @@ public final class ShardingSphereContainers implements 
AutoCloseable {
      * Start containers.
      */
     public void start() {
-        containers.stream().filter(each -> 
!each.isCreated()).forEach(ShardingSphereContainer::start);
+        if (!started) {
+            synchronized (this) {
+                if (!started) {
+                    containers.stream().filter(each -> 
!each.isCreated()).forEach(ShardingSphereContainer::start);
+                    waitUntilReady();
+                    started = true;
+                }
+            }
+        }
     }
     
-    /**
-     * Wait until all containers ready.
-     */
-    public void waitUntilReady() {
+    private void waitUntilReady() {
         containers.stream()
                 .filter(each -> {
                     try {
@@ -87,7 +92,6 @@ public final class ShardingSphereContainers implements 
AutoCloseable {
                         }
                     }
                 });
-        started = true;
     }
     
     @Override

Reply via email to