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

chengzhang 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 dbe9a9667d3 support alter database image in e2e. (#33327)
dbe9a9667d3 is described below

commit dbe9a9667d337d44e3d718b4c856c68dac711836
Author: Cong Hu <[email protected]>
AuthorDate: Mon Oct 21 10:29:11 2024 +0800

    support alter database image in e2e. (#33327)
---
 .../container/atomic/storage/StorageContainerFactory.java | 13 +++++++++++++
 .../test/e2e/env/runtime/cluster/ClusterEnvironment.java  | 15 +++++++++++++++
 .../container/compose/mode/ClusterContainerComposer.java  |  4 +---
 .../compose/mode/StandaloneContainerComposer.java         |  3 +--
 test/e2e/sql/src/test/resources/env/it-env.properties     |  2 ++
 5 files changed, 32 insertions(+), 5 deletions(-)

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 bd4f7f30f93..0182ae9fc20 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
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.Mari
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.MySQLContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.OpenGaussContainer;
 import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.PostgreSQLContainer;
+import org.apache.shardingsphere.test.e2e.env.runtime.E2ETestEnvironment;
 
 /**
  * Storage container factory.
@@ -33,6 +34,18 @@ import 
org.apache.shardingsphere.test.e2e.env.container.atomic.storage.impl.Post
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class StorageContainerFactory {
     
+    /**
+     * Create new instance of storage container.
+     *
+     * @param databaseType database type
+     * @param storageContainerConfig storage container configuration
+     * @return created instance
+     * @throws RuntimeException runtime exception
+     */
+    public static StorageContainer newInstance(final DatabaseType 
databaseType, final StorageContainerConfiguration storageContainerConfig) {
+        return newInstance(databaseType, 
E2ETestEnvironment.getInstance().getClusterEnvironment().getDatabaseImages().get(databaseType),
 storageContainerConfig);
+    }
+    
     /**
      * Create new instance of storage container.
      *
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/cluster/ClusterEnvironment.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/cluster/ClusterEnvironment.java
index a6e43c2602e..bfbab7ad7f4 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/cluster/ClusterEnvironment.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/cluster/ClusterEnvironment.java
@@ -20,10 +20,14 @@ package 
org.apache.shardingsphere.test.e2e.env.runtime.cluster;
 import com.google.common.base.Splitter;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
 import java.util.Properties;
 import java.util.stream.Collectors;
 
@@ -39,10 +43,21 @@ public final class ClusterEnvironment {
     
     private final Collection<DatabaseType> databaseTypes;
     
+    private final Map<DatabaseType, String> databaseImages;
+    
     public ClusterEnvironment(final Properties props) {
         type = getType(props);
         adapters = getAdapters(props);
         databaseTypes = getDatabaseTypes(props);
+        databaseImages = getDatabaseImages(props);
+    }
+    
+    private Map<DatabaseType, String> getDatabaseImages(final Properties 
props) {
+        Map<DatabaseType, String> result = new HashMap<>();
+        for (DatabaseType each : 
ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)) {
+            
Optional.ofNullable(props.getProperty(String.format("it.cluster.database.%s.image",
 each.getType().toLowerCase()))).ifPresent(value -> result.put(each, value));
+        }
+        return result;
     }
     
     private Type getType(final Properties props) {
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 b9ad5f58eca..e6ba707b588 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
@@ -54,9 +54,7 @@ public final class ClusterContainerComposer implements 
ContainerComposer {
         containers = new ITContainers(scenario);
         // TODO support other types of governance
         governanceContainer = 
containers.registerContainer(GovernanceContainerFactory.newInstance("ZooKeeper"));
-        // TODO add more version of databases
-        storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(databaseType, 
"",
-                StorageContainerConfigurationFactory.newInstance(databaseType, 
scenario)));
+        storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(databaseType, 
StorageContainerConfigurationFactory.newInstance(databaseType, scenario)));
         AdaptorContainerConfiguration containerConfig = 
ProxyClusterContainerConfigurationFactory.newInstance(scenario, databaseType, 
AdapterContainerUtils.getAdapterContainerImage());
         AdapterContainer adapterContainer = 
AdapterContainerFactory.newInstance(adapterMode, adapterType, databaseType, 
scenario, containerConfig, storageContainer);
         if (adapterContainer instanceof DockerITContainer) {
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 2a51b499c28..c9832930635 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
@@ -46,8 +46,7 @@ public final class StandaloneContainerComposer implements 
ContainerComposer {
     
     public StandaloneContainerComposer(final String scenario, final 
DatabaseType databaseType, final AdapterMode adapterMode, final AdapterType 
adapterType) {
         containers = new ITContainers(scenario);
-        // TODO add more version of databases
-        storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(databaseType, 
"", StorageContainerConfigurationFactory.newInstance(databaseType, scenario)));
+        storageContainer = 
containers.registerContainer(StorageContainerFactory.newInstance(databaseType, 
StorageContainerConfigurationFactory.newInstance(databaseType, scenario)));
         adapterContainer = 
containers.registerContainer(AdapterContainerFactory.newInstance(adapterMode, 
adapterType, databaseType, scenario,
                 
ProxyStandaloneContainerConfigurationFactory.newInstance(scenario, 
databaseType), storageContainer));
         if (adapterContainer instanceof DockerITContainer) {
diff --git a/test/e2e/sql/src/test/resources/env/it-env.properties 
b/test/e2e/sql/src/test/resources/env/it-env.properties
index eb04eb6efe0..7af8de84cb4 100644
--- a/test/e2e/sql/src/test/resources/env/it-env.properties
+++ b/test/e2e/sql/src/test/resources/env/it-env.properties
@@ -31,3 +31,5 @@ it.cluster.adapters=proxy
 
 # it.cluster.databases=MySQL,PostgreSQL,openGauss
 it.cluster.databases=MySQL
+
+#it.cluster.database.mysql.image=mysql:8.2.0

Reply via email to