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 d7b61267535 Add more test cases on IndexMetaDataLoaderTest (#38106)
d7b61267535 is described below

commit d7b61267535c373652b00044c9b6e6caa6e469a4
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Feb 20 11:00:59 2026 +0800

    Add more test cases on IndexMetaDataLoaderTest (#38106)
---
 .../data/loader/type/IndexMetaDataLoaderTest.java  | 69 ++++++++++++++++++----
 1 file changed, 57 insertions(+), 12 deletions(-)

diff --git 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/IndexMetaDataLoaderTest.java
 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/IndexMetaDataLoaderTest.java
index aaedea3b526..035988bfb00 100644
--- 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/IndexMetaDataLoaderTest.java
+++ 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/type/IndexMetaDataLoaderTest.java
@@ -19,14 +19,23 @@ package 
org.apache.shardingsphere.database.connector.core.metadata.data.loader.t
 
 import 
org.apache.shardingsphere.database.connector.core.metadata.data.model.IndexMetaData;
 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 java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.concurrent.atomic.AtomicInteger;
+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.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -34,25 +43,61 @@ import static org.mockito.Mockito.when;
 class IndexMetaDataLoaderTest {
     
     @Test
-    void assertLoad() throws SQLException {
-        Collection<IndexMetaData> actual = 
IndexMetaDataLoader.load(mockConnection(), "tbl");
-        assertThat(actual.size(), is(1));
-        IndexMetaData indexMetaData = actual.iterator().next();
-        assertThat(indexMetaData.getName(), is("my_index"));
+    void assertLoadWhenGetIndexInfoThrowsOracleViewNotAppropriateVendorCode() 
throws SQLException {
+        assertTrue(IndexMetaDataLoader.load(mockConnectionWithFailure(new 
SQLException("vendor", "42000", 1702)), "tbl").isEmpty());
+    }
+    
+    @Test
+    void assertLoadWhenGetIndexInfoThrowsSQLException() {
+        assertThrows(SQLException.class, () -> 
IndexMetaDataLoader.load(mockConnectionWithFailure(new SQLException("vendor", 
"42000", 1703)), "tbl"));
     }
     
-    private Connection mockConnection() throws SQLException {
+    private Connection mockConnectionWithFailure(final SQLException exception) 
throws SQLException {
         Connection result = mock(Connection.class, RETURNS_DEEP_STUBS);
-        ResultSet resultSet = mockResultSet();
-        when(result.getMetaData().getIndexInfo("catalog", null, "tbl", false, 
false)).thenReturn(resultSet);
         when(result.getCatalog()).thenReturn("catalog");
+        when(result.getMetaData().getIndexInfo("catalog", null, "tbl", false, 
false)).thenThrow(exception);
         return result;
     }
     
-    private ResultSet mockResultSet() throws SQLException {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("getLoadCases")
+    void assertLoad(final String name,
+                    final ResultSet resultSet, final int expectedSize, final 
String expectedName, final Collection<String> expectedColumns, final boolean 
expectedUnique) throws SQLException {
+        Collection<IndexMetaData> actual = 
IndexMetaDataLoader.load(mockConnection(resultSet), "tbl");
+        assertThat(actual.size(), is(expectedSize));
+        if (0 == expectedSize) {
+            return;
+        }
+        IndexMetaData actualIndexMetaData = actual.iterator().next();
+        assertThat(actualIndexMetaData.getName(), is(expectedName));
+        assertThat(actualIndexMetaData.getColumns(), is(expectedColumns));
+        assertThat(actualIndexMetaData.isUnique(), is(expectedUnique));
+    }
+    
+    private static Stream<Arguments> getLoadCases() throws SQLException {
+        return Stream.of(
+                Arguments.of("skipNullIndexName", mockResultSet(new 
String[]{null}, new String[]{"foo_column"}, new boolean[]{false}),
+                        0, "", Collections.emptyList(), false),
+                Arguments.of("loadUniqueIndex", mockResultSet(new 
String[]{"foo_index"}, new String[]{"foo_column"}, new boolean[]{false}),
+                        1, "foo_index", 
Collections.singletonList("foo_column"), true),
+                Arguments.of("loadNonUniqueIndexWithMultipleColumns", 
mockResultSet(new String[]{"foo_index", "foo_index"},
+                        new String[]{"foo_column", "bar_column"}, new 
boolean[]{true, true}), 1, "foo_index", Arrays.asList("foo_column", 
"bar_column"), false));
+    }
+    
+    private static ResultSet mockResultSet(final String[] indexNames, final 
String[] columnNames, final boolean[] nonUniqueFlags) throws SQLException {
         ResultSet result = mock(ResultSet.class);
-        when(result.next()).thenReturn(true, true, false);
-        when(result.getString("INDEX_NAME")).thenReturn("my_index");
+        AtomicInteger rowCursor = new AtomicInteger(-1);
+        when(result.next()).thenAnswer(invocation -> 
rowCursor.incrementAndGet() < indexNames.length);
+        when(result.getString("INDEX_NAME")).thenAnswer(invocation -> 
indexNames[rowCursor.get()]);
+        when(result.getString("COLUMN_NAME")).thenAnswer(invocation -> 
columnNames[rowCursor.get()]);
+        when(result.getBoolean("NON_UNIQUE")).thenAnswer(invocation -> 
nonUniqueFlags[rowCursor.get()]);
+        return result;
+    }
+    
+    private static Connection mockConnection(final ResultSet resultSet) throws 
SQLException {
+        Connection result = mock(Connection.class, RETURNS_DEEP_STUBS);
+        when(result.getCatalog()).thenReturn("catalog");
+        when(result.getMetaData().getIndexInfo("catalog", null, "tbl", false, 
false)).thenReturn(resultSet);
         return result;
     }
 }

Reply via email to