diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index bd36a279c2b..13c6ed085d5 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -9,7 +9,7 @@ Add changes here for all PR submitted to the 2.x branch. - [[#PR_NO](https://github.com/seata/seata/pull/PR_NO)] A brief and accurate description of PR ### optimize: -- [[#PR_NO](https://github.com/seata/seata/pull/PR_NO)] A brief and accurate description of PR +- [[#6031](https://github.com/seata/seata/pull/6031)] add a check for the existence of the undolog table ### security: - [[#6069](https://github.com/seata/seata/pull/6069)] Upgrade Guava dependencies to fix security vulnerabilities @@ -21,6 +21,8 @@ Thanks to these contributors for their code commits. Please report an unintended - [slievrly](https://github.com/slievrly) +- [laywin](https://github.com/laywin) - [imcmai](https://github.com/imcmai) + Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index f155efa1195..749d418cf23 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -9,7 +9,7 @@ - [[#PR_NO](https://github.com/seata/seata/pull/PR_NO)] 准确简要的PR描述 ### optimize: -- [[#PR_NO](https://github.com/seata/seata/pull/PR_NO)] 准确简要的PR描述 +- [[#6031](https://github.com/seata/seata/pull/6031)] 添加undo_log表的存在性校验 ### security: - [[#6069](https://github.com/seata/seata/pull/6069)] 升级Guava依赖版本,修复安全漏洞 @@ -21,6 +21,7 @@ - [slievrly](https://github.com/slievrly) +- [laywin](https://github.com/laywin) - [imcmai](https://github.com/imcmai) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/config/seata-config-core/src/test/java/io/seata/config/ConfigFutureTest.java b/config/seata-config-core/src/test/java/io/seata/config/ConfigFutureTest.java index 60ffb299527..57daca70fb5 100644 --- a/config/seata-config-core/src/test/java/io/seata/config/ConfigFutureTest.java +++ b/config/seata-config-core/src/test/java/io/seata/config/ConfigFutureTest.java @@ -21,7 +21,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.mockito.Mockito; -import org.mockito.internal.util.reflection.FieldSetter; import java.lang.reflect.Field; import java.util.concurrent.CompletableFuture; @@ -44,7 +43,8 @@ void testGet() throws NoSuchFieldException, IllegalAccessException, ExecutionExc // mock field origin = Mockito.spy(origin); // set mocked field to object - FieldSetter.setField(configFuture, originField, origin); + originField.setAccessible(true); + originField.set(configFuture, origin); Mockito.doThrow(ExecutionException.class).when(origin).get(Mockito.anyLong(), Mockito.any()); Assertions.assertThrows(ShouldNeverHappenException.class, configFuture::get); diff --git a/core/src/main/java/io/seata/core/constants/DBType.java b/core/src/main/java/io/seata/core/constants/DBType.java index 49063bb802e..a0171474033 100644 --- a/core/src/main/java/io/seata/core/constants/DBType.java +++ b/core/src/main/java/io/seata/core/constants/DBType.java @@ -208,5 +208,4 @@ public static DBType valueof(String dbType) { } throw new IllegalArgumentException("unknown dbtype:" + dbType); } - } diff --git a/dependencies/pom.xml b/dependencies/pom.xml index d82345a1f4b..166b1aa298d 100644 --- a/dependencies/pom.xml +++ b/dependencies/pom.xml @@ -118,7 +118,7 @@ 1.4.3 - 2.23.4 + 4.5.1 3.12.2 9.4.38.v20210224 3.1.7 @@ -701,6 +701,11 @@ mockito-junit-jupiter ${mockito.version} + + org.mockito + mockito-inline + ${mockito.version} + org.assertj assertj-core diff --git a/pom.xml b/pom.xml index f2371a43ce7..4d7b21b35e8 100644 --- a/pom.xml +++ b/pom.xml @@ -92,6 +92,11 @@ mockito-junit-jupiter test + + org.mockito + mockito-inline + test + org.assertj assertj-core diff --git a/rm-datasource/src/main/java/io/seata/rm/RMHandlerAT.java b/rm-datasource/src/main/java/io/seata/rm/RMHandlerAT.java index 333a121a295..cc9d1971890 100644 --- a/rm-datasource/src/main/java/io/seata/rm/RMHandlerAT.java +++ b/rm-datasource/src/main/java/io/seata/rm/RMHandlerAT.java @@ -19,8 +19,6 @@ import java.sql.SQLException; import java.text.ParseException; import java.util.Date; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import io.seata.common.util.DateUtil; import io.seata.core.model.BranchType; @@ -44,8 +42,6 @@ public class RMHandlerAT extends AbstractRMHandler { private static final int LIMIT_ROWS = 3000; - private final Map undoLogTableExistRecord = new ConcurrentHashMap<>(); - @Override public void handle(UndoLogDeleteRequest request) { String resourceId = request.getResourceId(); @@ -56,12 +52,6 @@ public void handle(UndoLogDeleteRequest request) { return; } - boolean hasUndoLogTable = undoLogTableExistRecord.computeIfAbsent(resourceId, id -> checkUndoLogTableExist(dataSourceProxy)); - if (!hasUndoLogTable) { - LOGGER.debug("resource({}) has no undo_log table, UndoLogDeleteRequest will be ignored", resourceId); - return; - } - Date division = getLogCreated(request.getSaveDays()); UndoLogManager manager = getUndoLogManager(dataSourceProxy); @@ -80,19 +70,6 @@ public void handle(UndoLogDeleteRequest request) { } } - boolean checkUndoLogTableExist(DataSourceProxy dataSourceProxy) { - UndoLogManager manager = getUndoLogManager(dataSourceProxy); - try (Connection connection = getConnection(dataSourceProxy)) { - if (connection == null) { - return false; - } - return manager.hasUndoLogTable(connection); - } catch (Exception e) { - // should never happen, hasUndoLogTable method had catch all Exception - return false; - } - } - Connection getConnection(DataSourceProxy dataSourceProxy) { try { return dataSourceProxy.getPlainConnection(); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java index 6d930ea4009..295a22e77b5 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/DataSourceProxy.java @@ -22,18 +22,25 @@ import javax.sql.DataSource; +import io.seata.common.ConfigurationKeys; import io.seata.common.Constants; +import io.seata.common.loader.EnhancedServiceNotFoundException; +import io.seata.config.ConfigurationFactory; import io.seata.core.context.RootContext; import io.seata.core.model.BranchType; import io.seata.core.model.Resource; import io.seata.rm.DefaultResourceManager; import io.seata.rm.datasource.sql.struct.TableMetaCacheFactory; +import io.seata.rm.datasource.undo.UndoLogManager; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; import io.seata.rm.datasource.util.JdbcUtils; import io.seata.sqlparser.util.JdbcConstants; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static io.seata.common.DefaultValues.DEFAULT_TRANSACTION_UNDO_LOG_TABLE; + /** * The type Data source proxy. * @@ -101,6 +108,8 @@ private void init(DataSource dataSource, String resourceGroupId) { validMySQLVersion(connection); checkDerivativeProduct(); } + checkUndoLogTableExist(connection); + } catch (SQLException e) { throw new IllegalStateException("can not init dataSource", e); } @@ -143,6 +152,31 @@ private boolean isPolardbXProduct() { return false; } + /** + * check existence of undolog table + * + * if the table not exist fast fail, or else keep silence + * + * @param conn db connection + */ + private void checkUndoLogTableExist(Connection conn) { + UndoLogManager undoLogManager; + try { + undoLogManager = UndoLogManagerFactory.getUndoLogManager(dbType); + } catch (EnhancedServiceNotFoundException e) { + String errMsg = String.format("AT mode don't support the the dbtype: %s", dbType); + throw new IllegalStateException(errMsg, e); + } + + boolean undoLogTableExist = undoLogManager.hasUndoLogTable(conn); + if (!undoLogTableExist) { + String undoLogTableName = ConfigurationFactory.getInstance() + .getConfig(ConfigurationKeys.TRANSACTION_UNDO_LOG_TABLE, DEFAULT_TRANSACTION_UNDO_LOG_TABLE); + String errMsg = String.format("in AT mode, %s table not exist", undoLogTableName); + throw new IllegalStateException(errMsg); + } + } + /** * publish tableMeta refresh event */ diff --git a/rm-datasource/src/test/java/io/seata/rm/RMHandlerATTest.java b/rm-datasource/src/test/java/io/seata/rm/RMHandlerATTest.java index 3ae96f51d0d..f3d34f25c22 100644 --- a/rm-datasource/src/test/java/io/seata/rm/RMHandlerATTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/RMHandlerATTest.java @@ -22,7 +22,10 @@ import org.junit.jupiter.api.Test; import java.sql.Connection; +import java.sql.SQLException; +import java.util.Date; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.times; @@ -41,30 +44,26 @@ class RMHandlerATTest { @Test - void hasUndoLogTableTest() { - RMHandlerAT handler = buildHandler(true); + void testNormalDeleteUndoLogTable() throws SQLException { + RMHandlerAT handler = buildHandler(false); UndoLogDeleteRequest request = buildRequest(); int testTimes = 5; for (int i = 0; i < testTimes; i++) { handler.handle(request); } - verify(handler, times(1)).checkUndoLogTableExist(any()); verify(handler, times(testTimes)).deleteUndoLog(any(), any(), any()); } @Test - void noUndoLogTableTest() { - RMHandlerAT handler = buildHandler(false); + void testErrorDeleteUndoLogTable() throws SQLException { + RMHandlerAT handler = buildHandler(true); UndoLogDeleteRequest request = buildRequest(); - int testTimes = 5; - for (int i = 0; i < testTimes; i++) { - handler.handle(request); - } - verify(handler, times(1)).checkUndoLogTableExist(any()); - verify(handler, never()).deleteUndoLog(any(), any(), any()); + request.setSaveDays((short) -1); + handler.handle(request); + verify(handler, times(1)).deleteUndoLog(any(), any(), any()); } - private RMHandlerAT buildHandler(boolean hasUndoLogTable) { + private RMHandlerAT buildHandler(boolean errorDeleteUndologTable) throws SQLException { RMHandlerAT handler = spy(new RMHandlerAT()); DataSourceManager dataSourceManager = mock(DataSourceManager.class); doReturn(dataSourceManager).when(handler).getResourceManager(); @@ -78,9 +77,14 @@ private RMHandlerAT buildHandler(boolean hasUndoLogTable) { }); UndoLogManager manager = mock(UndoLogManager.class); - when(manager.hasUndoLogTable(any())).thenReturn(hasUndoLogTable); + when(manager.hasUndoLogTable(any())).thenReturn(true); doReturn(manager).when(handler).getUndoLogManager(any()); + if (errorDeleteUndologTable) { + when(manager.deleteUndoLogByLogCreated(any(Date.class), anyInt(), any(Connection.class))) + .thenThrow(new SQLException()); + } + return handler; } diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/DataSourceProxyTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/DataSourceProxyTest.java index d8da5d26acf..e351f674bee 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/DataSourceProxyTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/DataSourceProxyTest.java @@ -16,6 +16,7 @@ package io.seata.rm.datasource; import java.lang.reflect.Field; +import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; @@ -23,8 +24,17 @@ import io.seata.rm.datasource.mock.MockDataSource; import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.sql.struct.TableMetaCacheFactory; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; /** * @author ph3636 @@ -34,7 +44,6 @@ public class DataSourceProxyTest { @Test public void test_constructor() { DataSource dataSource = new MockDataSource(); - DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); Assertions.assertEquals(dataSourceProxy.getTargetDataSource(), dataSource); @@ -42,6 +51,42 @@ public void test_constructor() { Assertions.assertEquals(dataSourceProxy2.getTargetDataSource(), dataSource); } + @Test + public void testNotSupportDb() { + final MockDriver mockDriver = new MockDriver(); + final String username = "username"; + final String jdbcUrl = "jdbc:mock:xxx"; + + // create data source + final DruidDataSource dataSource = new DruidDataSource(); + dataSource.setUrl(jdbcUrl); + dataSource.setDriver(mockDriver); + dataSource.setUsername(username); + dataSource.setPassword("password"); + + Throwable throwable = Assertions.assertThrows(IllegalStateException.class, () -> new DataSourceProxy(dataSource)); + assertThat(throwable).hasMessageContaining("AT mode don't support the the dbtype"); + } + + + @Test + public void testUndologTableNotExist() { + DataSource dataSource = new MockDataSource(); + + MockedStatic undoLogManagerFactoryMockedStatic = Mockito.mockStatic(UndoLogManagerFactory.class); + + MySQLUndoLogManager mysqlUndoLogManager = mock(MySQLUndoLogManager.class); + undoLogManagerFactoryMockedStatic.when(()->UndoLogManagerFactory.getUndoLogManager(anyString())) + .thenReturn(mysqlUndoLogManager); + + doReturn(false).when(mysqlUndoLogManager).hasUndoLogTable(any(Connection.class)); + + Throwable throwable = Assertions.assertThrows(IllegalStateException.class, () -> new DataSourceProxy(dataSource)); + undoLogManagerFactoryMockedStatic.close(); + + assertThat(throwable).hasMessageContaining("table not exist"); + } + @Test public void getResourceIdTest() throws SQLException, NoSuchFieldException, IllegalAccessException { // Disable 'DataSourceProxy.tableMetaExecutor' to prevent unit tests from being affected @@ -62,7 +107,7 @@ public void getResourceIdTest() throws SQLException, NoSuchFieldException, Illeg dataSource.setPassword("password"); // create data source proxy - final DataSourceProxy proxy = new DataSourceProxy(dataSource); + final DataSourceProxy proxy = getDataSourceProxy(dataSource); // get fields Field resourceIdField = proxy.getClass().getDeclaredField("resourceId"); @@ -124,4 +169,17 @@ public void getResourceIdTest() throws SQLException, NoSuchFieldException, Illeg jdbcUrlField.set(proxy, jdbcUrl); } } + + // to skip the db & undolog table check + public static DataSourceProxy getDataSourceProxy(DataSource dataSource) { + try (MockedStatic undoLogManagerFactoryMockedStatic = Mockito.mockStatic(UndoLogManagerFactory.class)) { + MySQLUndoLogManager mysqlUndoLogManager = mock(MySQLUndoLogManager.class); + undoLogManagerFactoryMockedStatic.when(() -> UndoLogManagerFactory.getUndoLogManager(anyString())).thenReturn(mysqlUndoLogManager); + + doReturn(true).when(mysqlUndoLogManager).hasUndoLogTable(any(Connection.class)); + + // create data source proxy + return new DataSourceProxy(dataSource); + } + } } diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/PreparedStatementProxyTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/PreparedStatementProxyTest.java index cd7c58cb9df..3ef88b2e1c8 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/PreparedStatementProxyTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/PreparedStatementProxyTest.java @@ -44,6 +44,8 @@ import io.seata.rm.datasource.mock.MockClob; import io.seata.rm.datasource.mock.MockConnection; import io.seata.rm.datasource.mock.MockDriver; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.sqlparser.SQLRecognizerFactory; import io.seata.sqlparser.SqlParserType; import io.seata.sqlparser.druid.DruidDelegatingSQLRecognizerFactory; @@ -54,6 +56,12 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; /** * @author will @@ -86,8 +94,7 @@ public static void init() throws SQLException { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - - DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); ConnectionProxy connectionProxy = new ConnectionProxy(dataSourceProxy, dataSource.getConnection().getConnection()); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java index 8260ef81e7e..54646a9ddc3 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/StatementProxyTest.java @@ -31,6 +31,8 @@ import io.seata.rm.datasource.mock.MockConnection; import io.seata.rm.datasource.mock.MockDriver; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.sqlparser.SQLRecognizerFactory; import io.seata.sqlparser.SqlParserType; import io.seata.sqlparser.druid.DruidDelegatingSQLRecognizerFactory; @@ -44,6 +46,10 @@ import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import static org.mockito.ArgumentMatchers.anyString; /** * @author will @@ -78,7 +84,7 @@ public static void init() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); ConnectionProxy connectionProxy = new ConnectionProxy(dataSourceProxy, dataSource.getConnection().getConnection()); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/DeleteExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/DeleteExecutorTest.java index 838e73a3448..b3b5ed10554 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/DeleteExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/DeleteExecutorTest.java @@ -29,13 +29,23 @@ import com.google.common.collect.Lists; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.sql.struct.TableRecords; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.sqlparser.druid.mysql.MySQLDeleteRecognizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; /** * @author will @@ -66,7 +76,7 @@ public static void init() { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); try { Field field = dataSourceProxy.getClass().getDeclaredField("dbType"); field.setAccessible(true); @@ -101,4 +111,5 @@ public void testAfterImage() throws SQLException { TableRecords tableRecords = deleteExecutor.beforeImage(); Assertions.assertEquals(0, deleteExecutor.afterImage(tableRecords).size()); } + } diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java index 332bde4985d..980aee46f69 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MultiExecutorTest.java @@ -24,6 +24,9 @@ import java.util.Set; import java.util.stream.Collectors; +import io.seata.rm.datasource.DataSourceProxyTest; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -44,6 +47,14 @@ import io.seata.sqlparser.SQLRecognizer; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.util.JdbcConstants; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class MultiExecutorTest { @@ -73,7 +84,8 @@ public static void init() throws Throwable { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); + try { Field field = dataSourceProxy.getClass().getDeclaredField("dbType"); field.setAccessible(true); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/PlainExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/PlainExecutorTest.java index 7a2e545b65c..22b18549ca5 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/PlainExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/PlainExecutorTest.java @@ -24,6 +24,7 @@ import com.google.common.collect.Lists; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.mock.MockDriver; import org.junit.jupiter.api.BeforeEach; @@ -56,7 +57,8 @@ public void init() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); + ConnectionProxy connectionProxy = new ConnectionProxy(dataSourceProxy, dataSource.getConnection().getConnection()); MockStatementBase mockStatement = new MockStatement(dataSource.getConnection().getConnection()); StatementProxy statementProxy = new StatementProxy(connectionProxy, mockStatement); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/SelectForUpdateExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/SelectForUpdateExecutorTest.java index 46d4ca0f75a..c53d382f1dd 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/SelectForUpdateExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/SelectForUpdateExecutorTest.java @@ -28,14 +28,21 @@ import io.seata.core.context.RootContext; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.mock.MockConnectionProxy; import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.mock.MockLockConflictConnectionProxy; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.sqlparser.druid.mysql.MySQLSelectForUpdateRecognizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import static org.mockito.ArgumentMatchers.anyString; /** * @author will @@ -69,7 +76,8 @@ public static void init() { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); + try { Field field = dataSourceProxy.getClass().getDeclaredField("dbType"); field.setAccessible(true); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/UpdateExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/UpdateExecutorTest.java index c25df6f4e37..973ae530ad1 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/UpdateExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/UpdateExecutorTest.java @@ -30,13 +30,22 @@ import com.google.common.collect.Lists; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.sql.struct.TableRecords; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.sqlparser.druid.mysql.MySQLUpdateRecognizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; /** * @author will @@ -68,7 +77,8 @@ public static void init() { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); + try { Field field = dataSourceProxy.getClass().getDeclaredField("dbType"); field.setAccessible(true); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/UpdateJoinExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/UpdateJoinExecutorTest.java index 971dfd03373..fbde0a4bd96 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/UpdateJoinExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/UpdateJoinExecutorTest.java @@ -29,13 +29,20 @@ import com.google.common.collect.Lists; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.exec.mysql.MySQLUpdateJoinExecutor; import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.sql.struct.TableRecords; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.sqlparser.druid.mysql.MySQLUpdateRecognizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import static org.mockito.ArgumentMatchers.anyString; /** * @author renliangyu857 @@ -81,7 +88,7 @@ private StatementProxy mockStatementProxy(List returnValueColumnLabels, dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); try { Field field = dataSourceProxy.getClass().getDeclaredField("dbType"); field.setAccessible(true); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/TableRecordsTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/TableRecordsTest.java index 61714ca7778..bc02c64016a 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/TableRecordsTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/TableRecordsTest.java @@ -15,26 +15,25 @@ */ package io.seata.rm.datasource.sql.struct; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; -import java.util.List; - -import io.seata.rm.datasource.exception.TableMetaException; -import io.seata.sqlparser.struct.TableMeta; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - import com.alibaba.druid.mock.MockStatement; import com.alibaba.druid.mock.MockStatementBase; import com.alibaba.druid.pool.DruidDataSource; import com.google.common.collect.Lists; - import io.seata.common.exception.ShouldNeverHappenException; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; +import io.seata.rm.datasource.exception.TableMetaException; import io.seata.rm.datasource.mock.MockDriver; +import io.seata.sqlparser.struct.TableMeta; import io.seata.sqlparser.util.JdbcConstants; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Types; +import java.util.List; /** * the table records test @@ -102,8 +101,9 @@ public void testPkRow() throws SQLException { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); + MockStatementBase mockStatement = new MockStatement(dataSource.getConnection().getConnection()); - DataSourceProxy proxy = new DataSourceProxy(dataSource); + DataSourceProxy proxy = DataSourceProxyTest.getDataSourceProxy(dataSource); TableMeta tableMeta = TableMetaCacheFactory.getTableMetaCache(JdbcConstants.MYSQL).getTableMeta(proxy.getPlainConnection(), "table_records_test", proxy.getResourceId()); @@ -122,7 +122,7 @@ public void testBuildRecords() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); MockStatementBase mockStatement = new MockStatement(dataSource.getConnection().getConnection()); - DataSourceProxy proxy = new DataSourceProxy(dataSource); + DataSourceProxy proxy = DataSourceProxyTest.getDataSourceProxy(dataSource); TableMeta tableMeta = TableMetaCacheFactory.getTableMetaCache(JdbcConstants.MYSQL).getTableMeta(proxy.getPlainConnection(), "table_records_test", proxy.getResourceId()); @@ -141,7 +141,7 @@ public void testBuildRecordsNewFeild() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); MockStatementBase mockStatement = new MockStatement(dataSource.getConnection().getConnection()); - DataSourceProxy proxy = new DataSourceProxy(dataSource); + DataSourceProxy proxy = DataSourceProxyTest.getDataSourceProxy(dataSource); TableMeta tableMeta = TableMetaCacheFactory.getTableMetaCache(JdbcConstants.MYSQL).getTableMeta(proxy.getPlainConnection(), "table_records_test", proxy.getResourceId()); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/DmTableMetaCacheTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/DmTableMetaCacheTest.java index e4319ea5b3f..8973b130516 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/DmTableMetaCacheTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/DmTableMetaCacheTest.java @@ -17,6 +17,7 @@ import com.alibaba.druid.pool.DruidDataSource; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.sql.struct.TableMetaCacheFactory; import io.seata.sqlparser.struct.TableMeta; @@ -65,7 +66,7 @@ public void getTableMetaTest() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy proxy = new DataSourceProxy(dataSource); + DataSourceProxy proxy = DataSourceProxyTest.getDataSourceProxy(dataSource); TableMetaCache tableMetaCache = TableMetaCacheFactory.getTableMetaCache(JdbcConstants.DM); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/MariadbTableMetaCacheTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/MariadbTableMetaCacheTest.java index a13c9991c8c..01144502bc9 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/MariadbTableMetaCacheTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/MariadbTableMetaCacheTest.java @@ -19,6 +19,9 @@ import java.sql.Types; import java.util.Collections; +import io.seata.rm.datasource.DataSourceProxyTest; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.sqlparser.struct.ColumnMeta; import io.seata.sqlparser.struct.IndexMeta; import io.seata.sqlparser.struct.IndexType; @@ -34,6 +37,10 @@ import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.sql.struct.TableMetaCacheFactory; import io.seata.sqlparser.util.JdbcConstants; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import static org.mockito.ArgumentMatchers.anyString; /** * The table meta fetch test. @@ -84,7 +91,7 @@ public void getTableMetaTest_0() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy proxy = new DataSourceProxy(dataSource); + DataSourceProxy proxy = DataSourceProxyTest.getDataSourceProxy(dataSource); TableMeta tableMeta = getTableMetaCache().getTableMeta(proxy.getPlainConnection(), "mt1", proxy.getResourceId()); @@ -133,7 +140,7 @@ public void refreshTest_0() throws SQLException { druidDataSource.setUrl("jdbc:mock:xxx"); druidDataSource.setDriver(mockDriver); - DataSourceProxy dataSourceProxy = new DataSourceProxy(druidDataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(druidDataSource); TableMeta tableMeta = getTableMetaCache().getTableMeta(dataSourceProxy.getPlainConnection(), "t1", dataSourceProxy.getResourceId()); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/MysqlTableMetaCacheTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/MysqlTableMetaCacheTest.java index 56928aa6d70..0dbe2400ef7 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/MysqlTableMetaCacheTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/MysqlTableMetaCacheTest.java @@ -19,6 +19,9 @@ import java.sql.Types; import java.util.Collections; +import io.seata.rm.datasource.DataSourceProxyTest; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -34,6 +37,13 @@ import io.seata.sqlparser.struct.TableMetaCache; import io.seata.rm.datasource.sql.struct.TableMetaCacheFactory; import io.seata.sqlparser.util.JdbcConstants; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; /** * The table meta fetch test. @@ -84,7 +94,7 @@ public void getTableMetaTest_0() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy proxy = new DataSourceProxy(dataSource); + DataSourceProxy proxy = DataSourceProxyTest.getDataSourceProxy(dataSource); TableMeta tableMeta = getTableMetaCache().getTableMeta(proxy.getPlainConnection(), "mt1", proxy.getResourceId()); @@ -133,7 +143,7 @@ public void refreshTest_0() throws SQLException { druidDataSource.setUrl("jdbc:mock:xxx"); druidDataSource.setDriver(mockDriver); - DataSourceProxy dataSourceProxy = new DataSourceProxy(druidDataSource); + DataSourceProxy dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(druidDataSource); TableMeta tableMeta = getTableMetaCache().getTableMeta(dataSourceProxy.getPlainConnection(), "t1", dataSourceProxy.getResourceId()); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/OracleTableMetaCacheTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/OracleTableMetaCacheTest.java index 8d3aa2abccd..fd7877acac9 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/OracleTableMetaCacheTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/OracleTableMetaCacheTest.java @@ -18,6 +18,9 @@ import java.sql.SQLException; import java.sql.Types; +import io.seata.rm.datasource.DataSourceProxyTest; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -29,6 +32,10 @@ import io.seata.sqlparser.struct.TableMetaCache; import io.seata.rm.datasource.sql.struct.TableMetaCacheFactory; import io.seata.sqlparser.util.JdbcConstants; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import static org.mockito.ArgumentMatchers.anyString; /** * @author will.zjw @@ -65,7 +72,7 @@ public void getTableMetaTest() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy proxy = new DataSourceProxy(dataSource); + DataSourceProxy proxy = DataSourceProxyTest.getDataSourceProxy(dataSource); TableMetaCache tableMetaCache = TableMetaCacheFactory.getTableMetaCache(JdbcConstants.ORACLE); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/PostgresqlTableMetaCacheTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/PostgresqlTableMetaCacheTest.java index 2098629e824..bf1a116c47f 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/PostgresqlTableMetaCacheTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/PostgresqlTableMetaCacheTest.java @@ -18,6 +18,9 @@ import java.sql.SQLException; import java.sql.Types; +import io.seata.rm.datasource.DataSourceProxyTest; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -29,6 +32,12 @@ import io.seata.sqlparser.struct.TableMetaCache; import io.seata.rm.datasource.sql.struct.TableMetaCacheFactory; import io.seata.sqlparser.util.JdbcConstants; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; /** * @author will.zjw @@ -65,7 +74,7 @@ public void getTableMetaTest() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy proxy = new DataSourceProxy(dataSource); + DataSourceProxy proxy = DataSourceProxyTest.getDataSourceProxy(dataSource); TableMetaCache tableMetaCache = TableMetaCacheFactory.getTableMetaCache(JdbcConstants.POSTGRESQL); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/SqlServerTableMetaCacheTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/SqlServerTableMetaCacheTest.java index cb0b49e2f79..4cb0f26d85c 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/SqlServerTableMetaCacheTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/sql/struct/cache/SqlServerTableMetaCacheTest.java @@ -22,7 +22,10 @@ import com.alibaba.druid.pool.DruidDataSource; import io.seata.common.exception.ShouldNeverHappenException; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; import io.seata.rm.datasource.mock.MockDriver; +import io.seata.rm.datasource.undo.UndoLogManagerFactory; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.sqlparser.struct.ColumnMeta; import io.seata.sqlparser.struct.IndexMeta; import io.seata.sqlparser.struct.IndexType; @@ -32,6 +35,13 @@ import io.seata.sqlparser.util.JdbcConstants; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; /** * @author GoodBoyCoder @@ -82,7 +92,7 @@ public void getTableMetaTest_0() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - DataSourceProxy proxy = new DataSourceProxy(dataSource); + DataSourceProxy proxy = DataSourceProxyTest.getDataSourceProxy(dataSource); TableMeta tableMeta = getTableMetaCache().getTableMeta(proxy.getPlainConnection(), "m.mt1", proxy.getResourceId()); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/BaseH2Test.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/BaseH2Test.java index 9a84c5e08e5..412cc06bbbb 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/BaseH2Test.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/BaseH2Test.java @@ -18,6 +18,8 @@ import io.seata.common.util.IOUtil; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.sqlparser.struct.ColumnMeta; import io.seata.rm.datasource.sql.struct.Field; import io.seata.rm.datasource.sql.struct.KeyType; @@ -29,14 +31,17 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.mockito.MockedStatic; import org.mockito.Mockito; +import javax.sql.DataSource; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; import java.util.Arrays; +import static org.mockito.ArgumentMatchers.anyString; /** * @author Geng Zhang @@ -58,7 +63,8 @@ public static void start() throws SQLException { dataSource.setUrl("jdbc:h2:./db_store/test_undo"); dataSource.setUsername("sa"); dataSource.setPassword(""); - dataSourceProxy = new DataSourceProxy(dataSource); + dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); + connection = dataSourceProxy.getConnection(); tableMeta = mockTableMeta(); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mariadb/MariadbUndoLogManagerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mariadb/MariadbUndoLogManagerTest.java index 9af77f5eb63..a80799cdbe6 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mariadb/MariadbUndoLogManagerTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mariadb/MariadbUndoLogManagerTest.java @@ -25,6 +25,8 @@ import java.util.Date; import java.util.List; +import io.seata.rm.datasource.DataSourceProxyTest; +import io.seata.rm.datasource.undo.*; import io.seata.sqlparser.struct.TableMeta; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -42,11 +44,6 @@ import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.sql.struct.Row; import io.seata.rm.datasource.sql.struct.TableRecords; -import io.seata.rm.datasource.undo.AbstractUndoLogManager; -import io.seata.rm.datasource.undo.BranchUndoLog; -import io.seata.rm.datasource.undo.SQLUndoLog; -import io.seata.rm.datasource.undo.UndoLogParser; -import io.seata.rm.datasource.undo.UndoLogParserFactory; import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.rm.datasource.undo.parser.JacksonUndoLogParser; import io.seata.sqlparser.SQLRecognizerFactory; @@ -56,6 +53,13 @@ import io.seata.sqlparser.druid.SQLOperateRecognizerHolder; import io.seata.sqlparser.druid.SQLOperateRecognizerHolderFactory; import io.seata.sqlparser.util.JdbcConstants; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; /** * @author funkye @@ -100,7 +104,8 @@ public void init() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - dataSourceProxy = new DataSourceProxy(dataSource); + dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); + connectionProxy = new ConnectionProxy(dataSourceProxy, dataSource.getConnection().getConnection()); undoLogManager = new MariadbUndoLogManager(); tableMeta = new TableMeta(); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java index 367dc94a82e..aa6ceeb168a 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/MySQLUndoLogManagerTest.java @@ -33,15 +33,12 @@ import io.seata.rm.datasource.ConnectionContext; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.sql.struct.Row; +import io.seata.rm.datasource.undo.*; import io.seata.sqlparser.struct.TableMeta; import io.seata.rm.datasource.sql.struct.TableRecords; -import io.seata.rm.datasource.undo.AbstractUndoLogManager; -import io.seata.rm.datasource.undo.BranchUndoLog; -import io.seata.rm.datasource.undo.SQLUndoLog; -import io.seata.rm.datasource.undo.UndoLogParser; -import io.seata.rm.datasource.undo.UndoLogParserFactory; import io.seata.rm.datasource.undo.parser.JacksonUndoLogParser; import io.seata.sqlparser.SQLRecognizerFactory; import io.seata.sqlparser.SQLType; @@ -54,6 +51,12 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; /** * @author will @@ -98,7 +101,8 @@ public void init() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - dataSourceProxy = new DataSourceProxy(dataSource); + dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); + connectionProxy = new ConnectionProxy(dataSourceProxy, dataSource.getConnection().getConnection()); undoLogManager = new MySQLUndoLogManager(); tableMeta = new TableMeta(); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/polardbx/PolarDBXUndoLogManagerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/polardbx/PolarDBXUndoLogManagerTest.java index e80575b7e09..cb8b2a41a76 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/polardbx/PolarDBXUndoLogManagerTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/polardbx/PolarDBXUndoLogManagerTest.java @@ -32,15 +32,13 @@ import io.seata.rm.datasource.ConnectionContext; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.DataSourceProxy; +import io.seata.rm.datasource.DataSourceProxyTest; import io.seata.rm.datasource.mock.MockDriver; import io.seata.rm.datasource.sql.struct.Row; import io.seata.rm.datasource.sql.struct.TableRecords; -import io.seata.rm.datasource.undo.AbstractUndoLogManager; -import io.seata.rm.datasource.undo.BranchUndoLog; -import io.seata.rm.datasource.undo.SQLUndoLog; -import io.seata.rm.datasource.undo.UndoLogParser; -import io.seata.rm.datasource.undo.UndoLogParserFactory; +import io.seata.rm.datasource.undo.*; +import io.seata.rm.datasource.undo.mysql.MySQLUndoLogManager; import io.seata.rm.datasource.undo.parser.JacksonUndoLogParser; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.druid.SQLOperateRecognizerHolder; @@ -51,6 +49,12 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import javax.sql.DataSource; + +import static org.mockito.ArgumentMatchers.anyString; /** * Undo log manager test for PolarDB-X @@ -95,7 +99,7 @@ public void init() throws SQLException { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(mockDriver); - dataSourceProxy = new DataSourceProxy(dataSource); + dataSourceProxy = DataSourceProxyTest.getDataSourceProxy(dataSource); connectionProxy = new ConnectionProxy(dataSourceProxy, dataSource.getConnection().getConnection()); undoLogManager = new PolarDBXUndoLogManager(); tableMeta = new TableMeta();