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;
}
}