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

duanzhengqiang 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 8f62e30a4b3 Add test cases on DatabaseMetaDataPersistService (#32978)
8f62e30a4b3 is described below

commit 8f62e30a4b3c218147284e094040f50f12cf1bd4
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Sep 24 14:48:26 2024 +0800

    Add test cases on DatabaseMetaDataPersistService (#32978)
---
 .../database/DatabaseMetaDataPersistService.java   |   5 +-
 .../DatabaseMetaDataPersistServiceTest.java        | 177 +++++++++++++++++++++
 2 files changed, 179 insertions(+), 3 deletions(-)

diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
index e0fdcbec3f1..0915bd977c7 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.metadata.persist.service.database;
 
+import lombok.AccessLevel;
 import lombok.Getter;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -37,17 +38,15 @@ import java.util.Map;
 @Getter
 public final class DatabaseMetaDataPersistService {
     
+    @Getter(AccessLevel.NONE)
     private final PersistRepository repository;
     
     private final TableMetaDataPersistService tableMetaDataPersistService;
     
     private final ViewMetaDataPersistService viewMetaDataPersistService;
     
-    private final MetaDataVersionPersistService metaDataVersionPersistService;
-    
     public DatabaseMetaDataPersistService(final PersistRepository repository, 
final MetaDataVersionPersistService metaDataVersionPersistService) {
         this.repository = repository;
-        this.metaDataVersionPersistService = metaDataVersionPersistService;
         tableMetaDataPersistService = new 
TableMetaDataPersistService(repository, metaDataVersionPersistService);
         viewMetaDataPersistService = new 
ViewMetaDataPersistService(repository, metaDataVersionPersistService);
     }
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistServiceTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistServiceTest.java
new file mode 100644
index 00000000000..8fe6de3531e
--- /dev/null
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistServiceTest.java
@@ -0,0 +1,177 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.metadata.persist.service.database;
+
+import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
+import 
org.apache.shardingsphere.metadata.persist.service.schema.TableMetaDataPersistService;
+import 
org.apache.shardingsphere.metadata.persist.service.schema.ViewMetaDataPersistService;
+import 
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.internal.configuration.plugins.Plugins;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.Collections;
+import java.util.Map;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class DatabaseMetaDataPersistServiceTest {
+    
+    private DatabaseMetaDataPersistService persistService;
+    
+    @Mock
+    private PersistRepository repository;
+    
+    @Mock
+    private TableMetaDataPersistService tableMetaDataPersistService;
+    
+    @Mock
+    private ViewMetaDataPersistService viewMetaDataPersistService;
+    
+    @BeforeEach
+    void setUp() throws ReflectiveOperationException {
+        persistService = new DatabaseMetaDataPersistService(repository, 
mock(MetaDataVersionPersistService.class));
+        
Plugins.getMemberAccessor().set(DatabaseMetaDataPersistService.class.getDeclaredField("tableMetaDataPersistService"),
 persistService, tableMetaDataPersistService);
+        
Plugins.getMemberAccessor().set(DatabaseMetaDataPersistService.class.getDeclaredField("viewMetaDataPersistService"),
 persistService, viewMetaDataPersistService);
+    }
+    
+    @Test
+    void assertAddDatabase() {
+        persistService.addDatabase("foo_db");
+        verify(repository).persist("/metadata/foo_db", "");
+    }
+    
+    @Test
+    void assertDropDatabase() {
+        persistService.dropDatabase("foo_db");
+        verify(repository).delete("/metadata/foo_db");
+    }
+    
+    @Test
+    void assertLoadAllDatabaseNames() {
+        
when(repository.getChildrenKeys("/metadata")).thenReturn(Collections.singletonList("foo"));
+        assertThat(persistService.loadAllDatabaseNames(), 
is(Collections.singletonList("foo")));
+    }
+    
+    @Test
+    void assertAddSchema() {
+        persistService.addSchema("foo_db", "foo_schema");
+        
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/tables", "");
+    }
+    
+    @Test
+    void assertDropSchema() {
+        persistService.dropSchema("foo_db", "foo_schema");
+        verify(repository).delete("/metadata/foo_db/schemas/foo_schema");
+    }
+    
+    @Test
+    void assertCompareAndPersistWithEmptyTablesAndViews() {
+        persistService.compareAndPersist("foo_db", "foo_schema", 
mock(ShardingSphereSchema.class));
+        
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/tables", "");
+        verify(tableMetaDataPersistService).persist("foo_db", "foo_schema", 
Collections.emptyMap());
+    }
+    
+    @Test
+    void assertCompareAndPersistWithNotEmptyTables() {
+        ShardingSphereSchema schema = mock(ShardingSphereSchema.class, 
RETURNS_DEEP_STUBS);
+        when(schema.getTables()).thenReturn(Collections.emptyMap());
+        persistService.compareAndPersist("foo_db", "foo_schema", schema);
+        verify(repository, 
times(0)).persist("/metadata/foo_db/schemas/foo_schema/tables", "");
+        verify(tableMetaDataPersistService).persist("foo_db", "foo_schema", 
Collections.emptyMap());
+    }
+    
+    @Test
+    void assertCompareAndPersistWithNotEmptyViews() {
+        ShardingSphereSchema schema = mock(ShardingSphereSchema.class, 
RETURNS_DEEP_STUBS);
+        ShardingSphereTable table = mock(ShardingSphereTable.class);
+        
when(schema.getTables()).thenReturn(Collections.singletonMap("foo_tbl", table));
+        when(schema.getViews()).thenReturn(Collections.emptyMap());
+        persistService.compareAndPersist("foo_db", "foo_schema", schema);
+        verify(repository, 
times(0)).persist("/metadata/foo_db/schemas/foo_schema/tables", "");
+        verify(tableMetaDataPersistService).persist("foo_db", "foo_schema", 
Collections.singletonMap("foo_tbl", table));
+    }
+    
+    @Test
+    void assertDelete() {
+        ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
+        ShardingSphereTable table = mock(ShardingSphereTable.class);
+        
when(schema.getTables()).thenReturn(Collections.singletonMap("foo_tbl", table));
+        persistService.delete("foo_db", "foo_schema", schema);
+        verify(tableMetaDataPersistService).delete("foo_db", "foo_schema", 
"foo_tbl");
+    }
+    
+    @Test
+    void assertLoadSchemas() {
+        
when(repository.getChildrenKeys("/metadata/foo_db/schemas")).thenReturn(Collections.singletonList("foo_schema"));
+        ShardingSphereTable table = mock(ShardingSphereTable.class);
+        when(tableMetaDataPersistService.load("foo_db", 
"foo_schema")).thenReturn(Collections.singletonMap("foo_tbl", table));
+        ShardingSphereView view = mock(ShardingSphereView.class);
+        when(viewMetaDataPersistService.load("foo_db", 
"foo_schema")).thenReturn(Collections.singletonMap("foo_view", view));
+        Map<String, ShardingSphereSchema> actual = 
persistService.loadSchemas("foo_db");
+        assertThat(actual.size(), is(1));
+        assertThat(actual.get("foo_schema").getTable("foo_tbl"), is(table));
+        assertThat(actual.get("foo_schema").getView("foo_view"), is(view));
+    }
+    
+    @Test
+    void assertPersistByAlterConfiguration() {
+        persistService.persistByAlterConfiguration("foo_db", "foo_schema", 
mock(ShardingSphereSchema.class));
+        
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/tables", "");
+        verify(tableMetaDataPersistService).persist("foo_db", "foo_schema", 
Collections.emptyMap());
+    }
+    
+    @Test
+    void assertPersistByAlterConfigurationWithNotEmptyTables() {
+        ShardingSphereSchema schema = mock(ShardingSphereSchema.class, 
RETURNS_DEEP_STUBS);
+        when(schema.getTables()).thenReturn(Collections.emptyMap());
+        persistService.persistByAlterConfiguration("foo_db", "foo_schema", 
schema);
+        verify(repository, 
times(0)).persist("/metadata/foo_db/schemas/foo_schema/tables", "");
+        verify(tableMetaDataPersistService).persist("foo_db", "foo_schema", 
Collections.emptyMap());
+    }
+    
+    @Test
+    void assertPersistByAlterConfigurationWithNotEmptyViews() {
+        ShardingSphereSchema schema = mock(ShardingSphereSchema.class, 
RETURNS_DEEP_STUBS);
+        ShardingSphereTable table = mock(ShardingSphereTable.class);
+        
when(schema.getTables()).thenReturn(Collections.singletonMap("foo_tbl", table));
+        when(schema.getViews()).thenReturn(Collections.emptyMap());
+        persistService.persistByAlterConfiguration("foo_db", "foo_schema", 
schema);
+        verify(repository, 
times(0)).persist("/metadata/foo_db/schemas/foo_schema/tables", "");
+        verify(tableMetaDataPersistService).persist("foo_db", "foo_schema", 
Collections.singletonMap("foo_tbl", table));
+    }
+    
+    @Test
+    void assertPersistByDropConfiguration() {
+        persistService.persistByDropConfiguration("foo_db", "foo_schema", 
mock(ShardingSphereSchema.class));
+        verify(tableMetaDataPersistService).persist("foo_db", "foo_schema", 
Collections.emptyMap());
+    }
+}

Reply via email to