This is an automated email from the ASF dual-hosted git repository.

zhaojinchao 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 28cad28c6c7 Add more test cases for MetaDataChangedSubscriber (#32884)
28cad28c6c7 is described below

commit 28cad28c6c7a043e277bf612e1a196bd2896a965
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Sep 15 19:40:54 2024 +0800

    Add more test cases for MetaDataChangedSubscriber (#32884)
---
 .../dispatch/MetaDataChangedSubscriber.java        | 33 +++++---
 .../dispatch/MetaDataChangedSubscriberTest.java    | 99 +++++++++++-----------
 2 files changed, 70 insertions(+), 62 deletions(-)

diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriber.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriber.java
index 10a93688bfa..f6ae7c6f754 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriber.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriber.java
@@ -19,7 +19,6 @@ package 
org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch
 
 import com.google.common.base.Preconditions;
 import com.google.common.eventbus.Subscribe;
-import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
@@ -41,12 +40,18 @@ import java.util.Map;
 /**
  * Meta data changed subscriber.
  */
-@RequiredArgsConstructor
 @SuppressWarnings("unused")
 public final class MetaDataChangedSubscriber implements EventSubscriber {
     
     private final ContextManager contextManager;
     
+    private final ClusterPersistRepository repository;
+    
+    public MetaDataChangedSubscriber(final ContextManager contextManager) {
+        this.contextManager = contextManager;
+        repository = (ClusterPersistRepository) 
contextManager.getPersistServiceFacade().getRepository();
+    }
+    
     /**
      * Renew to added schema.
      *
@@ -76,10 +81,11 @@ public final class MetaDataChangedSubscriber implements 
EventSubscriber {
      */
     @Subscribe
     public synchronized void renew(final CreateOrAlterTableEvent event) {
-        
Preconditions.checkArgument(event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
-                .getActiveVersionByFullPath(event.getActiveVersionKey())), 
"Invalid active version: %s of key: %s", event.getActiveVersion(), 
event.getActiveVersionKey());
-        Map<String, ShardingSphereTable> tables = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService()
-                
.getTableMetaDataPersistService().load(event.getDatabaseName(), 
event.getSchemaName(), event.getTableName());
+        Preconditions.checkArgument(event.getActiveVersion().equals(
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())),
+                "Invalid active version: %s of key: %s", 
event.getActiveVersion(), event.getActiveVersionKey());
+        Map<String, ShardingSphereTable> tables = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().getTableMetaDataPersistService()
+                .load(event.getDatabaseName(), event.getSchemaName(), 
event.getTableName());
         
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
 event.getSchemaName(), tables.values().iterator().next(), null);
         refreshShardingSphereStatisticsData();
     }
@@ -102,12 +108,12 @@ public final class MetaDataChangedSubscriber implements 
EventSubscriber {
      */
     @Subscribe
     public synchronized void renew(final CreateOrAlterViewEvent event) {
-        
Preconditions.checkArgument(event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
-                .getActiveVersionByFullPath(event.getActiveVersionKey())), 
"Invalid active version: %s of key: %s", event.getActiveVersion(), 
event.getActiveVersionKey());
-        Map<String, ShardingSphereView> views = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService()
-                .getViewMetaDataPersistService().load(event.getDatabaseName(), 
event.getSchemaName(), event.getViewName());
-        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
 event.getSchemaName(),
-                null, views.values().iterator().next());
+        Preconditions.checkArgument(event.getActiveVersion().equals(
+                
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())),
+                "Invalid active version: %s of key: %s", 
event.getActiveVersion(), event.getActiveVersionKey());
+        Map<String, ShardingSphereView> views = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().getViewMetaDataPersistService()
+                .load(event.getDatabaseName(), event.getSchemaName(), 
event.getViewName());
+        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
 event.getSchemaName(), null, views.values().iterator().next());
         refreshShardingSphereStatisticsData();
     }
     
@@ -125,8 +131,7 @@ public final class MetaDataChangedSubscriber implements 
EventSubscriber {
     private void refreshShardingSphereStatisticsData() {
         if 
(contextManager.getComputeNodeInstanceContext().getModeConfiguration().isCluster()
                 && InstanceType.PROXY == 
contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType())
 {
-            new ShardingSphereStatisticsRefreshEngine(contextManager,
-                    new GlobalLockContext(new 
GlobalLockPersistService((ClusterPersistRepository) 
contextManager.getPersistServiceFacade().getRepository()))).asyncRefresh();
+            new ShardingSphereStatisticsRefreshEngine(contextManager, new 
GlobalLockContext(new GlobalLockPersistService(repository))).asyncRefresh();
         }
     }
 }
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriberTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriberTest.java
index b39486d67da..f54401f38b7 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriberTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriberTest.java
@@ -17,24 +17,18 @@
 
 package 
org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch;
 
-import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
-import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
-import 
org.apache.shardingsphere.mode.manager.cluster.ClusterContextManagerBuilder;
+import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
 import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.SchemaAddedEvent;
 import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.SchemaDeletedEvent;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
-import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
+import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.CreateOrAlterTableEvent;
+import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.DropTableEvent;
+import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.CreateOrAlterViewEvent;
+import 
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.DropViewEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -44,13 +38,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.junit.jupiter.MockitoSettings;
 import org.mockito.quality.Strictness;
 
-import java.sql.SQLException;
 import java.util.Collections;
-import java.util.Map;
-import java.util.Properties;
 
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -61,46 +50,60 @@ class MetaDataChangedSubscriberTest {
     
     private MetaDataChangedSubscriber subscriber;
     
-    private ContextManager contextManager;
-    
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ShardingSphereDatabase database;
+    private ContextManager contextManager;
     
     @BeforeEach
-    void setUp() throws SQLException {
-        contextManager = new 
ClusterContextManagerBuilder().build(createContextManagerBuilderParameter(), 
new EventBusContext());
-        
contextManager.renewMetaDataContexts(MetaDataContextsFactory.create(contextManager.getPersistServiceFacade().getMetaDataPersistService(),
 new ShardingSphereMetaData(createDatabases(),
-                
contextManager.getMetaDataContexts().getMetaData().getGlobalResourceMetaData(), 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData(),
-                new ConfigurationProperties(new Properties()))));
+    void setUp() {
+        
when(contextManager.getPersistServiceFacade().getRepository()).thenReturn(mock(ClusterPersistRepository.class));
+        
when(contextManager.getMetaDataContexts().getMetaData().getTemporaryProps().getValue(TemporaryConfigurationPropertyKey.PROXY_META_DATA_COLLECTOR_ENABLED)).thenReturn(false);
+        
when(contextManager.getComputeNodeInstanceContext().getModeConfiguration().isCluster()).thenReturn(true);
         subscriber = new MetaDataChangedSubscriber(contextManager);
     }
     
-    private ContextManagerBuilderParameter 
createContextManagerBuilderParameter() {
-        ModeConfiguration modeConfig = new ModeConfiguration("Cluster", new 
ClusterPersistRepositoryConfiguration("FIXTURE", "", "", new Properties()));
-        InstanceMetaData instanceMetaData = new 
ProxyInstanceMetaData("foo_instance_id", 3307);
-        return new ContextManagerBuilderParameter(modeConfig, 
Collections.emptyMap(), Collections.emptyMap(), Collections.emptyList(), new 
Properties(), Collections.emptyList(), instanceMetaData,
-                false);
+    @Test
+    void assertRenewWithSchemaAddedEvent() {
+        
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
+        subscriber.renew(new SchemaAddedEvent("foo_db", "foo_schema"));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).addSchema("foo_db",
 "foo_schema");
     }
     
-    private Map<String, ShardingSphereDatabase> createDatabases() {
-        when(database.getName()).thenReturn("db");
-        
when(database.getSchemas()).thenReturn(Collections.singletonMap("foo_schema", 
new ShardingSphereSchema(DefaultDatabase.LOGIC_NAME)));
-        
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
-        
when(database.getSchema("foo_schema")).thenReturn(mock(ShardingSphereSchema.class));
-        
when(database.getRuleMetaData().getConfigurations()).thenReturn(Collections.emptyList());
-        return Collections.singletonMap("db", database);
+    @Test
+    void assertRenewWithSchemaDeletedEvent() {
+        
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
+        subscriber.renew(new SchemaDeletedEvent("foo_db", "foo_schema"));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropSchema("foo_db",
 "foo_schema");
+    }
+    
+    @Test
+    void assertRenewWithCreateOrAlterTableEvent() {
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+        ShardingSphereTable table = mock(ShardingSphereTable.class);
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().getTableMetaDataPersistService().load("foo_db",
 "foo_schema", "foo_tbl"))
+                .thenReturn(Collections.singletonMap("foo_tbl", table));
+        subscriber.renew(new CreateOrAlterTableEvent("foo_db", "foo_schema", 
"foo_tbl", "key", "value"));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", table, null);
+    }
+    
+    @Test
+    void assertRenewWithDropTableEvent() {
+        subscriber.renew(new DropTableEvent("foo_db", "foo_schema", 
"foo_tbl"));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", "foo_tbl", null);
     }
     
     @Test
-    void assertRenewForSchemaAdded() {
-        subscriber.renew(new SchemaAddedEvent("db", "foo_schema"));
-        
verify(contextManager.getMetaDataContexts().getMetaData().getDatabase("db")).addSchema(argThat("foo_schema"::equals),
 any(ShardingSphereSchema.class));
+    void assertRenewWithCreateOrAlterViewEvent() {
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+        ShardingSphereView view = mock(ShardingSphereView.class);
+        
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().getViewMetaDataPersistService().load("foo_db",
 "foo_schema", "foo_view"))
+                .thenReturn(Collections.singletonMap("foo_view", view));
+        subscriber.renew(new CreateOrAlterViewEvent("foo_db", "foo_schema", 
"foo_view", "key", "value"));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, view);
     }
     
     @Test
-    void assertRenewForSchemaDeleted() {
-        
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("db").containsSchema("foo_schema")).thenReturn(true);
-        subscriber.renew(new SchemaDeletedEvent("db", "foo_schema"));
-        
verify(contextManager.getMetaDataContexts().getMetaData().getDatabase("db")).dropSchema("foo_schema");
+    void assertRenewWithDropViewEvent() {
+        subscriber.renew(new DropViewEvent("foo_db", "foo_schema", "foo_view", 
"key", "value"));
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, "foo_view");
     }
 }

Reply via email to