This is an automated email from the ASF dual-hosted git repository.
menghaoran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new c1abc961718 Refactor FederationMetaDataRefreshEngineTest (#37667)
c1abc961718 is described below
commit c1abc961718534ee82d77a78a2870239ab77a23b
Author: Haoran Meng <[email protected]>
AuthorDate: Wed Jan 7 12:09:59 2026 +0800
Refactor FederationMetaDataRefreshEngineTest (#37667)
---
.../FederationMetaDataRefreshEngineTest.java | 70 +++++++++++++++++++++-
1 file changed, 69 insertions(+), 1 deletion(-)
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngineTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngineTest.java
index d4b69865b47..136d6e7f892 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngineTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngineTest.java
@@ -24,15 +24,17 @@ import
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.mode.metadata.refresher.util.SchemaRefreshUtils;
import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.DeleteStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.InsertStatement;
import
org.apache.shardingsphere.test.infra.framework.extension.mock.AutoMockExtension;
import
org.apache.shardingsphere.test.infra.framework.extension.mock.StaticMockSettings;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
-
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -72,6 +74,25 @@ class FederationMetaDataRefreshEngineTest {
assertTrue(new
FederationMetaDataRefreshEngine(sqlStatementContext).isNeedRefresh());
}
+ @SuppressWarnings("unchecked")
+ @Test
+ void assertIsNeedRefreshWhenRefresherFoundFromExactClass() {
+ SQLStatement sqlStatement = new SQLStatement(databaseType);
+ when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
+ FederationMetaDataRefresher<SQLStatement> refresher =
mock(FederationMetaDataRefresher.class);
+ when(TypedSPILoader.findService(FederationMetaDataRefresher.class,
SQLStatement.class)).thenReturn(Optional.of(refresher));
+ assertTrue(new
FederationMetaDataRefreshEngine(sqlStatementContext).isNeedRefresh());
+ }
+
+ @Test
+ void assertIsNeedRefreshWithDifferentStatementTypes() {
+ DeleteStatement deleteStatement = new DeleteStatement(databaseType);
+
when(sqlStatementContext.getSqlStatement()).thenReturn(deleteStatement);
+ FederationMetaDataRefresher<DeleteStatement> refresher =
mock(FederationMetaDataRefresher.class);
+ when(TypedSPILoader.findService(FederationMetaDataRefresher.class,
DeleteStatement.class)).thenReturn(Optional.of(refresher));
+ assertTrue(new
FederationMetaDataRefreshEngine(sqlStatementContext).isNeedRefresh());
+ }
+
@SuppressWarnings("unchecked")
@Test
void assertRefresh() {
@@ -83,4 +104,51 @@ class FederationMetaDataRefreshEngineTest {
new
FederationMetaDataRefreshEngine(sqlStatementContext).refresh(metaDataManagerPersistService,
database);
verify(refresher).refresh(metaDataManagerPersistService, databaseType,
database, "foo_schema", sqlStatement);
}
+
+ @SuppressWarnings("unchecked")
+ @Test
+ void assertRefreshWithDifferentSchemaName() {
+ InsertStatement sqlStatement = new InsertStatement(databaseType);
+ when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
+ FederationMetaDataRefresher<InsertStatement> refresher =
mock(FederationMetaDataRefresher.class);
+ when(TypedSPILoader.findService(FederationMetaDataRefresher.class,
InsertStatement.class)).thenReturn(Optional.of(refresher));
+ when(SchemaRefreshUtils.getSchemaName(database,
sqlStatementContext)).thenReturn("bar_schema");
+ new
FederationMetaDataRefreshEngine(sqlStatementContext).refresh(metaDataManagerPersistService,
database);
+ verify(refresher).refresh(metaDataManagerPersistService, databaseType,
database, "bar_schema", sqlStatement);
+ }
+
+ @Test
+ void assertRefreshThrowsNullPointerExceptionWhenRefresherIsNull() {
+ SQLStatement sqlStatement = new SQLStatement(databaseType);
+ when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
+ when(TypedSPILoader.findService(FederationMetaDataRefresher.class,
SQLStatement.class)).thenReturn(Optional.empty());
+ when(TypedSPILoader.findService(FederationMetaDataRefresher.class,
Object.class)).thenReturn(Optional.empty());
+ FederationMetaDataRefreshEngine engine = new
FederationMetaDataRefreshEngine(sqlStatementContext);
+ assertThrows(NullPointerException.class, () ->
engine.refresh(metaDataManagerPersistService, database));
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ void assertRefreshMultipleTimesWithSameStatement() {
+ SQLStatement sqlStatement = new SQLStatement(databaseType);
+ when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
+ FederationMetaDataRefresher<SQLStatement> refresher =
mock(FederationMetaDataRefresher.class);
+ when(TypedSPILoader.findService(FederationMetaDataRefresher.class,
SQLStatement.class)).thenReturn(Optional.of(refresher));
+ when(SchemaRefreshUtils.getSchemaName(database,
sqlStatementContext)).thenReturn("foo_schema");
+ FederationMetaDataRefreshEngine engine = new
FederationMetaDataRefreshEngine(sqlStatementContext);
+ engine.refresh(metaDataManagerPersistService, database);
+ engine.refresh(metaDataManagerPersistService, database);
+ verify(refresher,
org.mockito.Mockito.times(2)).refresh(metaDataManagerPersistService,
databaseType, database, "foo_schema", sqlStatement);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ void assertIsNeedRefreshWhenRefresherFoundForBothClassAndSuperClass() {
+ SQLStatement sqlStatement = new SQLStatement(databaseType);
+ when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
+ FederationMetaDataRefresher<SQLStatement> classRefresher =
mock(FederationMetaDataRefresher.class);
+ when(TypedSPILoader.findService(FederationMetaDataRefresher.class,
SQLStatement.class)).thenReturn(Optional.of(classRefresher));
+ FederationMetaDataRefreshEngine engine = new
FederationMetaDataRefreshEngine(sqlStatementContext);
+ assertTrue(engine.isNeedRefresh());
+ }
}