You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/09/05 10:32:37 UTC
[shardingsphere] branch master updated: Refactor : add mapped and exposed Datasource for HA testing. (#20800)
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 a0f784f2b10 Refactor : add mapped and exposed Datasource for HA testing. (#20800)
a0f784f2b10 is described below
commit a0f784f2b10006a62e9d6000cf1d5676e813038f
Author: 孙念君 Nianjun Sun <su...@sphere-ex.com>
AuthorDate: Mon Sep 5 18:32:29 2022 +0800
Refactor : add mapped and exposed Datasource for HA testing. (#20800)
* Refactor : add mapped and exposed Datasource for HA testing.
* Refactor : update some java docs
* Refactor : update some java docs
---
.../atomic/storage/DockerStorageContainer.java | 2 +-
.../atomic/util/StorageContainerUtil.java | 54 ++++++++++++++++++++++
.../test/integration/ha/cases/base/BaseITCase.java | 37 ++++-----------
.../ha/cases/mysql/MySQLHAGeneralIT.java | 6 ++-
.../container/compose/BaseContainerComposer.java | 25 ++++++++--
.../container/compose/DockerContainerComposer.java | 37 ++++++++-------
6 files changed, 110 insertions(+), 51 deletions(-)
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-env/src/test/java/org/apache/shardingsphere/test/integration/env/container/atomic/storage/DockerStorageContainer.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-env/src/test/java/org/apache/shardingsphere/test/integration/env/container/atomic/storage/DockerStorageContainer.java
index a2e1348d7a4..cfd7d5b2f76 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-env/src/test/java/org/apache/shardingsphere/test/integration/env/container/atomic/storage/DockerStorageContainer.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-env/src/test/java/org/apache/shardingsphere/test/integration/env/container/atomic/storage/DockerStorageContainer.java
@@ -167,7 +167,7 @@ public abstract class DockerStorageContainer extends DockerITContainer implement
*
* @return mapped database container port
*/
- protected abstract int getMappedPort();
+ public abstract int getMappedPort();
@Override
public final String getAbbreviation() {
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-env/src/test/java/org/apache/shardingsphere/test/integration/env/container/atomic/util/StorageContainerUtil.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-env/src/test/java/org/apache/shardingsphere/test/integration/env/container/atomic/util/StorageContainerUtil.java
new file mode 100644
index 00000000000..ce79def9573
--- /dev/null
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-env/src/test/java/org/apache/shardingsphere/test/integration/env/container/atomic/util/StorageContainerUtil.java
@@ -0,0 +1,54 @@
+/*
+ * 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.container.atomic.util;
+
+import com.zaxxer.hikari.HikariDataSource;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
+import org.apache.shardingsphere.test.integration.env.runtime.DataSourceEnvironment;
+
+import javax.sql.DataSource;
+
+/**
+ * Storage container util.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class StorageContainerUtil {
+
+ /**
+ * Generate datasource.
+ *
+ * @param jdbcUrl JDBC URL for generating datasource
+ * @param username username
+ * @param password password
+ * @return data source
+ */
+ public static DataSource generateDataSource(final String jdbcUrl, final String username, final String password) {
+ DatabaseType databaseType = DatabaseTypeEngine.getDatabaseType(jdbcUrl);
+ HikariDataSource result = new HikariDataSource();
+ result.setDriverClassName(DataSourceEnvironment.getDriverClassName(databaseType));
+ result.setJdbcUrl(jdbcUrl);
+ result.setUsername(username);
+ result.setPassword(password);
+ result.setMaximumPoolSize(2);
+ result.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
+ return result;
+ }
+}
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/cases/base/BaseITCase.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/cases/base/BaseITCase.java
index 1d3e85abd7d..19fd9df018a 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/cases/base/BaseITCase.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/cases/base/BaseITCase.java
@@ -17,18 +17,12 @@
package org.apache.shardingsphere.test.integration.ha.cases.base;
-import com.zaxxer.hikari.HikariDataSource;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.database.metadata.url.JdbcUrlAppender;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.test.integration.env.container.atomic.adapter.impl.ShardingSphereProxyClusterContainer;
-import org.apache.shardingsphere.test.integration.env.container.atomic.constants.ProxyContainerConstants;
-import org.apache.shardingsphere.test.integration.env.container.atomic.constants.StorageContainerConstants;
-import org.apache.shardingsphere.test.integration.env.container.atomic.storage.DockerStorageContainer;
import org.apache.shardingsphere.test.integration.env.container.atomic.util.DatabaseTypeUtil;
-import org.apache.shardingsphere.test.integration.env.runtime.DataSourceEnvironment;
import org.apache.shardingsphere.test.integration.ha.env.IntegrationTestEnvironment;
import org.apache.shardingsphere.test.integration.ha.framework.container.compose.BaseContainerComposer;
import org.apache.shardingsphere.test.integration.ha.framework.container.compose.DockerContainerComposer;
@@ -36,7 +30,6 @@ import org.apache.shardingsphere.test.integration.ha.framework.parameter.HAParam
import javax.sql.DataSource;
import java.util.List;
-import java.util.stream.Collectors;
/**
* Base integration test.
@@ -49,13 +42,15 @@ public abstract class BaseITCase {
protected static final JdbcUrlAppender JDBC_URL_APPENDER = new JdbcUrlAppender();
- protected static final String DEFAULT_SCHEMA = "ha_test";
+ private final String databaseName;
private final BaseContainerComposer containerComposer;
private final DatabaseType databaseType;
- private List<DataSource> storageDataSources;
+ private List<DataSource> exposedDataSources;
+
+ private List<DataSource> mappedDataSources;
private DataSource proxyDataSource;
@@ -63,33 +58,17 @@ public abstract class BaseITCase {
databaseType = haParameterized.getDatabaseType();
containerComposer = new DockerContainerComposer(haParameterized.getScenario(), haParameterized.getDatabaseType(), haParameterized.getDockerImageName());
containerComposer.start();
+ databaseName = (DatabaseTypeUtil.isPostgreSQL(databaseType) || DatabaseTypeUtil.isOpenGauss(databaseType)) ? "postgres" : "";
initStorageDataSources();
initProxyDataSource();
}
private void initProxyDataSource() {
- String databaseName = (DatabaseTypeUtil.isPostgreSQL(databaseType) || DatabaseTypeUtil.isOpenGauss(databaseType)) ? "postgres" : "";
- ShardingSphereProxyClusterContainer proxyContainer = ((DockerContainerComposer) containerComposer).getProxyContainer();
- this.proxyDataSource = getDataSource(DataSourceEnvironment.getURL(databaseType, proxyContainer.getHost(), proxyContainer.getFirstMappedPort(),
- containerComposer.getProxyJdbcUrl(databaseName)), ProxyContainerConstants.USERNAME, ProxyContainerConstants.PASSWORD);
+ proxyDataSource = containerComposer.getProxyDatasource(databaseName);
}
private void initStorageDataSources() {
- List<DockerStorageContainer> storageContainers = ((DockerContainerComposer) containerComposer).getStorageContainers();
- this.storageDataSources = storageContainers.stream()
- .map(storageContainer -> DataSourceEnvironment.getURL(getDatabaseType(), storageContainer.getNetworkAliases().get(0), storageContainer.getExposedPort(), DEFAULT_SCHEMA))
- .map(jdbcUrl -> getDataSource(jdbcUrl, StorageContainerConstants.USERNAME, StorageContainerConstants.PASSWORD))
- .collect(Collectors.toList());
- }
-
- private DataSource getDataSource(final String jdbcUrl, final String username, final String password) {
- HikariDataSource result = new HikariDataSource();
- result.setDriverClassName(DataSourceEnvironment.getDriverClassName(getDatabaseType()));
- result.setJdbcUrl(jdbcUrl);
- result.setUsername(username);
- result.setPassword(password);
- result.setMaximumPoolSize(2);
- result.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
- return result;
+ exposedDataSources = containerComposer.getExposedDatasource(databaseName);
+ mappedDataSources = containerComposer.getMappedDatasource(databaseName);
}
}
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/cases/mysql/MySQLHAGeneralIT.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/cases/mysql/MySQLHAGeneralIT.java
index b65a23c0ee0..1438f3780b5 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/cases/mysql/MySQLHAGeneralIT.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/cases/mysql/MySQLHAGeneralIT.java
@@ -57,8 +57,10 @@ public final class MySQLHAGeneralIT extends BaseITCase {
@Test
public void assertProxyJdbcConnection() {
- List<DataSource> dataSourceList = getStorageDataSources();
+ List<DataSource> mappedDataSources = getMappedDataSources();
+ List<DataSource> exposedDataSources = getExposedDataSources();
// TODO add the MySQL HA logic here.
- dataSourceList.forEach(each -> log.info(each.toString()));
+ mappedDataSources.forEach(each -> log.info(each.toString()));
+ exposedDataSources.forEach(each -> log.info(each.toString()));
}
}
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/framework/container/compose/BaseContainerComposer.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/framework/container/compose/BaseContainerComposer.java
index 417fb38f509..a6d0cb6228c 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/framework/container/compose/BaseContainerComposer.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/framework/container/compose/BaseContainerComposer.java
@@ -21,6 +21,9 @@ import lombok.Getter;
import org.apache.shardingsphere.test.integration.env.container.atomic.ITContainers;
import org.testcontainers.lifecycle.Startable;
+import javax.sql.DataSource;
+import java.util.List;
+
/**
* Abstract composed container.
*/
@@ -37,12 +40,28 @@ public abstract class BaseContainerComposer implements Startable {
}
/**
- * Get proxy JDBC URL.
+ * Get proxy data source.
+ *
+ * @param databaseName database name
+ * @return proxy data source
+ */
+ public abstract DataSource getProxyDatasource(String databaseName);
+
+ /**
+ * Get Datasource with storage container exposed port and network alias.
+ *
+ * @param databaseName database name
+ * @return list of datasource
+ */
+ public abstract List<DataSource> getExposedDatasource(String databaseName);
+
+ /**
+ * Get Datasource with storage container mapped port and host.
*
* @param databaseName database name
- * @return proxy JDBC URL
+ * @return list of datasource
*/
- public abstract String getProxyJdbcUrl(String databaseName);
+ public abstract List<DataSource> getMappedDatasource(String databaseName);
@Override
public void start() {
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/framework/container/compose/DockerContainerComposer.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/framework/container/compose/DockerContainerComposer.java
index 4993c83d15c..8683bbe1f32 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/framework/container/compose/DockerContainerComposer.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-ha/src/test/java/org/apache/shardingsphere/test/integration/ha/framework/container/compose/DockerContainerComposer.java
@@ -23,16 +23,19 @@ import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.test.integration.env.container.atomic.adapter.AdapterContainerFactory;
import org.apache.shardingsphere.test.integration.env.container.atomic.adapter.config.AdaptorContainerConfiguration;
import org.apache.shardingsphere.test.integration.env.container.atomic.adapter.impl.ShardingSphereProxyClusterContainer;
+import org.apache.shardingsphere.test.integration.env.container.atomic.constants.StorageContainerConstants;
import org.apache.shardingsphere.test.integration.env.container.atomic.governance.GovernanceContainer;
import org.apache.shardingsphere.test.integration.env.container.atomic.governance.impl.ZookeeperContainer;
import org.apache.shardingsphere.test.integration.env.container.atomic.storage.DockerStorageContainer;
import org.apache.shardingsphere.test.integration.env.container.atomic.storage.StorageContainerFactory;
import org.apache.shardingsphere.test.integration.env.container.atomic.storage.config.StorageContainerConfiguration;
import org.apache.shardingsphere.test.integration.env.container.atomic.util.ContainerUtil;
+import org.apache.shardingsphere.test.integration.env.container.atomic.util.StorageContainerUtil;
import org.apache.shardingsphere.test.integration.env.runtime.DataSourceEnvironment;
import org.apache.shardingsphere.test.integration.ha.framework.container.config.ProxyClusterContainerConfigurationFactory;
import org.apache.shardingsphere.test.integration.ha.framework.container.config.StorageContainerConfigurationFactory;
+import javax.sql.DataSource;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -74,23 +77,25 @@ public final class DockerContainerComposer extends BaseContainerComposer {
proxyContainer = getContainers().registerContainer(proxyClusterContainer);
}
- /**
- * Get proxy JDBC URL.
- *
- * @param databaseName database name
- * @return proxy JDBC URL
- */
- public String getProxyJdbcUrl(final String databaseName) {
- return DataSourceEnvironment.getURL(databaseType, proxyContainer.getHost(), proxyContainer.getFirstMappedPort(), databaseName);
+ @Override
+ public DataSource getProxyDatasource(final String databaseName) {
+ return StorageContainerUtil.generateDataSource(DataSourceEnvironment.getURL(databaseType, proxyContainer.getHost(), proxyContainer.getFirstMappedPort(), databaseName),
+ StorageContainerConstants.USERNAME, StorageContainerConstants.PASSWORD);
}
- /**
- * Get storage containers JDBC URL.
- *
- * @param databaseName database name
- * @return storage containers JDBC URL
- */
- public List<String> getJdbcUrls(final String databaseName) {
- return storageContainers.stream().map(each -> each.getJdbcUrl(databaseName)).collect(Collectors.toList());
+ @Override
+ public List<DataSource> getExposedDatasource(final String databaseName) {
+ return getStorageContainers().stream()
+ .map(each -> DataSourceEnvironment.getURL(databaseType, each.getNetworkAliases().get(0), each.getExposedPort(), databaseName))
+ .map(each -> StorageContainerUtil.generateDataSource(each, StorageContainerConstants.USERNAME, StorageContainerConstants.PASSWORD))
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List<DataSource> getMappedDatasource(final String databaseName) {
+ return getStorageContainers().stream()
+ .map(each -> DataSourceEnvironment.getURL(databaseType, each.getHost(), each.getMappedPort(), databaseName))
+ .map(each -> StorageContainerUtil.generateDataSource(each, StorageContainerConstants.USERNAME, StorageContainerConstants.PASSWORD))
+ .collect(Collectors.toList());
}
}