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 22d54bc19e7 Move the DB init SQL script from DockerStorageContainer to 
StorageContainerConfiguration. (#27182)
22d54bc19e7 is described below

commit 22d54bc19e71d2f23dc666ea474d7cb953b3a41c
Author: Cong Hu <[email protected]>
AuthorDate: Fri Jul 21 14:08:08 2023 +0800

    Move the DB init SQL script from DockerStorageContainer to 
StorageContainerConfiguration. (#27182)
---
 .../atomic/storage/DockerStorageContainer.java     | 45 ++++++++++-----------
 .../atomic/storage/EmbeddedStorageContainer.java   |  5 ---
 .../atomic/storage/StorageContainerFactory.java    | 11 +++---
 .../config/StorageContainerConfiguration.java      | 17 ++++++++
 .../impl/StorageContainerConfigurationFactory.java | 28 ++++++++++++-
 .../impl/h2/H2ContainerConfigurationFactory.java   | 26 +++++++++++-
 .../mysql/MySQLContainerConfigurationFactory.java  | 46 +++++++++++++++-------
 .../OpenGaussContainerConfigurationFactory.java    | 31 ++++++++++++++-
 .../PostgreSQLContainerConfigurationFactory.java   | 34 +++++++++++++++-
 .../container/atomic/storage/impl/H2Container.java |  7 ++--
 .../atomic/storage/impl/MySQLContainer.java        | 15 ++++++-
 .../atomic/storage/impl/OpenGaussContainer.java    | 15 ++++++-
 .../atomic/storage/impl/PostgreSQLContainer.java   | 15 ++++++-
 .../database/DatabaseEnvironmentManager.java       | 12 +++---
 .../createtable/CreateTableSQLGeneratorIT.java     | 14 ++-----
 .../container/compose/DockerContainerComposer.java | 20 ++--------
 .../e2e/data/pipeline/util/DockerImageVersion.java |  4 +-
 .../ClusterShowProcessListContainerComposer.java   |  4 +-
 .../container/compose/DockerContainerComposer.java |  6 +--
 .../StorageContainerConfigurationFactory.java      | 17 ++++----
 .../mysql/MySQLContainerConfigurationFactory.java  | 20 +++++++---
 .../OpenGaussContainerConfigurationFactory.java    | 21 ++++++++--
 .../PostgreSQLContainerConfigurationFactory.java   | 21 +++++++---
 .../compose/mode/ClusterContainerComposer.java     |  4 +-
 .../compose/mode/StandaloneContainerComposer.java  |  4 +-
 25 files changed, 308 insertions(+), 134 deletions(-)

diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/DockerStorageContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/DockerStorageContainer.java
index ea24151a432..8426811bd1c 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/DockerStorageContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/DockerStorageContainer.java
@@ -18,9 +18,7 @@
 package org.apache.shardingsphere.test.e2e.env.container.atomic.storage;
 
 import com.google.common.base.Strings;
-import lombok.AccessLevel;
 import lombok.Getter;
-import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.DockerITContainer;
@@ -28,18 +26,16 @@ import 
org.apache.shardingsphere.test.e2e.env.container.atomic.constants.Storage
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.util.StorageContainerUtils;
 import 
org.apache.shardingsphere.test.e2e.env.container.wait.JdbcConnectionWaitStrategy;
 import org.apache.shardingsphere.test.e2e.env.runtime.DataSourceEnvironment;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
-import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 import org.testcontainers.containers.BindMode;
 
 import javax.sql.DataSource;
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
 import java.sql.DriverManager;
+import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * Docker storage container.
@@ -54,17 +50,13 @@ public abstract class DockerStorageContainer extends 
DockerITContainer implement
     
     private final DatabaseType databaseType;
     
-    @Getter(AccessLevel.NONE)
-    private final String scenario;
-    
     private final Map<String, DataSource> actualDataSourceMap;
     
     private final Map<String, DataSource> expectedDataSourceMap;
     
-    protected DockerStorageContainer(final DatabaseType databaseType, final 
String containerImage, final String scenario) {
+    protected DockerStorageContainer(final DatabaseType databaseType, final 
String containerImage) {
         super(databaseType.getType().toLowerCase(), containerImage);
         this.databaseType = databaseType;
-        this.scenario = scenario;
         actualDataSourceMap = new LinkedHashMap<>();
         expectedDataSourceMap = new LinkedHashMap<>();
     }
@@ -72,14 +64,6 @@ public abstract class DockerStorageContainer extends 
DockerITContainer implement
     @Override
     protected void configure() {
         withClasspathResourceMapping("/container/init-sql/" + 
databaseType.getType().toLowerCase() + "/00-init-authority.sql", 
"/docker-entrypoint-initdb.d/00-init-authority.sql", BindMode.READ_ONLY);
-        if (Strings.isNullOrEmpty(scenario)) {
-            withClasspathResourceMapping("/env/" + 
databaseType.getType().toLowerCase() + "/01-initdb.sql", 
"/docker-entrypoint-initdb.d/01-initdb.sql", BindMode.READ_ONLY);
-        } else {
-            withClasspathResourceMapping(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, databaseType) + 
"/01-actual-init.sql", "/docker-entrypoint-initdb.d/01-actual-init.sql",
-                    BindMode.READ_ONLY);
-            withClasspathResourceMapping(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, databaseType) 
+ "/01-expected-init.sql",
-                    "/docker-entrypoint-initdb.d/01-expected-init.sql", 
BindMode.READ_ONLY);
-        }
         withClasspathResourceMapping("/container/init-sql/" + 
databaseType.getType().toLowerCase() + "/99-be-ready.sql", 
"/docker-entrypoint-initdb.d/99-be-ready.sql", BindMode.READ_ONLY);
         withExposedPorts(getExposedPort());
         setWaitStrategy(new JdbcConnectionWaitStrategy(
@@ -104,14 +88,15 @@ public abstract class DockerStorageContainer extends 
DockerITContainer implement
     }
     
     @Override
-    @SneakyThrows({IOException.class, JAXBException.class})
     protected void postStart() {
-        if (!Strings.isNullOrEmpty(scenario)) {
-            DatabaseEnvironmentManager.getDatabaseNames(scenario).forEach(each 
-> actualDataSourceMap.put(each, createAccessDataSource(each)));
-            
DatabaseEnvironmentManager.getExpectedDatabaseNames(scenario).forEach(each -> 
expectedDataSourceMap.put(each, createAccessDataSource(each)));
-        }
+        actualDataSourceMap.putAll(createAccessDataSource(getDatabaseNames()));
+        
expectedDataSourceMap.putAll(createAccessDataSource(getExpectedDatabaseNames()));
     }
     
+    protected abstract Collection<String> getDatabaseNames();
+    
+    protected abstract Collection<String> getExpectedDatabaseNames();
+    
     /**
      * Create access data source.
      *
@@ -122,6 +107,16 @@ public abstract class DockerStorageContainer extends 
DockerITContainer implement
         return 
StorageContainerUtils.generateDataSource(getJdbcUrl(dataSourceName), 
getUsername(), getPassword(), 4);
     }
     
+    /**
+     * Create access data source map.
+     *
+     * @param dataSourceNames data source name collection
+     * @return access data source map
+     */
+    public Map<String, DataSource> createAccessDataSource(final 
Collection<String> dataSourceNames) {
+        return 
dataSourceNames.stream().distinct().collect(Collectors.toMap(Function.identity(),
 this::createAccessDataSource));
+    }
+    
     /**
      * Get JDBC URL.
      *
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/EmbeddedStorageContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/EmbeddedStorageContainer.java
index 8a1bd2187d3..c972ecb4c20 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/EmbeddedStorageContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/EmbeddedStorageContainer.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.test.e2e.env.container.atomic.storage;
 
 import lombok.Getter;
-import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.util.StorageContainerUtils;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.EmbeddedITContainer;
@@ -26,8 +25,6 @@ import 
org.apache.shardingsphere.test.e2e.env.runtime.DataSourceEnvironment;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager;
 
 import javax.sql.DataSource;
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
 import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -53,7 +50,6 @@ public abstract class EmbeddedStorageContainer implements 
EmbeddedITContainer, S
         expectedDataSourceMap = createExpectedDataSourceMap();
     }
     
-    @SneakyThrows({IOException.class, JAXBException.class})
     private Map<String, DataSource> createActualDataSourceMap() {
         Collection<String> databaseNames = 
DatabaseEnvironmentManager.getDatabaseNames(scenario);
         Map<String, DataSource> result = new 
LinkedHashMap<>(databaseNames.size(), 1F);
@@ -62,7 +58,6 @@ public abstract class EmbeddedStorageContainer implements 
EmbeddedITContainer, S
         return result;
     }
     
-    @SneakyThrows({IOException.class, JAXBException.class})
     private Map<String, DataSource> createExpectedDataSourceMap() {
         Collection<String> databaseNames = 
DatabaseEnvironmentManager.getExpectedDatabaseNames(scenario);
         Map<String, DataSource> result = new 
LinkedHashMap<>(databaseNames.size(), 1F);
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java
index ff3c11e3135..fa02b8c5220 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java
@@ -37,22 +37,21 @@ public final class StorageContainerFactory {
      *
      * @param databaseType database type
      * @param storageContainerImage storage container image
-     * @param scenario scenario
      * @param storageContainerConfiguration storage container configuration
      * @return created instance
      * @throws RuntimeException runtime exception
      */
-    public static StorageContainer newInstance(final DatabaseType 
databaseType, final String storageContainerImage, final String scenario,
+    public static StorageContainer newInstance(final DatabaseType 
databaseType, final String storageContainerImage,
                                                final 
StorageContainerConfiguration storageContainerConfiguration) {
         switch (databaseType.getType()) {
             case "MySQL":
-                return new MySQLContainer(storageContainerImage, scenario, 
storageContainerConfiguration);
+                return new MySQLContainer(storageContainerImage, 
storageContainerConfiguration);
             case "PostgreSQL":
-                return new PostgreSQLContainer(storageContainerImage, 
scenario, storageContainerConfiguration);
+                return new PostgreSQLContainer(storageContainerImage, 
storageContainerConfiguration);
             case "openGauss":
-                return new OpenGaussContainer(storageContainerImage, scenario, 
storageContainerConfiguration);
+                return new OpenGaussContainer(storageContainerImage, 
storageContainerConfiguration);
             case "H2":
-                return new H2Container(scenario);
+                return new H2Container(storageContainerConfiguration);
             default:
                 throw new RuntimeException(String.format("Database `%s` is 
unknown.", databaseType.getType()));
         }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/StorageContainerConfiguration.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/StorageContainerConfiguration.java
index 1f8b129b901..47743404cc1 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/StorageContainerConfiguration.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/StorageContainerConfiguration.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
+import java.util.Collection;
 import java.util.Map;
 
 /**
@@ -29,9 +30,25 @@ import java.util.Map;
 @Getter
 public class StorageContainerConfiguration {
     
+    private final String scenario;
+    
     private final String containerCommand;
     
     private final Map<String, String> containerEnvironments;
     
     private final Map<String, String> mountedResources;
+    
+    private final Collection<String> databaseNames;
+    
+    private final Collection<String> expectedDatabaseNames;
+    
+    public StorageContainerConfiguration(final String containerCommand, final 
Map<String, String> containerEnvironments, final Map<String, String> 
mountedResources,
+                                         final Collection<String> 
databaseNames, final Collection<String> expectedDatabaseNames) {
+        this.databaseNames = databaseNames;
+        this.expectedDatabaseNames = expectedDatabaseNames;
+        this.scenario = null;
+        this.containerCommand = containerCommand;
+        this.containerEnvironments = containerEnvironments;
+        this.mountedResources = mountedResources;
+    }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/StorageContainerConfigurationFactory.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/StorageContainerConfigurationFactory.java
index a23c7e69abe..f3047eedd92 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/StorageContainerConfigurationFactory.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/StorageContainerConfigurationFactory.java
@@ -36,13 +36,37 @@ public final class StorageContainerConfigurationFactory {
      * Create new instance of storage container configuration.
      *
      * @param databaseType database type
+     * @param scenario scenario
      * @return created instance
      * @throws RuntimeException runtime exception
      */
-    public static StorageContainerConfiguration newInstance(final DatabaseType 
databaseType) {
+    public static StorageContainerConfiguration newInstance(final DatabaseType 
databaseType, final String scenario) {
         switch (databaseType.getType()) {
             case "MySQL":
-                return MySQLContainerConfigurationFactory.newInstance();
+                return 
MySQLContainerConfigurationFactory.newInstance(scenario);
+            case "PostgreSQL":
+                return 
PostgreSQLContainerConfigurationFactory.newInstance(scenario);
+            case "openGauss":
+                return 
OpenGaussContainerConfigurationFactory.newInstance(scenario);
+            case "H2":
+                return H2ContainerConfigurationFactory.newInstance(scenario);
+            default:
+                throw new RuntimeException(String.format("Database `%s` is 
unknown.", databaseType.getType()));
+        }
+    }
+    
+    /**
+     * Create new instance of storage container configuration.
+     *
+     * @param databaseType database type
+     * @param majorVersion majorVersion
+     * @return created instance
+     * @throws RuntimeException runtime exception
+     */
+    public static StorageContainerConfiguration newInstance(final DatabaseType 
databaseType, final int majorVersion) {
+        switch (databaseType.getType()) {
+            case "MySQL":
+                return 
MySQLContainerConfigurationFactory.newInstance(majorVersion);
             case "PostgreSQL":
                 return PostgreSQLContainerConfigurationFactory.newInstance();
             case "openGauss":
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/h2/H2ContainerConfigurationFactory.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/h2/H2ContainerConfigurationFactory.java
index 82e768ff4bb..dc52451f6d5 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/h2/H2ContainerConfigurationFactory.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/h2/H2ContainerConfigurationFactory.java
@@ -19,9 +19,16 @@ package 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.i
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.database.h2.H2DatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * H2 container configuration factory.
@@ -35,6 +42,23 @@ public final class H2ContainerConfigurationFactory {
      * @return created instance
      */
     public static StorageContainerConfiguration newInstance() {
-        return new StorageContainerConfiguration("", Collections.emptyMap(), 
Collections.emptyMap());
+        Map<String, String> mountedResources = new HashMap<>(1, 1F);
+        mountedResources.put("/env/mysql/01-initdb.sql", 
"/docker-entrypoint-initdb.d/01-initdb.sql");
+        return new StorageContainerConfiguration("", Collections.emptyMap(), 
mountedResources, new ArrayList<>(), new ArrayList<>());
+    }
+    
+    /**
+     * Create new instance of h2 container configuration.
+     *
+     * @param scenario scenario
+     * @return created instance
+     */
+    public static StorageContainerConfiguration newInstance(final String 
scenario) {
+        Map<String, String> mountedResources = new HashMap<>(2, 1F);
+        mountedResources.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, new 
H2DatabaseType()) + "/01-actual-init.sql", 
"/docker-entrypoint-initdb.d/01-actual-init.sql");
+        mountedResources.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, new 
H2DatabaseType()) + "/01-expected-init.sql",
+                "/docker-entrypoint-initdb.d/01-expected-init.sql");
+        return new StorageContainerConfiguration(scenario, "", 
Collections.emptyMap(), mountedResources, 
DatabaseEnvironmentManager.getDatabaseNames(scenario),
+                DatabaseEnvironmentManager.getExpectedDatabaseNames(scenario));
     }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/mysql/MySQLContainerConfigurationFactory.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/mysql/MySQLContainerConfigurationFactory.java
index 522844d90c8..63239007e46 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/mysql/MySQLContainerConfigurationFactory.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/mysql/MySQLContainerConfigurationFactory.java
@@ -19,14 +19,17 @@ package 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.i
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.database.mysql.MySQLDatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.MySQLContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.util.ContainerUtils;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 
-import java.util.Collections;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 
 /**
  * MySQL container configuration factory.
@@ -36,25 +39,23 @@ public final class MySQLContainerConfigurationFactory {
     
     /**
      * Create new instance of MySQL container configuration.
-     * 
+     *
+     * @param scenario scenario
      * @return created instance
      */
-    public static StorageContainerConfiguration newInstance() {
-        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources());
+    public static StorageContainerConfiguration newInstance(final String 
scenario) {
+        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources(scenario), 
DatabaseEnvironmentManager.getDatabaseNames(scenario),
+                DatabaseEnvironmentManager.getExpectedDatabaseNames(scenario));
     }
     
     /**
-     * Create new instance of MySQL container configuration with parameter.
+     * Create new instance of MySQL container configuration with major version.
      *
-     * @param command command
-     * @param containerEnvironments container environments
-     * @param mountedResources mounted resources
+     * @param majorVersion major version
      * @return created instance
      */
-    public static StorageContainerConfiguration newInstance(final String 
command, final Map<String, String> containerEnvironments, final Map<String, 
String> mountedResources) {
-        return new 
StorageContainerConfiguration(Optional.ofNullable(command).orElseGet(MySQLContainerConfigurationFactory::getCommand),
-                
Optional.ofNullable(containerEnvironments).orElseGet(MySQLContainerConfigurationFactory::getContainerEnvironments),
-                
Optional.ofNullable(mountedResources).orElseGet(MySQLContainerConfigurationFactory::getMountedResources));
+    public static StorageContainerConfiguration newInstance(final int 
majorVersion) {
+        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources(majorVersion), new 
ArrayList<>(), new ArrayList<>());
     }
     
     private static String getCommand() {
@@ -68,7 +69,22 @@ public final class MySQLContainerConfigurationFactory {
         return result;
     }
     
-    private static Map<String, String> getMountedResources() {
-        return Collections.singletonMap("/env/mysql/my.cnf", 
MySQLContainer.MYSQL_CONF_IN_CONTAINER);
+    private static Map<String, String> getMountedResources(final int 
majorVersion) {
+        Map<String, String> result = new HashMap<>(3, 1F);
+        result.put(String.format("/env/mysql/mysql%s/my.cnf", majorVersion), 
MySQLContainer.MYSQL_CONF_IN_CONTAINER);
+        result.put("/env/mysql/01-initdb.sql", 
"/docker-entrypoint-initdb.d/01-initdb.sql");
+        if (majorVersion > 5) {
+            result.put("/env/mysql/mysql8/02-initdb.sql", 
"/docker-entrypoint-initdb.d/02-initdb.sql");
+        }
+        return result;
+    }
+    
+    private static Map<String, String> getMountedResources(final String 
scenario) {
+        Map<String, String> result = new HashMap<>(3, 1F);
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, new 
MySQLDatabaseType()) + "/01-actual-init.sql", 
"/docker-entrypoint-initdb.d/01-actual-init.sql");
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, new 
MySQLDatabaseType()) + "/01-expected-init.sql",
+                "/docker-entrypoint-initdb.d/01-expected-init.sql");
+        result.put("/env/mysql/my.cnf", 
MySQLContainer.MYSQL_CONF_IN_CONTAINER);
+        return result;
     }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/opengauss/OpenGaussContainerConfigurationFactory.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/opengauss/OpenGaussContainerConfigurationFactory.java
index c8ef8991607..dc07830498f 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/opengauss/OpenGaussContainerConfigurationFactory.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/opengauss/OpenGaussContainerConfigurationFactory.java
@@ -19,10 +19,15 @@ package 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.i
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.infra.database.opengauss.OpenGaussDatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.constants.StorageContainerConstants;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.OpenGaussContainer;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -39,7 +44,18 @@ public final class OpenGaussContainerConfigurationFactory {
      * @return created instance
      */
     public static StorageContainerConfiguration newInstance() {
-        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources());
+        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources(), new ArrayList<>(), new 
ArrayList<>());
+    }
+    
+    /**
+     * Create new instance of openGauss container configuration.
+     *
+     * @param scenario scenario
+     * @return created instance
+     */
+    public static StorageContainerConfiguration newInstance(final String 
scenario) {
+        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources(scenario), 
DatabaseEnvironmentManager.getDatabaseNames(scenario),
+                DatabaseEnvironmentManager.getExpectedDatabaseNames(scenario));
     }
     
     private static String getCommand() {
@@ -51,7 +67,18 @@ public final class OpenGaussContainerConfigurationFactory {
     }
     
     private static Map<String, String> getMountedResources() {
-        Map<String, String> result = new HashMap<>(2, 1F);
+        Map<String, String> result = new HashMap<>(3, 1F);
+        result.put("/env/opengauss/01-initdb.sql", 
"/docker-entrypoint-initdb.d/01-initdb.sql");
+        result.put("/env/postgresql/postgresql.conf", 
OpenGaussContainer.OPENGAUSS_CONF_IN_CONTAINER);
+        result.put("/env/opengauss/pg_hba.conf", 
OpenGaussContainer.OPENGAUSS_HBA_IN_CONF_CONTAINER);
+        return result;
+    }
+    
+    private static Map<String, String> getMountedResources(final String 
scenario) {
+        Map<String, String> result = new HashMap<>(4, 1F);
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, new 
OpenGaussDatabaseType()) + "/01-actual-init.sql", 
"/docker-entrypoint-initdb.d/01-actual-init.sql");
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, new 
OpenGaussDatabaseType()) + "/01-expected-init.sql",
+                "/docker-entrypoint-initdb.d/01-expected-init.sql");
         result.put("/env/postgresql/postgresql.conf", 
OpenGaussContainer.OPENGAUSS_CONF_IN_CONTAINER);
         result.put("/env/opengauss/pg_hba.conf", 
OpenGaussContainer.OPENGAUSS_HBA_IN_CONF_CONTAINER);
         return result;
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/postgresql/PostgreSQLContainerConfigurationFactory.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/postgresql/PostgreSQLContainerConfigurationFactory.java
index 4332c1da0fb..d3d8f287397 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/postgresql/PostgreSQLContainerConfigurationFactory.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/config/impl/postgresql/PostgreSQLContainerConfigurationFactory.java
@@ -19,11 +19,17 @@ package 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.i
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.infra.database.postgresql.PostgreSQLDatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.constants.StorageContainerConstants;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.PostgreSQLContainer;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -38,7 +44,18 @@ public final class PostgreSQLContainerConfigurationFactory {
      * @return created instance
      */
     public static StorageContainerConfiguration newInstance() {
-        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources());
+        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources(), new ArrayList<>(), new 
ArrayList<>());
+    }
+    
+    /**
+     * Create new instance of PostgreSQL container configuration.
+     *
+     * @param scenario scenario
+     * @return created instance
+     */
+    public static StorageContainerConfiguration newInstance(final String 
scenario) {
+        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources(scenario), 
DatabaseEnvironmentManager.getDatabaseNames(scenario),
+                DatabaseEnvironmentManager.getExpectedDatabaseNames(scenario));
     }
     
     private static String getCommand() {
@@ -50,6 +67,19 @@ public final class PostgreSQLContainerConfigurationFactory {
     }
     
     private static Map<String, String> getMountedResources() {
-        return Collections.singletonMap("/env/postgresql/postgresql.conf", 
PostgreSQLContainer.POSTGRESQL_CONF_IN_CONTAINER);
+        Map<String, String> result = new HashMap<>(2, 1F);
+        result.put("/env/postgresql/01-initdb.sql", 
"/docker-entrypoint-initdb.d/01-initdb.sql");
+        result.put("/env/postgresql/postgresql.conf", 
PostgreSQLContainer.POSTGRESQL_CONF_IN_CONTAINER);
+        return result;
+    }
+    
+    private static Map<String, String> getMountedResources(final String 
scenario) {
+        Map<String, String> result = new HashMap<>(3, 1F);
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, new 
PostgreSQLDatabaseType()) + "/01-actual-init.sql",
+                "/docker-entrypoint-initdb.d/01-actual-init.sql");
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, new 
PostgreSQLDatabaseType()) + "/01-expected-init.sql",
+                "/docker-entrypoint-initdb.d/01-expected-init.sql");
+        result.put("/env/postgresql/postgresql.conf", 
PostgreSQLContainer.POSTGRESQL_CONF_IN_CONTAINER);
+        return result;
     }
 }
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/H2Container.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/H2Container.java
index d1604737fcf..136f185def9 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/H2Container.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/H2Container.java
@@ -21,6 +21,7 @@ import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.EmbeddedStorageContainer;
+import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 import org.h2.tools.RunScript;
@@ -40,9 +41,9 @@ public final class H2Container extends 
EmbeddedStorageContainer {
     
     private final ScenarioDataPath scenarioDataPath;
     
-    public H2Container(final String scenario) {
-        super(TypedSPILoader.getService(DatabaseType.class, "H2"), scenario);
-        scenarioDataPath = new ScenarioDataPath(scenario);
+    public H2Container(final StorageContainerConfiguration 
storageContainerConfiguration) {
+        super(TypedSPILoader.getService(DatabaseType.class, "H2"), 
storageContainerConfiguration.getScenario());
+        scenarioDataPath = new 
ScenarioDataPath(storageContainerConfiguration.getScenario());
     }
     
     @Override
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/MySQLContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/MySQLContainer.java
index f225690483f..ba20051ef0d 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/MySQLContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/MySQLContainer.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.DockerStorageContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 
+import java.util.Collection;
 import java.util.Optional;
 
 /**
@@ -36,8 +37,8 @@ public final class MySQLContainer extends 
DockerStorageContainer {
     
     private final StorageContainerConfiguration storageContainerConfig;
     
-    public MySQLContainer(final String containerImage, final String scenario, 
final StorageContainerConfiguration storageContainerConfig) {
-        super(TypedSPILoader.getService(DatabaseType.class, "MySQL"), 
Strings.isNullOrEmpty(containerImage) ? "mysql:5.7" : containerImage, scenario);
+    public MySQLContainer(final String containerImage, final 
StorageContainerConfiguration storageContainerConfig) {
+        super(TypedSPILoader.getService(DatabaseType.class, "MySQL"), 
Strings.isNullOrEmpty(containerImage) ? "mysql:5.7" : containerImage);
         this.storageContainerConfig = storageContainerConfig;
     }
     
@@ -49,6 +50,16 @@ public final class MySQLContainer extends 
DockerStorageContainer {
         super.configure();
     }
     
+    @Override
+    protected Collection<String> getDatabaseNames() {
+        return storageContainerConfig.getDatabaseNames();
+    }
+    
+    @Override
+    protected Collection<String> getExpectedDatabaseNames() {
+        return storageContainerConfig.getExpectedDatabaseNames();
+    }
+    
     @Override
     public int getExposedPort() {
         return MYSQL_EXPOSED_PORT;
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/OpenGaussContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/OpenGaussContainer.java
index b19e17c94ba..528367ba773 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/OpenGaussContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/OpenGaussContainer.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.test.e2e.env.runtime.DataSourceEnvironment;
 
 import java.time.Duration;
 import java.time.temporal.ChronoUnit;
+import java.util.Collection;
 import java.util.Optional;
 
 /**
@@ -42,8 +43,8 @@ public final class OpenGaussContainer extends 
DockerStorageContainer {
     
     private final StorageContainerConfiguration storageContainerConfig;
     
-    public OpenGaussContainer(final String containerImage, final String 
scenario, final StorageContainerConfiguration storageContainerConfig) {
-        super(TypedSPILoader.getService(DatabaseType.class, "openGauss"), 
Strings.isNullOrEmpty(containerImage) ? "enmotech/opengauss:3.0.0" : 
containerImage, scenario);
+    public OpenGaussContainer(final String containerImage, final 
StorageContainerConfiguration storageContainerConfig) {
+        super(TypedSPILoader.getService(DatabaseType.class, "openGauss"), 
Strings.isNullOrEmpty(containerImage) ? "enmotech/opengauss:3.0.0" : 
containerImage);
         this.storageContainerConfig = storageContainerConfig;
     }
     
@@ -57,6 +58,16 @@ public final class OpenGaussContainer extends 
DockerStorageContainer {
         withStartupTimeout(Duration.of(120, ChronoUnit.SECONDS));
     }
     
+    @Override
+    protected Collection<String> getDatabaseNames() {
+        return storageContainerConfig.getDatabaseNames();
+    }
+    
+    @Override
+    protected Collection<String> getExpectedDatabaseNames() {
+        return storageContainerConfig.getExpectedDatabaseNames();
+    }
+    
     @Override
     public int getExposedPort() {
         return OPENGAUSS_EXPOSED_PORT;
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/PostgreSQLContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/PostgreSQLContainer.java
index 1c84ad3e299..2cf09e94793 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/PostgreSQLContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/PostgreSQLContainer.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.DockerStorageContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 
+import java.util.Collection;
 import java.util.Optional;
 
 /**
@@ -36,8 +37,8 @@ public final class PostgreSQLContainer extends 
DockerStorageContainer {
     
     private final StorageContainerConfiguration storageContainerConfig;
     
-    public PostgreSQLContainer(final String containerImage, final String 
scenario, final StorageContainerConfiguration storageContainerConfig) {
-        super(TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"), 
Strings.isNullOrEmpty(containerImage) ? "postgres:12-alpine" : containerImage, 
scenario);
+    public PostgreSQLContainer(final String containerImage, final 
StorageContainerConfiguration storageContainerConfig) {
+        super(TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"), 
Strings.isNullOrEmpty(containerImage) ? "postgres:12-alpine" : containerImage);
         this.storageContainerConfig = storageContainerConfig;
     }
     
@@ -49,6 +50,16 @@ public final class PostgreSQLContainer extends 
DockerStorageContainer {
         super.configure();
     }
     
+    @Override
+    protected Collection<String> getDatabaseNames() {
+        return storageContainerConfig.getDatabaseNames();
+    }
+    
+    @Override
+    protected Collection<String> getExpectedDatabaseNames() {
+        return storageContainerConfig.getExpectedDatabaseNames();
+    }
+    
     @Override
     public int getExposedPort() {
         return POSTGRESQL_EXPOSED_PORT;
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/database/DatabaseEnvironmentManager.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/database/DatabaseEnvironmentManager.java
index d05b3e7a229..1413188b042 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/database/DatabaseEnvironmentManager.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/database/DatabaseEnvironmentManager.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 
@@ -39,10 +40,8 @@ public final class DatabaseEnvironmentManager {
      *
      * @param scenario scenario
      * @return database names
-     * @throws IOException IO exception
-     * @throws JAXBException JAXB exception
      */
-    public static Collection<String> getDatabaseNames(final String scenario) 
throws IOException, JAXBException {
+    public static Collection<String> getDatabaseNames(final String scenario) {
         return unmarshal(new 
ScenarioDataPath(scenario).getDatabasesFile(Type.ACTUAL)).getDatabases();
     }
     
@@ -51,14 +50,13 @@ public final class DatabaseEnvironmentManager {
      *
      * @param scenario scenario
      * @return expected database names
-     * @throws IOException IO exception
-     * @throws JAXBException JAXB exception
      */
-    public static Collection<String> getExpectedDatabaseNames(final String 
scenario) throws IOException, JAXBException {
+    public static Collection<String> getExpectedDatabaseNames(final String 
scenario) {
         return unmarshal(new 
ScenarioDataPath(scenario).getDatabasesFile(Type.EXPECTED)).getDatabases();
     }
     
-    private static DatabaseNameEnvironment unmarshal(final String 
databasesFile) throws IOException, JAXBException {
+    @SneakyThrows({IOException.class, JAXBException.class})
+    private static DatabaseNameEnvironment unmarshal(final String 
databasesFile) {
         try (FileReader reader = new FileReader(databasesFile)) {
             return (DatabaseNameEnvironment) 
JAXBContext.newInstance(DatabaseNameEnvironment.class).createUnmarshaller().unmarshal(reader);
         }
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/createtable/CreateTableSQLGeneratorIT.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/createtable/CreateTableSQLGeneratorIT.java
index 90e96613579..70bccb110c1 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/createtable/CreateTableSQLGeneratorIT.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/createtable/CreateTableSQLGeneratorIT.java
@@ -36,8 +36,6 @@ import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.DockerSto
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.StorageContainerFactory;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.impl.StorageContainerConfigurationFactory;
-import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.impl.mysql.MySQLContainerConfigurationFactory;
-import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.MySQLContainer;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.condition.EnabledIf;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -49,10 +47,8 @@ import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedList;
-import java.util.Map;
 import java.util.Objects;
 import java.util.regex.Pattern;
 
@@ -101,17 +97,13 @@ class CreateTableSQLGeneratorIT {
     
     private void startStorageContainer(final DatabaseType databaseType, final 
String storageContainerImage) {
         StorageContainerConfiguration storageContainerConfig = 
createStorageContainerConfiguration(databaseType, storageContainerImage);
-        storageContainer = (DockerStorageContainer) 
StorageContainerFactory.newInstance(databaseType, storageContainerImage, "", 
storageContainerConfig);
+        storageContainer = (DockerStorageContainer) 
StorageContainerFactory.newInstance(databaseType, storageContainerImage, 
storageContainerConfig);
         storageContainer.start();
     }
     
     private StorageContainerConfiguration 
createStorageContainerConfiguration(final DatabaseType databaseType, final 
String storageContainerImage) {
-        if (databaseType instanceof MySQLDatabaseType) {
-            int majorVersion = new 
DockerImageVersion(storageContainerImage).getMajorVersion();
-            Map<String, String> mountedResources = 
Collections.singletonMap(String.format("/env/mysql/mysql%s/my.cnf", 
majorVersion), MySQLContainer.MYSQL_CONF_IN_CONTAINER);
-            return MySQLContainerConfigurationFactory.newInstance(null, null, 
mountedResources);
-        }
-        return StorageContainerConfigurationFactory.newInstance(databaseType);
+        int majorVersion = new 
DockerImageVersion(storageContainerImage).getMajorVersion();
+        return StorageContainerConfigurationFactory.newInstance(databaseType, 
majorVersion);
     }
     
     private void assertSQL(final Collection<String> actualSQL, final 
Collection<String> expectedSQL) {
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/framework/container/compose/DockerContainerComposer.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/framework/container/compose/DockerContainerComposer.java
index 4dcd0c58d19..64b1ae14bc3 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/framework/container/compose/DockerContainerComposer.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/framework/container/compose/DockerContainerComposer.java
@@ -19,7 +19,6 @@ package 
org.apache.shardingsphere.test.e2e.data.pipeline.framework.container.com
 
 import lombok.Getter;
 import org.apache.shardingsphere.infra.database.spi.DatabaseType;
-import org.apache.shardingsphere.infra.database.mysql.MySQLDatabaseType;
 import 
org.apache.shardingsphere.test.e2e.data.pipeline.framework.container.config.proxy.PipelineProxyClusterContainerConfigurationFactory;
 import 
org.apache.shardingsphere.test.e2e.data.pipeline.util.DockerImageVersion;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.adapter.AdapterContainerFactory;
@@ -33,16 +32,12 @@ import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.DockerSto
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.StorageContainerFactory;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.impl.StorageContainerConfigurationFactory;
-import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.impl.mysql.MySQLContainerConfigurationFactory;
-import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.MySQLContainer;
 import org.apache.shardingsphere.test.e2e.env.runtime.DataSourceEnvironment;
 
 import java.security.InvalidParameterException;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 
 /**
  * Composed container, include governance container and database container.
@@ -67,18 +62,9 @@ public final class DockerContainerComposer extends 
BaseContainerComposer {
         }
         for (int i = 0; i < storageContainerCount; i++) {
             StorageContainerConfiguration storageContainerConfig;
-            if (databaseType instanceof MySQLDatabaseType) {
-                int majorVersion = new 
DockerImageVersion(storageContainerImage).getMajorVersion();
-                Map<String, String> mountedResources = new HashMap<>();
-                
mountedResources.put(String.format("/env/mysql/mysql%s/my.cnf", majorVersion), 
MySQLContainer.MYSQL_CONF_IN_CONTAINER);
-                if (majorVersion > 5) {
-                    mountedResources.put("/env/mysql/mysql8/02-initdb.sql", 
"/docker-entrypoint-initdb.d/02-initdb.sql");
-                }
-                storageContainerConfig = 
MySQLContainerConfigurationFactory.newInstance(null, null, mountedResources);
-            } else {
-                storageContainerConfig = 
StorageContainerConfigurationFactory.newInstance(databaseType);
-            }
-            DockerStorageContainer storageContainer = 
getContainers().registerContainer((DockerStorageContainer) 
StorageContainerFactory.newInstance(databaseType, storageContainerImage, null,
+            int majorVersion = new 
DockerImageVersion(storageContainerImage).getMajorVersion();
+            storageContainerConfig = 
StorageContainerConfigurationFactory.newInstance(databaseType, majorVersion);
+            DockerStorageContainer storageContainer = 
getContainers().registerContainer((DockerStorageContainer) 
StorageContainerFactory.newInstance(databaseType, storageContainerImage,
                     storageContainerConfig));
             
storageContainer.setNetworkAliases(Collections.singletonList(String.join(".", 
databaseType.getType().toLowerCase() + "_" + i, "host")));
             storageContainers.add(storageContainer);
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/util/DockerImageVersion.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/util/DockerImageVersion.java
index 5f6f3a065b0..4b654b8f84b 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/util/DockerImageVersion.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/util/DockerImageVersion.java
@@ -17,6 +17,8 @@
 
 package org.apache.shardingsphere.test.e2e.data.pipeline.util;
 
+import org.apache.commons.lang3.StringUtils;
+
 /**
  * Docker image version.
  */
@@ -36,7 +38,7 @@ public final class DockerImageVersion {
      * @return major version
      */
     public int getMajorVersion() {
-        String[] split = version.split("\\.");
+        String[] split = StringUtils.substringBefore(version, 
"-").split("\\.");
         return Integer.parseInt(split[0]);
     }
 }
diff --git 
a/test/e2e/operation/showprocesslist/src/test/java/org/apache/shardingsphere/test/e2e/showprocesslist/container/composer/ClusterShowProcessListContainerComposer.java
 
b/test/e2e/operation/showprocesslist/src/test/java/org/apache/shardingsphere/test/e2e/showprocesslist/container/composer/ClusterShowProcessListContainerComposer.java
index 04be0cf00a1..d7e09204b11 100644
--- 
a/test/e2e/operation/showprocesslist/src/test/java/org/apache/shardingsphere/test/e2e/showprocesslist/container/composer/ClusterShowProcessListContainerComposer.java
+++ 
b/test/e2e/operation/showprocesslist/src/test/java/org/apache/shardingsphere/test/e2e/showprocesslist/container/composer/ClusterShowProcessListContainerComposer.java
@@ -54,8 +54,8 @@ public final class ClusterShowProcessListContainerComposer 
implements AutoClosea
     public ClusterShowProcessListContainerComposer(final 
ShowProcessListTestParameter testParam) {
         containers = new ITContainers(testParam.getScenario());
         governanceContainer = isClusterMode(testParam.getRunMode()) ? 
containers.registerContainer(GovernanceContainerFactory.newInstance("ZooKeeper"))
 : null;
-        StorageContainer storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(testParam.getDatabaseType(),
 "", testParam.getScenario(),
-                
StorageContainerConfigurationFactory.newInstance(testParam.getDatabaseType())));
+        StorageContainer storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(testParam.getDatabaseType(),
 "",
+                
StorageContainerConfigurationFactory.newInstance(testParam.getDatabaseType(), 
testParam.getScenario())));
         AdaptorContainerConfiguration containerConfig = new 
AdaptorContainerConfiguration(testParam.getScenario(),
                 getMountedResources(testParam.getScenario(), 
testParam.getDatabaseType(), testParam.getRunMode(), 
testParam.getGovernanceCenter()), 
AdapterContainerUtils.getAdapterContainerImage());
         jdbcContainer = AdapterContainerFactory.newInstance(
diff --git 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/compose/DockerContainerComposer.java
 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/compose/DockerContainerComposer.java
index 35c94cac9b3..b22eacd4bcc 100644
--- 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/compose/DockerContainerComposer.java
+++ 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/compose/DockerContainerComposer.java
@@ -23,8 +23,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.adapter.AdapterContainerFactory;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.adapter.impl.ShardingSphereProxyClusterContainer;
-import 
org.apache.shardingsphere.test.e2e.env.container.atomic.enums.AdapterType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.enums.AdapterMode;
+import 
org.apache.shardingsphere.test.e2e.env.container.atomic.enums.AdapterType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.governance.GovernanceContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.governance.impl.ZookeeperContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.DockerStorageContainer;
@@ -59,8 +59,8 @@ public final class DockerContainerComposer extends 
BaseContainerComposer {
         super(testParam.getScenario());
         this.databaseType = testParam.getDatabaseType();
         governanceContainer = getContainers().registerContainer(new 
ZookeeperContainer());
-        storageContainer = 
getContainers().registerContainer((DockerStorageContainer) 
StorageContainerFactory.newInstance(databaseType, 
testParam.getStorageContainerImage(), testParam.getScenario(),
-                
StorageContainerConfigurationFactory.newInstance(databaseType)));
+        storageContainer = 
getContainers().registerContainer((DockerStorageContainer) 
StorageContainerFactory.newInstance(databaseType, 
testParam.getStorageContainerImage(),
+                StorageContainerConfigurationFactory.newInstance(databaseType, 
testParam.getScenario())));
         if 
(AdapterType.PROXY.getValue().equalsIgnoreCase(testParam.getAdapter())) {
             jdbcContainer = null;
             proxyContainer = (ShardingSphereProxyClusterContainer) 
AdapterContainerFactory.newInstance(AdapterMode.CLUSTER, AdapterType.PROXY,
diff --git 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/StorageContainerConfigurationFactory.java
 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/StorageContainerConfigurationFactory.java
index f6bbac5f689..8798742b9f6 100644
--- 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/StorageContainerConfigurationFactory.java
+++ 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/StorageContainerConfigurationFactory.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.test.e2e.transaction.framework.container.confi
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.database.spi.DatabaseType;
+import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
+import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.impl.h2.H2ContainerConfigurationFactory;
 import 
org.apache.shardingsphere.test.e2e.transaction.framework.container.config.mysql.MySQLContainerConfigurationFactory;
 import 
org.apache.shardingsphere.test.e2e.transaction.framework.container.config.opengauss.OpenGaussContainerConfigurationFactory;
 import 
org.apache.shardingsphere.test.e2e.transaction.framework.container.config.postgresql.PostgreSQLContainerConfigurationFactory;
-import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
-import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.impl.h2.H2ContainerConfigurationFactory;
 
 /**
  * Storage container configuration factory.
@@ -34,21 +34,22 @@ public final class StorageContainerConfigurationFactory {
     
     /**
      * Create new instance of storage container configuration.
-     * 
+     *
      * @param databaseType database type
+     * @param scenario scenario
      * @return created instance
      * @throws RuntimeException runtime exception
      */
-    public static StorageContainerConfiguration newInstance(final DatabaseType 
databaseType) {
+    public static StorageContainerConfiguration newInstance(final DatabaseType 
databaseType, final String scenario) {
         switch (databaseType.getType()) {
             case "MySQL":
-                return MySQLContainerConfigurationFactory.newInstance();
+                return 
MySQLContainerConfigurationFactory.newInstance(scenario);
             case "PostgreSQL":
-                return PostgreSQLContainerConfigurationFactory.newInstance();
+                return 
PostgreSQLContainerConfigurationFactory.newInstance(scenario);
             case "openGauss":
-                return OpenGaussContainerConfigurationFactory.newInstance();
+                return 
OpenGaussContainerConfigurationFactory.newInstance(scenario);
             case "H2":
-                return H2ContainerConfigurationFactory.newInstance();
+                return H2ContainerConfigurationFactory.newInstance(scenario);
             default:
                 throw new RuntimeException(String.format("Database `%s` is 
unknown.", databaseType.getType()));
         }
diff --git 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/mysql/MySQLContainerConfigurationFactory.java
 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/mysql/MySQLContainerConfigurationFactory.java
index c37d00b9d4b..3010fc3aa5a 100644
--- 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/mysql/MySQLContainerConfigurationFactory.java
+++ 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/mysql/MySQLContainerConfigurationFactory.java
@@ -19,10 +19,13 @@ package 
org.apache.shardingsphere.test.e2e.transaction.framework.container.confi
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.database.mysql.MySQLDatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.MySQLContainer;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -35,10 +38,12 @@ public final class MySQLContainerConfigurationFactory {
     /**
      * Create new instance of MySQL container configuration.
      *
+     * @param scenario scenario
      * @return created instance
      */
-    public static StorageContainerConfiguration newInstance() {
-        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources());
+    public static StorageContainerConfiguration newInstance(final String 
scenario) {
+        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources(scenario), 
DatabaseEnvironmentManager.getDatabaseNames(scenario),
+                DatabaseEnvironmentManager.getExpectedDatabaseNames(scenario));
     }
     
     private static String getCommand() {
@@ -53,7 +58,12 @@ public final class MySQLContainerConfigurationFactory {
         return result;
     }
     
-    private static Map<String, String> getMountedResources() {
-        return Collections.singletonMap("/env/mysql/my.cnf", 
MySQLContainer.MYSQL_CONF_IN_CONTAINER);
+    private static Map<String, String> getMountedResources(final String 
scenario) {
+        Map<String, String> result = new HashMap<>();
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, new 
MySQLDatabaseType()) + "/01-actual-init.sql", 
"/docker-entrypoint-initdb.d/01-actual-init.sql");
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, new 
MySQLDatabaseType()) + "/01-expected-init.sql",
+                "/docker-entrypoint-initdb.d/01-expected-init.sql");
+        result.put("/env/mysql/my.cnf", 
MySQLContainer.MYSQL_CONF_IN_CONTAINER);
+        return result;
     }
 }
diff --git 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/opengauss/OpenGaussContainerConfigurationFactory.java
 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/opengauss/OpenGaussContainerConfigurationFactory.java
index 890961caef6..6761c4b19cd 100644
--- 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/opengauss/OpenGaussContainerConfigurationFactory.java
+++ 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/opengauss/OpenGaussContainerConfigurationFactory.java
@@ -19,11 +19,16 @@ package 
org.apache.shardingsphere.test.e2e.transaction.framework.container.confi
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.infra.database.opengauss.OpenGaussDatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.constants.StorageContainerConstants;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.OpenGaussContainer;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -35,10 +40,12 @@ public final class OpenGaussContainerConfigurationFactory {
     /**
      * Create new instance of openGauss container configuration.
      *
+     * @param scenario scenario
      * @return created instance
      */
-    public static StorageContainerConfiguration newInstance() {
-        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources());
+    public static StorageContainerConfiguration newInstance(final String 
scenario) {
+        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources(scenario), 
DatabaseEnvironmentManager.getDatabaseNames(scenario),
+                DatabaseEnvironmentManager.getExpectedDatabaseNames(scenario));
     }
     
     private static String getCommand() {
@@ -49,7 +56,13 @@ public final class OpenGaussContainerConfigurationFactory {
         return Collections.singletonMap("GS_PASSWORD", 
StorageContainerConstants.PASSWORD);
     }
     
-    private static Map<String, String> getMountedResources() {
-        return Collections.singletonMap("/env/postgresql/postgresql.conf", 
OpenGaussContainer.OPENGAUSS_CONF_IN_CONTAINER);
+    private static Map<String, String> getMountedResources(final String 
scenario) {
+        Map<String, String> result = new HashMap<>(3, 1F);
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, new 
OpenGaussDatabaseType()) + "/01-actual-init.sql",
+                "/docker-entrypoint-initdb.d/01-actual-init.sql");
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, new 
OpenGaussDatabaseType()) + "/01-expected-init.sql",
+                "/docker-entrypoint-initdb.d/01-expected-init.sql");
+        result.put("/env/postgresql/postgresql.conf", 
OpenGaussContainer.OPENGAUSS_CONF_IN_CONTAINER);
+        return result;
     }
 }
diff --git 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/postgresql/PostgreSQLContainerConfigurationFactory.java
 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/postgresql/PostgreSQLContainerConfigurationFactory.java
index 1beb49c3bf3..44415cebc6f 100644
--- 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/postgresql/PostgreSQLContainerConfigurationFactory.java
+++ 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/framework/container/config/postgresql/PostgreSQLContainerConfigurationFactory.java
@@ -19,11 +19,14 @@ package 
org.apache.shardingsphere.test.e2e.transaction.framework.container.confi
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.infra.database.postgresql.PostgreSQLDatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.constants.StorageContainerConstants;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.OpenGaussContainer;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
+import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -36,10 +39,12 @@ public final class PostgreSQLContainerConfigurationFactory {
     /**
      * Create new instance of PostgreSQL container configuration.
      *
+     * @param scenario scenario
      * @return created instance
      */
-    public static StorageContainerConfiguration newInstance() {
-        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources());
+    public static StorageContainerConfiguration newInstance(final String 
scenario) {
+        return new StorageContainerConfiguration(getCommand(), 
getContainerEnvironments(), getMountedResources(scenario), 
DatabaseEnvironmentManager.getDatabaseNames(scenario),
+                DatabaseEnvironmentManager.getExpectedDatabaseNames(scenario));
     }
     
     private static String getCommand() {
@@ -53,7 +58,13 @@ public final class PostgreSQLContainerConfigurationFactory {
         return result;
     }
     
-    private static Map<String, String> getMountedResources() {
-        return Collections.singletonMap("/env/postgresql/postgresql.conf", 
OpenGaussContainer.OPENGAUSS_CONF_IN_CONTAINER);
+    private static Map<String, String> getMountedResources(final String 
scenario) {
+        Map<String, String> result = new HashMap<>(3, 1F);
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, new 
PostgreSQLDatabaseType()) + "/01-actual-init.sql",
+                "/docker-entrypoint-initdb.d/01-actual-init.sql");
+        result.put(new 
ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, new 
PostgreSQLDatabaseType()) + "/01-expected-init.sql",
+                "/docker-entrypoint-initdb.d/01-expected-init.sql");
+        result.put("/env/postgresql/postgresql.conf", 
OpenGaussContainer.OPENGAUSS_CONF_IN_CONTAINER);
+        return result;
     }
 }
diff --git 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/container/compose/mode/ClusterContainerComposer.java
 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/container/compose/mode/ClusterContainerComposer.java
index c7387203958..3435c55b256 100644
--- 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/container/compose/mode/ClusterContainerComposer.java
+++ 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/container/compose/mode/ClusterContainerComposer.java
@@ -56,8 +56,8 @@ public final class ClusterContainerComposer implements 
ContainerComposer {
         // TODO support other types of governance
         governanceContainer = 
containers.registerContainer(GovernanceContainerFactory.newInstance("ZooKeeper"));
         // TODO add more version of databases
-        storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(testParam.getDatabaseType(),
 "", scenario,
-                
StorageContainerConfigurationFactory.newInstance(testParam.getDatabaseType())));
+        storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(testParam.getDatabaseType(),
 "",
+                
StorageContainerConfigurationFactory.newInstance(testParam.getDatabaseType(), 
scenario)));
         AdaptorContainerConfiguration containerConfig = 
ProxyClusterContainerConfigurationFactory.newInstance(
                 scenario, testParam.getDatabaseType(), 
AdapterContainerUtils.getAdapterContainerImage());
         AdapterContainer adapterContainer = 
AdapterContainerFactory.newInstance(AdapterMode.valueOf(testParam.getMode().toUpperCase()),
diff --git 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/container/compose/mode/StandaloneContainerComposer.java
 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/container/compose/mode/StandaloneContainerComposer.java
index 4d0e56d3416..b7d35937801 100644
--- 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/container/compose/mode/StandaloneContainerComposer.java
+++ 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/container/compose/mode/StandaloneContainerComposer.java
@@ -48,8 +48,8 @@ public final class StandaloneContainerComposer implements 
ContainerComposer {
         String scenario = testParam.getScenario();
         containers = new ITContainers(scenario);
         // TODO add more version of databases
-        storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(testParam.getDatabaseType(),
 "", scenario,
-                
StorageContainerConfigurationFactory.newInstance(testParam.getDatabaseType())));
+        storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(testParam.getDatabaseType(),
 "",
+                
StorageContainerConfigurationFactory.newInstance(testParam.getDatabaseType(), 
scenario)));
         adapterContainer = 
containers.registerContainer(AdapterContainerFactory.newInstance(AdapterMode.valueOf(testParam.getMode().toUpperCase()),
                 AdapterType.valueOf(testParam.getAdapter().toUpperCase()),
                 testParam.getDatabaseType(), storageContainer, scenario, 
ProxyStandaloneContainerConfigurationFactory.newInstance(scenario, 
testParam.getDatabaseType())));

Reply via email to