diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java index 9dd7bf90a4e9f..bb9cddb7da92a 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java @@ -23,7 +23,7 @@ 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; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.impl.HiveContainer; -import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.embedded.impl.H2Container; +import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.embedded.EmbeddedStorageContainer; import org.apache.shardingsphere.test.e2e.env.runtime.E2ETestEnvironment; /** @@ -65,7 +65,7 @@ public static StorageContainer newInstance(final DatabaseType databaseType, fina case "Hive": return new HiveContainer(storageContainerImage, option, scenario); case "H2": - return new H2Container(scenario); + return new EmbeddedStorageContainer(databaseType, scenario); default: throw new RuntimeException(String.format("Database `%s` is unknown.", databaseType.getType())); } diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/EmbeddedStorageContainer.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/EmbeddedStorageContainer.java index af0388b450d2f..9bf1097c0713d 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/EmbeddedStorageContainer.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/EmbeddedStorageContainer.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.embedded; import lombok.Getter; +import lombok.SneakyThrows; import org.apache.shardingsphere.database.connector.core.type.DatabaseType; import org.apache.shardingsphere.test.e2e.env.container.atomic.EmbeddedITContainer; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.StorageContainer; @@ -25,33 +26,44 @@ import org.apache.shardingsphere.test.e2e.env.runtime.DataSourceEnvironment; import org.apache.shardingsphere.test.e2e.env.runtime.E2ETestEnvironment; import org.apache.shardingsphere.test.e2e.env.runtime.scenario.database.DatabaseEnvironmentManager; +import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath; import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type; +import org.h2.tools.RunScript; import javax.sql.DataSource; +import java.io.FileReader; +import java.io.IOException; +import java.sql.Connection; +import java.sql.SQLException; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.stream.Collectors; /** * Embedded storage container. */ -@Getter -public abstract class EmbeddedStorageContainer implements EmbeddedITContainer, StorageContainer { +public final class EmbeddedStorageContainer implements EmbeddedITContainer, StorageContainer { private final DatabaseType databaseType; private final String scenario; + private final ScenarioDataPath scenarioDataPath; + + @Getter private final Map actualDataSourceMap; + @Getter private final Map expectedDataSourceMap; - protected EmbeddedStorageContainer(final DatabaseType databaseType, final String scenario) { + public EmbeddedStorageContainer(final DatabaseType databaseType, final String scenario) { this.databaseType = databaseType; this.scenario = scenario; + scenarioDataPath = new ScenarioDataPath(scenario); actualDataSourceMap = createDataSourceMap(Type.ACTUAL); expectedDataSourceMap = createDataSourceMap(Type.EXPECTED); } @@ -67,7 +79,38 @@ private Map createDataSourceMap(final Type type) { } @Override - public final String getAbbreviation() { + @SneakyThrows({IOException.class, SQLException.class}) + public void start() { + fillActualDataSet(); + fillExpectedDataSet(); + } + + private void fillActualDataSet() throws SQLException, IOException { + for (Entry entry : getActualDataSourceMap().entrySet()) { + executeInitSQL(entry.getValue(), scenarioDataPath.getInitSQLFile(Type.ACTUAL, databaseType)); + Optional dbInitSQLFile = scenarioDataPath.findActualDatabaseInitSQLFile(entry.getKey(), databaseType); + if (dbInitSQLFile.isPresent()) { + executeInitSQL(entry.getValue(), dbInitSQLFile.get()); + } + } + } + + private void fillExpectedDataSet() throws SQLException, IOException { + for (Entry entry : getExpectedDataSourceMap().entrySet()) { + executeInitSQL(entry.getValue(), scenarioDataPath.getInitSQLFile(Type.EXPECTED, databaseType)); + } + } + + private void executeInitSQL(final DataSource dataSource, final String initSQLFile) throws SQLException, IOException { + try ( + Connection connection = dataSource.getConnection(); + FileReader reader = new FileReader(initSQLFile)) { + RunScript.execute(connection, reader); + } + } + + @Override + public String getAbbreviation() { return databaseType.getType().toLowerCase(); } diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/impl/H2Container.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/impl/H2Container.java deleted file mode 100644 index 1eae01bc71d72..0000000000000 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/impl/H2Container.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.embedded.impl; - -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.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; -import org.h2.tools.RunScript; - -import javax.sql.DataSource; -import java.io.FileReader; -import java.io.IOException; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.Map.Entry; -import java.util.Optional; - -/** - * H2 container. - */ -public final class H2Container extends EmbeddedStorageContainer { - - private final ScenarioDataPath scenarioDataPath; - - public H2Container(final String scenario) { - super(TypedSPILoader.getService(DatabaseType.class, "H2"), scenario); - scenarioDataPath = new ScenarioDataPath(scenario); - } - - @Override - @SneakyThrows({IOException.class, SQLException.class}) - public void start() { - fillActualDataSet(); - fillExpectedDataSet(); - } - - private void fillActualDataSet() throws SQLException, IOException { - for (Entry entry : getActualDataSourceMap().entrySet()) { - executeInitSQL(entry.getValue(), scenarioDataPath.getInitSQLFile(Type.ACTUAL, getDatabaseType())); - Optional dbInitSQLFile = scenarioDataPath.findActualDatabaseInitSQLFile(entry.getKey(), getDatabaseType()); - if (dbInitSQLFile.isPresent()) { - executeInitSQL(entry.getValue(), dbInitSQLFile.get()); - } - } - } - - private void fillExpectedDataSet() throws SQLException, IOException { - for (Entry entry : getExpectedDataSourceMap().entrySet()) { - executeInitSQL(entry.getValue(), scenarioDataPath.getInitSQLFile(Type.EXPECTED, getDatabaseType())); - } - } - - private void executeInitSQL(final DataSource dataSource, final String initSQLFile) throws SQLException, IOException { - try ( - Connection connection = dataSource.getConnection(); - FileReader reader = new FileReader(initSQLFile)) { - RunScript.execute(connection, reader); - } - } -}