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 851c857  Refactor ComposedContainer (#15301)
851c857 is described below

commit 851c857e2bc7026b316d466e2d69f924741fb50b
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Feb 9 07:11:18 2022 +0800

    Refactor ComposedContainer (#15301)
---
 .../framework/compose/ComposedContainer.java       | 35 +++++++-------
 .../compose/mode/ClusterComposedContainer.java     |  4 +-
 .../compose/mode/MemoryComposedContainer.java      |  4 +-
 .../container/ShardingSphereContainer.java         | 27 +++++------
 .../adapter/ShardingSphereAdapterContainer.java    |  4 +-
 .../storage/ShardingSphereStorageContainer.java    | 54 +++++++++++-----------
 6 files changed, 62 insertions(+), 66 deletions(-)

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 bf5158c..d52ece0 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
@@ -52,7 +52,8 @@ import java.util.function.Supplier;
 @Getter(AccessLevel.PROTECTED)
 public abstract class ComposedContainer extends ExternalResource implements 
Closeable {
     
-    private final String clusterName;
+    @Getter(AccessLevel.NONE)
+    private final String name;
     
     private final ParameterizedArray parameterizedArray;
     
@@ -64,21 +65,6 @@ public abstract class ComposedContainer extends 
ExternalResource implements Clos
     
     private volatile boolean executed;
     
-    protected ShardingSphereAdapterContainer createAdapterContainer() {
-        Supplier<ShardingSphereAdapterContainer> supplier = () -> {
-            switch (parameterizedArray.getAdapter()) {
-                case "proxy":
-                    return new 
ShardingSphereProxyContainer(parameterizedArray);
-                case "jdbc":
-                    return new ShardingSphereJDBCContainer(parameterizedArray);
-                default:
-                    throw new RuntimeException(String.format("Adapter[%s] is 
unknown.", parameterizedArray.getAdapter()));
-                
-            }
-        };
-        return createContainer(supplier, "adapter");
-    }
-    
     protected ShardingSphereStorageContainer createStorageContainer() {
         Supplier<ShardingSphereStorageContainer> supplier = () -> {
             switch (parameterizedArray.getDatabaseType().getName()) {
@@ -95,12 +81,27 @@ public abstract class ComposedContainer extends 
ExternalResource implements Clos
         return createContainer(supplier, 
parameterizedArray.getDatabaseType().getName().toLowerCase() + "." + 
parameterizedArray.getScenario() + ".host");
     }
     
+    protected ShardingSphereAdapterContainer createAdapterContainer() {
+        Supplier<ShardingSphereAdapterContainer> supplier = () -> {
+            switch (parameterizedArray.getAdapter()) {
+                case "proxy":
+                    return new 
ShardingSphereProxyContainer(parameterizedArray);
+                case "jdbc":
+                    return new ShardingSphereJDBCContainer(parameterizedArray);
+                default:
+                    throw new RuntimeException(String.format("Adapter[%s] is 
unknown.", parameterizedArray.getAdapter()));
+                
+            }
+        };
+        return createContainer(supplier, "adapter");
+    }
+    
     protected final <T extends ShardingSphereContainer> T 
createContainer(final Supplier<T> supplier, final String hostname) {
         T result = supplier.get();
         containers.add(result);
         result.setNetwork(network);
         result.setNetworkAliases(Collections.singletonList(hostname));
-        result.withLogConsumer(ContainerLogs.newConsumer(String.join("-", 
clusterName, result.getDockerName())));
+        result.withLogConsumer(ContainerLogs.newConsumer(String.join("-", 
name, result.getName())));
         return result;
     }
     
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/ClusterComposedContainer.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/ClusterComposedContainer.java
index aeecc76..b396fa9 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/ClusterComposedContainer.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/ClusterComposedContainer.java
@@ -46,8 +46,8 @@ public final class ClusterComposedContainer extends 
ComposedContainer {
     @Getter(AccessLevel.NONE)
     private final ZookeeperContainer zookeeperContainer;
     
-    public ClusterComposedContainer(final String clusterName, final 
ParameterizedArray parameterizedArray) {
-        super(clusterName, parameterizedArray);
+    public ClusterComposedContainer(final String name, final 
ParameterizedArray parameterizedArray) {
+        super(name, parameterizedArray);
         this.storageContainer = createStorageContainer();
         this.adapterContainer = createAdapterContainer();
         
this.storageContainer.setNetworkAliases(Collections.singletonList(parameterizedArray.getDatabaseType().getName().toLowerCase()
 + ".sharding_governance.host"));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/MemoryComposedContainer.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/MemoryComposedContainer.java
index 115bf0a..db92b3e 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/MemoryComposedContainer.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/MemoryComposedContainer.java
@@ -33,8 +33,8 @@ public final class MemoryComposedContainer extends 
ComposedContainer {
     
     private final ShardingSphereAdapterContainer adapterContainer;
     
-    public MemoryComposedContainer(final String clusterName, final 
ParameterizedArray parameterizedArray) {
-        super(clusterName, parameterizedArray);
+    public MemoryComposedContainer(final String name, final ParameterizedArray 
parameterizedArray) {
+        super(name, parameterizedArray);
         this.storageContainer = createStorageContainer();
         this.adapterContainer = createAdapterContainer();
         adapterContainer.dependsOn(storageContainer);
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 ac3cb03..c351e6e 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
@@ -37,33 +37,30 @@ import java.util.stream.Collectors;
 public abstract class ShardingSphereContainer extends 
GenericContainer<ShardingSphereContainer> {
     
     @Getter
-    private final boolean isFakeContainer;
+    private final String name;
     
-    @Getter
-    private final ParameterizedArray parameterizedArray;
+    private final boolean isFakedContainer;
     
     @Getter
-    private final String dockerName;
+    private final ParameterizedArray parameterizedArray;
     
-    public ShardingSphereContainer(final String dockerName, final String 
dockerImageName, final boolean isFakeContainer, final ParameterizedArray 
parameterizedArray) {
-        super(convertToDockerImage(dockerImageName, isFakeContainer));
-        this.dockerName = dockerName;
-        this.isFakeContainer = isFakeContainer;
+    public ShardingSphereContainer(final String name, final String 
dockerImageName, final boolean isFakedContainer, final ParameterizedArray 
parameterizedArray) {
+        super(getDockerImage(dockerImageName, isFakedContainer));
+        this.name = name;
+        this.isFakedContainer = isFakedContainer;
         this.parameterizedArray = parameterizedArray;
     }
     
-    private static RemoteDockerImage convertToDockerImage(final String 
dockerImageName, final boolean isFakeContainer) {
-        if (isFakeContainer) {
-            return new 
RemoteDockerImage(DockerImageName.parse(dockerImageName)).withImagePullPolicy(dockerName
 -> false);
-        }
-        return new RemoteDockerImage(DockerImageName.parse(dockerImageName));
+    private static RemoteDockerImage getDockerImage(final String imageName, 
final boolean isFakedContainer) {
+        RemoteDockerImage result = new 
RemoteDockerImage(DockerImageName.parse(imageName));
+        return isFakedContainer ? result.withImagePullPolicy(dockerName -> 
false) : result;
     }
     
     @Override
     public void start() {
         configure();
         startDependencies();
-        if (!isFakeContainer) {
+        if (!isFakedContainer) {
             super.start();
         }
         execute();
@@ -83,7 +80,7 @@ public abstract class ShardingSphereContainer extends 
GenericContainer<ShardingS
                         // CHECKSTYLE:OFF
                     } catch (final Exception ex) {
                         // CHECKSTYLE:ON
-                        log.info("Failed to check container {} healthy.", 
c.getDockerName(), ex);
+                        log.info("Failed to check container {} healthy.", 
c.getName(), ex);
                         return false;
                     }
                 })
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/adapter/ShardingSphereAdapterContainer.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/adapter/ShardingSphereAdapterContainer.java
index b514c301..20b681d 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/adapter/ShardingSphereAdapterContainer.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/adapter/ShardingSphereAdapterContainer.java
@@ -47,8 +47,8 @@ public abstract class ShardingSphereAdapterContainer extends 
ShardingSphereConta
     }
     
     @SneakyThrows
-    public ShardingSphereAdapterContainer(final String dockerName, final 
String dockerImageName, final boolean isFakeContainer, final ParameterizedArray 
parameterizedArray) {
-        super(dockerName, dockerImageName, isFakeContainer, 
parameterizedArray);
+    public ShardingSphereAdapterContainer(final String name, final String 
dockerImageName, final boolean isFakedContainer, final ParameterizedArray 
parameterizedArray) {
+        super(name, dockerImageName, isFakedContainer, parameterizedArray);
         this.authentication = loadAuthentication(parameterizedArray);
     }
     
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/storage/ShardingSphereStorageContainer.java
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/storage/ShardingSphereStorageContainer.java
index 1df39f4..02d2fe3 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/storage/ShardingSphereStorageContainer.java
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/storage/ShardingSphereStorageContainer.java
@@ -22,8 +22,8 @@ import com.zaxxer.hikari.HikariDataSource;
 import lombok.Getter;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import 
org.apache.shardingsphere.test.integration.env.database.DatabaseEnvironmentManager;
 import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
+import 
org.apache.shardingsphere.test.integration.env.database.DatabaseEnvironmentManager;
 import 
org.apache.shardingsphere.test.integration.framework.container.ShardingSphereContainer;
 import 
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
 import org.testcontainers.containers.BindMode;
@@ -31,9 +31,10 @@ import 
org.testcontainers.shaded.com.google.common.collect.ImmutableMap;
 import 
org.testcontainers.shaded.com.google.common.collect.ImmutableMap.Builder;
 
 import javax.sql.DataSource;
+import javax.xml.bind.JAXBException;
+import java.io.IOException;
 import java.util.Collection;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Optional;
 
 /**
@@ -42,19 +43,14 @@ import java.util.Optional;
 public abstract class ShardingSphereStorageContainer extends 
ShardingSphereContainer {
     
     @Getter
-    private final Collection<String> databases;
-    
-    private ImmutableMap<String, DataSource> dataSourceMap;
-    
-    @Getter
     private final DatabaseType databaseType;
     
-    @SneakyThrows
-    public ShardingSphereStorageContainer(final String dockerName, final 
String dockerImageName, final DatabaseType databaseType,
-                                          final boolean isFakeContainer, final 
ParameterizedArray parameterizedArray) {
-        super(dockerName, dockerImageName, isFakeContainer, 
parameterizedArray);
+    private Map<String, DataSource> dataSourceMap;
+    
+    public ShardingSphereStorageContainer(final String name, final String 
dockerImageName, 
+                                          final DatabaseType databaseType, 
final boolean isFakedContainer, final ParameterizedArray parameterizedArray) {
+        super(name, dockerImageName, isFakedContainer, parameterizedArray);
         this.databaseType = databaseType;
-        this.databases = 
DatabaseEnvironmentManager.getDatabaseNames(getParameterizedArray().getScenario());
     }
     
     /**
@@ -68,32 +64,34 @@ public abstract class ShardingSphereStorageContainer 
extends ShardingSphereConta
         return this;
     }
     
-    protected DataSource createDataSource(final String dataSourceName) {
-        HikariConfig config = new HikariConfig();
-        config.setUsername(getUsername());
-        config.setPassword(getPassword());
-        config.setDriverClassName(getDriverClassName());
-        config.setJdbcUrl(getUrl(dataSourceName));
-        config.setMaximumPoolSize(4);
-        config.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
-        getConnectionInitSQL().ifPresent(config::setConnectionInitSql);
-        return new HikariDataSource(config);
-    }
-    
     /**
-     * Get DataSource Map.
+     * Get data source map.
      *
-     * @return DatabaseName and DataSource Map
+     * @return database name and data source map
      */
+    @SneakyThrows({IOException.class, JAXBException.class})
     public synchronized Map<String, DataSource> getDataSourceMap() {
-        if (Objects.isNull(dataSourceMap)) {
+        if (null == dataSourceMap) {
+            Collection<String> dataSourceNames = 
DatabaseEnvironmentManager.getDatabaseNames(getParameterizedArray().getScenario());
             Builder<String, DataSource> builder = ImmutableMap.builder();
-            databases.forEach(e -> builder.put(e, createDataSource(e)));
+            dataSourceNames.forEach(each -> builder.put(each, 
createDataSource(each)));
             dataSourceMap = builder.build();
         }
         return dataSourceMap;
     }
     
+    private DataSource createDataSource(final String dataSourceName) {
+        HikariConfig config = new HikariConfig();
+        config.setDriverClassName(getDriverClassName());
+        config.setJdbcUrl(getUrl(dataSourceName));
+        config.setUsername(getUsername());
+        config.setPassword(getPassword());
+        config.setMaximumPoolSize(4);
+        config.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
+        getConnectionInitSQL().ifPresent(config::setConnectionInitSql);
+        return new HikariDataSource(config);
+    }
+    
     protected Optional<String> getConnectionInitSQL() {
         return Optional.empty();
     }

Reply via email to