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

zhaojinchao 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 5fffa5558e3 Refactor MetaDataRefreshEngineTest (#18399)
5fffa5558e3 is described below

commit 5fffa5558e3304b64d2c66655c07e54ef8600127
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jun 17 06:23:30 2022 +0800

    Refactor MetaDataRefreshEngineTest (#18399)
    
    * Refactor MetaDataRefreshEngineTest
    
    * Refactor MetaDataRefreshEngineTest
---
 .../context/refresher/MetaDataRefreshEngine.java   |  7 +--
 .../refresher/MetaDataRefreshEngineTest.java       | 70 ++++++++++------------
 .../refresher/MetaDataRefresherFactoryTest.java    |  4 +-
 .../fixture/MetaDataRefresherFixture.java          |  9 ++-
 ...a => MetaDataRefresherSQLStatementFixture.java} |  7 +--
 .../type/DummyDropDatabaseMetaDataRefresher.java   | 51 ----------------
 ...phere.infra.context.refresher.MetaDataRefresher |  1 -
 7 files changed, 45 insertions(+), 104 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
index e287b8ca6a7..0bcf2b9c8e7 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
@@ -33,7 +33,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
@@ -43,7 +42,7 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 public final class MetaDataRefreshEngine {
     
-    private static final Set<Class<? extends SQLStatement>> 
IGNORABLE_SQL_STATEMENT_CLASSES = Collections.newSetFromMap(new 
ConcurrentHashMap<>());
+    private static final Collection<Class<? extends SQLStatement>> 
IGNORED_SQL_STATEMENT_CLASSES = Collections.newSetFromMap(new 
ConcurrentHashMap<>());
     
     private final ShardingSphereDatabase database;
     
@@ -64,7 +63,7 @@ public final class MetaDataRefreshEngine {
     @SuppressWarnings({"unchecked", "rawtypes"})
     public Optional<MetaDataRefreshedEvent> refresh(final 
SQLStatementContext<?> sqlStatementContext, final Collection<RouteUnit> 
routeUnits) throws SQLException {
         Class<? extends SQLStatement> sqlStatementClass = 
sqlStatementContext.getSqlStatement().getClass();
-        if (IGNORABLE_SQL_STATEMENT_CLASSES.contains(sqlStatementClass)) {
+        if (IGNORED_SQL_STATEMENT_CLASSES.contains(sqlStatementClass)) {
             return Optional.empty();
         }
         Optional<MetaDataRefresher> schemaRefresher = 
MetaDataRefresherFactory.findInstance(sqlStatementClass);
@@ -74,7 +73,7 @@ public final class MetaDataRefreshEngine {
             Collection<String> logicDataSourceNames = 
routeUnits.stream().map(each -> 
each.getDataSourceMapper().getLogicName()).collect(Collectors.toList());
             return schemaRefresher.get().refresh(database, federationMetaData, 
optimizerPlanners, logicDataSourceNames, schemaName, 
sqlStatementContext.getSqlStatement(), props);
         }
-        IGNORABLE_SQL_STATEMENT_CLASSES.add(sqlStatementClass);
+        IGNORED_SQL_STATEMENT_CLASSES.add(sqlStatementClass);
         return Optional.empty();
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
index f39963ac114..4cabd368898 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
@@ -17,74 +17,66 @@
 
 package org.apache.shardingsphere.infra.context.refresher;
 
-import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import 
org.apache.shardingsphere.infra.context.refresher.type.DummyDropDatabaseMetaDataRefresher;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
+import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import 
org.apache.shardingsphere.infra.context.refresher.fixture.MetaDataRefresherSQLStatementFixture;
+import 
org.apache.shardingsphere.infra.context.refresher.fixture.MetaDataRefresherFixture;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import 
org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.sql.SQLException;
 import java.util.Collections;
 import java.util.Optional;
-import java.util.Set;
+import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(MockitoJUnitRunner.class)
 public final class MetaDataRefreshEngineTest {
     
-    @InjectMocks
-    private MetaDataRefreshEngine metaDataRefreshEngine;
+    private final MetaDataRefreshEngine engine = new MetaDataRefreshEngine(
+            mock(ShardingSphereDatabase.class), 
mock(FederationDatabaseMetaData.class), Collections.emptyMap(), new 
ConfigurationProperties(new Properties()));
     
     @SuppressWarnings("rawtypes")
     @Test
-    public void assertRefreshNonIgnorableSQLStatement() throws Exception {
-        SQLStatementContext<DropDatabaseStatement> sqlStatementContext = 
mock(SQLStatementContext.class);
-        
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(DropDatabaseStatement.class));
-        
when(sqlStatementContext.getTablesContext()).thenReturn(mock(TablesContext.class));
-        when(sqlStatementContext.getDatabaseType()).thenReturn(new 
MySQLDatabaseType());
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getName()).thenReturn("database");
-        Field field = 
metaDataRefreshEngine.getClass().getDeclaredField("database");
-        field.setAccessible(true);
-        field.set(metaDataRefreshEngine, database);
-        int dropTimes = 10;
+    public void assertRefresh() throws Exception {
+        SQLStatementContext sqlStatementContext = mockStatementContext();
+        int dropTimes = 3;
         for (int i = 0; i < dropTimes; i++) {
-            metaDataRefreshEngine.refresh(sqlStatementContext, 
Collections.emptyList());
+            assertTrue(engine.refresh(sqlStatementContext, 
Collections.emptyList()).isPresent());
         }
-        Optional<MetaDataRefresher> refresher = 
MetaDataRefresherFactory.findInstance(mock(DropDatabaseStatement.class).getClass());
+        Optional<MetaDataRefresher> refresher = 
MetaDataRefresherFactory.findInstance(mock(MetaDataRefresherSQLStatementFixture.class).getClass());
         assertTrue(refresher.isPresent());
-        assertThat(((DummyDropDatabaseMetaDataRefresher) 
refresher.get()).getCount(), is(dropTimes));
+        assertThat(((MetaDataRefresherFixture) refresher.get()).getCount(), 
is(dropTimes));
     }
     
     @SuppressWarnings("unchecked")
+    private SQLStatementContext<?> mockStatementContext() {
+        SQLStatementContext<MetaDataRefresherSQLStatementFixture> result = 
mock(SQLStatementContext.class);
+        
when(result.getSqlStatement()).thenReturn(mock(MetaDataRefresherSQLStatementFixture.class));
+        when(result.getTablesContext()).thenReturn(mock(TablesContext.class));
+        when(result.getDatabaseType()).thenReturn(mock(DatabaseType.class));
+        return result;
+    }
+    
     @Test
-    public void assertRefreshIgnorableSQLStatement() throws SQLException {
-        SQLStatementContext<SelectStatement> sqlStatementContext = 
mock(SQLStatementContext.class);
-        
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(SelectStatement.class));
-        metaDataRefreshEngine.refresh(sqlStatementContext, 
Collections.emptyList());
-        
assertTrue(getIgnorableSQLStatementClasses().contains(sqlStatementContext.getSqlStatement().getClass()));
+    public void assertRefreshWithIgnoredSQLStatement() throws SQLException {
+        assertFalse(engine.refresh(mockSelectStatementContext(), 
Collections.emptyList()).isPresent());
+        assertFalse(engine.refresh(mockSelectStatementContext(), 
Collections.emptyList()).isPresent());
     }
     
-    @SuppressWarnings("unchecked")
-    @SneakyThrows(ReflectiveOperationException.class)
-    private Set<Class<? extends SQLStatement>> 
getIgnorableSQLStatementClasses() {
-        Field field = 
MetaDataRefreshEngine.class.getDeclaredField("IGNORABLE_SQL_STATEMENT_CLASSES");
-        field.setAccessible(true);
-        return (Set<Class<? extends SQLStatement>>) field.get(null);
+    private SelectStatementContext mockSelectStatementContext() {
+        SelectStatementContext result = mock(SelectStatementContext.class);
+        when(result.getSqlStatement()).thenReturn(mock(SelectStatement.class));
+        return result;
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresherFactoryTest.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresherFactoryTest.java
index 991125a261e..dc34733463e 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresherFactoryTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresherFactoryTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.infra.context.refresher;
 
-import 
org.apache.shardingsphere.infra.context.refresher.fixture.FixtureSQLStatement;
+import 
org.apache.shardingsphere.infra.context.refresher.fixture.MetaDataRefresherSQLStatementFixture;
 import 
org.apache.shardingsphere.infra.context.refresher.fixture.MetaDataRefresherFixture;
 import org.junit.Test;
 
@@ -32,7 +32,7 @@ public final class MetaDataRefresherFactoryTest {
     @SuppressWarnings("rawtypes")
     @Test
     public void assertFindInstance() {
-        Optional<MetaDataRefresher> actual = 
MetaDataRefresherFactory.findInstance(FixtureSQLStatement.class);
+        Optional<MetaDataRefresher> actual = 
MetaDataRefresherFactory.findInstance(MetaDataRefresherSQLStatementFixture.class);
         assertTrue(actual.isPresent());
         assertThat(actual.get(), instanceOf(MetaDataRefresherFixture.class));
     }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/MetaDataRefresherFixture.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/MetaDataRefresherFixture.java
index 25a7eabe2fa..670c8a1a5c2 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/MetaDataRefresherFixture.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/MetaDataRefresherFixture.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.context.refresher.fixture;
 
+import lombok.Getter;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
 import 
org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
@@ -29,13 +30,19 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
 
+import static org.mockito.Mockito.mock;
+
+@Getter
 public final class MetaDataRefresherFixture implements 
MetaDataRefresher<AbstractSQLStatement> {
     
+    private int count;
+    
     @Override
     public Optional<MetaDataRefreshedEvent> refresh(final 
ShardingSphereDatabase database, final FederationDatabaseMetaData 
federationDatabaseMetaData,
                                                     final Map<String, 
OptimizerPlannerContext> optimizerPlanners, final Collection<String> 
logicDataSourceNames,
                                                     final String schemaName, 
final AbstractSQLStatement sqlStatement, final ConfigurationProperties props) {
-        return Optional.empty();
+        count++;
+        return Optional.of(mock(MetaDataRefreshedEvent.class));
     }
     
     @Override
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/FixtureSQLStatement.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/MetaDataRefresherSQLStatementFixture.java
similarity index 86%
rename from 
shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/FixtureSQLStatement.java
rename to 
shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/MetaDataRefresherSQLStatementFixture.java
index 05623055321..8eeb656ad87 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/FixtureSQLStatement.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/fixture/MetaDataRefresherSQLStatementFixture.java
@@ -19,10 +19,5 @@ package 
org.apache.shardingsphere.infra.context.refresher.fixture;
 
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
-public final class FixtureSQLStatement extends AbstractSQLStatement {
-    
-    @Override
-    public int getParameterCount() {
-        return 0;
-    }
+public final class MetaDataRefresherSQLStatementFixture extends 
AbstractSQLStatement {
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
deleted file mode 100644
index 79708343983..00000000000
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
+++ /dev/null
@@ -1,51 +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.infra.context.refresher.type;
-
-import lombok.Getter;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import 
org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
-import 
org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Optional;
-
-@Getter
-public final class DummyDropDatabaseMetaDataRefresher implements 
MetaDataRefresher<DropDatabaseStatement> {
-    
-    private int count;
-    
-    @Override
-    public Optional<MetaDataRefreshedEvent> refresh(final 
ShardingSphereDatabase database, final FederationDatabaseMetaData 
federationDatabaseMetaData,
-                                                    final Map<String, 
OptimizerPlannerContext> optimizerPlanners,
-                                                    final Collection<String> 
logicDataSourceNames, final String schemaName, final DropDatabaseStatement 
sqlStatement,
-                                                    final 
ConfigurationProperties props) {
-        count++;
-        return Optional.empty();
-    }
-    
-    @Override
-    public String getType() {
-        return DropDatabaseStatement.class.getName();
-    }
-}
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher
index ed25ef149d1..d4e6a741018 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher
@@ -15,5 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.infra.context.refresher.type.DummyDropDatabaseMetaDataRefresher
 
org.apache.shardingsphere.infra.context.refresher.fixture.MetaDataRefresherFixture

Reply via email to