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 f4b4af4 Remove useless call for configure() in
ShardingSphereContainer (#15370)
f4b4af4 is described below
commit f4b4af4cdd7a69ee4f2487f46ad901b972242e7e
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Feb 12 10:08:03 2022 +0800
Remove useless call for configure() in ShardingSphereContainer (#15370)
* Refactor ShardingSphereJDBCContainer
* Refactor ShardingSphereJDBCContainer
* Refactor H2Container
* Remove useless call for configure() in ShardingSphereContainer
* Refactor ShardingSphereContainer
* Fix todo for PostgreSQLContainer
* Remove StorageContainer.getDriverClassName()
* Refactor H2Container
* Remove StorageContainer.getUrl()
* For checkstyle
* Remove ParameterizedArray dependency on ShardingSphereContainer
* refactor StorageContainer's constructor
* Add StorageContainer.getPrimaryKeyColumnName()
* Refactor StorageContainer
* Refactor AdapterContainer
* Refactor DataSourceEnvironment
* Refactor StorageContainer
* Fix checkstyle
---
.../test/integration/engine/dml/BaseDMLIT.java | 27 ++--------
.../integration/env/DataSourceEnvironment.java | 20 ++++----
.../container/atomic/ShardingSphereContainer.java | 12 ++---
.../container/atomic/adapter/AdapterContainer.java | 9 ++--
.../atomic/adapter/AdapterContainerFactory.java | 16 +++---
.../adapter/impl/ShardingSphereJDBCContainer.java | 35 +++++++------
.../adapter/impl/ShardingSphereProxyContainer.java | 25 ++++++----
.../atomic/governance/ZookeeperContainer.java | 5 +-
.../container/atomic/storage/StorageContainer.java | 35 +++++++------
.../atomic/storage/StorageContainerFactory.java | 17 ++++---
.../container/atomic/storage/impl/H2Container.java | 39 +++++++--------
.../atomic/storage/impl/MySQLContainer.java | 27 +++++-----
.../atomic/storage/impl/PostgreSQLContainer.java | 57 +++++++++++++---------
.../compose/mode/ClusterComposedContainer.java | 14 ++++--
.../compose/mode/MemoryComposedContainer.java | 6 ++-
15 files changed, 172 insertions(+), 172 deletions(-)
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/BaseDMLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/BaseDMLIT.java
index c48966b..7503349 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/BaseDMLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/dml/BaseDMLIT.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.test.integration.engine.dml;
-import
org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.datanode.DataNode;
import org.apache.shardingsphere.sharding.support.InlineExpressionParser;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetColumn;
@@ -35,11 +34,11 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
-import java.sql.Statement;
import java.sql.Types;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.List;
+import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@@ -92,27 +91,9 @@ public abstract class BaseDMLIT extends SingleITCase {
}
private String generateFetchActualDataSQL(final DataNode dataNode) throws
SQLException {
- if (getStorageContainer().getDatabaseType() instanceof
PostgreSQLDatabaseType) {
- String primaryKeyColumnName =
getPrimaryKeyColumnNameForPostgreSQL(dataNode);
- return String.format("SELECT * FROM %s ORDER BY %s ASC",
dataNode.getTableName(), primaryKeyColumnName);
- }
- return String.format("SELECT * FROM %s", dataNode.getTableName());
- }
-
- private String getPrimaryKeyColumnNameForPostgreSQL(final DataNode
dataNode) throws SQLException {
- String sql = String.format("SELECT a.attname, format_type(a.atttypid,
a.atttypmod) AS data_type "
- + "FROM pg_index i JOIN pg_attribute a ON a.attrelid =
i.indrelid AND a.attnum = ANY(i.indkey) WHERE i.indrelid = '%s'::regclass AND
i.indisprimary", dataNode.getTableName());
- DataSource dataSource = getComposedContainer() instanceof
ClusterComposedContainer
- ? getAnotherClientDataSource() :
getStorageContainer().getDataSourceMap().get(dataNode.getDataSourceName());
- try (
- Connection connection = dataSource.getConnection();
- Statement statement = connection.createStatement();
- ResultSet resultSet = statement.executeQuery(sql)) {
- if (resultSet.next()) {
- return resultSet.getString("attname");
- }
- throw new SQLException(String.format("Can not get primary key of
`%s`", dataNode.getTableName()));
- }
+ Optional<String> primaryKeyColumnName =
getStorageContainer().getPrimaryKeyColumnName(getStorageContainer().getDataSourceMap().get(dataNode.getDataSourceName()),
dataNode.getTableName());
+ return primaryKeyColumnName.isPresent()
+ ? String.format("SELECT * FROM %s ORDER BY %s ASC",
dataNode.getTableName(), primaryKeyColumnName.get()) : String.format("SELECT *
FROM %s", dataNode.getTableName());
}
private void assertMetaData(final ResultSetMetaData actual, final
Collection<DataSetColumn> expected) throws SQLException {
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/DataSourceEnvironment.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/DataSourceEnvironment.java
index a3a3e6d..390478a 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/DataSourceEnvironment.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/DataSourceEnvironment.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.test.integration.env;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+
/**
* Data source environment.
*/
@@ -28,8 +30,8 @@ public final class DataSourceEnvironment {
* @param databaseType database type
* @return driver class name
*/
- public static String getDriverClassName(final String databaseType) {
- switch (databaseType) {
+ public static String getDriverClassName(final DatabaseType databaseType) {
+ switch (databaseType.getName()) {
case "H2":
return "org.h2.Driver";
case "MySQL":
@@ -41,7 +43,7 @@ public final class DataSourceEnvironment {
case "Oracle":
return "oracle.jdbc.driver.OracleDriver";
default:
- throw new UnsupportedOperationException(databaseType);
+ throw new
UnsupportedOperationException(databaseType.getName());
}
}
@@ -53,8 +55,8 @@ public final class DataSourceEnvironment {
* @param port database port
* @return URL
*/
- public static String getURL(final String databaseType, final String host,
final int port) {
- switch (databaseType) {
+ public static String getURL(final DatabaseType databaseType, final String
host, final int port) {
+ switch (databaseType.getName()) {
case "H2":
return
"jdbc:h2:mem:test_db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL";
case "MySQL":
@@ -66,7 +68,7 @@ public final class DataSourceEnvironment {
case "Oracle":
return String.format("jdbc:oracle:thin:@%s:%s", host, port);
default:
- throw new UnsupportedOperationException(databaseType);
+ throw new
UnsupportedOperationException(databaseType.getName());
}
}
@@ -79,8 +81,8 @@ public final class DataSourceEnvironment {
* @param dataSourceName data source name
* @return URL
*/
- public static String getURL(final String databaseType, final String host,
final int port, final String dataSourceName) {
- switch (databaseType) {
+ public static String getURL(final DatabaseType databaseType, final String
host, final int port, final String dataSourceName) {
+ switch (databaseType.getName()) {
case "H2":
return
String.format("jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL",
dataSourceName);
case "MySQL":
@@ -92,7 +94,7 @@ public final class DataSourceEnvironment {
case "Oracle":
return String.format("jdbc:oracle:thin:@%s:%s/%s", host, port,
dataSourceName);
default:
- throw new UnsupportedOperationException(databaseType);
+ throw new
UnsupportedOperationException(databaseType.getName());
}
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ShardingSphereContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ShardingSphereContainer.java
index b3bc9e7..66a80c0 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ShardingSphereContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ShardingSphereContainer.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.test.integration.framework.container.atomic;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
import org.testcontainers.containers.GenericContainer;
import
org.testcontainers.containers.wait.strategy.DockerHealthcheckWaitStrategy;
import org.testcontainers.images.RemoteDockerImage;
@@ -27,7 +26,7 @@ import org.testcontainers.utility.DockerImageName;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
-import java.util.List;
+import java.util.Collection;
import java.util.stream.Collectors;
/**
@@ -41,14 +40,10 @@ public abstract class ShardingSphereContainer extends
GenericContainer<ShardingS
private final boolean isFakedContainer;
- @Getter
- private final ParameterizedArray parameterizedArray;
-
- public ShardingSphereContainer(final String name, final String
dockerImageName, final boolean isFakedContainer, final ParameterizedArray
parameterizedArray) {
+ public ShardingSphereContainer(final String name, final String
dockerImageName, final boolean isFakedContainer) {
super(getDockerImage(dockerImageName, isFakedContainer));
this.name = name;
this.isFakedContainer = isFakedContainer;
- this.parameterizedArray = parameterizedArray;
}
private static RemoteDockerImage getDockerImage(final String imageName,
final boolean isFakedContainer) {
@@ -58,7 +53,6 @@ public abstract class ShardingSphereContainer extends
GenericContainer<ShardingS
@Override
public void start() {
- configure();
startDependencies();
if (!isFakedContainer) {
super.start();
@@ -67,7 +61,7 @@ public abstract class ShardingSphereContainer extends
GenericContainer<ShardingS
}
private void startDependencies() {
- List<ShardingSphereContainer> dependencies =
getDependencies().stream().map(each -> (ShardingSphereContainer)
each).collect(Collectors.toList());
+ Collection<ShardingSphereContainer> dependencies =
getDependencies().stream().map(each -> (ShardingSphereContainer)
each).collect(Collectors.toList());
dependencies.stream().filter(each ->
!each.isCreated()).forEach(GenericContainer::start);
dependencies.stream()
.filter(each -> {
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/AdapterContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/AdapterContainer.java
index dd67ad9..95ad4c5 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/AdapterContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/AdapterContainer.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.test.integration.framework.container.atomic.ad
import lombok.SneakyThrows;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.ShardingSphereContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
import javax.sql.DataSource;
@@ -28,13 +27,13 @@ import javax.sql.DataSource;
*/
public abstract class AdapterContainer extends ShardingSphereContainer {
- public AdapterContainer(final String dockerName, final String
dockerImageName, final ParameterizedArray parameterizedArray) {
- this(dockerName, dockerImageName, false, parameterizedArray);
+ public AdapterContainer(final String dockerName, final String
dockerImageName) {
+ this(dockerName, dockerImageName, false);
}
@SneakyThrows
- public AdapterContainer(final String name, final String dockerImageName,
final boolean isFakedContainer, final ParameterizedArray parameterizedArray) {
- super(name, dockerImageName, isFakedContainer, parameterizedArray);
+ public AdapterContainer(final String name, final String dockerImageName,
final boolean isFakedContainer) {
+ super(name, dockerImageName, isFakedContainer);
}
/**
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/AdapterContainerFactory.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/AdapterContainerFactory.java
index 6342ef4..2cbaceb 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/AdapterContainerFactory.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/AdapterContainerFactory.java
@@ -19,9 +19,9 @@ package
org.apache.shardingsphere.test.integration.framework.container.atomic.ad
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.impl.ShardingSphereJDBCContainer;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.impl.ShardingSphereProxyContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
/**
* Adapter container factory.
@@ -32,17 +32,19 @@ public final class AdapterContainerFactory {
/**
* Create new instance of adapter container.
*
- * @param parameterizedArray parameterized array
+ * @param adapter adapter
+ * @param databaseType database type
+ * @param scenario scenario
* @return new instance of adapter container
*/
- public static AdapterContainer newInstance(final ParameterizedArray
parameterizedArray) {
- switch (parameterizedArray.getAdapter()) {
+ public static AdapterContainer newInstance(final String adapter, final
DatabaseType databaseType, final String scenario) {
+ switch (adapter) {
case "proxy":
- return new ShardingSphereProxyContainer(parameterizedArray);
+ return new ShardingSphereProxyContainer(databaseType,
scenario);
case "jdbc":
- return new ShardingSphereJDBCContainer(parameterizedArray);
+ return new ShardingSphereJDBCContainer(scenario);
default:
- throw new RuntimeException(String.format("Adapter [%s] is
unknown.", parameterizedArray.getAdapter()));
+ throw new RuntimeException(String.format("Adapter [%s] is
unknown.", adapter));
}
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/impl/ShardingSphereJDBCContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/impl/ShardingSphereJDBCContainer.java
index 8921068..f33aeec 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/impl/ShardingSphereJDBCContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/impl/ShardingSphereJDBCContainer.java
@@ -19,13 +19,13 @@ package
org.apache.shardingsphere.test.integration.framework.container.atomic.ad
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
+import lombok.SneakyThrows;
import
org.apache.shardingsphere.driver.api.yaml.YamlShardingSphereDataSourceFactory;
import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.AdapterContainer;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.StorageContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
import org.testcontainers.lifecycle.Startable;
import javax.sql.DataSource;
@@ -44,6 +44,8 @@ import java.util.concurrent.atomic.AtomicReference;
*/
public final class ShardingSphereJDBCContainer extends AdapterContainer {
+ private final String scenario;
+
private final AtomicBoolean isHealthy = new AtomicBoolean();
private Map<String, DataSource> dataSourceMap;
@@ -52,8 +54,9 @@ public final class ShardingSphereJDBCContainer extends
AdapterContainer {
private final AtomicReference<DataSource> anotherClientDataSourceProvider
= new AtomicReference<>();
- public ShardingSphereJDBCContainer(final ParameterizedArray
parameterizedArray) {
- super("ShardingSphere-JDBC", "ShardingSphere-JDBC", true,
parameterizedArray);
+ public ShardingSphereJDBCContainer(final String scenario) {
+ super("ShardingSphere-JDBC", "ShardingSphere-JDBC", true);
+ this.scenario = scenario;
}
@Override
@@ -70,7 +73,7 @@ public final class ShardingSphereJDBCContainer extends
AdapterContainer {
}
/**
- * Get data source.
+ * Get client data source.
*
* @param serverLists server list
* @return data source
@@ -80,40 +83,36 @@ public final class ShardingSphereJDBCContainer extends
AdapterContainer {
if (Objects.isNull(dataSource)) {
if (Strings.isNullOrEmpty(serverLists)) {
try {
- clientDataSourceProvider.set(
-
YamlShardingSphereDataSourceFactory.createDataSource(dataSourceMap, new
File(EnvironmentPath.getRulesConfigurationFile(getParameterizedArray().getScenario()))));
+
clientDataSourceProvider.set(YamlShardingSphereDataSourceFactory.createDataSource(dataSourceMap,
new File(EnvironmentPath.getRulesConfigurationFile(scenario))));
} catch (final SQLException | IOException ex) {
throw new RuntimeException(ex);
}
} else {
-
clientDataSourceProvider.set(createGovernanceDataSource(serverLists));
+
clientDataSourceProvider.set(createGovernanceClientDataSource(serverLists));
}
}
return clientDataSourceProvider.get();
}
/**
- * Get governance data source for reader.
+ * Get another client data source.
*
* @param serverLists server list
- * @return data source
+ * @return another client data source
*/
public DataSource getAnotherClientDataSource(final String serverLists) {
DataSource dataSource = anotherClientDataSourceProvider.get();
if (Objects.isNull(dataSource)) {
-
anotherClientDataSourceProvider.set(createGovernanceDataSource(serverLists));
+
anotherClientDataSourceProvider.set(createGovernanceClientDataSource(serverLists));
}
return anotherClientDataSourceProvider.get();
}
- private DataSource createGovernanceDataSource(final String serverLists) {
- try {
- YamlRootConfiguration rootConfig = YamlEngine.unmarshal(new
File(EnvironmentPath.getRulesConfigurationFile(getParameterizedArray().getScenario())),
YamlRootConfiguration.class);
-
rootConfig.getMode().getRepository().getProps().setProperty("server-lists",
serverLists);
- return
YamlShardingSphereDataSourceFactory.createDataSource(dataSourceMap,
YamlEngine.marshal(rootConfig).getBytes(StandardCharsets.UTF_8));
- } catch (final SQLException | IOException ex) {
- throw new RuntimeException(ex);
- }
+ @SneakyThrows({SQLException.class, IOException.class})
+ private DataSource createGovernanceClientDataSource(final String
serverLists) {
+ YamlRootConfiguration rootConfig = YamlEngine.unmarshal(new
File(EnvironmentPath.getRulesConfigurationFile(scenario)),
YamlRootConfiguration.class);
+
rootConfig.getMode().getRepository().getProps().setProperty("server-lists",
serverLists);
+ return
YamlShardingSphereDataSourceFactory.createDataSource(dataSourceMap,
YamlEngine.marshal(rootConfig).getBytes(StandardCharsets.UTF_8));
}
@Override
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/impl/ShardingSphereProxyContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/impl/ShardingSphereProxyContainer.java
index f1c3712..12967aa 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/impl/ShardingSphereProxyContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/adapter/impl/ShardingSphereProxyContainer.java
@@ -22,13 +22,13 @@ import com.zaxxer.hikari.HikariDataSource;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import
org.apache.shardingsphere.authority.yaml.config.YamlAuthorityRuleConfiguration;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.user.yaml.config.YamlUserConfiguration;
import
org.apache.shardingsphere.infra.metadata.user.yaml.config.YamlUsersConfigurationConverter;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import
org.apache.shardingsphere.proxy.config.yaml.YamlProxyServerConfiguration;
import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.AdapterContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
import org.testcontainers.containers.BindMode;
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
import org.testcontainers.utility.MountableFile;
@@ -50,14 +50,20 @@ public final class ShardingSphereProxyContainer extends
AdapterContainer {
private static final String PROPERTY_AGENT_HOME = "AGENT_HOME";
+ private final DatabaseType databaseType;
+
+ private final String scenario;
+
private final AtomicReference<DataSource> dataSourceProvider = new
AtomicReference<>();
- public ShardingSphereProxyContainer(final ParameterizedArray
parameterizedArray) {
- this(null, parameterizedArray);
+ public ShardingSphereProxyContainer(final DatabaseType databaseType, final
String scenario) {
+ this(null, databaseType, scenario);
}
- public ShardingSphereProxyContainer(final String dockerName, final
ParameterizedArray parameterizedArray) {
- super(Objects.isNull(dockerName) ? "ShardingSphere-Proxy" :
dockerName, "apache/shardingsphere-proxy-test", parameterizedArray);
+ public ShardingSphereProxyContainer(final String dockerName, final
DatabaseType databaseType, final String scenario) {
+ super(Objects.isNull(dockerName) ? "ShardingSphere-Proxy" :
dockerName, "apache/shardingsphere-proxy-test");
+ this.databaseType = databaseType;
+ this.scenario = scenario;
}
/**
@@ -96,7 +102,7 @@ public final class ShardingSphereProxyContainer extends
AdapterContainer {
@Override
protected void configure() {
- withConfMapping("/docker/proxy/conf/" +
getParameterizedArray().getScenario() + "/" +
getParameterizedArray().getDatabaseType().getName().toLowerCase());
+ withConfMapping("/docker/proxy/conf/" + scenario + "/" +
databaseType.getName().toLowerCase());
setWaitStrategy(new
LogMessageWaitStrategy().withRegEx(".*ShardingSphere-Proxy .* mode started
successfully.*"));
super.configure();
}
@@ -136,16 +142,15 @@ public final class ShardingSphereProxyContainer extends
AdapterContainer {
}
private DataSource createProxyDataSource() {
- String databaseType =
getParameterizedArray().getDatabaseType().getName();
HikariDataSource result = new HikariDataSource();
result.setDriverClassName(DataSourceEnvironment.getDriverClassName(databaseType));
- result.setJdbcUrl(DataSourceEnvironment.getURL(databaseType,
getHost(), getMappedPort(3307), getParameterizedArray().getScenario()));
+ result.setJdbcUrl(DataSourceEnvironment.getURL(databaseType,
getHost(), getMappedPort(3307), scenario));
YamlUserConfiguration userConfig = loadUserConfiguration();
result.setUsername(userConfig.getUsername());
result.setPassword(userConfig.getPassword());
result.setMaximumPoolSize(2);
result.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
- if ("MySQL".equals(databaseType)) {
+ if ("MySQL".equals(databaseType.getName())) {
result.setConnectionInitSql("SET sql_mode=(SELECT
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
}
return result;
@@ -153,7 +158,7 @@ public final class ShardingSphereProxyContainer extends
AdapterContainer {
@SneakyThrows(IOException.class)
private YamlUserConfiguration loadUserConfiguration() {
- String serverFile = "/docker/proxy/conf/" +
getParameterizedArray().getScenario() + "/" +
getParameterizedArray().getDatabaseType().getName().toLowerCase() +
"/server.yaml";
+ String serverFile = "/docker/proxy/conf/" + scenario + "/" +
databaseType.getName().toLowerCase() + "/server.yaml";
YamlProxyServerConfiguration serverConfig = YamlEngine.unmarshal(
ByteStreams.toByteArray(Objects.requireNonNull(this.getClass().getResourceAsStream(serverFile))),
YamlProxyServerConfiguration.class);
return
YamlUsersConfigurationConverter.convertYamlUserConfiguration(getProxyUsers(serverConfig)).stream().findFirst().orElse(new
YamlUserConfiguration());
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/ZookeeperContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/ZookeeperContainer.java
index ee4e5c6..d2a5d9e 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/ZookeeperContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/ZookeeperContainer.java
@@ -18,7 +18,6 @@
package
org.apache.shardingsphere.test.integration.framework.container.atomic.governance;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.ShardingSphereContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
/**
@@ -26,8 +25,8 @@ import
org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
*/
public final class ZookeeperContainer extends ShardingSphereContainer {
- public ZookeeperContainer(final ParameterizedArray parameterizedArray) {
- super("zookeeper", "zookeeper:3.6.2", false, parameterizedArray);
+ public ZookeeperContainer() {
+ super("zookeeper", "zookeeper:3.6.2", false);
setWaitStrategy(new
LogMessageWaitStrategy().withRegEx(".*PrepRequestProcessor \\(sid:[0-9]+\\)
started.*"));
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainer.java
index 0b05790..e3adc74 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainer.java
@@ -25,7 +25,6 @@ import
org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
import
org.apache.shardingsphere.test.integration.env.database.DatabaseEnvironmentManager;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.ShardingSphereContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
import org.testcontainers.containers.BindMode;
import org.testcontainers.shaded.com.google.common.collect.ImmutableMap;
import
org.testcontainers.shaded.com.google.common.collect.ImmutableMap.Builder;
@@ -33,6 +32,7 @@ import
org.testcontainers.shaded.com.google.common.collect.ImmutableMap.Builder;
import javax.sql.DataSource;
import javax.xml.bind.JAXBException;
import java.io.IOException;
+import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
@@ -42,15 +42,18 @@ import java.util.Optional;
*/
public abstract class StorageContainer extends ShardingSphereContainer {
+ private Map<String, DataSource> dataSourceMap;
+
@Getter
private final DatabaseType databaseType;
- private Map<String, DataSource> dataSourceMap;
+ @Getter
+ private final String scenario;
- public StorageContainer(final String name, final String dockerImageName,
- final DatabaseType databaseType, final boolean
isFakedContainer, final ParameterizedArray parameterizedArray) {
- super(name, dockerImageName, isFakedContainer, parameterizedArray);
+ public StorageContainer(final DatabaseType databaseType, final String
dockerImageName, final boolean isFakedContainer, final String scenario) {
+ super(databaseType.getName().toLowerCase(), dockerImageName,
isFakedContainer);
this.databaseType = databaseType;
+ this.scenario = scenario;
}
/**
@@ -72,7 +75,7 @@ public abstract class StorageContainer extends
ShardingSphereContainer {
@SneakyThrows({IOException.class, JAXBException.class})
public synchronized Map<String, DataSource> getDataSourceMap() {
if (null == dataSourceMap) {
- Collection<String> dataSourceNames =
DatabaseEnvironmentManager.getDatabaseNames(getParameterizedArray().getScenario());
+ Collection<String> dataSourceNames =
DatabaseEnvironmentManager.getDatabaseNames(scenario);
Builder<String, DataSource> builder = ImmutableMap.builder();
dataSourceNames.forEach(each -> builder.put(each,
createDataSource(each)));
dataSourceMap = builder.build();
@@ -82,8 +85,8 @@ public abstract class StorageContainer extends
ShardingSphereContainer {
private DataSource createDataSource(final String dataSourceName) {
HikariConfig config = new HikariConfig();
- config.setDriverClassName(getDriverClassName());
- config.setJdbcUrl(getUrl(dataSourceName));
+
config.setDriverClassName(DataSourceEnvironment.getDriverClassName(databaseType));
+ config.setJdbcUrl(DataSourceEnvironment.getURL(databaseType,
getHost(), getPort(), dataSourceName));
config.setUsername(getUsername());
config.setPassword(getPassword());
config.setMaximumPoolSize(4);
@@ -92,12 +95,6 @@ public abstract class StorageContainer extends
ShardingSphereContainer {
return new HikariDataSource(config);
}
- protected String getDriverClassName() {
- return
DataSourceEnvironment.getDriverClassName(databaseType.getName());
- }
-
- protected abstract String getUrl(String dataSourceName);
-
protected abstract String getUsername();
protected abstract String getPassword();
@@ -107,4 +104,14 @@ public abstract class StorageContainer extends
ShardingSphereContainer {
}
protected abstract int getPort();
+
+ /**
+ * Get primary key column name.
+ *
+ * @param dataSource data source
+ * @param tableName table name
+ * @return primary key column name
+ * @throws SQLException SQL exception
+ */
+ public abstract Optional<String> getPrimaryKeyColumnName(DataSource
dataSource, String tableName) throws SQLException;
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainerFactory.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainerFactory.java
index fa6a8f6..1d78e97 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainerFactory.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainerFactory.java
@@ -19,10 +19,10 @@ package
org.apache.shardingsphere.test.integration.framework.container.atomic.st
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.impl.H2Container;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.impl.MySQLContainer;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.impl.PostgreSQLContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
/**
* Storage container factory.
@@ -33,19 +33,20 @@ public final class StorageContainerFactory {
/**
* Create new instance of storage container.
*
- * @param parameterizedArray parameterized array
+ * @param databaseType database type
+ * @param scenario scenario
* @return new instance of storage container
*/
- public static StorageContainer newInstance(final ParameterizedArray
parameterizedArray) {
- switch (parameterizedArray.getDatabaseType().getName()) {
+ public static StorageContainer newInstance(final DatabaseType
databaseType, final String scenario) {
+ switch (databaseType.getName()) {
case "MySQL":
- return new MySQLContainer(parameterizedArray);
+ return new MySQLContainer(scenario);
case "PostgreSQL" :
- return new PostgreSQLContainer(parameterizedArray);
+ return new PostgreSQLContainer(scenario);
case "H2":
- return new H2Container(parameterizedArray);
+ return new H2Container(scenario);
default:
- throw new RuntimeException(String.format("Database [%s] is
unknown.", parameterizedArray.getDatabaseType()));
+ throw new RuntimeException(String.format("Database [%s] is
unknown.", databaseType.getName()));
}
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/H2Container.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/H2Container.java
index 6177332..2e1e19d 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/H2Container.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/H2Container.java
@@ -18,11 +18,10 @@
package
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.impl;
import lombok.SneakyThrows;
-import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
-import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.StorageContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
import org.h2.tools.RunScript;
import javax.sql.DataSource;
@@ -32,36 +31,35 @@ import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map.Entry;
-import java.util.Objects;
+import java.util.Optional;
/**
* H2 container.
*/
public final class H2Container extends StorageContainer {
- public H2Container(final ParameterizedArray parameterizedArray) {
- super("h2-embedded", "h2:fake", new H2DatabaseType(), true,
parameterizedArray);
+ public H2Container(final String scenario) {
+ super(DatabaseTypeRegistry.getActualDatabaseType("H2"), "h2:fake",
true, scenario);
}
@Override
@SneakyThrows({IOException.class, SQLException.class})
protected void execute() {
- super.execute();
- File file = new File(EnvironmentPath.getInitSQLFile(getDatabaseType(),
getParameterizedArray().getScenario()));
+ File file = new File(EnvironmentPath.getInitSQLFile(getDatabaseType(),
getScenario()));
for (Entry<String, DataSource> each : getDataSourceMap().entrySet()) {
String databaseFileName = "init-" + each.getKey() + ".sql";
- boolean sqlFileExist =
EnvironmentPath.checkSQLFileExist(getDatabaseType(),
getParameterizedArray().getScenario(), databaseFileName);
+ boolean sqlFileExist =
EnvironmentPath.checkSQLFileExist(getDatabaseType(), getScenario(),
databaseFileName);
try (Connection connection = each.getValue().getConnection();
FileReader reader = new FileReader(file)) {
RunScript.execute(connection, reader);
if (sqlFileExist) {
- executeDatabaseFile(connection, databaseFileName);
+ executeDatabaseFile(getDatabaseType(), connection,
databaseFileName);
}
}
}
}
- private void executeDatabaseFile(final Connection connection, final String
databaseFileName) throws IOException, SQLException {
- File databaseFile = new
File(EnvironmentPath.getInitSQLFile(getDatabaseType(),
getParameterizedArray().getScenario(), databaseFileName));
+ private void executeDatabaseFile(final DatabaseType databaseType, final
Connection connection, final String databaseFileName) throws IOException,
SQLException {
+ File databaseFile = new
File(EnvironmentPath.getInitSQLFile(databaseType, getScenario(),
databaseFileName));
try (FileReader databaseFileReader = new FileReader(databaseFile)) {
RunScript.execute(connection, databaseFileReader);
}
@@ -73,23 +71,22 @@ public final class H2Container extends StorageContainer {
}
@Override
- protected String getUrl(final String dataSourceName) {
- return DataSourceEnvironment.getURL("H2", null, 0,
Objects.isNull(dataSourceName) ? "test_db" : dataSourceName);
+ protected String getUsername() {
+ return "sa";
}
@Override
- protected int getPort() {
- return 0;
+ protected String getPassword() {
+ return "";
}
@Override
- protected String getUsername() {
- return "sa";
+ protected int getPort() {
+ return 0;
}
@Override
- protected String getPassword() {
- return "";
+ public Optional<String> getPrimaryKeyColumnName(final DataSource
dataSource, final String tableName) {
+ return Optional.empty();
}
-
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/MySQLContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/MySQLContainer.java
index 36008e1..d42aba7 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/MySQLContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/MySQLContainer.java
@@ -17,11 +17,10 @@
package
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.impl;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
-import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.StorageContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
+import javax.sql.DataSource;
import java.util.Collections;
import java.util.Optional;
@@ -30,24 +29,25 @@ import java.util.Optional;
*/
public final class MySQLContainer extends StorageContainer {
- public MySQLContainer(final ParameterizedArray parameterizedArray) {
- super("mysql-server", "mysql/mysql-server:5.7", new
MySQLDatabaseType(), false, parameterizedArray);
+ public MySQLContainer(final String scenario) {
+ super(DatabaseTypeRegistry.getActualDatabaseType("MySQL"),
"mysql/mysql-server:5.7", false, scenario);
}
@Override
protected void configure() {
withCommand("--sql_mode=",
"--default-authentication-plugin=mysql_native_password");
- withInitSQLMapping("/env/" + getParameterizedArray().getScenario() +
"/init-sql/mysql");
+ withInitSQLMapping("/env/" + getScenario() + "/init-sql/mysql");
setEnv(Collections.singletonList("LANG=C.UTF-8"));
}
@Override
- protected void execute() {
+ protected String getUsername() {
+ return "root";
}
@Override
- protected String getUrl(final String dataSourceName) {
- return DataSourceEnvironment.getURL("MySQL", getHost(), getPort(),
dataSourceName);
+ protected String getPassword() {
+ return "";
}
@Override
@@ -61,12 +61,7 @@ public final class MySQLContainer extends StorageContainer {
}
@Override
- protected String getUsername() {
- return "root";
- }
-
- @Override
- protected String getPassword() {
- return "";
+ public Optional<String> getPrimaryKeyColumnName(final DataSource
dataSource, final String tableName) {
+ return Optional.empty();
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/PostgreSQLContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/PostgreSQLContainer.java
index e0b7c13..c5242b4 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/PostgreSQLContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/impl/PostgreSQLContainer.java
@@ -18,23 +18,26 @@
package
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.impl;
import lombok.SneakyThrows;
-import
org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
import
org.apache.shardingsphere.test.integration.framework.container.atomic.storage.StorageContainer;
-import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
import org.postgresql.util.PSQLException;
+import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DriverManager;
+import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Optional;
/**
* PostgreSQL container.
*/
public final class PostgreSQLContainer extends StorageContainer {
- public PostgreSQLContainer(final ParameterizedArray parameterizedArray) {
- super("postgres", "postgres:12.6", new PostgreSQLDatabaseType(),
false, parameterizedArray);
+ public PostgreSQLContainer(final String scenario) {
+ super(DatabaseTypeRegistry.getActualDatabaseType("PostgreSQL"),
"postgres:12.6", false, scenario);
}
@Override
@@ -42,42 +45,52 @@ public final class PostgreSQLContainer extends
StorageContainer {
withCommand("--max_connections=200");
addEnv("POSTGRES_USER", "root");
addEnv("POSTGRES_PASSWORD", "root");
- withInitSQLMapping("/env/" + getParameterizedArray().getScenario() +
"/init-sql/postgresql");
+ withInitSQLMapping("/env/" + getScenario() + "/init-sql/postgresql");
}
-
+
@Override
@SneakyThrows({ClassNotFoundException.class, SQLException.class,
InterruptedException.class})
protected void execute() {
- int time = 0;
- Class.forName(getDriverClassName());
- String url = DataSourceEnvironment.getURL("PostgreSQL", getHost(),
getPort());
- // TODO logic need prefect
- while (time++ < 20) {
+
Class.forName(DataSourceEnvironment.getDriverClassName(getDatabaseType()));
+ String url = DataSourceEnvironment.getURL(getDatabaseType(),
getHost(), getPort());
+ boolean connected = false;
+ while (!connected) {
try (Connection ignored = DriverManager.getConnection(url,
getUsername(), getPassword())) {
+ connected = true;
break;
- } catch (PSQLException ex) {
- Thread.sleep(1000L);
+ } catch (final PSQLException ex) {
+ Thread.sleep(500L);
}
}
}
-
+
@Override
- protected String getUrl(final String dataSourceName) {
- return DataSourceEnvironment.getURL("PostgreSQL", getHost(),
getPort(), dataSourceName);
+ protected String getUsername() {
+ return "root";
}
@Override
- protected int getPort() {
- return getMappedPort(5432);
+ protected String getPassword() {
+ return "root";
}
@Override
- protected String getUsername() {
- return "root";
+ protected int getPort() {
+ return getMappedPort(5432);
}
@Override
- protected String getPassword() {
- return "root";
+ public Optional<String> getPrimaryKeyColumnName(final DataSource
dataSource, final String tableName) throws SQLException {
+ String sql = String.format("SELECT a.attname, format_type(a.atttypid,
a.atttypmod) AS data_type "
+ + "FROM pg_index i JOIN pg_attribute a ON a.attrelid =
i.indrelid AND a.attnum = ANY(i.indkey) WHERE i.indrelid = '%s'::regclass AND
i.indisprimary", tableName);
+ try (
+ Connection connection = dataSource.getConnection();
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery(sql)) {
+ if (resultSet.next()) {
+ return Optional.of(resultSet.getString("attname"));
+ }
+ throw new SQLException(String.format("Can not get primary key of
`%s`", tableName));
+ }
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/mode/ClusterComposedContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/mode/ClusterComposedContainer.java
index 455a022..549e7ef 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/mode/ClusterComposedContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/mode/ClusterComposedContainer.java
@@ -49,15 +49,19 @@ public final class ClusterComposedContainer implements
ComposedContainer {
public ClusterComposedContainer(final String testSuiteName, final
ParameterizedArray parameterizedArray) {
containers = new ShardingSphereContainers(testSuiteName,
parameterizedArray.getScenario());
- storageContainer =
containers.registerContainer(StorageContainerFactory.newInstance(parameterizedArray),
parameterizedArray.getDatabaseType().getName());
- adapterContainer =
containers.registerContainer(AdapterContainerFactory.newInstance(parameterizedArray),
parameterizedArray.getAdapter());
+ storageContainer = containers.registerContainer(
+
StorageContainerFactory.newInstance(parameterizedArray.getDatabaseType(),
parameterizedArray.getScenario()),
parameterizedArray.getDatabaseType().getName());
+ adapterContainer =
containers.registerContainer(AdapterContainerFactory.newInstance(
+ parameterizedArray.getAdapter(),
parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()),
parameterizedArray.getAdapter());
// TODO support other types of governance
- zookeeperContainer = containers.registerContainer(new
ZookeeperContainer(parameterizedArray), "zk");
+ zookeeperContainer = containers.registerContainer(new
ZookeeperContainer(), "zk");
if ("proxy".equals(parameterizedArray.getAdapter())) {
- adapterContainerForReader = containers.registerContainer(new
ShardingSphereProxyContainer("ShardingSphere-Proxy-1", parameterizedArray),
"ShardingSphere-Proxy-1");
+ adapterContainerForReader = containers.registerContainer(
+ new ShardingSphereProxyContainer("ShardingSphere-Proxy-1",
parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()),
"ShardingSphere-Proxy-1");
adapterContainerForReader.dependsOn(storageContainer,
zookeeperContainer);
} else {
- adapterContainerForReader =
containers.registerContainer(AdapterContainerFactory.newInstance(parameterizedArray),
parameterizedArray.getAdapter());
+ adapterContainerForReader = containers.registerContainer(
+
AdapterContainerFactory.newInstance(parameterizedArray.getAdapter(),
parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()),
parameterizedArray.getAdapter());
adapterContainerForReader.dependsOn(storageContainer,
zookeeperContainer);
}
adapterContainer.dependsOn(storageContainer, zookeeperContainer);
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/mode/MemoryComposedContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/mode/MemoryComposedContainer.java
index a2d4e5b..8c7ade1 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/mode/MemoryComposedContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/mode/MemoryComposedContainer.java
@@ -42,8 +42,10 @@ public final class MemoryComposedContainer implements
ComposedContainer {
public MemoryComposedContainer(final String testSuiteName, final
ParameterizedArray parameterizedArray) {
containers = new ShardingSphereContainers(testSuiteName,
parameterizedArray.getScenario());
- storageContainer =
containers.registerContainer(StorageContainerFactory.newInstance(parameterizedArray),
parameterizedArray.getDatabaseType().getName());
- adapterContainer =
containers.registerContainer(AdapterContainerFactory.newInstance(parameterizedArray),
parameterizedArray.getAdapter());
+ storageContainer = containers.registerContainer(
+
StorageContainerFactory.newInstance(parameterizedArray.getDatabaseType(),
parameterizedArray.getScenario()),
parameterizedArray.getDatabaseType().getName());
+ adapterContainer = containers.registerContainer(
+
AdapterContainerFactory.newInstance(parameterizedArray.getAdapter(),
parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()),
parameterizedArray.getAdapter());
adapterContainer.dependsOn(storageContainer);
}