You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2021/01/11 17:13:26 UTC

[shardingsphere] branch master updated: Add DatabaseScenarioProperties to decouple env props process (#8987)

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

menghaoran 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 86b1ab4  Add DatabaseScenarioProperties to decouple env props process (#8987)
86b1ab4 is described below

commit 86b1ab4f38013d89c43a61011614ac5aaee922d4
Author: Liang Zhang <te...@163.com>
AuthorDate: Tue Jan 12 01:12:47 2021 +0800

    Add DatabaseScenarioProperties to decouple env props process (#8987)
    
    * Refactor IntegrateTestEnvironment
    
    * Add DatabaseScenarioProperties
    
    * Update IntegrateTestEnvironment
    
    * Update IntegrateTestEnvironment
    
    * Add props package
---
 .../integration/env/IntegrateTestEnvironment.java  |  70 ++++++-------
 .../env/props/DatabaseScenarioProperties.java      | 110 +++++++++++++++++++++
 .../env/{ => props}/EnvironmentProperties.java     |   5 +-
 3 files changed, 141 insertions(+), 44 deletions(-)

diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/IntegrateTestEnvironment.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/IntegrateTestEnvironment.java
index cdd555e..ac36f6a 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/IntegrateTestEnvironment.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/IntegrateTestEnvironment.java
@@ -23,6 +23,8 @@ import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.test.integration.env.datasource.DatabaseEnvironment;
+import org.apache.shardingsphere.test.integration.env.props.DatabaseScenarioProperties;
+import org.apache.shardingsphere.test.integration.env.props.EnvironmentProperties;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -62,70 +64,54 @@ public final class IntegrateTestEnvironment {
         adapters = Splitter.on(",").trimResults().splitToList(engineEnvProps.getProperty("it.adapters"));
         runAdditionalTestCases = Boolean.parseBoolean(engineEnvProps.getProperty("it.run.additional.cases"));
         scenarios = Splitter.on(",").trimResults().splitToList(engineEnvProps.getProperty("it.scenarios"));
-        databaseEnvironments = createDatabaseEnvironments(engineEnvProps);
-        proxyEnvironments = createProxyEnvironments();
+        Map<String, DatabaseScenarioProperties> databaseProps = getDatabaseScenarioProperties();
+        databaseEnvironments = createDatabaseEnvironments(getDatabaseTypes(engineEnvProps), databaseProps);
+        proxyEnvironments = createProxyEnvironments(databaseProps);
     }
     
-    private Map<DatabaseType, Map<String, DatabaseEnvironment>> createDatabaseEnvironments(final Properties envProps) {
-        Collection<DatabaseType> databaseTypes = Arrays.stream(
-                envProps.getProperty("it.databases", "H2").split(",")).map(each -> DatabaseTypeRegistry.getActualDatabaseType(each.trim())).collect(Collectors.toList());
+    private Map<String, DatabaseScenarioProperties> getDatabaseScenarioProperties() {
+        Map<String, DatabaseScenarioProperties> result = new HashMap<>(scenarios.size(), 1);
+        for (String each : scenarios) {
+            result.put(each, new DatabaseScenarioProperties(each, EnvironmentProperties.loadProperties(String.format("env/%s/scenario-env.properties", each))));
+        }
+        return result;
+    }
+    
+    private Collection<DatabaseType> getDatabaseTypes(final Properties engineEnvProps) {
+        return Arrays.stream(engineEnvProps.getProperty("it.databases", "H2").split(",")).map(each -> DatabaseTypeRegistry.getActualDatabaseType(each.trim())).collect(Collectors.toList());
+    }
+
+    private Map<DatabaseType, Map<String, DatabaseEnvironment>> createDatabaseEnvironments(final Collection<DatabaseType> databaseTypes, final Map<String, DatabaseScenarioProperties> databaseProps) {
         Map<DatabaseType, Map<String, DatabaseEnvironment>> result = new LinkedHashMap<>(databaseTypes.size(), 1);
         for (DatabaseType each : databaseTypes) {
             Map<String, DatabaseEnvironment> databaseEnvironments = new LinkedHashMap<>(scenarios.size(), 1);
             for (String scenario : scenarios) {
-                databaseEnvironments.put(scenario, createDatabaseEnvironment(each, scenario));
+                databaseEnvironments.put(scenario, createDatabaseEnvironment(each, databaseProps.get(scenario)));
                 result.put(each, databaseEnvironments);
             }
         }
         return result;
     }
     
-    private DatabaseEnvironment createDatabaseEnvironment(final DatabaseType databaseType, final String scenario) {
-        Properties envProps = EnvironmentProperties.loadProperties(String.format("env/%s/scenario-env.properties", scenario));
-        switch (databaseType.getName()) {
-            case "H2":
-                return new DatabaseEnvironment(databaseType, "", 0, "sa", "");
-            case "MySQL":
-                return new DatabaseEnvironment(databaseType, envProps.getProperty(String.format("it.%s.mysql.host", scenario), "127.0.0.1"), 
-                        Integer.parseInt(envProps.getProperty(String.format("it.%s.mysql.port", scenario), "3306")),
-                        envProps.getProperty(String.format("it.%s.mysql.username", scenario), "root"), 
-                        envProps.getProperty(String.format("it.%s.mysql.password", scenario), ""));
-            case "PostgreSQL":
-                return new DatabaseEnvironment(databaseType, envProps.getProperty(String.format("it.%s.postgresql.host", scenario), "127.0.0.1"), 
-                        Integer.parseInt(envProps.getProperty(String.format("it.%s.postgresql.port", scenario), "5432")),
-                        envProps.getProperty(String.format("it.%s.postgresql.username", scenario), "postgres"), 
-                        envProps.getProperty(String.format("it.%s.postgresql.password", scenario), ""));
-            case "SQLServer":
-                return new DatabaseEnvironment(databaseType, envProps.getProperty(String.format("it.%s.sqlserver.host", scenario), "127.0.0.1"), 
-                        Integer.parseInt(envProps.getProperty(String.format("it.%s.sqlserver.port", scenario), "1433")),
-                        envProps.getProperty(String.format("it.%s.sqlserver.username", scenario), "sa"), 
-                        envProps.getProperty(String.format("it.%s.sqlserver.password", scenario), "Jdbc1234"));
-            case "Oracle":
-                return new DatabaseEnvironment(databaseType, envProps.getProperty(String.format("it.%s.oracle.host", scenario), "127.0.0.1"), 
-                        Integer.parseInt(envProps.getProperty(String.format("it.%s.oracle.port", scenario), "1521")),
-                        envProps.getProperty(String.format("it.%s.oracle.username", scenario), "jdbc"),
-                        envProps.getProperty(String.format("it.%s.oracle.password", scenario), "jdbc"));
-            default:
-                throw new UnsupportedOperationException(databaseType.getName());
+    private DatabaseEnvironment createDatabaseEnvironment(final DatabaseType databaseType, final DatabaseScenarioProperties databaseProps) {
+        if ("H2".equals(databaseType.getName())) {
+            return new DatabaseEnvironment(databaseType, "", 0, "sa", ""); 
         }
+        return new DatabaseEnvironment(databaseType, databaseProps.getDatabaseHost(databaseType), 
+                databaseProps.getDatabasePort(databaseType), databaseProps.getDatabaseUsername(databaseType), databaseProps.getDatabasePassword(databaseType));
     }
     
-    private Map<String, DatabaseEnvironment> createProxyEnvironments() {
+    private Map<String, DatabaseEnvironment> createProxyEnvironments(final Map<String, DatabaseScenarioProperties> databaseProps) {
         Map<String, DatabaseEnvironment> result = new HashMap<>(scenarios.size(), 1);
         for (String each : scenarios) {
-            result.put(each, createProxyEnvironment(each));
+            result.put(each, createProxyEnvironment(databaseProps.get(each)));
         }
         return result;
     }
     
-    private DatabaseEnvironment createProxyEnvironment(final String scenario) {
-        Properties envProps = EnvironmentProperties.loadProperties(String.format("env/%s/scenario-env.properties", scenario));
-        String host = envProps.getProperty(String.format("it.%s.proxy.host", scenario), "127.0.0.1");
-        int port = Integer.parseInt(envProps.getProperty(String.format("it.%s.proxy.port", scenario), "3307"));
-        String username = envProps.getProperty(String.format("it.%s.proxy.username", scenario), "root");
-        String password = envProps.getProperty(String.format("it.%s.proxy.password", scenario), "root");
+    private DatabaseEnvironment createProxyEnvironment(final DatabaseScenarioProperties databaseProps) {
         // TODO hard code for MySQL, should configurable
-        return new DatabaseEnvironment(new MySQLDatabaseType(), host, port, username, password);
+        return new DatabaseEnvironment(new MySQLDatabaseType(), databaseProps.getProxyHost(), databaseProps.getProxyPort(), databaseProps.getProxyUsername(), databaseProps.getProxyPassword());
     }
     
     /**
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/props/DatabaseScenarioProperties.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/props/DatabaseScenarioProperties.java
new file mode 100644
index 0000000..bee66b8
--- /dev/null
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/props/DatabaseScenarioProperties.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.test.integration.env.props;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+
+import java.util.Properties;
+
+/**
+ * Database scenario properties.
+ */
+@RequiredArgsConstructor
+public final class DatabaseScenarioProperties {
+
+    private final String scenario;
+    
+    private final Properties props;
+    
+    /**
+     * Get database host.
+     * 
+     * @param databaseType database type
+     * @return database host
+     */
+    public String getDatabaseHost(final DatabaseType databaseType) {
+        return props.getProperty(String.format("it.%s.%s.host", scenario, databaseType.getName().toLowerCase()));
+    }
+    
+    /**
+     * Get database port.
+     *
+     * @param databaseType database type
+     * @return database port
+     */
+    public int getDatabasePort(final DatabaseType databaseType) {
+        return Integer.parseInt(props.getProperty(String.format("it.%s.%s.port", scenario, databaseType.getName().toLowerCase())));
+    }
+    
+    /**
+     * Get database username.
+     *
+     * @param databaseType database type
+     * @return database username
+     */
+    public String getDatabaseUsername(final DatabaseType databaseType) {
+        return props.getProperty(String.format("it.%s.%s.username", scenario, databaseType.getName().toLowerCase()));
+    }
+    
+    /**
+     * Get database password.
+     *
+     * @param databaseType database type
+     * @return database password
+     */
+    public String getDatabasePassword(final DatabaseType databaseType) {
+        return props.getProperty(String.format("it.%s.%s.password", scenario, databaseType.getName().toLowerCase()));
+    }
+    
+    /**
+     * Get proxy host.
+     *
+     * @return proxy host
+     */
+    public String getProxyHost() {
+        return props.getProperty(String.format("it.%s.proxy.host", scenario));
+    }
+    
+    /**
+     * Get proxy port.
+     *
+     * @return proxy port
+     */
+    public int getProxyPort() {
+        return Integer.parseInt(props.getProperty(String.format("it.%s.proxy.port", scenario)));
+    }
+    
+    /**
+     * Get proxy username.
+     *
+     * @return proxy username
+     */
+    public String getProxyUsername() {
+        return props.getProperty(String.format("it.%s.proxy.username", scenario));
+    }
+    
+    /**
+     * Get proxy password.
+     *
+     * @return proxy password
+     */
+    public String getProxyPassword() {
+        return props.getProperty(String.format("it.%s.proxy.password", scenario));
+    }
+}
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/EnvironmentProperties.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/props/EnvironmentProperties.java
similarity index 91%
rename from shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/EnvironmentProperties.java
rename to shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/props/EnvironmentProperties.java
index d8f8dd4..55258ce 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/EnvironmentProperties.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/props/EnvironmentProperties.java
@@ -15,10 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.integration.env;
+package org.apache.shardingsphere.test.integration.env.props;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.test.integration.env.IntegrateTestEnvironment;
 
 import java.io.IOException;
 import java.util.Properties;
@@ -30,7 +31,7 @@ import java.util.Properties;
 public final class EnvironmentProperties {
     
     /**
-     * load properties.
+     * Load properties.
      * 
      * @param propsFileName properties file name
      * @return properties