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());
+    }
 }

Reply via email to