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