Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import org.apache.shardingsphere.test.e2e.env.container.atomic.enums.AdapterType;
import org.apache.shardingsphere.test.e2e.env.container.atomic.governance.GovernanceContainer;
import org.apache.shardingsphere.test.e2e.env.container.atomic.governance.GovernanceContainerFactory;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.option.StorageContainerConfigurationOptionFactory;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.DockerStorageContainer;
import org.awaitility.Awaitility;
Expand Down Expand Up @@ -116,8 +115,7 @@ private void createProxyEnvironment(final DockerITContainer agentPluginContainer
containers = new ITContainers();
ShardingSphereProxyClusterContainer proxyContainer = new ShardingSphereProxyClusterContainer(databaseType, getAdaptorContainerConfiguration());
proxyContainer.withLogConsumer(testConfig.isLogEnabled() ? this::collectLogs : null);
DockerStorageContainer storageContainer = new DockerStorageContainer(
databaseType, imageConfig.getMysqlImage(), new StorageContainerConfiguration(null, StorageContainerConfigurationOptionFactory.newInstance(databaseType)));
DockerStorageContainer storageContainer = new DockerStorageContainer(databaseType, imageConfig.getMysqlImage(), StorageContainerConfigurationOptionFactory.newInstance(databaseType), null);
proxyContainer.dependsOn(storageContainer);
containers.registerContainer(storageContainer);
GovernanceContainer governanceContainer = GovernanceContainerFactory.newInstance("ZooKeeper");
Expand Down Expand Up @@ -148,8 +146,7 @@ private AdaptorContainerConfiguration getAdaptorContainerConfiguration() {

private void createJDBCEnvironment(final DockerITContainer agentPluginContainer) {
containers = new ITContainers();
DockerStorageContainer storageContainer = new DockerStorageContainer(
databaseType, imageConfig.getMysqlImage(), new StorageContainerConfiguration(null, StorageContainerConfigurationOptionFactory.newInstance(databaseType)));
DockerStorageContainer storageContainer = new DockerStorageContainer(databaseType, imageConfig.getMysqlImage(), StorageContainerConfigurationOptionFactory.newInstance(databaseType), null);
ShardingSphereJdbcAgentContainer jdbcAgentContainer = new ShardingSphereJdbcAgentContainer(
imageConfig.getJdbcProjectImage(), testConfig.getPluginType(), testConfig.isLogEnabled() ? this::collectLogs : null);
jdbcAgentContainer.dependsOn(storageContainer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,11 @@ public static StorageContainer newInstance(final DatabaseType databaseType, fina
case "PostgreSQL":
case "openGauss":
case "MariaDB":
return new DockerStorageContainer(databaseType, storageContainerImage, storageContainerConfig);
return new DockerStorageContainer(databaseType, storageContainerImage, storageContainerConfig.getConfigurationOption(), storageContainerConfig.getScenario());
case "Hive":
return new HiveContainer(storageContainerImage, storageContainerConfig);
return new HiveContainer(storageContainerImage, storageContainerConfig.getConfigurationOption(), storageContainerConfig.getScenario());
case "H2":
return new H2Container(storageContainerConfig);
return new H2Container(storageContainerConfig.getScenario());
default:
throw new RuntimeException(String.format("Database `%s` is unknown.", databaseType.getType()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
import org.apache.shardingsphere.test.e2e.env.container.atomic.DockerITContainer;
import org.apache.shardingsphere.test.e2e.env.container.atomic.constants.StorageContainerConstants;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.StorageContainer;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.mount.MountConfigurationResourceGenerator;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.mount.MountSQLResourceGenerator;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.option.StorageContainerConfigurationOption;
import org.apache.shardingsphere.test.e2e.env.container.atomic.util.DockerImageVersion;
import org.apache.shardingsphere.test.e2e.env.container.atomic.util.StorageContainerUtils;
import org.apache.shardingsphere.test.e2e.env.container.wait.JdbcConnectionWaitStrategy;
Expand All @@ -52,7 +52,9 @@ public class DockerStorageContainer extends DockerITContainer implements Storage

private final DatabaseType databaseType;

private final StorageContainerConfiguration storageContainerConfig;
private final StorageContainerConfigurationOption option;

private final String scenario;

@Getter
private final int majorVersion;
Expand All @@ -63,48 +65,49 @@ public class DockerStorageContainer extends DockerITContainer implements Storage
@Getter
private final Map<String, DataSource> expectedDataSourceMap = new LinkedHashMap<>();

public DockerStorageContainer(final DatabaseType databaseType, final String containerImage, final StorageContainerConfiguration storageContainerConfig) {
super(databaseType.getType().toLowerCase(), getContainerImage(containerImage, storageContainerConfig));
public DockerStorageContainer(final DatabaseType databaseType, final String containerImage, final StorageContainerConfigurationOption option, final String scenario) {
super(databaseType.getType().toLowerCase(), getContainerImage(containerImage, option));
this.databaseType = databaseType;
this.storageContainerConfig = storageContainerConfig;
majorVersion = new DockerImageVersion(getContainerImage(containerImage, storageContainerConfig)).getMajorVersion();
this.option = option;
this.scenario = scenario;
majorVersion = new DockerImageVersion(getContainerImage(containerImage, option)).getMajorVersion();
}

private static String getContainerImage(final String containerImage, final StorageContainerConfiguration storageContainerConfig) {
return Strings.isNullOrEmpty(containerImage) ? storageContainerConfig.getConfigurationOption().getDefaultImageName() : containerImage;
private static String getContainerImage(final String containerImage, final StorageContainerConfigurationOption option) {
return Strings.isNullOrEmpty(containerImage) ? option.getDefaultImageName() : containerImage;
}

@Override
protected final void configure() {
setCommands();
addEnvironments();
mapResources(new MountConfigurationResourceGenerator(storageContainerConfig.getConfigurationOption(), databaseType).generate(majorVersion, storageContainerConfig.getScenario()));
mapResources(new MountSQLResourceGenerator(storageContainerConfig.getConfigurationOption(), databaseType).generate(majorVersion, storageContainerConfig.getScenario()));
mapResources(new MountConfigurationResourceGenerator(option, databaseType).generate(majorVersion, scenario));
mapResources(new MountSQLResourceGenerator(option, databaseType).generate(majorVersion, scenario));
setPrivilegedMode();
withExposedPorts(getExposedPort());
setWaitStrategy(new JdbcConnectionWaitStrategy(() -> DriverManager.getConnection(getURL(), StorageContainerConstants.CHECK_READY_USER, StorageContainerConstants.CHECK_READY_PASSWORD)));
withStartupTimeout(Duration.ofSeconds(storageContainerConfig.getConfigurationOption().getStartupTimeoutSeconds()));
withStartupTimeout(Duration.ofSeconds(option.getStartupTimeoutSeconds()));
}

private void setCommands() {
String command = storageContainerConfig.getConfigurationOption().getCommand();
String command = option.getCommand();
if (!Strings.isNullOrEmpty(command)) {
setCommand(command);
}
}

private void addEnvironments() {
storageContainerConfig.getConfigurationOption().getEnvironments().forEach(this::addEnv);
option.getEnvironments().forEach(this::addEnv);
}

private void setPrivilegedMode() {
if (storageContainerConfig.getConfigurationOption().withPrivilegedMode()) {
if (option.withPrivilegedMode()) {
withPrivilegedMode(true);
}
}

private String getURL() {
return storageContainerConfig.getConfigurationOption().getDefaultDatabaseName(majorVersion)
return option.getDefaultDatabaseName(majorVersion)
.map(optional -> DataSourceEnvironment.getURL(databaseType, "localhost", getFirstMappedPort(), optional))
.orElseGet(() -> DataSourceEnvironment.getURL(databaseType, "localhost", getFirstMappedPort()));
}
Expand All @@ -116,7 +119,7 @@ protected void postStart() {
}

private Map<String, DatabaseType> getDataSourceNameAndTypeMap(final Type type) {
return null == storageContainerConfig.getScenario() ? Collections.emptyMap() : DatabaseEnvironmentManager.getDatabaseTypes(storageContainerConfig.getScenario(), databaseType, type);
return null == scenario ? Collections.emptyMap() : DatabaseEnvironmentManager.getDatabaseTypes(scenario, databaseType, type);
}

private Collection<String> getDataSourceNames(final Map<String, DatabaseType> dataSourceNameAndTypeMap) {
Expand Down Expand Up @@ -144,8 +147,7 @@ public final DataSource createAccessDataSource(final String dataSourceName) {
* @return JDBC URL
*/
public final String getJdbcUrl(final String dataSourceName) {
return DataSourceEnvironment.getURL(databaseType, getHost(), getMappedPort(),
Strings.isNullOrEmpty(dataSourceName) ? storageContainerConfig.getConfigurationOption().getDefaultDatabaseName(majorVersion).orElse("") : dataSourceName);
return DataSourceEnvironment.getURL(databaseType, getHost(), getMappedPort(), Strings.isNullOrEmpty(dataSourceName) ? option.getDefaultDatabaseName(majorVersion).orElse("") : dataSourceName);
}

/**
Expand All @@ -154,7 +156,7 @@ public final String getJdbcUrl(final String dataSourceName) {
* @return exposed database container port
*/
public final int getExposedPort() {
return storageContainerConfig.getConfigurationOption().getPort();
return option.getPort();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.option.StorageContainerConfigurationOption;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.DockerStorageContainer;

import java.io.IOException;
Expand All @@ -31,8 +31,8 @@
@Slf4j
public final class HiveContainer extends DockerStorageContainer {

public HiveContainer(final String containerImage, final StorageContainerConfiguration storageContainerConfig) {
super(TypedSPILoader.getService(DatabaseType.class, "Hive"), containerImage, storageContainerConfig);
public HiveContainer(final String containerImage, final StorageContainerConfigurationOption option, final String scenario) {
super(TypedSPILoader.getService(DatabaseType.class, "Hive"), containerImage, option, scenario);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import lombok.SneakyThrows;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.embedded.EmbeddedStorageContainer;
import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
Expand All @@ -41,9 +40,9 @@ public final class H2Container extends EmbeddedStorageContainer {

private final ScenarioDataPath scenarioDataPath;

public H2Container(final StorageContainerConfiguration storageContainerConfig) {
super(TypedSPILoader.getService(DatabaseType.class, "H2"), storageContainerConfig.getScenario());
scenarioDataPath = new ScenarioDataPath(storageContainerConfig.getScenario());
public H2Container(final String scenario) {
super(TypedSPILoader.getService(DatabaseType.class, "H2"), scenario);
scenarioDataPath = new ScenarioDataPath(scenario);
}

@Override
Expand Down