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

zhangliang 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 d853fb88b33 Add more test cases on DatabaseTypeFactoryTest and 
DatabaseTypeRegistryTest (#38112)
d853fb88b33 is described below

commit d853fb88b3335e1e7a104bc4812822b87b3a11e2
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Feb 20 14:53:29 2026 +0800

    Add more test cases on DatabaseTypeFactoryTest and DatabaseTypeRegistryTest 
(#38112)
---
 .../core/type/DatabaseTypeFactoryTest.java         | 85 +++++++++++++++++++---
 .../core/type/DatabaseTypeRegistryTest.java        | 54 ++++++++++----
 2 files changed, 116 insertions(+), 23 deletions(-)

diff --git 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactoryTest.java
 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactoryTest.java
index 3976932b2dd..553a4202d96 100644
--- 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactoryTest.java
+++ 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeFactoryTest.java
@@ -18,26 +18,93 @@
 package org.apache.shardingsphere.database.connector.core.type;
 
 import 
org.apache.shardingsphere.database.connector.core.exception.UnsupportedStorageTypeException;
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+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.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedStatic;
+
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
+import java.util.stream.Stream;
 
-import static org.hamcrest.Matchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.when;
 
+@ExtendWith(AutoMockExtension.class)
+@StaticMockSettings(ShardingSphereServiceLoader.class)
 class DatabaseTypeFactoryTest {
     
-    @Test
-    void assertGetDatabaseTypeWithTrunkURL() {
-        
assertThat(DatabaseTypeFactory.get("jdbc:trunk://localhost:3306/test").getType(),
 is("TRUNK"));
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("getDatabaseTypeWithRecognizedURLArguments")
+    void assertGetWithRecognizedURL(final String name, final String url, final 
Collection<DatabaseType> databaseTypes, final DatabaseType 
expectedDatabaseType) {
+        
when(ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)).thenReturn(databaseTypes);
+        assertThat(DatabaseTypeFactory.get(url), is(expectedDatabaseType));
     }
     
     @Test
-    void assertGetDatabaseTypeWithBranchURL() {
-        
assertThat(DatabaseTypeFactory.get("jdbc:trunk:branch://localhost:3306/test?databaseType=BRANCH").getType(),
 is("TRUNK"));
+    void assertGetWithUnrecognizedURL() {
+        DatabaseType databaseType = mock(DatabaseType.class);
+        
when(databaseType.getJdbcUrlPrefixes()).thenReturn(Collections.singleton("jdbc:trunk:"));
+        
when(ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)).thenReturn(Collections.singletonList(databaseType));
+        assertThrows(UnsupportedStorageTypeException.class, () -> 
DatabaseTypeFactory.get("jdbc:not-existed:test"));
     }
     
-    @Test
-    void assertGetDatabaseTypeWithUnrecognizedURL() {
-        assertThrows(UnsupportedStorageTypeException.class, () -> 
DatabaseTypeFactory.get("jdbc:not-existed:test"));
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("getDatabaseTypeWithDatabaseMetaDataArguments")
+    void assertGetWithDatabaseMetaData(final String name, final String 
productName, final String url, final Collection<DatabaseType> databaseTypes,
+                                       final DatabaseType 
expectedDatabaseType, final boolean isHive) throws SQLException {
+        DatabaseMetaData metaData = mock(DatabaseMetaData.class);
+        when(metaData.getDatabaseProductName()).thenReturn(productName);
+        if (isHive) {
+            DatabaseType hiveDatabaseType = mock(DatabaseType.class);
+            try (MockedStatic<TypedSPILoader> typedSPILoader = 
mockStatic(TypedSPILoader.class)) {
+                typedSPILoader.when(() -> 
TypedSPILoader.getService(DatabaseType.class, 
"Hive")).thenReturn(hiveDatabaseType);
+                assertThat(DatabaseTypeFactory.get(metaData), 
is(hiveDatabaseType));
+            }
+            return;
+        }
+        when(metaData.getURL()).thenReturn(url);
+        
when(ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)).thenReturn(databaseTypes);
+        assertThat(DatabaseTypeFactory.get(metaData), 
is(expectedDatabaseType));
+    }
+    
+    private static Stream<Arguments> 
getDatabaseTypeWithRecognizedURLArguments() {
+        DatabaseType trunkDatabaseType = mockDatabaseType("jdbc:trunk:", null);
+        DatabaseType branchDatabaseType = 
mockDatabaseType("jdbc:trunk:branch:", trunkDatabaseType);
+        DatabaseType branchOnlyDatabaseType = 
mockDatabaseType("jdbc:branch-only:", mock(DatabaseType.class));
+        return Stream.of(
+                Arguments.of("trunk url", "jdbc:trunk://localhost:3306/test", 
Collections.singletonList(trunkDatabaseType), trunkDatabaseType),
+                Arguments.of("branch url", 
"jdbc:trunk:branch://localhost:3306/test?databaseType=BRANCH", 
Arrays.asList(trunkDatabaseType, branchDatabaseType), trunkDatabaseType),
+                Arguments.of("branch only url", 
"jdbc:branch-only://localhost:3306/test", 
Collections.singletonList(branchOnlyDatabaseType), branchOnlyDatabaseType));
+    }
+    
+    private static Stream<Arguments> 
getDatabaseTypeWithDatabaseMetaDataArguments() {
+        DatabaseType trunkDatabaseType = mockDatabaseType("jdbc:trunk:", null);
+        DatabaseType branchOnlyDatabaseType = 
mockDatabaseType("jdbc:branch-only:", mock(DatabaseType.class));
+        return Stream.of(
+                Arguments.of("hive database product", "Apache Hive", 
"jdbc:hive://localhost:3306/test", Collections.emptyList(), null, true),
+                Arguments.of("non hive with trunk url", "MySQL", 
"jdbc:trunk://localhost:3306/test", 
Collections.singletonList(trunkDatabaseType), trunkDatabaseType, false),
+                Arguments.of("non hive with branch only url", "MySQL", 
"jdbc:branch-only://localhost:3306/test", 
Collections.singletonList(branchOnlyDatabaseType), branchOnlyDatabaseType, 
false));
+    }
+    
+    private static DatabaseType mockDatabaseType(final String jdbcUrlPrefix, 
final DatabaseType trunkDatabaseType) {
+        DatabaseType result = mock(DatabaseType.class);
+        
when(result.getJdbcUrlPrefixes()).thenReturn(Collections.singleton(jdbcUrlPrefix));
+        
when(result.getTrunkDatabaseType()).thenReturn(Optional.ofNullable(trunkDatabaseType));
+        return result;
     }
 }
diff --git 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeRegistryTest.java
 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeRegistryTest.java
index b9a6a83a7b1..ae6b3e122e9 100644
--- 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeRegistryTest.java
+++ 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/type/DatabaseTypeRegistryTest.java
@@ -17,41 +17,67 @@
 
 package org.apache.shardingsphere.database.connector.core.type;
 
+import 
org.apache.shardingsphere.database.connector.core.metadata.database.metadata.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.database.connector.core.metadata.database.metadata.option.IdentifierPatternType;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.internal.configuration.plugins.Plugins;
 
 import java.util.Collections;
+import java.util.stream.Stream;
 
-import static org.hamcrest.Matchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.hamcrest.Matchers.is;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 class DatabaseTypeRegistryTest {
     
+    private final DatabaseType trunkDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "TRUNK");
+    
+    private final DatabaseType branchDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "BRANCH");
+    
     @Test
     void assertGetAllBranchDatabaseTypesWithTrunkType() {
-        assertThat(new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
"TRUNK")).getAllBranchDatabaseTypes(),
-                
is(Collections.singletonList(TypedSPILoader.getService(DatabaseType.class, 
"BRANCH"))));
+        assertThat(new 
DatabaseTypeRegistry(trunkDatabaseType).getAllBranchDatabaseTypes(), 
is(Collections.singletonList(branchDatabaseType)));
     }
     
     @Test
     void assertGetAllBranchDatabaseTypesWithBranchType() {
-        assertTrue(new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
"BRANCH")).getAllBranchDatabaseTypes().isEmpty());
+        assertTrue(new 
DatabaseTypeRegistry(branchDatabaseType).getAllBranchDatabaseTypes().isEmpty());
     }
     
-    @Test
-    void assertGetDefaultSchemaNameWhenDatabaseTypeContainsDefaultSchema() {
-        assertThat(new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
"TRUNK")).getDefaultSchemaName("FOO"), is("test"));
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("getDefaultSchemaNameArguments")
+    void assertGetDefaultSchemaName(final String name, final String 
databaseType, final String databaseName, final String expectedSchemaName) {
+        assertThat(new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
databaseType)).getDefaultSchemaName(databaseName), is(expectedSchemaName));
     }
     
-    @Test
-    void assertGetDefaultSchemaNameWhenDatabaseTypeNotContainsDefaultSchema() {
-        assertThat(new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
"BRANCH")).getDefaultSchemaName("FOO"), is("FOO"));
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("formatIdentifierPatternArguments")
+    void assertFormatIdentifierPattern(final String name, final 
IdentifierPatternType identifierPatternType, final String 
expectedIdentifierPattern) throws ReflectiveOperationException {
+        DialectDatabaseMetaData dialectDatabaseMetaData = 
mock(DialectDatabaseMetaData.class);
+        
when(dialectDatabaseMetaData.getIdentifierPatternType()).thenReturn(identifierPatternType);
+        DatabaseTypeRegistry databaseTypeRegistry = new 
DatabaseTypeRegistry(trunkDatabaseType);
+        
Plugins.getMemberAccessor().set(DatabaseTypeRegistry.class.getDeclaredField("dialectDatabaseMetaData"),
 databaseTypeRegistry, dialectDatabaseMetaData);
+        assertThat(databaseTypeRegistry.formatIdentifierPattern("Foo"), 
is(expectedIdentifierPattern));
     }
     
-    @Test
-    void 
assertGetDefaultSchemaNameWhenDatabaseTypeNotContainsDefaultSchemaAndNullDatabaseName()
 {
-        assertNull(new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
"BRANCH")).getDefaultSchemaName(null));
+    private static Stream<Arguments> getDefaultSchemaNameArguments() {
+        return Stream.of(
+                Arguments.of("database type contains default schema", "TRUNK", 
"FOO", "test"),
+                Arguments.of("database type does not contain default schema", 
"BRANCH", "FOO", "FOO"),
+                Arguments.of("database name is null", "BRANCH", null, null));
+    }
+    
+    private static Stream<Arguments> formatIdentifierPatternArguments() {
+        return Stream.of(
+                Arguments.of("identifier pattern upper case", 
IdentifierPatternType.UPPER_CASE, "FOO"),
+                Arguments.of("identifier pattern lower case", 
IdentifierPatternType.LOWER_CASE, "foo"),
+                Arguments.of("identifier pattern keep origin", 
IdentifierPatternType.KEEP_ORIGIN, "Foo"));
     }
 }

Reply via email to