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