From efe2e6b56c6754cafb5a6932270e704ebb74bb2b Mon Sep 17 00:00:00 2001 From: shankeerthan-kasilingam Date: Sat, 29 Jan 2022 19:43:36 +0530 Subject: [PATCH 1/3] Fixed test cases of MySQLDataSourcePreparer (Git issue : 14246) --- .../pom.xml | 6 ++ .../MySQLDataSourcePreparerTest.java | 78 ++++++++++++++----- 2 files changed, 66 insertions(+), 18 deletions(-) diff --git a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/pom.xml b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/pom.xml index 75578e78ee0be..d6179365f0aed 100644 --- a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/pom.xml +++ b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/pom.xml @@ -50,5 +50,11 @@ h2 test + + org.apache.shardingsphere + shardingsphere-jdbc-core + ${project.version} + test + diff --git a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/prepare/datasource/MySQLDataSourcePreparerTest.java b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/prepare/datasource/MySQLDataSourcePreparerTest.java index ef7e7e790317a..72a6244d7413f 100644 --- a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/prepare/datasource/MySQLDataSourcePreparerTest.java +++ b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/prepare/datasource/MySQLDataSourcePreparerTest.java @@ -19,22 +19,30 @@ import org.apache.shardingsphere.data.pipeline.api.config.rulealtered.PipelineConfiguration; import org.apache.shardingsphere.data.pipeline.api.datanode.JobDataNodeLine; +import org.apache.shardingsphere.data.pipeline.api.datasource.config.PipelineDataSourceConfigurationFactory; import org.apache.shardingsphere.data.pipeline.api.datasource.config.impl.ShardingSpherePipelineDataSourceConfiguration; import org.apache.shardingsphere.data.pipeline.api.datasource.config.yaml.YamlPipelineDataSourceConfiguration; import org.apache.shardingsphere.data.pipeline.api.prepare.datasource.PrepareTargetTablesParameter; import org.apache.shardingsphere.data.pipeline.core.datasource.creator.PipelineDataSourceCreatorFactory; import org.apache.shardingsphere.data.pipeline.core.exception.PipelineJobPrepareFailedException; +import org.apache.shardingsphere.driver.config.datasource.ShardingSpherePipelineDataSourceCreator; +import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration; +import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; import javax.sql.DataSource; import java.sql.SQLException; import java.util.Collections; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.RETURNS_MOCKS; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -48,10 +56,8 @@ public final class MySQLDataSourcePreparerTest { @Mock private PipelineConfiguration pipelineConfig; - @Mock private YamlPipelineDataSourceConfiguration sourceYamlPipelineDataSourceConfiguration; - @Mock private YamlPipelineDataSourceConfiguration targetYamlPipelineDataSourceConfiguration; @Mock @@ -66,32 +72,68 @@ public final class MySQLDataSourcePreparerTest { @Mock(extraInterfaces = AutoCloseable.class) private DataSource targetDataSource; + @Mock + private ShardingSpherePipelineDataSourceCreator mockShardingSpherePipelineDataSourceCreator; + @Before public void setUp() throws SQLException { - when(prepareTargetTablesParameter.getPipelineConfiguration()).thenReturn(pipelineConfig); - when(prepareTargetTablesParameter.getTablesFirstDataNodes()).thenReturn(new JobDataNodeLine(Collections.emptyList())); + sourceYamlPipelineDataSourceConfiguration = new YamlPipelineDataSourceConfiguration(); + targetYamlPipelineDataSourceConfiguration = new YamlPipelineDataSourceConfiguration(); + sourceYamlPipelineDataSourceConfiguration.setParameter("source"); + sourceYamlPipelineDataSourceConfiguration.setType("ShardingSphereJDBC"); + targetYamlPipelineDataSourceConfiguration.setParameter("target"); + targetYamlPipelineDataSourceConfiguration.setType("ShardingSphereJDBC"); when(pipelineConfig.getSource()).thenReturn(sourceYamlPipelineDataSourceConfiguration); - when(PipelineDataSourceCreatorFactory.getInstance( - sourceScalingDataSourceConfig.getType()).createPipelineDataSource(sourceScalingDataSourceConfig.getDataSourceConfiguration())).thenReturn(sourceDataSource); when(pipelineConfig.getTarget()).thenReturn(targetYamlPipelineDataSourceConfiguration); - when(PipelineDataSourceCreatorFactory.getInstance( - targetScalingDataSourceConfig.getType()).createPipelineDataSource(targetScalingDataSourceConfig.getDataSourceConfiguration())).thenReturn(targetDataSource); + when(prepareTargetTablesParameter.getTablesFirstDataNodes()).thenReturn(new JobDataNodeLine(Collections.emptyList())); + when(prepareTargetTablesParameter.getPipelineConfiguration()).thenReturn(pipelineConfig); + when(sourceScalingDataSourceConfig.getType()).thenReturn("ShardingSphereJDBC"); + DataSourceConfiguration mockSourceDataSourceConfig = mock(DataSourceConfiguration.class); +// when(mockSourceDataSourceConfig.getDataSourceClassName()).thenReturn("com.zaxxer.hikari.HikariDataSource"); + when(sourceScalingDataSourceConfig.getDataSourceConfiguration()).thenReturn(mockSourceDataSourceConfig); + when(mockShardingSpherePipelineDataSourceCreator.createPipelineDataSource(eq(mockSourceDataSourceConfig))).thenReturn(sourceDataSource); + when(targetScalingDataSourceConfig.getType()).thenReturn("ShardingSphereJDBC"); + DataSourceConfiguration mockTargetDataSourceConfig = mock(DataSourceConfiguration.class); +// when(mockTargetDataSourceConfig.getDataSourceClassName()).thenReturn("com.zaxxer.hikari.HikariDataSource"); + when(targetScalingDataSourceConfig.getDataSourceConfiguration()).thenReturn(mockTargetDataSourceConfig); + when(mockShardingSpherePipelineDataSourceCreator.createPipelineDataSource(eq(mockTargetDataSourceConfig))).thenReturn(targetDataSource); + } + + @After + public void cleanUp() { +// Mockito.framework().clearInlineMocks(); } @Test - @Ignore public void assertGetConnection() throws SQLException { - MySQLDataSourcePreparer mySQLDataSourcePreparer = new MySQLDataSourcePreparer(); - mySQLDataSourcePreparer.prepareTargetTables(prepareTargetTablesParameter); - verify(sourceDataSource).getConnection(); - verify(targetDataSource).getConnection(); + try (MockedStatic mockedStaticPipelineDataSourceConfigurationFactory = mockStatic(PipelineDataSourceConfigurationFactory.class, RETURNS_MOCKS); + MockedStatic mockedStaticPipelineDataSourceCreatorFactory = mockStatic(PipelineDataSourceCreatorFactory.class, RETURNS_MOCKS)) { + mockedStaticPipelineDataSourceConfigurationFactory.when(() -> PipelineDataSourceConfigurationFactory.newInstance(eq("ShardingSphereJDBC"), eq("source"))) + .thenReturn(sourceScalingDataSourceConfig); + mockedStaticPipelineDataSourceConfigurationFactory.when(() -> PipelineDataSourceConfigurationFactory.newInstance(eq("ShardingSphereJDBC"), eq("target"))) + .thenReturn(targetScalingDataSourceConfig); + mockedStaticPipelineDataSourceCreatorFactory.when(() -> PipelineDataSourceCreatorFactory.getInstance(eq("ShardingSphereJDBC"))) + .thenReturn(mockShardingSpherePipelineDataSourceCreator); + MySQLDataSourcePreparer mySQLDataSourcePreparer = new MySQLDataSourcePreparer(); + mySQLDataSourcePreparer.prepareTargetTables(prepareTargetTablesParameter); + verify(sourceDataSource).getConnection(); + verify(targetDataSource).getConnection(); + } } @Test(expected = PipelineJobPrepareFailedException.class) - @Ignore public void assertThrowPrepareFailedException() throws SQLException { - when(sourceDataSource.getConnection()).thenThrow(SQLException.class); - MySQLDataSourcePreparer mySQLDataSourcePreparer = new MySQLDataSourcePreparer(); - mySQLDataSourcePreparer.prepareTargetTables(prepareTargetTablesParameter); + try (MockedStatic mockedStaticPipelineDataSourceConfigurationFactory = mockStatic(PipelineDataSourceConfigurationFactory.class, RETURNS_MOCKS); + MockedStatic mockedStaticPipelineDataSourceCreatorFactory = mockStatic(PipelineDataSourceCreatorFactory.class, RETURNS_MOCKS)) { + mockedStaticPipelineDataSourceConfigurationFactory.when(() -> PipelineDataSourceConfigurationFactory.newInstance(eq("ShardingSphereJDBC"), eq("source"))) + .thenReturn(sourceScalingDataSourceConfig); + mockedStaticPipelineDataSourceConfigurationFactory.when(() -> PipelineDataSourceConfigurationFactory.newInstance(eq("ShardingSphereJDBC"), eq("target"))) + .thenReturn(targetScalingDataSourceConfig); + mockedStaticPipelineDataSourceCreatorFactory.when(() -> PipelineDataSourceCreatorFactory.getInstance(eq("ShardingSphereJDBC"))) + .thenReturn(mockShardingSpherePipelineDataSourceCreator); + when(sourceDataSource.getConnection()).thenThrow(SQLException.class); + MySQLDataSourcePreparer mySQLDataSourcePreparer = new MySQLDataSourcePreparer(); + mySQLDataSourcePreparer.prepareTargetTables(prepareTargetTablesParameter); + } } } From b204d744adbcce11f736a3178c6ffe8a74bf117d Mon Sep 17 00:00:00 2001 From: shankeerthan-kasilingam Date: Sat, 29 Jan 2022 19:46:11 +0530 Subject: [PATCH 2/3] Changed the mockito version to 3.4.2 (Git issue : 14246) In Mocktio 3.4.0, static mocks causes NotAMockException. They are fixed in 3.4.2. [1] : https://github.com/mockito/mockito/pull/1968 [2]: https://github.com/mockito/mockito/issues/1967 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4b4ca856d53e7..48d3172108e88 100644 --- a/pom.xml +++ b/pom.xml @@ -88,7 +88,7 @@ 4.12 1.3 - 3.4.0 + 3.4.2 1.2.0 3.4.2 From 25b8e14f6fb3357ae66572829750a0518c5ca971 Mon Sep 17 00:00:00 2001 From: shankeerthan-kasilingam Date: Sun, 30 Jan 2022 08:03:40 +0530 Subject: [PATCH 3/3] Fixed test MySQLDataSourcePreparerTest (Git issue : 14246) --- .../MySQLDataSourcePreparerTest.java | 74 +++++++------------ 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/prepare/datasource/MySQLDataSourcePreparerTest.java b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/prepare/datasource/MySQLDataSourcePreparerTest.java index 72a6244d7413f..bfbc190245711 100644 --- a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/prepare/datasource/MySQLDataSourcePreparerTest.java +++ b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-dialect/shardingsphere-data-pipeline-mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/prepare/datasource/MySQLDataSourcePreparerTest.java @@ -19,15 +19,14 @@ import org.apache.shardingsphere.data.pipeline.api.config.rulealtered.PipelineConfiguration; import org.apache.shardingsphere.data.pipeline.api.datanode.JobDataNodeLine; +import org.apache.shardingsphere.data.pipeline.api.datasource.PipelineDataSourceWrapper; import org.apache.shardingsphere.data.pipeline.api.datasource.config.PipelineDataSourceConfigurationFactory; import org.apache.shardingsphere.data.pipeline.api.datasource.config.impl.ShardingSpherePipelineDataSourceConfiguration; import org.apache.shardingsphere.data.pipeline.api.datasource.config.yaml.YamlPipelineDataSourceConfiguration; -import org.apache.shardingsphere.data.pipeline.api.prepare.datasource.PrepareTargetTablesParameter; -import org.apache.shardingsphere.data.pipeline.core.datasource.creator.PipelineDataSourceCreatorFactory; +import org.apache.shardingsphere.data.pipeline.core.datasource.PipelineDataSourceManager; import org.apache.shardingsphere.data.pipeline.core.exception.PipelineJobPrepareFailedException; +import org.apache.shardingsphere.data.pipeline.core.prepare.datasource.PrepareTargetTablesParameter; import org.apache.shardingsphere.driver.config.datasource.ShardingSpherePipelineDataSourceCreator; -import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -35,12 +34,11 @@ import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; -import javax.sql.DataSource; import java.sql.SQLException; import java.util.Collections; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.RETURNS_MOCKS; +import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.verify; @@ -56,8 +54,10 @@ public final class MySQLDataSourcePreparerTest { @Mock private PipelineConfiguration pipelineConfig; + @Mock private YamlPipelineDataSourceConfiguration sourceYamlPipelineDataSourceConfiguration; + @Mock private YamlPipelineDataSourceConfiguration targetYamlPipelineDataSourceConfiguration; @Mock @@ -66,74 +66,56 @@ public final class MySQLDataSourcePreparerTest { @Mock private ShardingSpherePipelineDataSourceConfiguration targetScalingDataSourceConfig; - @Mock(extraInterfaces = AutoCloseable.class) - private DataSource sourceDataSource; + @Mock + private PipelineDataSourceWrapper sourceDataSourceWrapper; - @Mock(extraInterfaces = AutoCloseable.class) - private DataSource targetDataSource; + @Mock + private PipelineDataSourceWrapper targetDataSourceWrapper; @Mock private ShardingSpherePipelineDataSourceCreator mockShardingSpherePipelineDataSourceCreator; @Before public void setUp() throws SQLException { - sourceYamlPipelineDataSourceConfiguration = new YamlPipelineDataSourceConfiguration(); - targetYamlPipelineDataSourceConfiguration = new YamlPipelineDataSourceConfiguration(); - sourceYamlPipelineDataSourceConfiguration.setParameter("source"); - sourceYamlPipelineDataSourceConfiguration.setType("ShardingSphereJDBC"); - targetYamlPipelineDataSourceConfiguration.setParameter("target"); - targetYamlPipelineDataSourceConfiguration.setType("ShardingSphereJDBC"); + PipelineDataSourceManager mockPipelineDataSourceManager = mock(PipelineDataSourceManager.class); + when(mockPipelineDataSourceManager.getDataSource(same(sourceScalingDataSourceConfig))).thenReturn(sourceDataSourceWrapper); + when(mockPipelineDataSourceManager.getDataSource(same(targetScalingDataSourceConfig))).thenReturn(targetDataSourceWrapper); + when(prepareTargetTablesParameter.getDataSourceManager()).thenReturn(mockPipelineDataSourceManager); when(pipelineConfig.getSource()).thenReturn(sourceYamlPipelineDataSourceConfiguration); + when(pipelineConfig.getSource().getType()).thenReturn("ShardingSphereJDBC"); + when(pipelineConfig.getSource().getParameter()).thenReturn("source"); when(pipelineConfig.getTarget()).thenReturn(targetYamlPipelineDataSourceConfiguration); - when(prepareTargetTablesParameter.getTablesFirstDataNodes()).thenReturn(new JobDataNodeLine(Collections.emptyList())); + when(pipelineConfig.getTarget().getType()).thenReturn("ShardingSphereJDBC"); + when(pipelineConfig.getTarget().getParameter()).thenReturn("target"); when(prepareTargetTablesParameter.getPipelineConfiguration()).thenReturn(pipelineConfig); - when(sourceScalingDataSourceConfig.getType()).thenReturn("ShardingSphereJDBC"); - DataSourceConfiguration mockSourceDataSourceConfig = mock(DataSourceConfiguration.class); -// when(mockSourceDataSourceConfig.getDataSourceClassName()).thenReturn("com.zaxxer.hikari.HikariDataSource"); - when(sourceScalingDataSourceConfig.getDataSourceConfiguration()).thenReturn(mockSourceDataSourceConfig); - when(mockShardingSpherePipelineDataSourceCreator.createPipelineDataSource(eq(mockSourceDataSourceConfig))).thenReturn(sourceDataSource); - when(targetScalingDataSourceConfig.getType()).thenReturn("ShardingSphereJDBC"); - DataSourceConfiguration mockTargetDataSourceConfig = mock(DataSourceConfiguration.class); -// when(mockTargetDataSourceConfig.getDataSourceClassName()).thenReturn("com.zaxxer.hikari.HikariDataSource"); - when(targetScalingDataSourceConfig.getDataSourceConfiguration()).thenReturn(mockTargetDataSourceConfig); - when(mockShardingSpherePipelineDataSourceCreator.createPipelineDataSource(eq(mockTargetDataSourceConfig))).thenReturn(targetDataSource); - } - - @After - public void cleanUp() { -// Mockito.framework().clearInlineMocks(); - } + when(prepareTargetTablesParameter.getTablesFirstDataNodes()).thenReturn(new JobDataNodeLine(Collections.emptyList())); + } @Test public void assertGetConnection() throws SQLException { - try (MockedStatic mockedStaticPipelineDataSourceConfigurationFactory = mockStatic(PipelineDataSourceConfigurationFactory.class, RETURNS_MOCKS); - MockedStatic mockedStaticPipelineDataSourceCreatorFactory = mockStatic(PipelineDataSourceCreatorFactory.class, RETURNS_MOCKS)) { + try (MockedStatic mockedStaticPipelineDataSourceConfigurationFactory = mockStatic(PipelineDataSourceConfigurationFactory.class);) { mockedStaticPipelineDataSourceConfigurationFactory.when(() -> PipelineDataSourceConfigurationFactory.newInstance(eq("ShardingSphereJDBC"), eq("source"))) .thenReturn(sourceScalingDataSourceConfig); mockedStaticPipelineDataSourceConfigurationFactory.when(() -> PipelineDataSourceConfigurationFactory.newInstance(eq("ShardingSphereJDBC"), eq("target"))) .thenReturn(targetScalingDataSourceConfig); - mockedStaticPipelineDataSourceCreatorFactory.when(() -> PipelineDataSourceCreatorFactory.getInstance(eq("ShardingSphereJDBC"))) - .thenReturn(mockShardingSpherePipelineDataSourceCreator); MySQLDataSourcePreparer mySQLDataSourcePreparer = new MySQLDataSourcePreparer(); mySQLDataSourcePreparer.prepareTargetTables(prepareTargetTablesParameter); - verify(sourceDataSource).getConnection(); - verify(targetDataSource).getConnection(); + verify(sourceDataSourceWrapper).getConnection(); + verify(targetDataSourceWrapper).getConnection(); } } @Test(expected = PipelineJobPrepareFailedException.class) public void assertThrowPrepareFailedException() throws SQLException { - try (MockedStatic mockedStaticPipelineDataSourceConfigurationFactory = mockStatic(PipelineDataSourceConfigurationFactory.class, RETURNS_MOCKS); - MockedStatic mockedStaticPipelineDataSourceCreatorFactory = mockStatic(PipelineDataSourceCreatorFactory.class, RETURNS_MOCKS)) { + try (MockedStatic mockedStaticPipelineDataSourceConfigurationFactory = mockStatic(PipelineDataSourceConfigurationFactory.class)) { mockedStaticPipelineDataSourceConfigurationFactory.when(() -> PipelineDataSourceConfigurationFactory.newInstance(eq("ShardingSphereJDBC"), eq("source"))) - .thenReturn(sourceScalingDataSourceConfig); + .thenReturn(sourceScalingDataSourceConfig); mockedStaticPipelineDataSourceConfigurationFactory.when(() -> PipelineDataSourceConfigurationFactory.newInstance(eq("ShardingSphereJDBC"), eq("target"))) - .thenReturn(targetScalingDataSourceConfig); - mockedStaticPipelineDataSourceCreatorFactory.when(() -> PipelineDataSourceCreatorFactory.getInstance(eq("ShardingSphereJDBC"))) - .thenReturn(mockShardingSpherePipelineDataSourceCreator); - when(sourceDataSource.getConnection()).thenThrow(SQLException.class); + .thenReturn(targetScalingDataSourceConfig); + when(sourceDataSourceWrapper.getConnection()).thenThrow(SQLException.class); MySQLDataSourcePreparer mySQLDataSourcePreparer = new MySQLDataSourcePreparer(); mySQLDataSourcePreparer.prepareTargetTables(prepareTargetTablesParameter); } + } }