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

totalo 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 3a17761f3d1 Use new ShardingSphereRuleMetaData instead mock in all 
test cases (#23752)
3a17761f3d1 is described below

commit 3a17761f3d1fd91da015219720897243d8ac95a3
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jan 28 09:30:27 2023 +0800

    Use new ShardingSphereRuleMetaData instead mock in all test cases (#23752)
---
 .../CountDatabaseDiscoveryRuleResultSetTest.java      |  7 ++-----
 .../DatabaseDiscoveryHeartbeatResultSetTest.java      |  4 +---
 .../query/DatabaseDiscoveryTypeResultSetTest.java     |  4 +---
 .../handler/query/CountEncryptRuleResultSetTest.java  |  7 ++-----
 .../handler/query/CountMaskRuleResultSetTest.java     |  5 +----
 .../CountReadwriteSplittingRuleResultSetTest.java     |  7 ++-----
 .../distsql/query/CountShadowRuleResultSetTest.java   |  8 +++-----
 .../checker/ShardingRuleStatementCheckerTest.java     |  6 +-----
 .../AlterShardingTableRuleStatementUpdaterTest.java   |  6 +-----
 .../driver/executor/AbstractBaseExecutorTest.java     | 10 ++++------
 .../driver/jdbc/adapter/ConnectionAdapterTest.java    |  7 +++----
 .../jdbc/adapter/PreparedStatementAdapterTest.java    | 18 ++++++------------
 .../driver/jdbc/adapter/StatementAdapterTest.java     | 19 ++++++++++---------
 .../jdbc/core/connection/ConnectionManagerTest.java   |  6 ++----
 .../core/connection/ShardingSphereConnectionTest.java |  7 +++----
 .../UnsupportedOperationConnectionTest.java           |  7 +++----
 .../UnsupportedOperationPreparedStatementTest.java    | 16 +++++-----------
 .../UnsupportedOperationStatementTest.java            | 13 +++++++------
 .../driver/state/DriverStateContextTest.java          |  8 +++-----
 .../driver/state/ok/OKDriverStateTest.java            |  7 +++----
 .../distsql/handler/AuthorityRuleResultSetTest.java   |  7 ++-----
 .../handler/query/SQLParserRuleResultSetTest.java     |  6 ++----
 .../optimizer/context/OptimizerContextTest.java       |  4 +---
 .../handler/SQLTranslatorRuleResultSetTest.java       |  6 ++----
 .../handler/query/TrafficRuleResultSetTest.java       |  5 +----
 .../handler/query/TransactionRuleResultSetTest.java   |  8 ++------
 .../mode/manager/ContextManagerTest.java              |  9 ---------
 .../jdbc/DatabaseCommunicationEngineTest.java         |  6 +-----
 .../jdbc/datasource/JDBCBackendDataSourceTest.java    |  5 ++---
 .../transaction/BackendTransactionManagerTest.java    |  7 +++----
 .../handler/ProxyBackendHandlerFactoryTest.java       | 16 ++++++----------
 .../distsql/ral/advance/ParseDistSQLHandlerTest.java  |  8 +++-----
 .../distsql/rql/CountSingleTableResultSetTest.java    |  8 +++-----
 .../distsql/rql/RQLResultSetBackendHandlerTest.java   |  3 +--
 .../distsql/rql/SingleTableRuleResultSetTest.java     |  9 ++++-----
 .../TransactionBackendHandlerFactoryTest.java         |  6 +++---
 .../transaction/TransactionBackendHandlerTest.java    |  5 ++---
 .../proxy/backend/session/ConnectionSessionTest.java  |  6 +++---
 .../netty/FrontendChannelInboundHandlerTest.java      |  7 ++++---
 .../execute/MySQLComStmtExecuteExecutorTest.java      |  3 +--
 .../text/query/MySQLComQueryPacketExecutorTest.java   |  6 +++---
 .../text/query/MySQLMultiStatementsHandlerTest.java   |  6 +++---
 .../bind/OpenGaussComBatchBindExecutorTest.java       |  3 +--
 ...ggregatedBatchedStatementsCommandExecutorTest.java |  5 ++---
 .../PostgreSQLBatchedStatementsExecutorTest.java      |  3 +--
 .../describe/PostgreSQLComDescribeExecutorTest.java   |  5 ++---
 .../parse/PostgreSQLComParseExecutorTest.java         |  9 +--------
 47 files changed, 122 insertions(+), 221 deletions(-)

diff --git 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/CountDatabaseDiscoveryRuleResultSetTest.java
 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/CountDatabaseDiscoveryRuleResultSetTest.java
index ea85b0f0a60..210c08a5cba 100644
--- 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/CountDatabaseDiscoveryRuleResultSetTest.java
+++ 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/CountDatabaseDiscoveryRuleResultSetTest.java
@@ -29,11 +29,10 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -57,10 +56,8 @@ public final class CountDatabaseDiscoveryRuleResultSetTest {
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(result.getName()).thenReturn("db_1");
-        ShardingSphereRuleMetaData ruleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         DatabaseDiscoveryRule databaseDiscoveryRule = 
mockDatabaseDiscoveryRule();
-        
when(ruleMetaData.findSingleRule(DatabaseDiscoveryRule.class)).thenReturn(Optional.of(databaseDiscoveryRule));
-        when(result.getRuleMetaData()).thenReturn(ruleMetaData);
+        when(result.getRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(databaseDiscoveryRule)));
         return result;
     }
     
diff --git 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryHeartbeatResultSetTest.java
 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryHeartbeatResultSetTest.java
index 5084377560a..f949bae772d 100644
--- 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryHeartbeatResultSetTest.java
+++ 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryHeartbeatResultSetTest.java
@@ -50,9 +50,7 @@ public final class DatabaseDiscoveryHeartbeatResultSetTest {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         DatabaseDiscoveryRule rule = mock(DatabaseDiscoveryRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        ShardingSphereRuleMetaData databaseRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        when(database.getRuleMetaData()).thenReturn(databaseRuleMetaData);
-        
when(databaseRuleMetaData.getSingleRule(DatabaseDiscoveryRule.class)).thenReturn(rule);
+        when(database.getRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(rule)));
         DatabaseDistSQLResultSet resultSet = new 
DatabaseDiscoveryHeartbeatResultSet();
         resultSet.init(database, 
mock(ShowDatabaseDiscoveryRulesStatement.class));
         Collection<String> columnNames = resultSet.getColumnNames();
diff --git 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryTypeResultSetTest.java
 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryTypeResultSetTest.java
index 34f1c508997..3173dba8727 100644
--- 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryTypeResultSetTest.java
+++ 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryTypeResultSetTest.java
@@ -50,9 +50,7 @@ public final class DatabaseDiscoveryTypeResultSetTest {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         DatabaseDiscoveryRule rule = mock(DatabaseDiscoveryRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        ShardingSphereRuleMetaData databaseRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        when(database.getRuleMetaData()).thenReturn(databaseRuleMetaData);
-        
when(databaseRuleMetaData.getSingleRule(DatabaseDiscoveryRule.class)).thenReturn(rule);
+        when(database.getRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(rule)));
         DatabaseDistSQLResultSet resultSet = new 
DatabaseDiscoveryTypeResultSet();
         resultSet.init(database, 
mock(ShowDatabaseDiscoveryRulesStatement.class));
         Collection<String> columnNames = resultSet.getColumnNames();
diff --git 
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleResultSetTest.java
 
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleResultSetTest.java
index 9e119e095ea..032f6f82666 100644
--- 
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleResultSetTest.java
+++ 
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleResultSetTest.java
@@ -26,11 +26,10 @@ import org.junit.Test;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -54,9 +53,7 @@ public final class CountEncryptRuleResultSetTest {
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(result.getName()).thenReturn("db_1");
-        ShardingSphereRuleMetaData ruleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        EncryptRule encryptRule = mockEncryptRule();
-        
when(ruleMetaData.findSingleRule(EncryptRule.class)).thenReturn(Optional.of(encryptRule));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(mockEncryptRule()));
         when(result.getRuleMetaData()).thenReturn(ruleMetaData);
         return result;
     }
diff --git 
a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleResultSetTest.java
 
b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleResultSetTest.java
index 503d122c69c..0624f2382a3 100644
--- 
a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleResultSetTest.java
+++ 
b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleResultSetTest.java
@@ -27,7 +27,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -56,9 +55,7 @@ public final class CountMaskRuleResultSetTest {
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(result.getName()).thenReturn("mask_db");
-        ShardingSphereRuleMetaData ruleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        MaskRule maskRule = mockMaskRule();
-        
when(ruleMetaData.findSingleRule(MaskRule.class)).thenReturn(Optional.of(maskRule));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(mockMaskRule()));
         when(result.getRuleMetaData()).thenReturn(ruleMetaData);
         return result;
     }
diff --git 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleResultSetTest.java
 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleResultSetTest.java
index 055d5d8e0c7..6040685f3ce 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleResultSetTest.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleResultSetTest.java
@@ -27,11 +27,10 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -55,10 +54,8 @@ public final class CountReadwriteSplittingRuleResultSetTest {
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(result.getName()).thenReturn("db_1");
-        ShardingSphereRuleMetaData ruleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         ReadwriteSplittingRule readwriteSplittingRule = 
mockReadwriteSplittingRule();
-        
when(ruleMetaData.findSingleRule(ReadwriteSplittingRule.class)).thenReturn(Optional.of(readwriteSplittingRule));
-        when(result.getRuleMetaData()).thenReturn(ruleMetaData);
+        when(result.getRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(readwriteSplittingRule)));
         return result;
     }
     
diff --git 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/CountShadowRuleResultSetTest.java
 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/CountShadowRuleResultSetTest.java
index 622d866fd89..22785fa4846 100644
--- 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/CountShadowRuleResultSetTest.java
+++ 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/CountShadowRuleResultSetTest.java
@@ -27,14 +27,14 @@ import org.junit.Test;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -58,9 +58,7 @@ public final class CountShadowRuleResultSetTest {
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(result.getName()).thenReturn("db_1");
-        ShardingSphereRuleMetaData ruleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        ShadowRule shadowRule = mockShadowRule();
-        
when(ruleMetaData.findSingleRule(ShadowRule.class)).thenReturn(Optional.of(shadowRule));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(mockShadowRule()));
         when(result.getRuleMetaData()).thenReturn(ruleMetaData);
         return result;
     }
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/checker/ShardingRuleStatementCheckerTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/checker/ShardingRuleStatementCheckerTest.java
index 839259aed34..ef9e5116438 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/checker/ShardingRuleStatementCheckerTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/checker/ShardingRuleStatementCheckerTest.java
@@ -69,9 +69,6 @@ public final class ShardingRuleStatementCheckerTest {
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private ShardingSphereDatabase database;
     
-    @Mock
-    private ShardingSphereRuleMetaData shardingSphereRuleMetaData;
-    
     private final ShardingRuleConfiguration shardingRuleConfig = 
createShardingRuleConfiguration();
     
     private final ShardingSphereResourceMetaData resourceMetaData = new 
ShardingSphereResourceMetaData("sharding_db", createDataSource());
@@ -80,8 +77,7 @@ public final class ShardingRuleStatementCheckerTest {
     public void before() {
         when(database.getName()).thenReturn("schema");
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
-        
when(database.getRuleMetaData()).thenReturn(shardingSphereRuleMetaData);
-        
when(shardingSphereRuleMetaData.getRules()).thenReturn(Collections.emptyList());
+        when(database.getRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.emptyList()));
     }
     
     @Test
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingTableRuleStatementUpdaterTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingTableRuleStatementUpdaterTest.java
index 30341b1316c..75a3d90861d 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingTableRuleStatementUpdaterTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingTableRuleStatementUpdaterTest.java
@@ -61,9 +61,6 @@ public final class AlterShardingTableRuleStatementUpdaterTest 
{
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private ShardingSphereDatabase database;
     
-    @Mock
-    private ShardingSphereRuleMetaData ruleMetaData;
-    
     private final ShardingRuleConfiguration currentRuleConfig = 
createCurrentShardingRuleConfiguration();
     
     private final ShardingSphereResourceMetaData resourceMetaData = new 
ShardingSphereResourceMetaData("sharding_db", createDataSource());
@@ -74,8 +71,7 @@ public final class AlterShardingTableRuleStatementUpdaterTest 
{
     public void before() {
         when(database.getName()).thenReturn("schema");
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
-        when(database.getRuleMetaData()).thenReturn(ruleMetaData);
-        when(ruleMetaData.getRules()).thenReturn(Collections.emptyList());
+        when(database.getRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.emptyList()));
     }
     
     @Test
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
index 4cfee64da6a..28e3c13a8e2 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
@@ -43,6 +43,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -86,15 +87,12 @@ public abstract class AbstractBaseExecutorTest {
     
     private MetaDataContexts mockMetaDataContexts() {
         MetaDataContexts result = mock(MetaDataContexts.class, 
RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
+        ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(Arrays.asList(mockTransactionRule(), new 
TrafficRule(new DefaultTrafficRuleConfigurationBuilder().build())));
         
when(result.getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        TransactionRule transactionRule = mockTransactionRule();
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(transactionRule);
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(new 
TrafficRule(new DefaultTrafficRuleConfigurationBuilder().build()));
         
when(result.getMetaData().getDatabase(DefaultDatabase.LOGIC_NAME).getResourceMetaData().getStorageTypes())
                 .thenReturn(Collections.singletonMap("ds_0", 
TypedSPILoader.getService(DatabaseType.class, "H2")));
-        ShardingRule shardingRule = mockShardingRule();
-        
when(result.getMetaData().getDatabase(DefaultDatabase.LOGIC_NAME).getRuleMetaData().getRules()).thenReturn(Collections.singleton(shardingRule));
+        ShardingSphereRuleMetaData databaseRuleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(mockShardingRule()));
+        
when(result.getMetaData().getDatabase(DefaultDatabase.LOGIC_NAME).getRuleMetaData()).thenReturn(databaseRuleMetaData);
         return result;
     }
     
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
index f297e2e7923..f5322909504 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
@@ -32,6 +32,7 @@ import org.junit.Test;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.Arrays;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNull;
@@ -85,10 +86,8 @@ public final class ConnectionAdapterTest {
     
     private Connection createConnectionAdaptor() {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class,
 RETURNS_DEEP_STUBS));
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(new 
TrafficRule(new DefaultTrafficRuleConfigurationBuilder().build()));
+        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(
+                new 
ShardingSphereRuleMetaData(Arrays.asList(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS), new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build()))));
         return new ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
contextManager, mock(JDBCContext.class));
     }
     
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
index f1ae0f8f0f1..e4f093579a0 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
@@ -46,6 +46,7 @@ import java.sql.SQLException;
 import java.sql.Time;
 import java.sql.Timestamp;
 import java.sql.Types;
+import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.Properties;
@@ -61,26 +62,19 @@ public final class PreparedStatementAdapterTest {
     
     private ShardingSpherePreparedStatement shardingSpherePreparedStatement;
     
-    private final SQLParserRule sqlParserRule = new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build());
-    
-    private final TrafficRule trafficRule = new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build());
-    
-    private final SQLFederationRule sqlFederationRule = new 
SQLFederationRule(new DefaultSQLFederationRuleConfigurationBuilder().build());
-    
     @Before
     public void setUp() throws SQLException {
         ShardingSphereConnection connection = 
mock(ShardingSphereConnection.class, RETURNS_DEEP_STUBS);
         
when(connection.getDatabaseName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(new 
SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build()));
+        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(
+                new ShardingSphereRuleMetaData(Arrays.asList(
+                        new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build()),
+                        new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build()),
+                        new SQLFederationRule(new 
DefaultSQLFederationRuleConfigurationBuilder().build()))));
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(new
 ConfigurationProperties(new Properties()));
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(connection.getDatabaseName()).getProtocolType()).thenReturn(new
 MySQLDatabaseType());
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getStorageTypes())
                 .thenReturn(Collections.singletonMap("ds_0", new 
MySQLDatabaseType()));
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class)).thenReturn(sqlParserRule);
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TrafficRule.class)).thenReturn(trafficRule);
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(SQLFederationRule.class)).thenReturn(sqlFederationRule);
         shardingSpherePreparedStatement = new 
ShardingSpherePreparedStatement(connection, "SELECT 1");
     }
     
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
index ef797227b18..0a3f98a0ff3 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
@@ -25,6 +25,8 @@ import 
org.apache.shardingsphere.infra.database.DefaultDatabase;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
+import org.apache.shardingsphere.parser.rule.SQLParserRule;
+import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
 import org.apache.shardingsphere.sqlfederation.rule.SQLFederationRule;
 import 
org.apache.shardingsphere.sqlfederation.rule.builder.DefaultSQLFederationRuleConfigurationBuilder;
 import org.apache.shardingsphere.traffic.rule.TrafficRule;
@@ -227,12 +229,13 @@ public final class StatementAdapterTest {
     
     private ShardingSphereStatement mockShardingSphereStatement(final 
Statement... statements) {
         ShardingSphereConnection connection = 
mock(ShardingSphereConnection.class, RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
+        ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(Arrays.asList(
+                new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build()),
+                new SQLFederationRule(new 
DefaultSQLFederationRuleConfigurationBuilder().build()),
+                new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build())));
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(new
 ConfigurationProperties(new Properties()));
         when(connection.getDatabaseName()).thenReturn("db");
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(new 
TrafficRule(new DefaultTrafficRuleConfigurationBuilder().build()));
-        
when(globalRuleMetaData.getSingleRule(SQLFederationRule.class)).thenReturn(new 
SQLFederationRule(new DefaultSQLFederationRuleConfigurationBuilder().build()));
         ShardingSphereStatement result = new 
ShardingSphereStatement(connection);
         result.getRoutedStatements().addAll(Arrays.asList(statements));
         return result;
@@ -243,14 +246,12 @@ public final class StatementAdapterTest {
         DataNodeContainedRule rule = mock(DataNodeContainedRule.class);
         when(rule.isNeedAccumulate(any())).thenReturn(true);
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(DefaultDatabase.LOGIC_NAME).getRuleMetaData().getRules()).thenReturn(Collections.singleton(rule));
-        TrafficRule trafficRule = new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build());
-        SQLFederationRule sqlFederationRule = new SQLFederationRule(new 
DefaultSQLFederationRuleConfigurationBuilder().build());
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         when(connection.getDatabaseName()).thenReturn("db");
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
+        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 ShardingSphereRuleMetaData(Arrays.asList(
+                new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build()),
+                new SQLFederationRule(new 
DefaultSQLFederationRuleConfigurationBuilder().build()),
+                new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build()))));
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(new
 ConfigurationProperties(new Properties()));
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(trafficRule);
-        
when(globalRuleMetaData.getSingleRule(SQLFederationRule.class)).thenReturn(sqlFederationRule);
         ShardingSphereStatement result = new 
ShardingSphereStatement(connection);
         result.getRoutedStatements().addAll(Arrays.asList(statements));
         ExecutionContext executionContext = mock(ExecutionContext.class, 
RETURNS_DEEP_STUBS);
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
index 03202d29613..84c32a1c0f1 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManagerTest.java
@@ -86,10 +86,8 @@ public final class ConnectionManagerTest {
         MetaDataPersistService persistService = mockMetaDataPersistService();
         
when(result.getDataSourceMap(DefaultDatabase.LOGIC_NAME)).thenReturn(dataSourceMap);
         
when(result.getMetaDataContexts().getPersistService()).thenReturn(persistService);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class,
 RETURNS_DEEP_STUBS));
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(mock(TrafficRule.class,
 RETURNS_DEEP_STUBS));
+        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(
+                new 
ShardingSphereRuleMetaData(Arrays.asList(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS), mock(TrafficRule.class, RETURNS_DEEP_STUBS))));
         
when(result.getInstanceContext().getAllClusterInstances(InstanceType.PROXY, 
Arrays.asList("OLTP", "OLAP"))).thenReturn(
                 Collections.singletonList(new ProxyInstanceMetaData("foo_id", 
"127.0.0.1@3307", "foo_version")));
         dataSourcePoolCreator = mockStatic(DataSourcePoolCreator.class);
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
index 135dfa27e47..2aa0ff70d12 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
@@ -37,6 +37,7 @@ import org.mockito.internal.configuration.plugins.Plugins;
 import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.SQLException;
+import java.util.Arrays;
 import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -62,10 +63,8 @@ public final class ShardingSphereConnectionTest {
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         
when(result.getDataSourceMap(DefaultDatabase.LOGIC_NAME)).thenReturn(Collections.singletonMap("ds",
 mock(DataSource.class, RETURNS_DEEP_STUBS)));
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class,
 RETURNS_DEEP_STUBS));
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(mock(TrafficRule.class));
+        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData())
+                .thenReturn(new 
ShardingSphereRuleMetaData(Arrays.asList(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS), mock(TrafficRule.class))));
         return result;
     }
     
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationConnectionTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationConnectionTest.java
index 9bff5e5a3fa..37abda018a1 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationConnectionTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationConnectionTest.java
@@ -31,6 +31,7 @@ import org.junit.Test;
 
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
+import java.util.Arrays;
 import java.util.Properties;
 
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
@@ -43,10 +44,8 @@ public final class UnsupportedOperationConnectionTest {
     
     public UnsupportedOperationConnectionTest() {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class,
 RETURNS_DEEP_STUBS));
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(mock(TrafficRule.class));
+        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(
+                new 
ShardingSphereRuleMetaData(Arrays.asList(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS), mock(TrafficRule.class))));
         shardingSphereConnection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, contextManager, 
mock(JDBCContext.class));
     }
     
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
index ca5426fed44..3b835ed2368 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
@@ -36,6 +36,7 @@ import java.io.StringReader;
 import java.sql.NClob;
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
+import java.util.Arrays;
 import java.util.Properties;
 
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
@@ -46,23 +47,16 @@ public final class 
UnsupportedOperationPreparedStatementTest {
     
     private ShardingSpherePreparedStatement shardingSpherePreparedStatement;
     
-    private final SQLParserRule sqlParserRule = new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build());
-    
-    private final TrafficRule trafficRule = new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build());
-    
-    private final SQLFederationRule sqlFederationRule = new 
SQLFederationRule(new DefaultSQLFederationRuleConfigurationBuilder().build());
-    
     @Before
     public void setUp() throws SQLException {
         ShardingSphereConnection connection = 
mock(ShardingSphereConnection.class, RETURNS_DEEP_STUBS);
         
when(connection.getDatabaseName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
+        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 ShardingSphereRuleMetaData(Arrays.asList(
+                new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build()),
+                new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build()),
+                new SQLFederationRule(new 
DefaultSQLFederationRuleConfigurationBuilder().build()))));
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(connection.getDatabaseName()).getProtocolType()).thenReturn(new
 MySQLDatabaseType());
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(new
 ConfigurationProperties(new Properties()));
-        
when(globalRuleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(sqlParserRule);
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(trafficRule);
-        
when(globalRuleMetaData.getSingleRule(SQLFederationRule.class)).thenReturn(sqlFederationRule);
         shardingSpherePreparedStatement = new 
ShardingSpherePreparedStatement(connection, "SELECT 1");
     }
     
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationStatementTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationStatementTest.java
index 680dbd16bbe..f60fc185e3c 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationStatementTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationStatementTest.java
@@ -21,6 +21,8 @@ import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConne
 import 
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.parser.rule.SQLParserRule;
+import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
 import org.apache.shardingsphere.sqlfederation.rule.SQLFederationRule;
 import 
org.apache.shardingsphere.sqlfederation.rule.builder.DefaultSQLFederationRuleConfigurationBuilder;
 import org.apache.shardingsphere.traffic.rule.TrafficRule;
@@ -30,6 +32,7 @@ import org.junit.Test;
 
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
+import java.util.Arrays;
 import java.util.Properties;
 
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
@@ -43,14 +46,12 @@ public final class UnsupportedOperationStatementTest {
     @Before
     public void setUp() {
         ShardingSphereConnection connection = 
mock(ShardingSphereConnection.class, RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        TrafficRule trafficRule = new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build());
-        SQLFederationRule sqlFederationRule = new SQLFederationRule(new 
DefaultSQLFederationRuleConfigurationBuilder().build());
         when(connection.getDatabaseName()).thenReturn("db");
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
+        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 ShardingSphereRuleMetaData(
+                Arrays.asList(new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build()),
+                        new SQLFederationRule(new 
DefaultSQLFederationRuleConfigurationBuilder().build()),
+                        new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build()))));
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(new
 ConfigurationProperties(new Properties()));
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(trafficRule);
-        
when(globalRuleMetaData.getSingleRule(SQLFederationRule.class)).thenReturn(sqlFederationRule);
         shardingSphereStatement = new ShardingSphereStatement(connection);
     }
     
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/DriverStateContextTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/DriverStateContextTest.java
index 7fddadbe748..baaee227889 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/DriverStateContextTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/DriverStateContextTest.java
@@ -41,6 +41,7 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.Connection;
+import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -59,11 +60,8 @@ public final class DriverStateContextTest {
     @Before
     public void setUp() {
         Map<String, ShardingSphereDatabase> databases = mockDatabases();
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class,
 RETURNS_DEEP_STUBS));
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(mock(TrafficRule.class));
-        MetaDataPersistService mockedPersistService = 
mock(MetaDataPersistService.class);
-        MetaDataContexts metaDataContexts = new 
MetaDataContexts(mockedPersistService, new ShardingSphereMetaData(databases, 
globalRuleMetaData, mock(ConfigurationProperties.class)));
+        ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(Arrays.asList(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS), mock(TrafficRule.class)));
+        MetaDataContexts metaDataContexts = new 
MetaDataContexts(mock(MetaDataPersistService.class), new 
ShardingSphereMetaData(databases, globalRuleMetaData, 
mock(ConfigurationProperties.class)));
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         
when(contextManager.getInstanceContext().getInstance().getState()).thenReturn(new
 StateContext());
     }
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/ok/OKDriverStateTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/ok/OKDriverStateTest.java
index d201e441982..0cda9a363a8 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/ok/OKDriverStateTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/state/ok/OKDriverStateTest.java
@@ -29,6 +29,7 @@ import org.junit.After;
 import org.junit.Test;
 
 import java.sql.Connection;
+import java.util.Arrays;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -41,10 +42,8 @@ public final class OKDriverStateTest {
     @Test
     public void assertGetConnection() {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class,
 RETURNS_DEEP_STUBS));
-        
when(globalRuleMetaData.getSingleRule(TrafficRule.class)).thenReturn(mock(TrafficRule.class));
+        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData())
+                .thenReturn(new 
ShardingSphereRuleMetaData(Arrays.asList(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS), mock(TrafficRule.class))));
         Connection actual = new 
OKDriverState().getConnection(DefaultDatabase.LOGIC_NAME, contextManager, 
mock(JDBCContext.class));
         assertThat(actual, instanceOf(ShardingSphereConnection.class));
     }
diff --git 
a/kernel/authority/distsql/handler/src/test/java/org/apache/shardingsphere/authority/distsql/handler/AuthorityRuleResultSetTest.java
 
b/kernel/authority/distsql/handler/src/test/java/org/apache/shardingsphere/authority/distsql/handler/AuthorityRuleResultSetTest.java
index f38c56c36e6..1a8c7dd5929 100644
--- 
a/kernel/authority/distsql/handler/src/test/java/org/apache/shardingsphere/authority/distsql/handler/AuthorityRuleResultSetTest.java
+++ 
b/kernel/authority/distsql/handler/src/test/java/org/apache/shardingsphere/authority/distsql/handler/AuthorityRuleResultSetTest.java
@@ -20,15 +20,14 @@ package org.apache.shardingsphere.authority.distsql.handler;
 import org.apache.shardingsphere.authority.config.AuthorityRuleConfiguration;
 import 
org.apache.shardingsphere.authority.distsql.parser.statement.ShowAuthorityRuleStatement;
 import org.apache.shardingsphere.authority.rule.AuthorityRule;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.distsql.handler.resultset.GlobalRuleDistSQLResultSet;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
 import org.junit.Test;
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Optional;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -54,9 +53,7 @@ public final class AuthorityRuleResultSetTest {
     private ShardingSphereRuleMetaData mockGlobalRuleMetaData() {
         AuthorityRule authorityRule = mock(AuthorityRule.class);
         
when(authorityRule.getConfiguration()).thenReturn(createAuthorityRuleConfiguration());
-        ShardingSphereRuleMetaData result = 
mock(ShardingSphereRuleMetaData.class);
-        
when(result.findSingleRule(AuthorityRule.class)).thenReturn(Optional.of(authorityRule));
-        return result;
+        return new 
ShardingSphereRuleMetaData(Collections.singleton(authorityRule));
     }
     
     private AuthorityRuleConfiguration createAuthorityRuleConfiguration() {
diff --git 
a/kernel/parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/query/SQLParserRuleResultSetTest.java
 
b/kernel/parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/query/SQLParserRuleResultSetTest.java
index d30ff94b7fc..dd7d72c94c3 100644
--- 
a/kernel/parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/query/SQLParserRuleResultSetTest.java
+++ 
b/kernel/parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/query/SQLParserRuleResultSetTest.java
@@ -26,8 +26,8 @@ import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -63,8 +63,6 @@ public final class SQLParserRuleResultSetTest {
     private ShardingSphereRuleMetaData mockGlobalRuleMetaData() {
         SQLParserRule sqlParserRule = mock(SQLParserRule.class);
         when(sqlParserRule.getConfiguration()).thenReturn(new 
SQLParserRuleConfiguration(true, new CacheOption(128, 1024), new 
CacheOption(2000, 65535)));
-        ShardingSphereRuleMetaData result = 
mock(ShardingSphereRuleMetaData.class);
-        
when(result.findSingleRule(SQLParserRule.class)).thenReturn(Optional.of(sqlParserRule));
-        return result;
+        return new 
ShardingSphereRuleMetaData(Collections.singleton(sqlParserRule));
     }
 }
diff --git 
a/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextTest.java
 
b/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextTest.java
index 70f0977b797..c5a7c54559e 100644
--- 
a/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextTest.java
+++ 
b/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextTest.java
@@ -62,9 +62,7 @@ public final class OptimizerContextTest {
     }
     
     private ShardingSphereRuleMetaData createShardingSphereRuleMetaData() {
-        ShardingSphereRuleMetaData result = 
mock(ShardingSphereRuleMetaData.class);
         CacheOption cacheOption = new CacheOption(10, 1000);
-        when(result.getSingleRule(SQLParserRule.class)).thenReturn(new 
SQLParserRule(new SQLParserRuleConfiguration(true, cacheOption, cacheOption)));
-        return result;
+        return new ShardingSphereRuleMetaData(Collections.singleton(new 
SQLParserRule(new SQLParserRuleConfiguration(true, cacheOption, cacheOption))));
     }
 }
diff --git 
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/SQLTranslatorRuleResultSetTest.java
 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/SQLTranslatorRuleResultSetTest.java
index b2f8252f251..730f54114b9 100644
--- 
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/SQLTranslatorRuleResultSetTest.java
+++ 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/SQLTranslatorRuleResultSetTest.java
@@ -24,7 +24,7 @@ import 
org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
 import org.junit.Test;
 
 import java.util.Collection;
-import java.util.Optional;
+import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -48,9 +48,7 @@ public final class SQLTranslatorRuleResultSetTest {
     private ShardingSphereRuleMetaData mockGlobalRuleMetaData() {
         SQLTranslatorRule authorityRule = mock(SQLTranslatorRule.class);
         
when(authorityRule.getConfiguration()).thenReturn(createSQLTranslatorRuleConfiguration());
-        ShardingSphereRuleMetaData result = 
mock(ShardingSphereRuleMetaData.class);
-        
when(result.findSingleRule(SQLTranslatorRule.class)).thenReturn(Optional.of(authorityRule));
-        return result;
+        return new 
ShardingSphereRuleMetaData(Collections.singleton(authorityRule));
     }
     
     private SQLTranslatorRuleConfiguration 
createSQLTranslatorRuleConfiguration() {
diff --git 
a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSetTest.java
 
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSetTest.java
index 3ba1ad0174a..95b8c241abc 100644
--- 
a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSetTest.java
+++ 
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/query/TrafficRuleResultSetTest.java
@@ -31,7 +31,6 @@ import org.junit.Test;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Optional;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -60,9 +59,7 @@ public final class TrafficRuleResultSetTest {
     private ShardingSphereRuleMetaData mockGlobalRuleMetaData() {
         TrafficRule trafficRule = mock(TrafficRule.class);
         
when(trafficRule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
-        ShardingSphereRuleMetaData result = 
mock(ShardingSphereRuleMetaData.class);
-        
when(result.findSingleRule(TrafficRule.class)).thenReturn(Optional.of(trafficRule));
-        return result;
+        return new 
ShardingSphereRuleMetaData(Collections.singleton(trafficRule));
     }
     
     private TrafficRuleConfiguration createTrafficRuleConfiguration() {
diff --git 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/query/TransactionRuleResultSetTest.java
 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/query/TransactionRuleResultSetTest.java
index 7710647a429..df943fa208c 100644
--- 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/query/TransactionRuleResultSetTest.java
+++ 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/query/TransactionRuleResultSetTest.java
@@ -28,14 +28,12 @@ import org.junit.Test;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.Optional;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
 public final class TransactionRuleResultSetTest {
     
@@ -66,10 +64,8 @@ public final class TransactionRuleResultSetTest {
     }
     
     private ShardingSphereRuleMetaData mockGlobalRuleMetaData(final String 
defaultType, final String providerType, final Properties props) {
-        TransactionRule rule = new 
TransactionRule(createAuthorityRuleConfiguration(defaultType, providerType, 
props), Collections.emptyMap());
-        ShardingSphereRuleMetaData result = 
mock(ShardingSphereRuleMetaData.class);
-        
when(result.findSingleRule(TransactionRule.class)).thenReturn(Optional.of(rule));
-        return result;
+        TransactionRule transactionRule = new 
TransactionRule(createAuthorityRuleConfiguration(defaultType, providerType, 
props), Collections.emptyMap());
+        return new 
ShardingSphereRuleMetaData(Collections.singleton(transactionRule));
     }
     
     private TransactionRuleConfiguration 
createAuthorityRuleConfiguration(final String defaultType, final String 
providerType, final Properties props) {
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 124c3e6cab6..8e6b8403e3d 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -49,7 +49,6 @@ import java.sql.Types;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Properties;
@@ -199,14 +198,6 @@ public final class ContextManagerTest {
         return new ShardingSphereSchema(Collections.singletonMap("foo_tbl", 
beforeChangedTable), Collections.singletonMap("foo_view", beforeChangedView));
     }
     
-    private ShardingSphereDatabase createOriginalDatabaseMetaData() {
-        ShardingSphereResourceMetaData resourceMetaData = 
mock(ShardingSphereResourceMetaData.class);
-        
when(resourceMetaData.getDataSources()).thenReturn(Collections.singletonMap("bar_ds",
 new MockedDataSource()));
-        ShardingSphereRuleMetaData ruleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        when(ruleMetaData.getConfigurations()).thenReturn(new LinkedList<>());
-        return new ShardingSphereDatabase("foo_db", new MySQLDatabaseType(), 
resourceMetaData, ruleMetaData, Collections.emptyMap());
-    }
-    
     private void assertAlteredDataSource(final MockedDataSource actual) {
         assertThat(actual.getUrl(), is("jdbc:mock://127.0.0.1/foo_ds"));
         assertThat(actual.getPassword(), is("test"));
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineTest.java
index 45002e03b82..57a3d0c2cf1 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineTest.java
@@ -108,12 +108,10 @@ public final class DatabaseCommunicationEngineTest 
extends ProxyContextRestorer
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private ResultSet resultSet;
     
-    @Mock
-    private ShardingSphereRuleMetaData globalRuleMetaData;
-    
     @Before
     public void setUp() {
         
when(backendConnection.getConnectionSession().getDatabaseName()).thenReturn("db");
+        ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(new SQLFederationRule(new 
SQLFederationRuleConfiguration("ORIGINAL"))));
         MetaDataContexts metaDataContexts = new 
MetaDataContexts(mock(MetaDataPersistService.class),
                 new ShardingSphereMetaData(mockDatabases(), 
globalRuleMetaData, new ConfigurationProperties(new Properties())));
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
@@ -152,8 +150,6 @@ public final class DatabaseCommunicationEngineTest extends 
ProxyContextRestorer
             typedSPILoader.when(() -> 
TypedSPILoader.getService(SQLFederationExecutor.class, 
"NONE")).thenReturn(federationExecutor);
             typedSPILoader.when(() -> 
TypedSPILoader.getService(QueryHeaderBuilder.class, "H2")).thenReturn(new 
MySQLQueryHeaderBuilder());
             systemSchemaUtil.when(() -> 
SystemSchemaUtil.containsSystemSchema(any(DatabaseType.class), any(), 
any(ShardingSphereDatabase.class))).thenReturn(true);
-            SQLFederationRule sqlFederationRule = new SQLFederationRule(new 
SQLFederationRuleConfiguration("ORIGINAL"));
-            
when(globalRuleMetaData.getSingleRule(SQLFederationRule.class)).thenReturn(sqlFederationRule);
             engine.execute();
         }
         assertTrue(engine.next());
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
index 7d6a90645a2..fef9c2248bc 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
@@ -41,6 +41,7 @@ import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
@@ -88,11 +89,9 @@ public final class JDBCBackendDataSourceTest extends 
ProxyContextRestorer {
     }
     
     private ShardingSphereRuleMetaData mockGlobalRuleMetaData() {
-        ShardingSphereRuleMetaData result = 
mock(ShardingSphereRuleMetaData.class);
         TransactionRule transactionRule = mock(TransactionRule.class);
         
when(transactionRule.getResource()).thenReturn(mock(ShardingSphereTransactionManagerEngine.class));
-        
when(result.getSingleRule(TransactionRule.class)).thenReturn(transactionRule);
-        return result;
+        return new 
ShardingSphereRuleMetaData(Collections.singleton(transactionRule));
     }
     
     private Map<String, DataSource> mockDataSources(final int size) {
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
index e03a7bb13f5..ad0906fc1c0 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
@@ -39,6 +39,7 @@ import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.SQLException;
+import java.util.Collections;
 
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -85,13 +86,11 @@ public final class BackendTransactionManagerTest extends 
ProxyContextRestorer {
     }
     
     private ShardingSphereRuleMetaData mockGlobalRuleMetaData() {
-        ShardingSphereRuleMetaData result = 
mock(ShardingSphereRuleMetaData.class);
-        TransactionRule transactionRule = mock(TransactionRule.class);
         ShardingSphereTransactionManagerEngine transactionManagerEngine = 
mock(ShardingSphereTransactionManagerEngine.class);
         
when(transactionManagerEngine.getTransactionManager(TransactionType.XA)).thenReturn(shardingSphereTransactionManager);
+        TransactionRule transactionRule = mock(TransactionRule.class);
         
when(transactionRule.getResource()).thenReturn(transactionManagerEngine);
-        
when(result.getSingleRule(TransactionRule.class)).thenReturn(transactionRule);
-        return result;
+        return new 
ShardingSphereRuleMetaData(Collections.singleton(transactionRule));
     }
     
     @Test
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
index a02d111a27d..afd4ddb8cee 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
@@ -58,6 +58,7 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.SQLException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Properties;
@@ -86,14 +87,17 @@ public final class ProxyBackendHandlerFactoryTest extends 
ProxyContextRestorer {
         
when(connectionSession.getBackendConnection()).thenReturn(backendConnection);
         
when(backendConnection.getConnectionSession()).thenReturn(connectionSession);
         MetaDataContexts metaDataContexts = mock(MetaDataContexts.class, 
RETURNS_DEEP_STUBS);
-        mockGlobalRuleMetaData(metaDataContexts);
         ShardingSphereDatabase database = mockDatabase();
         
when(metaDataContexts.getMetaData().getDatabase("db")).thenReturn(database);
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         when(metaDataContexts.getMetaData().getProps()).thenReturn(new 
ConfigurationProperties(new Properties()));
         CacheOption cacheOption = new CacheOption(1024, 1024);
-        
when(metaDataContexts.getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class)).thenReturn(new
 SQLParserRule(new SQLParserRuleConfiguration(true, cacheOption, cacheOption)));
+        TransactionRule transactionRule = mock(TransactionRule.class);
+        when(transactionRule.getResource()).thenReturn(new 
ShardingSphereTransactionManagerEngine());
+        ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(
+                Arrays.asList(transactionRule, new SQLParserRule(new 
SQLParserRuleConfiguration(true, cacheOption, cacheOption))));
+        
when(metaDataContexts.getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
         ProxyContext.init(contextManager);
     }
     
@@ -104,14 +108,6 @@ public final class ProxyBackendHandlerFactoryTest extends 
ProxyContextRestorer {
         return result;
     }
     
-    private void mockGlobalRuleMetaData(final MetaDataContexts 
metaDataContexts) {
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        TransactionRule transactionRule = mock(TransactionRule.class);
-        when(transactionRule.getResource()).thenReturn(new 
ShardingSphereTransactionManagerEngine());
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(transactionRule);
-        
when(metaDataContexts.getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-    }
-    
     @Test
     public void assertNewInstanceWithDistSQL() throws SQLException {
         String sql = "set dist variable transaction_type='LOCAL'";
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/advance/ParseDistSQLHandlerTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/advance/ParseDistSQLHandlerTest.java
index 2fba1b2af9a..a2d8dda4020 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/advance/ParseDistSQLHandlerTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/advance/ParseDistSQLHandlerTest.java
@@ -27,8 +27,8 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.rul.sql.ParseDistSQLHandler;
+import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -40,11 +40,11 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.SQLException;
+import java.util.Collections;
 import java.util.LinkedList;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -60,9 +60,7 @@ public final class ParseDistSQLHandlerTest extends 
ProxyContextRestorer {
     
     @Before
     public void setUp() {
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(sqlParserRule);
+        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 ShardingSphereRuleMetaData(Collections.singleton(sqlParserRule)));
         ProxyContext.init(contextManager);
     }
     
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/CountSingleTableResultSetTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/CountSingleTableResultSetTest.java
index 9e54583ed60..e3fc4ccc558 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/CountSingleTableResultSetTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/CountSingleTableResultSetTest.java
@@ -26,12 +26,12 @@ import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -54,9 +54,7 @@ public final class CountSingleTableResultSetTest {
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(result.getName()).thenReturn("db_1");
-        ShardingSphereRuleMetaData ruleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        SingleRule singleTableRule = mockSingleTableRule();
-        
when(ruleMetaData.findSingleRule(SingleRule.class)).thenReturn(Optional.of(singleTableRule));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(mockSingleTableRule()));
         when(result.getRuleMetaData()).thenReturn(ruleMetaData);
         return result;
     }
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/RQLResultSetBackendHandlerTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/RQLResultSetBackendHandlerTest.java
index f73535b72ae..22755130f94 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/RQLResultSetBackendHandlerTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/RQLResultSetBackendHandlerTest.java
@@ -50,9 +50,8 @@ public final class RQLResultSetBackendHandlerTest extends 
ProxyContextRestorer {
     @Before
     public void setUp() {
         MetaDataContexts metaDataContexts = mock(MetaDataContexts.class, 
RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData ruleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
-        when(database.getRuleMetaData()).thenReturn(ruleMetaData);
+        
when(database.getRuleMetaData()).thenReturn(mock(ShardingSphereRuleMetaData.class));
         
when(metaDataContexts.getMetaData().getDatabases()).thenReturn(Collections.singletonMap("test",
 database));
         
when(metaDataContexts.getMetaData().containsDatabase("test")).thenReturn(true);
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/SingleTableRuleResultSetTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/SingleTableRuleResultSetTest.java
index a212dfdcbe3..2a9c986b448 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/SingleTableRuleResultSetTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/SingleTableRuleResultSetTest.java
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.single.rule.SingleRule;
 import org.junit.Test;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -48,11 +49,9 @@ public final class SingleTableRuleResultSetTest {
     
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class);
-        SingleRule rule = mock(SingleRule.class);
-        when(rule.getConfiguration()).thenReturn(new 
SingleRuleConfiguration("foo_ds"));
-        ShardingSphereRuleMetaData ruleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        when(ruleMetaData.getSingleRule(SingleRule.class)).thenReturn(rule);
-        when(result.getRuleMetaData()).thenReturn(ruleMetaData);
+        SingleRule singleRule = mock(SingleRule.class);
+        when(singleRule.getConfiguration()).thenReturn(new 
SingleRuleConfiguration("foo_ds"));
+        when(result.getRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(singleRule)));
         return result;
     }
 }
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactoryTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactoryTest.java
index 0e6d36cf209..12f0447bc18 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactoryTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactoryTest.java
@@ -42,6 +42,8 @@ import org.mockito.Answers;
 import org.mockito.MockedStatic;
 import org.mockito.internal.configuration.plugins.Plugins;
 
+import java.util.Collections;
+
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -58,9 +60,7 @@ public final class TransactionBackendHandlerFactoryTest 
extends ProxyContextRest
     @Before
     public void setTransactionContexts() {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class));
+        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 
ShardingSphereRuleMetaData(Collections.singleton(mock(TransactionRule.class))));
         ProxyContext.init(contextManager);
     }
     
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerTest.java
index d4ca1d864ff..a207ecda103 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerTest.java
@@ -31,6 +31,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import java.sql.SQLException;
+import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -45,9 +46,7 @@ public final class TransactionBackendHandlerTest extends 
ProxyContextRestorer {
     @Before
     public void setTransactionContexts() {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class));
+        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 
ShardingSphereRuleMetaData(Collections.singleton(mock(TransactionRule.class))));
         ProxyContext.init(contextManager);
     }
     
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
index 3915dbda0e4..7a96b137df4 100644
--- 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
@@ -35,6 +35,8 @@ import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.util.Collections;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertFalse;
@@ -57,9 +59,7 @@ public final class ConnectionSessionTest extends 
ProxyContextRestorer {
     
     @Before
     public void setup() {
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class));
+        
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 
ShardingSphereRuleMetaData(Collections.singleton(mock(TransactionRule.class))));
         ProxyContext.init(contextManager);
         connectionSession = new 
ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, null);
         
when(backendConnection.getConnectionSession()).thenReturn(connectionSession);
diff --git 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
index 44647d1bc97..7ae234c1846 100644
--- 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
+++ 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
@@ -41,6 +41,8 @@ import org.mockito.MockedStatic;
 import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.util.Collections;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
@@ -77,9 +79,8 @@ public final class FrontendChannelInboundHandlerTest {
         try (MockedStatic<ProxyContext> mocked = 
mockStatic(ProxyContext.class)) {
             ProxyContext mockedProxyContext = mock(ProxyContext.class, 
RETURNS_DEEP_STUBS);
             
mocked.when(ProxyContext::getInstance).thenReturn(mockedProxyContext);
-            ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-            
when(mockedProxyContext.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-            
when(globalRuleMetaData.getSingleRule(TransactionRule.class)).thenReturn(mock(TransactionRule.class));
+            
when(mockedProxyContext.getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData())
+                    .thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(mock(TransactionRule.class))));
             frontendChannelInboundHandler = new 
FrontendChannelInboundHandler(frontendEngine, channel);
         }
         channel.pipeline().addLast(frontendChannelInboundHandler);
diff --git 
a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
 
b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
index 4c5588438ca..67540e70524 100644
--- 
a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
+++ 
b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
@@ -110,9 +110,8 @@ public final class MySQLComStmtExecuteExecutorTest extends 
ProxyContextRestorer
     public void setUp() {
         Map<String, ShardingSphereDatabase> databases = new LinkedHashMap<>(1, 
1);
         databases.put("logic_db", mockDatabase());
-        ShardingSphereRuleMetaData metaData = 
mock(ShardingSphereRuleMetaData.class);
         MetaDataContexts metaDataContexts = new 
MetaDataContexts(mock(MetaDataPersistService.class),
-                new ShardingSphereMetaData(databases, metaData, new 
ConfigurationProperties(new Properties())));
+                new ShardingSphereMetaData(databases, 
mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new 
Properties())));
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         ProxyContext.init(contextManager);
diff --git 
a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutorTest.java
 
b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutorTest.java
index 831340ba627..c6fcba9ebea 100644
--- 
a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutorTest.java
+++ 
b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutorTest.java
@@ -49,6 +49,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.mockito.plugins.MemberAccessor;
 
 import java.sql.SQLException;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
@@ -115,10 +116,9 @@ public final class MySQLComQueryPacketExecutorTest {
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase("db_name").getResourceMetaData().getStorageTypes())
                     .thenReturn(Collections.singletonMap("ds_0", new 
MySQLDatabaseType()));
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase("db_name").getProtocolType()).thenReturn(new
 MySQLDatabaseType());
-            ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
+            ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(
+                    Arrays.asList(new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build()), new SQLTranslatorRule(new 
DefaultSQLTranslatorRuleConfigurationBuilder().build())));
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-            
when(globalRuleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(new 
SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build()));
-            
when(globalRuleMetaData.getSingleRule(SQLTranslatorRule.class)).thenReturn(new 
SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()));
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(1);
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
             MySQLComQueryPacketExecutor actual = new 
MySQLComQueryPacketExecutor(packet, connectionSession);
diff --git 
a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
 
b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
index e247ae0474b..27efb1f740f 100644
--- 
a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
+++ 
b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
@@ -44,6 +44,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.Arrays;
 import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
@@ -94,10 +95,9 @@ public final class MySQLMultiStatementsHandlerTest {
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase("db").getResourceMetaData().getStorageTypes())
                     .thenReturn(Collections.singletonMap("ds_0", new 
MySQLDatabaseType()));
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase("db").getProtocolType()).thenReturn(new
 MySQLDatabaseType());
-            ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
+            ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(
+                    Arrays.asList(new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build()), new SQLTranslatorRule(new 
DefaultSQLTranslatorRuleConfigurationBuilder().build())));
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-            
when(globalRuleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(new 
SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build()));
-            
when(globalRuleMetaData.getSingleRule(SQLTranslatorRule.class)).thenReturn(new 
SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()));
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(1);
             
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
             when(ProxyContext.getInstance()
diff --git 
a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
 
b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
index 29513036ae7..9a3e3462d06 100644
--- 
a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
+++ 
b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
@@ -81,13 +81,12 @@ public final class OpenGaussComBatchBindExecutorTest 
extends ProxyContextRestore
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY)).thenReturn(1);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
+        ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(new SQLTranslatorRule(new 
DefaultSQLTranslatorRuleConfigurationBuilder().build())));
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         
when(database.getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singletonList("ds_0"));
         
when(database.getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0",
 new OpenGaussDatabaseType()));
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase("db")).thenReturn(database);
-        
when(globalRuleMetaData.getSingleRule(SQLTranslatorRule.class)).thenReturn(new 
SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()));
         String statement = "S_1";
         OpenGaussComBatchBindPacket packet = 
mock(OpenGaussComBatchBindPacket.class);
         when(packet.getStatementId()).thenReturn("S_1");
diff --git 
a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
 
b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
index e5e70e34d36..ca8f929f9e6 100644
--- 
a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
+++ 
b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
@@ -92,9 +92,8 @@ public final class 
PostgreSQLAggregatedBatchedStatementsCommandExecutorTest exte
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY)).thenReturn(1);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(SQLTranslatorRule.class)).thenReturn(new 
SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()));
+        
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData())
+                .thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(new SQLTranslatorRule(new 
DefaultSQLTranslatorRuleConfigurationBuilder().build()))));
         ConnectionSession connectionSession = mock(ConnectionSession.class);
         when(connectionSession.getDatabaseName()).thenReturn("db");
         when(connectionSession.getConnectionContext()).thenReturn(new 
ConnectionContext());
diff --git 
a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
 
b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
index 0aba4df354c..16317e1bdd6 100644
--- 
a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
+++ 
b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
@@ -96,9 +96,8 @@ public final class PostgreSQLBatchedStatementsExecutorTest 
extends ProxyContextR
         
when(database.getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0",
 new PostgreSQLDatabaseType()));
         
when(database.getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singletonList("ds_0"));
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("db")).thenReturn(database);
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
+        ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(new SQLTranslatorRule(new 
DefaultSQLTranslatorRuleConfigurationBuilder().build())));
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(SQLTranslatorRule.class)).thenReturn(new 
SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()));
     }
     
     @Test
diff --git 
a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
 
b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
index 34f17449482..12ac573087d 100644
--- 
a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
+++ 
b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
@@ -115,9 +115,8 @@ public final class PostgreSQLComDescribeExecutorTest 
extends ProxyContextRestore
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
         when(connectionSession.getDatabaseName()).thenReturn(DATABASE_NAME);
         
when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new 
ServerPreparedStatementRegistry());
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
-        
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(SQLTranslatorRule.class)).thenReturn(new 
SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()));
+        
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData())
+                .thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(new SQLTranslatorRule(new 
DefaultSQLTranslatorRuleConfigurationBuilder().build()))));
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabases()).thenReturn(Collections.singletonMap(DATABASE_NAME,
 mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS)));
         prepareTableMetaData();
     }
diff --git 
a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
 
b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
index 3918893e213..42f6858b6cc 100644
--- 
a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
+++ 
b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
@@ -54,13 +54,12 @@ import java.util.Collections;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public final class PostgreSQLComParseExecutorTest extends ProxyContextRestorer 
{
     
-    private final SQLParserRule sqlParserRule = new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build());
+    private final ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build())));
     
     @Mock
     private PostgreSQLComParsePacket parsePacket;
@@ -90,9 +89,7 @@ public final class PostgreSQLComParseExecutorTest extends 
ProxyContextRestorer {
         
when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getResourceMetaData().getStorageTypes())
                 .thenReturn(Collections.singletonMap("ds_0", new 
PostgreSQLDatabaseType()));
         
when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getProtocolType()).thenReturn(new
 PostgreSQLDatabaseType());
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         
when(mockedContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(sqlParserRule);
         Collection<DatabasePacket<?>> actualPackets = executor.execute();
         assertThat(actualPackets.size(), is(1));
         assertThat(actualPackets.iterator().next(), 
is(PostgreSQLParseCompletePacket.getInstance()));
@@ -114,9 +111,7 @@ public final class PostgreSQLComParseExecutorTest extends 
ProxyContextRestorer {
         
when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getResourceMetaData().getStorageTypes())
                 .thenReturn(Collections.singletonMap("ds_0", new 
PostgreSQLDatabaseType()));
         
when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getProtocolType()).thenReturn(new
 PostgreSQLDatabaseType());
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         
when(mockedContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(sqlParserRule);
         when(connectionSession.getDefaultDatabaseName()).thenReturn("db");
         when(connectionSession.getDatabaseName()).thenReturn("db");
         setConnectionSession();
@@ -145,9 +140,7 @@ public final class PostgreSQLComParseExecutorTest extends 
ProxyContextRestorer {
         
when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getResourceMetaData().getStorageTypes())
                 .thenReturn(Collections.singletonMap("ds_0", new 
PostgreSQLDatabaseType()));
         
when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getProtocolType()).thenReturn(new
 PostgreSQLDatabaseType());
-        ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         
when(mockedContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        
when(globalRuleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(sqlParserRule);
         Collection<DatabasePacket<?>> actualPackets = executor.execute();
         assertThat(actualPackets.size(), is(1));
         assertThat(actualPackets.iterator().next(), 
is(PostgreSQLParseCompletePacket.getInstance()));

Reply via email to