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

terrymanu 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 8c2649db8d5 Split same actual table name meta data test into 
owner-focused unit tests (#39511)
8c2649db8d5 is described below

commit 8c2649db8d58be090ef8cd88beb99b33965b955e
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Aug 19 10:31:59 2026 +0800

    Split same actual table name meta data test into owner-focused unit tests 
(#39511)
    
    * Support parsing Doris CREATE TABLE AS SELECT with key clause and ADMIN 
REBALANCE DISK
    
    * Split same actual table name meta data test into owner-focused unit tests
    
    * Remove ShardingSameActualTableNameMetaDataVisibilityTest which violates 
unit test naming contract
    * Assert MetaDataLoader stamps storage unit name on loaded table meta data
    * Assert TableMetaDataReviseEngine passes table's storage unit name to 
table name reviser
    * Add ShardingRuleTest for findShardingTableByDataSourceAndActualTable 
disambiguation
    * Add ShardingTableTest for containsDataNode branches
---
 .../metadata/data/loader/MetaDataLoaderTest.java   |   4 +-
 ...gSameActualTableNameMetaDataVisibilityTest.java | 180 ---------------------
 .../sharding/rule/ShardingRuleTest.java            |  11 ++
 .../sharding/rule/ShardingTableTest.java           |   9 ++
 .../table/TableMetadataReviseEngineTest.java       |   4 +-
 5 files changed, 25 insertions(+), 183 deletions(-)

diff --git 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/MetaDataLoaderTest.java
 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/MetaDataLoaderTest.java
index f0e60a19844..ac67661fb8f 100644
--- 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/MetaDataLoaderTest.java
+++ 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/metadata/data/loader/MetaDataLoaderTest.java
@@ -62,7 +62,9 @@ class MetaDataLoaderTest {
                 new SchemaMetaData("foo_db", Collections.singleton(new 
TableMetaData("foo_tbl", Collections.emptyList(), Collections.emptyList(), 
Collections.emptyList())))));
         try (AutoCloseable ignored = 
registerDialectMetaDataLoader(dialectMetaDataLoader)) {
             Map<String, SchemaMetaData> actual = 
MetaDataLoader.load(Collections.singleton(material));
-            
assertThat(actual.get("foo_db").getTables().iterator().next().getName(), 
is("foo_tbl"));
+            TableMetaData actualTable = 
actual.get("foo_db").getTables().iterator().next();
+            assertThat(actualTable.getName(), is("foo_tbl"));
+            assertThat(actualTable.getStorageUnitName(), 
is("dialect_success"));
         }
     }
     
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSameActualTableNameMetaDataVisibilityTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSameActualTableNameMetaDataVisibilityTest.java
deleted file mode 100644
index d14db5acfd9..00000000000
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSameActualTableNameMetaDataVisibilityTest.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * 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.sharding.metadata;
-
-import lombok.SneakyThrows;
-import 
org.apache.shardingsphere.database.connector.core.metadata.data.loader.DialectMetaDataLoader;
-import 
org.apache.shardingsphere.database.connector.core.metadata.data.loader.MetaDataLoaderMaterial;
-import 
org.apache.shardingsphere.database.connector.core.metadata.data.model.ColumnMetaData;
-import 
org.apache.shardingsphere.database.connector.core.metadata.data.model.SchemaMetaData;
-import 
org.apache.shardingsphere.database.connector.core.metadata.data.model.TableMetaData;
-import 
org.apache.shardingsphere.database.connector.core.metadata.database.datatype.DataTypeRegistry;
-import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-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.identifier.DatabaseIdentifierContextFactory;
-import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
-import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
-import org.apache.shardingsphere.sharding.rule.ShardingRule;
-import org.apache.shardingsphere.test.infra.fixture.jdbc.MockedDataSource;
-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.mockito.internal.configuration.plugins.Plugins;
-import org.mockito.junit.jupiter.MockitoSettings;
-import org.mockito.quality.Strictness;
-
-import javax.sql.DataSource;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.stream.Collectors;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.is;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(AutoMockExtension.class)
-@MockitoSettings(strictness = Strictness.LENIENT)
-@StaticMockSettings(DataTypeRegistry.class)
-class ShardingSameActualTableNameMetaDataVisibilityTest {
-    
-    private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
-    
-    @Test
-    void 
assertBuildKeepsBothLogicTablesWhenSameActualTableNameInDifferentStorageUnits() 
throws Exception {
-        DialectMetaDataLoader dialectMetaDataLoader = 
mock(DialectMetaDataLoader.class);
-        when(dialectMetaDataLoader.getType()).thenReturn(databaseType);
-        
when(dialectMetaDataLoader.load(any(MetaDataLoaderMaterial.class))).thenAnswer(invocation
 -> createDialectLoadedSchema(invocation.getArgument(0)));
-        try (AutoCloseable ignored = 
registerDialectMetaDataLoader(dialectMetaDataLoader)) {
-            assertBothLogicTablesVisible(new Properties());
-        }
-    }
-    
-    @Test
-    void assertBuildKeepsBothLogicTablesWhenCheckTableMetaDataEnabled() throws 
Exception {
-        DialectMetaDataLoader dialectMetaDataLoader = 
mock(DialectMetaDataLoader.class);
-        when(dialectMetaDataLoader.getType()).thenReturn(databaseType);
-        
when(dialectMetaDataLoader.load(any(MetaDataLoaderMaterial.class))).thenAnswer(invocation
 -> createDialectLoadedSchema(invocation.getArgument(0)));
-        Properties props = new Properties();
-        props.setProperty("check-table-metadata-enabled", "true");
-        try (AutoCloseable ignored = 
registerDialectMetaDataLoader(dialectMetaDataLoader)) {
-            assertBothLogicTablesVisible(props);
-        }
-    }
-    
-    private void assertBothLogicTablesVisible(final Properties props) throws 
SQLException {
-        ShardingRule rule = createShardingRule();
-        GenericSchemaBuilderMaterial material = createMaterial(rule, props);
-        Map<String, ShardingSphereSchema> actual = 
GenericSchemaBuilder.build(Arrays.asList("t_order0", "t_order1"), databaseType, 
material);
-        Collection<String> actualTableNames = 
actual.get(material.getDefaultSchemaName()).getAllTables().stream().map(ShardingSphereTable::getName).collect(Collectors.toList());
-        assertThat(actual.size(), is(1));
-        assertThat(actualTableNames.size(), is(2));
-        assertThat(actualTableNames, containsInAnyOrder("t_order0", 
"t_order1"));
-    }
-    
-    private Collection<SchemaMetaData> createDialectLoadedSchema(final 
MetaDataLoaderMaterial material) {
-        return Collections.singleton(new 
SchemaMetaData(material.getDefaultSchemaName(), 
Collections.singletonList(createPhysicalTableMetaData())));
-    }
-    
-    private TableMetaData createPhysicalTableMetaData() {
-        Collection<ColumnMetaData> columns = Arrays.asList(
-                new ColumnMetaData("order_id", Types.BIGINT, true, false, 
true, true, false, false),
-                new ColumnMetaData("user_id", Types.INTEGER, false, false, 
true, true, false, false),
-                new ColumnMetaData("status", Types.VARCHAR, false, false, 
true, true, false, false));
-        return new TableMetaData("t_order", columns, Collections.emptyList(), 
Collections.emptyList());
-    }
-    
-    private GenericSchemaBuilderMaterial createMaterial(final ShardingRule 
rule, final Properties props) {
-        Map<String, StorageUnit> storageUnits = new LinkedHashMap<>(2, 1F);
-        storageUnits.put("ds_0", createStorageUnit());
-        storageUnits.put("ds_1", createStorageUnit());
-        return new GenericSchemaBuilderMaterial(storageUnits, 
Collections.singleton(rule), new ConfigurationProperties(props),
-                "sharding_db", 
DatabaseIdentifierContextFactory.createDefault());
-    }
-    
-    private StorageUnit createStorageUnit() {
-        StorageUnit result = mock(StorageUnit.class);
-        when(result.getStorageType()).thenReturn(databaseType);
-        when(result.getDataSource()).thenReturn(new MockedDataSource());
-        return result;
-    }
-    
-    private ShardingRule createShardingRule() {
-        ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
-        ruleConfig.getTables().add(new 
ShardingTableRuleConfiguration("t_order0", "ds_0.t_order"));
-        ruleConfig.getTables().add(new 
ShardingTableRuleConfiguration("t_order1", "ds_1.t_order"));
-        ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
-        when(computeNodeInstanceContext.getWorkerId()).thenReturn(0);
-        Map<String, DataSource> dataSources = new LinkedHashMap<>(2, 1F);
-        dataSources.put("ds_0", new MockedDataSource());
-        dataSources.put("ds_1", new MockedDataSource());
-        return new ShardingRule(ruleConfig, dataSources, 
computeNodeInstanceContext, Collections.emptyList());
-    }
-    
-    @SneakyThrows(ReflectiveOperationException.class)
-    private AutoCloseable registerDialectMetaDataLoader(final 
DialectMetaDataLoader service) {
-        Map<Class<?>, Object> registeredServices = getRegisteredServices();
-        Object original = registeredServices.put(DialectMetaDataLoader.class, 
createRegisteredService(service));
-        return () -> restoreDialectMetaDataLoader(registeredServices, 
original);
-    }
-    
-    @SuppressWarnings("unchecked")
-    private Map<Class<?>, Object> getRegisteredServices() throws 
ReflectiveOperationException {
-        Field registeredServicesField = 
ShardingSphereServiceLoader.class.getDeclaredField("REGISTERED_SERVICES");
-        return (Map<Class<?>, Object>) 
Plugins.getMemberAccessor().get(registeredServicesField, 
ShardingSphereServiceLoader.class);
-    }
-    
-    @SuppressWarnings("unchecked")
-    private Object createRegisteredService(final DialectMetaDataLoader 
service) throws ReflectiveOperationException {
-        Class<?> registeredServiceClass = 
Class.forName("org.apache.shardingsphere.infra.spi.RegisteredShardingSphereSPI");
-        Constructor<?> constructor = 
registeredServiceClass.getDeclaredConstructor(Class.class);
-        Object result = Plugins.getMemberAccessor().newInstance(constructor, 
DialectMetaDataLoader.class);
-        Field servicesField = 
registeredServiceClass.getDeclaredField("services");
-        Collection<DialectMetaDataLoader> services = 
(Collection<DialectMetaDataLoader>) 
Plugins.getMemberAccessor().get(servicesField, result);
-        services.clear();
-        services.add(service);
-        return result;
-    }
-    
-    private void restoreDialectMetaDataLoader(final Map<Class<?>, Object> 
registeredServices, final Object original) {
-        if (null == original) {
-            registeredServices.remove(DialectMetaDataLoader.class);
-        } else {
-            registeredServices.put(DialectMetaDataLoader.class, original);
-        }
-    }
-}
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
index cff49c0e6ed..e3d1f25e7c3 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
@@ -551,6 +551,17 @@ class ShardingRuleTest {
         assertThat(shardingRule.getDataSourceNames(), is(new 
LinkedHashSet<>(Arrays.asList("ds_0", "ds_1", "resource0", "resource1"))));
     }
     
+    @Test
+    void assertFindShardingTableByDataSourceAndActualTable() {
+        ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
+        shardingRuleConfig.getTables().add(new 
ShardingTableRuleConfiguration("t_order_0", "ds_0.t_order"));
+        shardingRuleConfig.getTables().add(new 
ShardingTableRuleConfiguration("t_order_1", "ds_1.t_order"));
+        ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, 
createDataSources(), mock(ComputeNodeInstanceContext.class), 
Collections.emptyList());
+        
assertThat(shardingRule.findShardingTableByDataSourceAndActualTable("ds_0", 
"t_order").get().getLogicTable(), is("t_order_0"));
+        
assertThat(shardingRule.findShardingTableByDataSourceAndActualTable("ds_1", 
"t_order").get().getLogicTable(), is("t_order_1"));
+        
assertFalse(shardingRule.findShardingTableByDataSourceAndActualTable("ds_0", 
"t_order_2").isPresent());
+    }
+    
     private ShardingRule createMaximumShardingRule() {
         ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
         ShardingTableRuleConfiguration shardingTableRuleConfig = 
createTableRuleConfiguration("LOGIC_TABLE", "ds_${0..1}.table_${0..2}");
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingTableTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingTableTest.java
index 057c539fcc0..0bf1203c145 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingTableTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingTableTest.java
@@ -34,6 +34,7 @@ import java.util.Arrays;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class ShardingTableTest {
@@ -54,6 +55,14 @@ class ShardingTableTest {
         assertThat(actual.getKeyGeneratorName(), is("increment"));
     }
     
+    @Test
+    void assertContainsDataNode() {
+        ShardingTable actual = createShardingTable();
+        assertTrue(actual.containsDataNode("ds0", "table_0"));
+        assertFalse(actual.containsDataNode("ds0", "table_9"));
+        assertFalse(actual.containsDataNode("ds9", "table_0"));
+    }
+    
     private ShardingTable createShardingTable() {
         ShardingTableRuleConfiguration shardingTableRuleConfig = new 
ShardingTableRuleConfiguration("LOGIC_TABLE", "ds${0..1}.table_${0..2}");
         shardingTableRuleConfig.setDatabaseShardingStrategy(new 
NoneShardingStrategyConfiguration());
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/table/TableMetadataReviseEngineTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/table/TableMetadataReviseEngineTest.java
index eba5273bd42..cea0b9aa43b 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/table/TableMetadataReviseEngineTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/table/TableMetadataReviseEngineTest.java
@@ -36,7 +36,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -63,8 +62,9 @@ class TableMetadataReviseEngineTest<T extends 
ShardingSphereRule> {
     void assertGetRevisedTableName() {
         TableNameReviser tableNameReviser = mock(TableNameReviser.class);
         TableMetaData originalMetaData = new 
TableMetaData("originalTableName", new LinkedList<>(), null, null);
+        originalMetaData.setStorageUnitName("ds_0");
         
when(metaDataReviseEntry.getTableNameReviser()).thenReturn(Optional.of(tableNameReviser));
-        when(tableNameReviser.revise(anyString(), eq(rule), 
isNull())).thenReturn("revisedTableName");
+        when(tableNameReviser.revise(anyString(), eq(rule), 
eq("ds_0"))).thenReturn("revisedTableName");
         TableMetaData revisedMetaData = engine.revise(originalMetaData);
         assertThat(revisedMetaData.getName(), is("revisedTableName"));
     }

Reply via email to