You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2022/02/15 16:38:00 UTC
[shardingsphere] branch master updated: Split DockerITContainer and EmbeddedITContainer (#15427)
This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 d8ee21f Split DockerITContainer and EmbeddedITContainer (#15427)
d8ee21f is described below
commit d8ee21fb37f602512bafc4aa925450a52354658c
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Feb 16 00:35:08 2022 +0800
Split DockerITContainer and EmbeddedITContainer (#15427)
* Add ITContainer
* Add DockerITContainer
* Refactor DockerITContainer
* Refactor DockerStorageContainer
* Refactor MySQLContainer
* Refactor GovernanceContainer
* Refactor ComposedContainerRegistry
* Refactor ComposedContainerRegistry
* Refactor ShardingSphereProxyContainer
* Refactor ShardingSphereJDBCContainer
* Refactor AdapterContainer
* Remove isFakedContainer
---
...AtomicContainer.java => DockerITContainer.java} | 24 ++----
.../EmbeddedITContainer.java} | 28 +------
.../ITContainer.java} | 30 ++------
.../{AtomicContainers.java => ITContainers.java} | 40 ++++++----
.../container/atomic/adapter/AdapterContainer.java | 14 +---
.../atomic/adapter/AdapterContainerFactory.java | 6 +-
.../adapter/impl/ShardingSphereJDBCContainer.java | 40 +++-------
.../adapter/impl/ShardingSphereProxyContainer.java | 15 +---
.../atomic/governance/GovernanceContainer.java | 10 +--
.../atomic/governance/impl/ZookeeperContainer.java | 2 +-
...eContainer.java => DockerStorageContainer.java} | 33 +++-----
...ontainer.java => EmbeddedStorageContainer.java} | 42 ++---------
.../container/atomic/storage/StorageContainer.java | 87 +++++++---------------
.../container/atomic/storage/impl/H2Container.java | 19 ++---
.../atomic/storage/impl/MySQLContainer.java | 16 ++--
.../atomic/storage/impl/PostgreSQLContainer.java | 12 +--
.../container/compose/ComposedContainer.java | 9 +--
.../compose/ComposedContainerRegistry.java | 15 ++--
.../compose/mode/ClusterComposedContainer.java | 23 +++---
.../compose/mode/MemoryComposedContainer.java | 23 +++---
20 files changed, 166 insertions(+), 322 deletions(-)
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/AtomicContainer.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/DockerITContainer.java
similarity index 74%
rename from shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/AtomicContainer.java
rename to shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/DockerITContainer.java
index 8ca40ce..e4a98ff 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/AtomicContainer.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/DockerITContainer.java
@@ -30,38 +30,28 @@ import java.util.Collection;
import java.util.stream.Collectors;
/**
- * Atomic container.
+ * Docker IT container.
*/
-@Slf4j
@Getter
-public abstract class AtomicContainer extends GenericContainer<AtomicContainer> {
+@Slf4j
+public abstract class DockerITContainer extends GenericContainer<DockerITContainer> implements ITContainer {
private final String name;
- private final boolean isFakedContainer;
-
- public AtomicContainer(final String name, final String dockerImageName, final boolean isFakedContainer) {
- super(getDockerImage(dockerImageName, isFakedContainer));
+ public DockerITContainer(final String name, final String dockerImageName) {
+ super(new RemoteDockerImage(DockerImageName.parse(dockerImageName)));
this.name = name;
- this.isFakedContainer = isFakedContainer;
- }
-
- private static RemoteDockerImage getDockerImage(final String imageName, final boolean isFakedContainer) {
- RemoteDockerImage result = new RemoteDockerImage(DockerImageName.parse(imageName));
- return isFakedContainer ? result.withImagePullPolicy(dockerName -> false) : result;
}
@Override
public void start() {
startDependencies();
- if (!isFakedContainer) {
- super.start();
- }
+ super.start();
execute();
}
private void startDependencies() {
- Collection<AtomicContainer> dependencies = getDependencies().stream().map(each -> (AtomicContainer) each).collect(Collectors.toList());
+ Collection<DockerITContainer> dependencies = getDependencies().stream().filter(each -> each instanceof DockerITContainer).map(each -> (DockerITContainer) 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/compose/ComposedContainer.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/EmbeddedITContainer.java
similarity index 63%
copy from shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainer.java
copy to shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/EmbeddedITContainer.java
index 78665fc..e9039d1 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainer.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/EmbeddedITContainer.java
@@ -15,32 +15,10 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.integration.framework.container.compose;
-
-import javax.sql.DataSource;
-import java.util.Map;
+package org.apache.shardingsphere.test.integration.framework.container.atomic;
/**
- * Composed container.
+ * Embedded IT container.
*/
-public interface ComposedContainer extends AutoCloseable {
-
- /**
- * Start composed container.
- */
- void start();
-
- /**
- * Get actual data source map.
- *
- * @return actual data source map
- */
- Map<String, DataSource> getActualDataSourceMap();
-
- /**
- * Get target data source.
- *
- * @return target data source
- */
- DataSource getTargetDataSource();
+public interface EmbeddedITContainer extends ITContainer {
}
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainer.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ITContainer.java
similarity index 63%
copy from shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainer.java
copy to shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ITContainer.java
index 78665fc..14250c4 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainer.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ITContainer.java
@@ -15,32 +15,16 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.integration.framework.container.compose;
+package org.apache.shardingsphere.test.integration.framework.container.atomic;
-import javax.sql.DataSource;
-import java.util.Map;
+import org.testcontainers.lifecycle.Startable;
/**
- * Composed container.
+ * IT container.
*/
-public interface ComposedContainer extends AutoCloseable {
+public interface ITContainer extends Startable {
- /**
- * Start composed container.
- */
- void start();
-
- /**
- * Get actual data source map.
- *
- * @return actual data source map
- */
- Map<String, DataSource> getActualDataSourceMap();
-
- /**
- * Get target data source.
- *
- * @return target data source
- */
- DataSource getTargetDataSource();
+ @Override
+ default void stop() {
+ }
}
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/AtomicContainers.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ITContainers.java
similarity index 64%
rename from shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/AtomicContainers.java
rename to shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ITContainers.java
index 7d0c589..f1905c3 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/AtomicContainers.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/ITContainers.java
@@ -21,6 +21,7 @@ import lombok.RequiredArgsConstructor;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.Network;
import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.lifecycle.Startable;
import java.util.Collection;
import java.util.Collections;
@@ -28,16 +29,18 @@ import java.util.LinkedList;
import java.util.concurrent.TimeUnit;
/**
- * Atomic containers.
+ * IT containers.
*/
@RequiredArgsConstructor
-public final class AtomicContainers implements AutoCloseable {
+public final class ITContainers implements Startable {
private final String scenario;
private final Network network = Network.newNetwork();
- private final Collection<AtomicContainer> containers = new LinkedList<>();
+ private final Collection<EmbeddedITContainer> embeddedContainers = new LinkedList<>();
+
+ private final Collection<DockerITContainer> dockerContainers = new LinkedList<>();
private volatile boolean started;
@@ -50,23 +53,27 @@ public final class AtomicContainers implements AutoCloseable {
* @param <T> type of ShardingSphere container
* @return registered container
*/
- public <T extends AtomicContainer> T registerContainer(final String testSuiteName, final T container, final String containerType) {
- container.setNetwork(network);
- container.setNetworkAliases(Collections.singletonList(String.join(".", containerType.toLowerCase(), scenario, "host")));
- String loggerName = String.join(":", testSuiteName, container.getName());
- container.withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger(loggerName), true));
- containers.add(container);
+ public <T extends ITContainer> T registerContainer(final String testSuiteName, final T container, final String containerType) {
+ if (container instanceof EmbeddedITContainer) {
+ embeddedContainers.add((EmbeddedITContainer) container);
+ } else {
+ DockerITContainer dockerContainer = (DockerITContainer) container;
+ dockerContainer.setNetwork(network);
+ dockerContainer.setNetworkAliases(Collections.singletonList(String.join(".", containerType.toLowerCase(), scenario, "host")));
+ String loggerName = String.join(":", testSuiteName, dockerContainer.getName());
+ dockerContainer.withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger(loggerName), true));
+ dockerContainers.add(dockerContainer);
+ }
return container;
}
- /**
- * Start containers.
- */
+ @Override
public void start() {
if (!started) {
synchronized (this) {
if (!started) {
- containers.stream().filter(each -> !each.isCreated()).forEach(AtomicContainer::start);
+ embeddedContainers.forEach(EmbeddedITContainer::start);
+ dockerContainers.stream().filter(each -> !each.isCreated()).forEach(DockerITContainer::start);
waitUntilReady();
started = true;
}
@@ -75,7 +82,7 @@ public final class AtomicContainers implements AutoCloseable {
}
private void waitUntilReady() {
- containers.stream()
+ dockerContainers.stream()
.filter(each -> {
try {
return !each.isHealthy();
@@ -96,7 +103,8 @@ public final class AtomicContainers implements AutoCloseable {
}
@Override
- public void close() {
- containers.forEach(AtomicContainer::close);
+ public void stop() {
+ embeddedContainers.forEach(Startable::close);
+ dockerContainers.forEach(Startable::close);
}
}
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 b80c381..9c97f0f 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
@@ -17,22 +17,14 @@
package org.apache.shardingsphere.test.integration.framework.container.atomic.adapter;
-import org.apache.shardingsphere.test.integration.framework.container.atomic.AtomicContainer;
+import org.apache.shardingsphere.test.integration.framework.container.atomic.ITContainer;
import javax.sql.DataSource;
/**
* Adapter container.
*/
-public abstract class AdapterContainer extends AtomicContainer {
-
- public AdapterContainer(final String dockerName, final String dockerImageName) {
- this(dockerName, dockerImageName, false);
- }
-
- public AdapterContainer(final String name, final String dockerImageName, final boolean isFakedContainer) {
- super(name, dockerImageName, isFakedContainer);
- }
+public interface AdapterContainer extends ITContainer {
/**
* Get target data source.
@@ -40,5 +32,5 @@ public abstract class AdapterContainer extends AtomicContainer {
* @param serverLists server lists
* @return target data source
*/
- public abstract DataSource getTargetDataSource(String serverLists);
+ DataSource getTargetDataSource(String serverLists);
}
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 2cbaceb..cb80768 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
@@ -22,6 +22,7 @@ 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.container.atomic.storage.StorageContainer;
/**
* Adapter container factory.
@@ -34,15 +35,16 @@ public final class AdapterContainerFactory {
*
* @param adapter adapter
* @param databaseType database type
+ * @param storageContainer storage container
* @param scenario scenario
* @return new instance of adapter container
*/
- public static AdapterContainer newInstance(final String adapter, final DatabaseType databaseType, final String scenario) {
+ public static AdapterContainer newInstance(final String adapter, final DatabaseType databaseType, final StorageContainer storageContainer, final String scenario) {
switch (adapter) {
case "proxy":
return new ShardingSphereProxyContainer(databaseType, scenario);
case "jdbc":
- return new ShardingSphereJDBCContainer(scenario);
+ return new ShardingSphereJDBCContainer(storageContainer, scenario);
default:
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 02ffa12..641f01f 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
@@ -17,57 +17,39 @@
package org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.impl;
-import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
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.EmbeddedITContainer;
import org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.AdapterContainer;
import org.apache.shardingsphere.test.integration.framework.container.atomic.storage.StorageContainer;
-import org.testcontainers.lifecycle.Startable;
import javax.sql.DataSource;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.sql.SQLException;
-import java.util.Map;
import java.util.Objects;
-import java.util.Optional;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
/**
* ShardingSphere JDBC container.
*/
-public final class ShardingSphereJDBCContainer extends AdapterContainer {
+@RequiredArgsConstructor
+public final class ShardingSphereJDBCContainer implements EmbeddedITContainer, AdapterContainer {
- private final String scenario;
-
- private final AtomicBoolean isHealthy = new AtomicBoolean();
+ private final StorageContainer storageContainer;
- private Map<String, DataSource> dataSourceMap;
+ private final String scenario;
private final AtomicReference<DataSource> targetDataSourceProvider = new AtomicReference<>();
- public ShardingSphereJDBCContainer(final String scenario) {
- super("ShardingSphere-JDBC", "ShardingSphere-JDBC", true);
- this.scenario = scenario;
- }
-
@Override
public void start() {
- super.start();
- dataSourceMap = findStorageContainer().getActualDataSourceMap();
- isHealthy.set(true);
- }
-
- private StorageContainer findStorageContainer() {
- Optional<Startable> result = getDependencies().stream().filter(each -> each instanceof StorageContainer).findFirst();
- Preconditions.checkState(result.isPresent());
- return (StorageContainer) result.get();
}
@Override
@@ -76,7 +58,8 @@ public final class ShardingSphereJDBCContainer extends AdapterContainer {
if (Objects.isNull(dataSource)) {
if (Strings.isNullOrEmpty(serverLists)) {
try {
- targetDataSourceProvider.set(YamlShardingSphereDataSourceFactory.createDataSource(dataSourceMap, new File(EnvironmentPath.getRulesConfigurationFile(scenario))));
+ targetDataSourceProvider.set(
+ YamlShardingSphereDataSourceFactory.createDataSource(storageContainer.getActualDataSourceMap(), new File(EnvironmentPath.getRulesConfigurationFile(scenario))));
} catch (final SQLException | IOException ex) {
throw new RuntimeException(ex);
}
@@ -91,11 +74,6 @@ public final class ShardingSphereJDBCContainer extends AdapterContainer {
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
- public boolean isHealthy() {
- return isHealthy.get();
+ return YamlShardingSphereDataSourceFactory.createDataSource(storageContainer.getActualDataSourceMap(), YamlEngine.marshal(rootConfig).getBytes(StandardCharsets.UTF_8));
}
}
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 d0d3ad2..ee48029 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
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.infra.metadata.user.yaml.config.YamlUsersConfig
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.DockerITContainer;
import org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.AdapterContainer;
import org.testcontainers.containers.BindMode;
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
@@ -44,7 +45,7 @@ import java.util.concurrent.atomic.AtomicReference;
* ShardingSphere proxy container.
*/
@Slf4j
-public final class ShardingSphereProxyContainer extends AdapterContainer {
+public final class ShardingSphereProxyContainer extends DockerITContainer implements AdapterContainer {
private static final String AGENT_HOME_IN_CONTAINER = "/usr/local/shardingsphere-agent";
@@ -57,11 +58,7 @@ public final class ShardingSphereProxyContainer extends AdapterContainer {
private final AtomicReference<DataSource> targetDataSourceProvider = new AtomicReference<>();
public ShardingSphereProxyContainer(final DatabaseType databaseType, final String scenario) {
- this(null, databaseType, scenario);
- }
-
- public ShardingSphereProxyContainer(final String dockerName, final DatabaseType databaseType, final String scenario) {
- super(Objects.isNull(dockerName) ? "ShardingSphere-Proxy" : dockerName, "apache/shardingsphere-proxy-test");
+ super("ShardingSphere-Proxy", "apache/shardingsphere-proxy-test");
this.databaseType = databaseType;
this.scenario = scenario;
}
@@ -108,12 +105,6 @@ public final class ShardingSphereProxyContainer extends AdapterContainer {
}
@Override
- protected void execute() {
- log.info("Mapped port 3307: {}", getMappedPort(3307));
- log.info("Mapped port 3308: {}", getMappedPort(3308));
- }
-
- @Override
public DataSource getTargetDataSource(final String serverLists) {
DataSource dataSource = targetDataSourceProvider.get();
if (Objects.isNull(dataSource)) {
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/GovernanceContainer.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/GovernanceContainer.java
index f8438b4..cd81a2a 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/GovernanceContainer.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/GovernanceContainer.java
@@ -17,17 +17,15 @@
package org.apache.shardingsphere.test.integration.framework.container.atomic.governance;
-import org.apache.shardingsphere.test.integration.framework.container.atomic.AtomicContainer;
-import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
+import org.apache.shardingsphere.test.integration.framework.container.atomic.DockerITContainer;
/**
* Governance container.
*/
-public abstract class GovernanceContainer extends AtomicContainer {
+public abstract class GovernanceContainer extends DockerITContainer {
- public GovernanceContainer(final String name, final String dockerImageName, final boolean isFakedContainer) {
- super(name, dockerImageName, isFakedContainer);
- setWaitStrategy(new LogMessageWaitStrategy().withRegEx(".*PrepRequestProcessor \\(sid:[0-9]+\\) started.*"));
+ public GovernanceContainer(final String name, final String dockerImageName) {
+ super(name, dockerImageName);
}
/**
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/impl/ZookeeperContainer.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/impl/ZookeeperContainer.java
index 50333d2..51f4127 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/impl/ZookeeperContainer.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/governance/impl/ZookeeperContainer.java
@@ -26,7 +26,7 @@ import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
public final class ZookeeperContainer extends GovernanceContainer {
public ZookeeperContainer() {
- super("zookeeper", "zookeeper:3.6.2", false);
+ super("zookeeper", "zookeeper:3.6.2");
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/DockerStorageContainer.java
similarity index 81%
copy from shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainer.java
copy to shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/DockerStorageContainer.java
index 32e9826..e1b96fe 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/DockerStorageContainer.java
@@ -18,13 +18,14 @@
package org.apache.shardingsphere.test.integration.framework.container.atomic.storage;
import com.zaxxer.hikari.HikariDataSource;
+import lombok.AccessLevel;
import lombok.Getter;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import org.apache.shardingsphere.test.integration.env.database.DatabaseEnvironmentManager;
-import org.apache.shardingsphere.test.integration.framework.container.atomic.AtomicContainer;
+import org.apache.shardingsphere.test.integration.framework.container.atomic.DockerITContainer;
import org.testcontainers.containers.BindMode;
import javax.sql.DataSource;
@@ -33,23 +34,21 @@ import java.io.IOException;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.Optional;
/**
- * Storage container.
+ * Docker storage container.
*/
-public abstract class StorageContainer extends AtomicContainer {
+@Getter(AccessLevel.PROTECTED)
+public abstract class DockerStorageContainer extends DockerITContainer implements StorageContainer {
- @Getter
private final DatabaseType databaseType;
- @Getter
private final String scenario;
private Map<String, DataSource> actualDataSourceMap;
- public StorageContainer(final DatabaseType databaseType, final String dockerImageName, final boolean isFakedContainer, final String scenario) {
- super(databaseType.getName().toLowerCase(), dockerImageName, isFakedContainer);
+ public DockerStorageContainer(final DatabaseType databaseType, final String dockerImageName, final String scenario) {
+ super(databaseType.getName().toLowerCase(), dockerImageName);
this.databaseType = databaseType;
this.scenario = scenario;
}
@@ -59,11 +58,7 @@ public abstract class StorageContainer extends AtomicContainer {
withClasspathResourceMapping(EnvironmentPath.getInitSQLResourcePath(databaseType, scenario), "/docker-entrypoint-initdb.d/", BindMode.READ_ONLY);
}
- /**
- * Get actual data source map.
- *
- * @return actual data source map
- */
+ @Override
@SneakyThrows({IOException.class, JAXBException.class})
public synchronized Map<String, DataSource> getActualDataSourceMap() {
if (null == actualDataSourceMap) {
@@ -77,7 +72,7 @@ public abstract class StorageContainer extends AtomicContainer {
private DataSource createDataSource(final String dataSourceName) {
HikariDataSource result = new HikariDataSource();
result.setDriverClassName(DataSourceEnvironment.getDriverClassName(databaseType));
- result.setJdbcUrl(DataSourceEnvironment.getURL(databaseType, isFakedContainer() ? null : getHost(), getPort(), dataSourceName));
+ result.setJdbcUrl(DataSourceEnvironment.getURL(databaseType, getHost(), getPort(), dataSourceName));
result.setUsername(getUsername());
result.setPassword(getPassword());
result.setMaximumPoolSize(4);
@@ -85,14 +80,4 @@ public abstract class StorageContainer extends AtomicContainer {
getConnectionInitSQL().ifPresent(result::setConnectionInitSql);
return result;
}
-
- protected abstract String getUsername();
-
- protected abstract String getPassword();
-
- protected Optional<String> getConnectionInitSQL() {
- return Optional.empty();
- }
-
- protected abstract int getPort();
}
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/EmbeddedStorageContainer.java
similarity index 69%
copy from shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/StorageContainer.java
copy to shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/atomic/storage/EmbeddedStorageContainer.java
index 32e9826..8b78883 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/EmbeddedStorageContainer.java
@@ -18,14 +18,14 @@
package org.apache.shardingsphere.test.integration.framework.container.atomic.storage;
import com.zaxxer.hikari.HikariDataSource;
+import lombok.AccessLevel;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
-import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import org.apache.shardingsphere.test.integration.env.database.DatabaseEnvironmentManager;
-import org.apache.shardingsphere.test.integration.framework.container.atomic.AtomicContainer;
-import org.testcontainers.containers.BindMode;
+import org.apache.shardingsphere.test.integration.framework.container.atomic.EmbeddedITContainer;
import javax.sql.DataSource;
import javax.xml.bind.JAXBException;
@@ -33,37 +33,21 @@ import java.io.IOException;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.Optional;
/**
- * Storage container.
+ * Embedded storage container.
*/
-public abstract class StorageContainer extends AtomicContainer {
+@RequiredArgsConstructor
+@Getter(AccessLevel.PROTECTED)
+public abstract class EmbeddedStorageContainer implements EmbeddedITContainer, StorageContainer {
- @Getter
private final DatabaseType databaseType;
- @Getter
private final String scenario;
private Map<String, DataSource> actualDataSourceMap;
- 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;
- }
-
@Override
- protected void configure() {
- withClasspathResourceMapping(EnvironmentPath.getInitSQLResourcePath(databaseType, scenario), "/docker-entrypoint-initdb.d/", BindMode.READ_ONLY);
- }
-
- /**
- * Get actual data source map.
- *
- * @return actual data source map
- */
@SneakyThrows({IOException.class, JAXBException.class})
public synchronized Map<String, DataSource> getActualDataSourceMap() {
if (null == actualDataSourceMap) {
@@ -77,7 +61,7 @@ public abstract class StorageContainer extends AtomicContainer {
private DataSource createDataSource(final String dataSourceName) {
HikariDataSource result = new HikariDataSource();
result.setDriverClassName(DataSourceEnvironment.getDriverClassName(databaseType));
- result.setJdbcUrl(DataSourceEnvironment.getURL(databaseType, isFakedContainer() ? null : getHost(), getPort(), dataSourceName));
+ result.setJdbcUrl(DataSourceEnvironment.getURL(databaseType, null, getPort(), dataSourceName));
result.setUsername(getUsername());
result.setPassword(getPassword());
result.setMaximumPoolSize(4);
@@ -85,14 +69,4 @@ public abstract class StorageContainer extends AtomicContainer {
getConnectionInitSQL().ifPresent(result::setConnectionInitSql);
return result;
}
-
- protected abstract String getUsername();
-
- protected abstract String getPassword();
-
- protected Optional<String> getConnectionInitSQL() {
- return Optional.empty();
- }
-
- protected abstract int getPort();
}
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 32e9826..55d4999 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
@@ -17,82 +17,51 @@
package org.apache.shardingsphere.test.integration.framework.container.atomic.storage;
-import com.zaxxer.hikari.HikariDataSource;
-import lombok.Getter;
-import lombok.SneakyThrows;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
-import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
-import org.apache.shardingsphere.test.integration.env.database.DatabaseEnvironmentManager;
-import org.apache.shardingsphere.test.integration.framework.container.atomic.AtomicContainer;
-import org.testcontainers.containers.BindMode;
+import org.apache.shardingsphere.test.integration.framework.container.atomic.ITContainer;
import javax.sql.DataSource;
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
/**
* Storage container.
*/
-public abstract class StorageContainer extends AtomicContainer {
+public interface StorageContainer extends ITContainer {
- @Getter
- private final DatabaseType databaseType;
-
- @Getter
- private final String scenario;
+ /**
+ * Get username.
+ *
+ * @return username
+ */
+ String getUsername();
- private Map<String, DataSource> actualDataSourceMap;
+ /**
+ * Get password.
+ *
+ * @return password
+ */
+ String getPassword();
- 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;
+ /**
+ * Get connection init SQL.
+ *
+ * @return connection init SQL
+ */
+ default Optional<String> getConnectionInitSQL() {
+ return Optional.empty();
}
- @Override
- protected void configure() {
- withClasspathResourceMapping(EnvironmentPath.getInitSQLResourcePath(databaseType, scenario), "/docker-entrypoint-initdb.d/", BindMode.READ_ONLY);
- }
+ /**
+ * Get port.
+ *
+ * @return port
+ */
+ int getPort();
/**
* Get actual data source map.
*
* @return actual data source map
*/
- @SneakyThrows({IOException.class, JAXBException.class})
- public synchronized Map<String, DataSource> getActualDataSourceMap() {
- if (null == actualDataSourceMap) {
- Collection<String> dataSourceNames = DatabaseEnvironmentManager.getDatabaseNames(scenario);
- actualDataSourceMap = new LinkedHashMap<>(dataSourceNames.size(), 1);
- dataSourceNames.forEach(each -> actualDataSourceMap.put(each, createDataSource(each)));
- }
- return actualDataSourceMap;
- }
-
- private DataSource createDataSource(final String dataSourceName) {
- HikariDataSource result = new HikariDataSource();
- result.setDriverClassName(DataSourceEnvironment.getDriverClassName(databaseType));
- result.setJdbcUrl(DataSourceEnvironment.getURL(databaseType, isFakedContainer() ? null : getHost(), getPort(), dataSourceName));
- result.setUsername(getUsername());
- result.setPassword(getPassword());
- result.setMaximumPoolSize(4);
- result.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
- getConnectionInitSQL().ifPresent(result::setConnectionInitSql);
- return result;
- }
-
- protected abstract String getUsername();
-
- protected abstract String getPassword();
-
- protected Optional<String> getConnectionInitSQL() {
- return Optional.empty();
- }
-
- protected abstract int getPort();
+ Map<String, DataSource> getActualDataSourceMap();
}
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 609e821..d628bb0 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
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.test.integration.framework.container.atomic.st
import lombok.SneakyThrows;
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.container.atomic.storage.EmbeddedStorageContainer;
import org.h2.tools.RunScript;
import javax.sql.DataSource;
@@ -34,15 +34,15 @@ import java.util.Map.Entry;
/**
* H2 container.
*/
-public final class H2Container extends StorageContainer {
+public final class H2Container extends EmbeddedStorageContainer {
public H2Container(final String scenario) {
- super(DatabaseTypeRegistry.getActualDatabaseType("H2"), "h2:fake", true, scenario);
+ super(DatabaseTypeRegistry.getActualDatabaseType("H2"), scenario);
}
@Override
@SneakyThrows({IOException.class, SQLException.class})
- protected void execute() {
+ public void start() {
File initSQLFile = new File(EnvironmentPath.getInitSQLFile(getDatabaseType(), getScenario()));
for (Entry<String, DataSource> entry : getActualDataSourceMap().entrySet()) {
String dbInitSQLFileName = "init-" + entry.getKey() + ".sql";
@@ -65,22 +65,17 @@ public final class H2Container extends StorageContainer {
}
@Override
- public boolean isHealthy() {
- return true;
- }
-
- @Override
- protected String getUsername() {
+ public String getUsername() {
return "sa";
}
@Override
- protected String getPassword() {
+ public String getPassword() {
return "";
}
@Override
- protected int getPort() {
+ public int getPort() {
return 0;
}
}
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 86fe8fc..f862565 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
@@ -18,18 +18,18 @@
package org.apache.shardingsphere.test.integration.framework.container.atomic.storage.impl;
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.container.atomic.storage.DockerStorageContainer;
import java.util.Collections;
import java.util.Optional;
/**
- * MySQL Container.
+ * MySQL container.
*/
-public final class MySQLContainer extends StorageContainer {
+public final class MySQLContainer extends DockerStorageContainer {
public MySQLContainer(final String scenario) {
- super(DatabaseTypeRegistry.getActualDatabaseType("MySQL"), "mysql/mysql-server:5.7", false, scenario);
+ super(DatabaseTypeRegistry.getActualDatabaseType("MySQL"), "mysql/mysql-server:5.7", scenario);
}
@Override
@@ -40,22 +40,22 @@ public final class MySQLContainer extends StorageContainer {
}
@Override
- protected String getUsername() {
+ public String getUsername() {
return "root";
}
@Override
- protected String getPassword() {
+ public String getPassword() {
return "root";
}
@Override
- protected Optional<String> getConnectionInitSQL() {
+ public Optional<String> getConnectionInitSQL() {
return Optional.of("SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
}
@Override
- protected int getPort() {
+ public int getPort() {
return getMappedPort(3306);
}
}
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 4dd2a16..370d5a9 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
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.test.integration.framework.container.atomic.st
import lombok.SneakyThrows;
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.container.atomic.storage.DockerStorageContainer;
import org.postgresql.util.PSQLException;
import java.sql.Connection;
@@ -30,10 +30,10 @@ import java.sql.SQLException;
/**
* PostgreSQL container.
*/
-public final class PostgreSQLContainer extends StorageContainer {
+public final class PostgreSQLContainer extends DockerStorageContainer {
public PostgreSQLContainer(final String scenario) {
- super(DatabaseTypeRegistry.getActualDatabaseType("PostgreSQL"), "postgres:12.6", false, scenario);
+ super(DatabaseTypeRegistry.getActualDatabaseType("PostgreSQL"), "postgres:12.6", scenario);
}
@Override
@@ -61,17 +61,17 @@ public final class PostgreSQLContainer extends StorageContainer {
}
@Override
- protected String getUsername() {
+ public String getUsername() {
return "root";
}
@Override
- protected String getPassword() {
+ public String getPassword() {
return "root";
}
@Override
- protected int getPort() {
+ public int getPort() {
return getMappedPort(5432);
}
}
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainer.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainer.java
index 78665fc..60d1b4d 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainer.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainer.java
@@ -17,18 +17,15 @@
package org.apache.shardingsphere.test.integration.framework.container.compose;
+import org.testcontainers.lifecycle.Startable;
+
import javax.sql.DataSource;
import java.util.Map;
/**
* Composed container.
*/
-public interface ComposedContainer extends AutoCloseable {
-
- /**
- * Start composed container.
- */
- void start();
+public interface ComposedContainer extends Startable {
/**
* Get actual data source map.
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainerRegistry.java b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainerRegistry.java
index 01a5c9f..bae4cdd 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainerRegistry.java
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/compose/ComposedContainerRegistry.java
@@ -17,10 +17,10 @@
package org.apache.shardingsphere.test.integration.framework.container.compose;
-import lombok.SneakyThrows;
import org.apache.shardingsphere.test.integration.framework.container.compose.mode.ClusterComposedContainer;
import org.apache.shardingsphere.test.integration.framework.container.compose.mode.MemoryComposedContainer;
import org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
+import org.testcontainers.lifecycle.Startable;
import java.util.HashMap;
import java.util.Map;
@@ -52,21 +52,18 @@ public final class ComposedContainerRegistry implements AutoCloseable {
}
}
+ private String generateKey(final String testSuiteName, final ParameterizedArray parameterizedArray) {
+ return String.join("-", testSuiteName, parameterizedArray.getScenario(), parameterizedArray.getAdapter(), parameterizedArray.getDatabaseType().getName());
+ }
+
private ComposedContainer createComposedContainer(final String testSuiteName, final ParameterizedArray parameterizedArray) {
// TODO fix sharding_governance
return "sharding_governance".equals(parameterizedArray.getScenario())
? new ClusterComposedContainer(testSuiteName, parameterizedArray) : new MemoryComposedContainer(testSuiteName, parameterizedArray);
}
- private String generateKey(final String testSuiteName, final ParameterizedArray parameterizedArray) {
- return String.join("-", testSuiteName, parameterizedArray.getScenario(), parameterizedArray.getAdapter(), parameterizedArray.getDatabaseType().getName());
- }
-
@Override
- @SneakyThrows
public void close() {
- for (ComposedContainer each : composedContainers.values()) {
- each.close();
- }
+ composedContainers.values().forEach(Startable::close);
}
}
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 f32f138..83b0356 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
@@ -17,7 +17,8 @@
package org.apache.shardingsphere.test.integration.framework.container.compose.mode;
-import org.apache.shardingsphere.test.integration.framework.container.atomic.AtomicContainers;
+import org.apache.shardingsphere.test.integration.framework.container.atomic.DockerITContainer;
+import org.apache.shardingsphere.test.integration.framework.container.atomic.ITContainers;
import org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.AdapterContainer;
import org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.AdapterContainerFactory;
import org.apache.shardingsphere.test.integration.framework.container.atomic.governance.GovernanceContainer;
@@ -35,7 +36,7 @@ import java.util.Map;
*/
public final class ClusterComposedContainer implements ComposedContainer {
- private final AtomicContainers containers;
+ private final ITContainers containers;
private final GovernanceContainer governanceContainer;
@@ -44,14 +45,16 @@ public final class ClusterComposedContainer implements ComposedContainer {
private final AdapterContainer adapterContainer;
public ClusterComposedContainer(final String testSuiteName, final ParameterizedArray parameterizedArray) {
- containers = new AtomicContainers(parameterizedArray.getScenario());
+ containers = new ITContainers(parameterizedArray.getScenario());
// TODO support other types of governance
governanceContainer = containers.registerContainer(testSuiteName, GovernanceContainerFactory.newInstance("ZooKeeper"), "zk");
- storageContainer = containers.registerContainer(testSuiteName,
- StorageContainerFactory.newInstance(parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()), parameterizedArray.getDatabaseType().getName());
- adapterContainer = containers.registerContainer(testSuiteName,
- AdapterContainerFactory.newInstance(parameterizedArray.getAdapter(), parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()), parameterizedArray.getAdapter());
- adapterContainer.dependsOn(governanceContainer, storageContainer);
+ storageContainer = containers.registerContainer(testSuiteName, StorageContainerFactory.newInstance(
+ parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()), parameterizedArray.getDatabaseType().getName());
+ adapterContainer = containers.registerContainer(testSuiteName, AdapterContainerFactory.newInstance(
+ parameterizedArray.getAdapter(), parameterizedArray.getDatabaseType(), storageContainer, parameterizedArray.getScenario()), parameterizedArray.getAdapter());
+ if (adapterContainer instanceof DockerITContainer) {
+ ((DockerITContainer) adapterContainer).dependsOn(governanceContainer, storageContainer);
+ }
}
@Override
@@ -70,7 +73,7 @@ public final class ClusterComposedContainer implements ComposedContainer {
}
@Override
- public void close() {
- containers.close();
+ public void stop() {
+ containers.stop();
}
}
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 de74e58..7298c61 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
@@ -17,7 +17,8 @@
package org.apache.shardingsphere.test.integration.framework.container.compose.mode;
-import org.apache.shardingsphere.test.integration.framework.container.atomic.AtomicContainers;
+import org.apache.shardingsphere.test.integration.framework.container.atomic.DockerITContainer;
+import org.apache.shardingsphere.test.integration.framework.container.atomic.ITContainers;
import org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.AdapterContainer;
import org.apache.shardingsphere.test.integration.framework.container.atomic.adapter.AdapterContainerFactory;
import org.apache.shardingsphere.test.integration.framework.container.atomic.storage.StorageContainer;
@@ -33,19 +34,21 @@ import java.util.Map;
*/
public final class MemoryComposedContainer implements ComposedContainer {
- private final AtomicContainers containers;
+ private final ITContainers containers;
private final StorageContainer storageContainer;
private final AdapterContainer adapterContainer;
public MemoryComposedContainer(final String testSuiteName, final ParameterizedArray parameterizedArray) {
- containers = new AtomicContainers(parameterizedArray.getScenario());
- storageContainer = containers.registerContainer(testSuiteName,
- StorageContainerFactory.newInstance(parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()), parameterizedArray.getDatabaseType().getName());
- adapterContainer = containers.registerContainer(testSuiteName,
- AdapterContainerFactory.newInstance(parameterizedArray.getAdapter(), parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()), parameterizedArray.getAdapter());
- adapterContainer.dependsOn(storageContainer);
+ containers = new ITContainers(parameterizedArray.getScenario());
+ storageContainer = containers.registerContainer(testSuiteName, StorageContainerFactory.newInstance(
+ parameterizedArray.getDatabaseType(), parameterizedArray.getScenario()), parameterizedArray.getDatabaseType().getName());
+ adapterContainer = containers.registerContainer(testSuiteName, AdapterContainerFactory.newInstance(
+ parameterizedArray.getAdapter(), parameterizedArray.getDatabaseType(), storageContainer, parameterizedArray.getScenario()), parameterizedArray.getAdapter());
+ if (adapterContainer instanceof DockerITContainer) {
+ ((DockerITContainer) adapterContainer).dependsOn(storageContainer);
+ }
}
@Override
@@ -64,7 +67,7 @@ public final class MemoryComposedContainer implements ComposedContainer {
}
@Override
- public void close() {
- containers.close();
+ public void stop() {
+ containers.stop();
}
}