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 @@ -117,7 +117,7 @@ private void createProxyEnvironment(final DockerITContainer agentPluginContainer
ShardingSphereProxyClusterContainer proxyContainer = new ShardingSphereProxyClusterContainer(databaseType, getAdaptorContainerConfiguration());
proxyContainer.withLogConsumer(testConfig.isLogEnabled() ? this::collectLogs : null);
DockerStorageContainer storageContainer = new DockerStorageContainer(
databaseType, imageConfig.getMysqlImage(), DatabaseTypedSPILoader.getService(StorageContainerConfigurationOption.class, databaseType), null);
imageConfig.getMysqlImage(), DatabaseTypedSPILoader.getService(StorageContainerConfigurationOption.class, databaseType), null);
proxyContainer.dependsOn(storageContainer);
containers.registerContainer(storageContainer);
GovernanceContainer governanceContainer = GovernanceContainerFactory.newInstance("ZooKeeper");
Expand Down Expand Up @@ -149,7 +149,7 @@ private AdaptorContainerConfiguration getAdaptorContainerConfiguration() {
private void createJDBCEnvironment(final DockerITContainer agentPluginContainer) {
containers = new ITContainers();
DockerStorageContainer storageContainer = new DockerStorageContainer(
databaseType, imageConfig.getMysqlImage(), DatabaseTypedSPILoader.getService(StorageContainerConfigurationOption.class, databaseType), null);
imageConfig.getMysqlImage(), DatabaseTypedSPILoader.getService(StorageContainerConfigurationOption.class, 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 @@ -61,7 +61,7 @@ public static StorageContainer newInstance(final DatabaseType databaseType, fina
case "PostgreSQL":
case "openGauss":
case "MariaDB":
return new DockerStorageContainer(databaseType, storageContainerImage, option, scenario);
return new DockerStorageContainer(storageContainerImage, option, scenario);
case "Hive":
return new HiveContainer(storageContainerImage, option, scenario);
case "H2":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
package org.apache.shardingsphere.test.e2e.env.container.atomic.storage.mount;

import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.option.StorageContainerConfigurationOption;

import java.io.File;
Expand All @@ -34,8 +33,6 @@ public final class MountConfigurationResourceGenerator {

private final StorageContainerConfigurationOption option;

private final DatabaseType databaseType;

/**
* Generate mount configuration resource map.
*
Expand All @@ -49,8 +46,8 @@ public Map<String, String> generate(final int majorVersion, final String scenari
for (String each : mountedConfigResources) {
String fileName = new File(each).getName();
String configFile = option.getSupportedMajorVersions().isEmpty()
? String.format("container/%s/cnf/%s", databaseType.getType().toLowerCase(), fileName)
: String.format("container/%s/cnf/%d/%s", databaseType.getType().toLowerCase(), majorVersion, fileName);
? String.format("container/%s/cnf/%s", option.getDatabaseType().toLowerCase(), fileName)
: String.format("container/%s/cnf/%d/%s", option.getDatabaseType().toLowerCase(), majorVersion, fileName);
result.put(getToBeMountedConfigurationFile(configFile, scenario), each);
}
return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
package org.apache.shardingsphere.test.e2e.env.container.atomic.storage.mount;

import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.option.StorageContainerConfigurationOption;
import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
Expand Down Expand Up @@ -47,8 +46,6 @@ public final class MountSQLResourceGenerator {

private final StorageContainerConfigurationOption option;

private final DatabaseType databaseType;

/**
* Generate mount SQL resource map.
*
Expand All @@ -59,38 +56,38 @@ public final class MountSQLResourceGenerator {
public Map<String, String> generate(final int majorVersion, final String scenario) {
Collection<String> toBeMountedSQLFiles = new LinkedList<>();
for (String each : TO_BE_MOUNTED_COMMON_SQL_FILES) {
findToBeMountedCommonSQLFile(databaseType, each).ifPresent(optional -> toBeMountedSQLFiles.add("/" + optional));
findToBeMountedCommonSQLFile(each).ifPresent(optional -> toBeMountedSQLFiles.add("/" + optional));
}
String toBeMountedStandardEnvSQLFilePath = String.format("env/container/%s/init-sql/%s", databaseType.getType().toLowerCase(), TO_BE_MOUNTED_STANDARD_ENV_SQL_FILE);
String toBeMountedStandardEnvSQLFilePath = String.format("env/container/%s/init-sql/%s", option.getDatabaseType().toLowerCase(), TO_BE_MOUNTED_STANDARD_ENV_SQL_FILE);
if (null != Thread.currentThread().getContextClassLoader().getResource(toBeMountedStandardEnvSQLFilePath)) {
toBeMountedSQLFiles.add("/" + toBeMountedStandardEnvSQLFilePath);
}
for (String each : option.getAdditionalEnvMountedSQLResources(majorVersion)) {
getToBeMountedAdditionalEnvSQLFile(databaseType, each).ifPresent(optional -> toBeMountedSQLFiles.add("/" + optional));
getToBeMountedAdditionalEnvSQLFile(each).ifPresent(optional -> toBeMountedSQLFiles.add("/" + optional));
}
for (String each : getToBeMountedScenarioSQLFiles(databaseType, scenario)) {
for (String each : getToBeMountedScenarioSQLFiles(scenario)) {
toBeMountedSQLFiles.add("/" + each);
}
return toBeMountedSQLFiles.stream().collect(Collectors.toMap(each -> each, each -> "/docker-entrypoint-initdb.d/" + new File(each).getName()));
}

private Optional<String> findToBeMountedCommonSQLFile(final DatabaseType databaseType, final String toBeMountedSQLFile) {
String toBeMountedFilePath = String.format("container/%s/init-sql/%s", databaseType.getType().toLowerCase(), toBeMountedSQLFile);
private Optional<String> findToBeMountedCommonSQLFile(final String toBeMountedSQLFile) {
String toBeMountedFilePath = String.format("container/%s/init-sql/%s", option.getDatabaseType().toLowerCase(), toBeMountedSQLFile);
return null == Thread.currentThread().getContextClassLoader().getResource(toBeMountedFilePath) ? Optional.empty() : Optional.of(toBeMountedFilePath);
}

private Optional<String> getToBeMountedAdditionalEnvSQLFile(final DatabaseType databaseType, final String sqlFile) {
String toBeMountedFilePath = String.format("env/container/%s/init-sql/%s", databaseType.getType().toLowerCase(), sqlFile);
private Optional<String> getToBeMountedAdditionalEnvSQLFile(final String sqlFile) {
String toBeMountedFilePath = String.format("env/container/%s/init-sql/%s", option.getDatabaseType().toLowerCase(), sqlFile);
return null == Thread.currentThread().getContextClassLoader().getResource(toBeMountedFilePath) ? Optional.empty() : Optional.of(toBeMountedFilePath);
}

private Collection<String> getToBeMountedScenarioSQLFiles(final DatabaseType databaseType, final String scenario) {
private Collection<String> getToBeMountedScenarioSQLFiles(final String scenario) {
Collection<String> result = new LinkedList<>();
String actualScenarioFile = new ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, databaseType) + "/" + TO_BE_MOUNTED_ACTUAL_SCENARIO_SQL_FILE;
String actualScenarioFile = new ScenarioDataPath(scenario).getInitSQLResourcePath(Type.ACTUAL, option.getType()) + "/" + TO_BE_MOUNTED_ACTUAL_SCENARIO_SQL_FILE;
if (null != Thread.currentThread().getContextClassLoader().getResource(actualScenarioFile)) {
result.add(actualScenarioFile);
}
String expectedScenarioFile = new ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, databaseType) + "/" + TO_BE_MOUNTED_EXPECTED_SCENARIO_SQL_FILE;
String expectedScenarioFile = new ScenarioDataPath(scenario).getInitSQLResourcePath(Type.EXPECTED, option.getType()) + "/" + TO_BE_MOUNTED_EXPECTED_SCENARIO_SQL_FILE;
if (null != Thread.currentThread().getContextClassLoader().getResource(expectedScenarioFile)) {
result.add(expectedScenarioFile);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@
*/
public class DockerStorageContainer extends DockerITContainer implements StorageContainer {

private final DatabaseType databaseType;

private final StorageContainerConfigurationOption option;

private final String scenario;
Expand All @@ -66,25 +64,24 @@ 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 StorageContainerConfigurationOption option, final String scenario) {
super(databaseType.getType().toLowerCase(), getContainerImage(containerImage, option, databaseType));
this.databaseType = databaseType;
public DockerStorageContainer(final String containerImage, final StorageContainerConfigurationOption option, final String scenario) {
super(option.getDatabaseType().toLowerCase(), getContainerImage(containerImage, option));
this.option = option;
this.scenario = scenario;
majorVersion = new DockerImageVersion(getContainerImage(containerImage, option, databaseType)).getMajorVersion();
majorVersion = new DockerImageVersion(getContainerImage(containerImage, option)).getMajorVersion();
}

private static String getContainerImage(final String containerImage, final StorageContainerConfigurationOption option, final DatabaseType databaseType) {
Preconditions.checkNotNull(option, "Can not support database type `%s`", databaseType.getType());
private static String getContainerImage(final String containerImage, final StorageContainerConfigurationOption option) {
Preconditions.checkNotNull(option, "Can not support database type `%s`", option.getDatabaseType());
return Strings.isNullOrEmpty(containerImage) ? option.getDefaultImageName() : containerImage;
}

@Override
protected final void configure() {
setCommands();
addEnvironments();
mapResources(new MountConfigurationResourceGenerator(option, databaseType).generate(majorVersion, scenario));
mapResources(new MountSQLResourceGenerator(option, databaseType).generate(majorVersion, scenario));
mapResources(new MountConfigurationResourceGenerator(option).generate(majorVersion, scenario));
mapResources(new MountSQLResourceGenerator(option).generate(majorVersion, scenario));
setPrivilegedMode();
withExposedPorts(getExposedPort());
setWaitStrategy(new JdbcConnectionWaitStrategy(() -> DriverManager.getConnection(getURL(), StorageContainerConstants.CHECK_READY_USER, StorageContainerConstants.CHECK_READY_PASSWORD)));
Expand All @@ -110,8 +107,8 @@ private void setPrivilegedMode() {

private String getURL() {
return option.getDefaultDatabaseName(majorVersion)
.map(optional -> DataSourceEnvironment.getURL(databaseType, "localhost", getFirstMappedPort(), optional))
.orElseGet(() -> DataSourceEnvironment.getURL(databaseType, "localhost", getFirstMappedPort()));
.map(optional -> DataSourceEnvironment.getURL(option.getType(), "localhost", getFirstMappedPort(), optional))
.orElseGet(() -> DataSourceEnvironment.getURL(option.getType(), "localhost", getFirstMappedPort()));
}

@Override
Expand All @@ -121,11 +118,11 @@ protected void postStart() {
}

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

private Collection<String> getDataSourceNames(final Map<String, DatabaseType> dataSourceNameAndTypeMap) {
return dataSourceNameAndTypeMap.entrySet().stream().filter(entry -> entry.getValue() == databaseType).map(Entry::getKey).collect(Collectors.toList());
return dataSourceNameAndTypeMap.entrySet().stream().filter(entry -> entry.getValue() == option.getType()).map(Entry::getKey).collect(Collectors.toList());
}

private Map<String, DataSource> createAccessDataSources(final Collection<String> dataSourceNames) {
Expand All @@ -149,7 +146,8 @@ 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) ? option.getDefaultDatabaseName(majorVersion).orElse("") : dataSourceName);
return DataSourceEnvironment.getURL(
option.getType(), getHost(), getMappedPort(), Strings.isNullOrEmpty(dataSourceName) ? option.getDefaultDatabaseName(majorVersion).orElse("") : dataSourceName);
}

/**
Expand All @@ -172,7 +170,7 @@ public final int getMappedPort() {

@Override
public final String getAbbreviation() {
return databaseType.getType().toLowerCase();
return option.getDatabaseType().toLowerCase();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
package org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.impl;

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.option.StorageContainerConfigurationOption;
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.DockerStorageContainer;

Expand All @@ -32,7 +30,7 @@
public final class HiveContainer extends DockerStorageContainer {

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

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ private void initDatabase() {
DataSource dataSource = StorageContainerUtils.generateDataSource(
DataSourceEnvironment.getURL(databaseType, E2ETestEnvironment.getInstance().getNativeStorageHost(), E2ETestEnvironment.getInstance().getNativeStoragePort()),
E2ETestEnvironment.getInstance().getNativeStorageUsername(), E2ETestEnvironment.getInstance().getNativeStoragePassword());
new MountSQLResourceGenerator(option, databaseType).generate(0, scenario).keySet().forEach(each -> SQLScriptUtils.execute(dataSource, each));
new MountSQLResourceGenerator(option).generate(0, scenario).keySet().forEach(each -> SQLScriptUtils.execute(dataSource, each));
}

private Map<String, DataSource> createDataSourceMap(final Type type) {
Expand Down