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

jianglongtao 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 03a99213eee Remove ProxyContextRestorer on MySQL frontend module 
(#24327)
03a99213eee is described below

commit 03a99213eee8f9f2f8f0b431d1ed723601e9892d
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Feb 24 00:03:32 2023 +0800

    Remove ProxyContextRestorer on MySQL frontend module (#24327)
    
    * Remove ProxyContextRestorer on MySQLAuthenticationEngineTest
    
    * Remove ProxyContextRestorer on MySQLComStmtPrepareExecutorTest
    
    * Remove ProxyContextRestorer on MySQLClearPasswordAuthenticatorTest
    
    * Remove ProxyContextRestorer on MySQLComStmtExecuteExecutorTest
    
    * Remove ProxyContextRestorer on MySQLCommandExecutorFactoryTest
    
    * Remove ProxyContextRestorer on MySQLFrontendEngineTest
    
    * Remove ProxyContextRestorer on MySQL frontend module
    
    * Remove ProxyContextRestorer on MySQL frontend module
    
    * Fix checkstyle
    
    * Fix checkstyle
    
    * Remove ProxyContextRestorer on 
AlterReadwriteSplittingStorageUnitStatusStatementUpdaterTest
---
 ...ttingStorageUnitStatusStatementUpdaterTest.java |   5 +-
 .../frontend/mysql/MySQLFrontendEngineTest.java    |  10 +-
 .../proxy/frontend/mysql/ProxyContextRestorer.java |  38 ----
 .../MySQLAuthenticationEngineTest.java             |  70 +++++---
 .../impl/MySQLClearPasswordAuthenticatorTest.java  |   3 +-
 .../command/MySQLCommandExecutorFactoryTest.java   |  33 +---
 .../execute/MySQLComStmtExecuteExecutorTest.java   |  29 +--
 .../prepare/MySQLComStmtPrepareExecutorTest.java   | 200 +++++++++++----------
 .../PostgreSQLBatchedStatementsExecutorTest.java   |   3 +-
 .../bind/PostgreSQLComBindExecutorTest.java        |   4 +-
 10 files changed, 168 insertions(+), 227 deletions(-)

diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/AlterReadwriteSplittingStorageUnitStatusStatementUpdaterTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/AlterReadwriteSplittingStorageUnitStatusStatementUpdaterTest.java
index 23591d7f10a..8d9ca1cd529 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/AlterReadwriteSplittingStorageUnitStatusStatementUpdaterTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/AlterReadwriteSplittingStorageUnitStatusStatementUpdaterTest.java
@@ -21,7 +21,6 @@ import 
org.apache.shardingsphere.dialect.exception.syntax.database.UnknownDataba
 import 
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import 
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.status.AlterReadwriteSplittingStorageUnitStatusStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
@@ -31,12 +30,10 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public final class 
AlterReadwriteSplittingStorageUnitStatusStatementUpdaterTest extends 
ProxyContextRestorer {
+public final class 
AlterReadwriteSplittingStorageUnitStatusStatementUpdaterTest {
     
     @Test(expected = UnsupportedSQLOperationException.class)
     public void assertWithStandaloneMode() {
-        ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
-        ProxyContext.init(contextManager);
         AlterReadwriteSplittingStorageUnitStatusStatementUpdater updater = new 
AlterReadwriteSplittingStorageUnitStatusStatementUpdater();
         updater.executeUpdate("foo", new 
AlterReadwriteSplittingStorageUnitStatusStatement(new DatabaseSegment(1, 1, new 
IdentifierValue("db")), "group", "read_ds", "ENABLE"));
     }
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
index c4610d0db24..6b896fbedbd 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
@@ -50,6 +50,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentMatcher;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.MockitoJUnitRunner;
 
@@ -72,11 +73,12 @@ import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class MySQLFrontendEngineTest extends ProxyContextRestorer {
+public final class MySQLFrontendEngineTest {
     
     private static final String SCHEMA_PATTERN = "schema_%s";
     
@@ -94,7 +96,6 @@ public final class MySQLFrontendEngineTest extends 
ProxyContextRestorer {
     @SuppressWarnings("unchecked")
     @Before
     public void setUp() {
-        ProxyContext.init(mock(ContextManager.class, RETURNS_DEEP_STUBS));
         resetConnectionIdGenerator();
         when(context.channel()).thenReturn(channel);
         
when(channel.attr(CommonConstants.CHARSET_ATTRIBUTE_KEY)).thenReturn(mock(Attribute.class));
@@ -105,7 +106,10 @@ public final class MySQLFrontendEngineTest extends 
ProxyContextRestorer {
     @SneakyThrows(ReflectiveOperationException.class)
     private void resetConnectionIdGenerator() {
         
Plugins.getMemberAccessor().set(ConnectionIdGenerator.class.getDeclaredField("currentId"),
 ConnectionIdGenerator.getInstance(), 0);
-        mysqlFrontendEngine = new MySQLFrontendEngine();
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(mock(ContextManager.class,
 RETURNS_DEEP_STUBS));
+            mysqlFrontendEngine = new MySQLFrontendEngine();
+        }
     }
     
     @Test
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/ProxyContextRestorer.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/ProxyContextRestorer.java
deleted file mode 100644
index 98874f9f815..00000000000
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/ProxyContextRestorer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.proxy.frontend.mysql;
-
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.junit.After;
-import org.junit.Before;
-
-public abstract class ProxyContextRestorer {
-    
-    private ContextManager currentContextManager;
-    
-    @Before
-    public void recordCurrentContextManager() {
-        currentContextManager = ProxyContext.getInstance().getContextManager();
-    }
-    
-    @After
-    public void restorePreviousContextManager() {
-        ProxyContext.init(currentContextManager);
-    }
-}
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
index 59d9eb417d7..ac4a3752960 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
@@ -44,9 +44,9 @@ import 
org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.frontend.authentication.AuthenticationResultBuilder;
 import org.apache.shardingsphere.proxy.frontend.authentication.Authenticator;
 import 
org.apache.shardingsphere.proxy.frontend.authentication.AuthenticatorFactory;
-import org.apache.shardingsphere.proxy.frontend.mysql.ProxyContextRestorer;
 import org.junit.Test;
 import org.mockito.MockedConstruction;
+import org.mockito.MockedStatic;
 import org.mockito.internal.configuration.plugins.Plugins;
 
 import java.net.InetSocketAddress;
@@ -66,10 +66,11 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-public final class MySQLAuthenticationEngineTest extends ProxyContextRestorer {
+public final class MySQLAuthenticationEngineTest {
     
     private final MySQLAuthenticationEngine authenticationEngine = new 
MySQLAuthenticationEngine();
     
@@ -87,7 +88,6 @@ public final class MySQLAuthenticationEngineTest extends 
ProxyContextRestorer {
     public void assertAuthenticationMethodMismatch() {
         AuthorityRule rule = mock(AuthorityRule.class);
         when(rule.getAuthenticatorType(any())).thenReturn("");
-        setMetaDataContexts(rule);
         setConnectionPhase(MySQLConnectionPhase.AUTH_PHASE_FAST_PATH);
         MySQLPacketPayload payload = mock(MySQLPacketPayload.class);
         ChannelHandlerContext channelHandlerContext = 
mock(ChannelHandlerContext.class);
@@ -100,8 +100,12 @@ public final class MySQLAuthenticationEngineTest extends 
ProxyContextRestorer {
         when(payload.readInt1()).thenReturn(1);
         
when(payload.readInt4()).thenReturn(MySQLCapabilityFlag.CLIENT_PLUGIN_AUTH.getValue());
         when(payload.readStringNul()).thenReturn("root");
-        authenticationEngine.authenticate(channelHandlerContext, payload);
-        assertThat(getConnectionPhase(), 
is(MySQLConnectionPhase.AUTHENTICATION_METHOD_MISMATCH));
+        ContextManager contextManager = mockContextManager(rule);
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            authenticationEngine.authenticate(channelHandlerContext, payload);
+            assertThat(getConnectionPhase(), 
is(MySQLConnectionPhase.AUTHENTICATION_METHOD_MISMATCH));
+        }
     }
     
     @Test
@@ -116,9 +120,12 @@ public final class MySQLAuthenticationEngineTest extends 
ProxyContextRestorer {
         setAuthenticationResult();
         AuthorityRule rule = mock(AuthorityRule.class);
         when(rule.getAuthenticatorType(any())).thenReturn("");
-        setMetaDataContexts(rule);
-        authenticationEngine.authenticate(channelHandlerContext, payload);
-        assertThat(getAuthResponse(), is(authResponse));
+        ContextManager contextManager = mockContextManager(rule);
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            authenticationEngine.authenticate(channelHandlerContext, payload);
+            assertThat(getAuthResponse(), is(authResponse));
+        }
     }
     
     @SneakyThrows(ReflectiveOperationException.class)
@@ -132,9 +139,13 @@ public final class MySQLAuthenticationEngineTest extends 
ProxyContextRestorer {
         AuthorityRule rule = mock(AuthorityRule.class);
         when(rule.getAuthenticatorType(any())).thenReturn("");
         when(rule.findUser(new Grantee("root", 
"127.0.0.1"))).thenReturn(Optional.empty());
-        setMetaDataContexts(rule);
         ChannelHandlerContext context = mockChannelHandlerContext();
-        try (MockedConstruction<MySQLErrPacket> ignored = 
mockConstruction(MySQLErrPacket.class, (mock, mockContext) -> 
assertAuthenticationErrorPacket(mockContext.arguments()))) {
+        ContextManager contextManager = mockContextManager(rule);
+        try (
+                MockedConstruction<MySQLErrPacket> ignored = 
mockConstruction(MySQLErrPacket.class, (mock, mockContext) -> 
assertAuthenticationErrorPacket(mockContext.arguments()));
+                MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> 
ProxyContext.getInstance().databaseExists("sharding_db")).thenReturn(true);
             authenticationEngine.authenticate(context, getPayload("root", 
"sharding_db", authResponse));
             verify(context).writeAndFlush(any(MySQLErrPacket.class));
             verify(context).close();
@@ -149,12 +160,15 @@ public final class MySQLAuthenticationEngineTest extends 
ProxyContextRestorer {
         when(rule.getAuthenticatorType(any())).thenReturn("");
         ShardingSphereUser user = new ShardingSphereUser("root", "", 
"127.0.0.1");
         when(rule.findUser(user.getGrantee())).thenReturn(Optional.of(user));
-        setMetaDataContexts(rule);
         ChannelHandlerContext context = mockChannelHandlerContext();
+        ContextManager contextManager = mockContextManager(rule);
         try (
                 MockedConstruction<AuthenticatorFactory> 
mockedAuthenticatorFactory = mockConstruction(AuthenticatorFactory.class,
                         (mock, mockContext) -> 
when(mock.newInstance(user)).thenReturn(mock(Authenticator.class)));
-                MockedConstruction<MySQLErrPacket> mockedErrPacket = 
mockConstruction(MySQLErrPacket.class, (mock, mockContext) -> 
assertAuthenticationErrorPacket(mockContext.arguments()))) {
+                MockedConstruction<MySQLErrPacket> mockedErrPacket = 
mockConstruction(MySQLErrPacket.class, (mock, mockContext) -> 
assertAuthenticationErrorPacket(mockContext.arguments()));
+                MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> 
ProxyContext.getInstance().databaseExists("sharding_db")).thenReturn(true);
             authenticationEngine.authenticate(context, getPayload("root", 
"sharding_db", authResponse));
             verify(context).writeAndFlush(any(MySQLErrPacket.class));
             verify(context).close();
@@ -173,9 +187,13 @@ public final class MySQLAuthenticationEngineTest extends 
ProxyContextRestorer {
         when(rule.getAuthenticatorType(any())).thenReturn("");
         ShardingSphereUser user = new ShardingSphereUser("root", "", 
"127.0.0.1");
         when(rule.findUser(user.getGrantee())).thenReturn(Optional.of(user));
-        setMetaDataContexts(rule);
         ChannelHandlerContext context = mockChannelHandlerContext();
-        try (MockedConstruction<MySQLErrPacket> ignored = 
mockConstruction(MySQLErrPacket.class, (mock, mockContext) -> 
assertDatabaseAccessDeniedErrorPacket(mockContext.arguments()))) {
+        ContextManager contextManager = mockContextManager(rule);
+        try (
+                MockedConstruction<MySQLErrPacket> ignored = 
mockConstruction(MySQLErrPacket.class, (mock, mockContext) -> 
assertDatabaseAccessDeniedErrorPacket(mockContext.arguments()));
+                MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> 
ProxyContext.getInstance().databaseExists("sharding_db")).thenReturn(true);
             authenticationEngine.authenticate(context, getPayload("root", 
"sharding_db", authResponse));
             verify(context).writeAndFlush(any(MySQLErrPacket.class));
             verify(context).close();
@@ -191,10 +209,13 @@ public final class MySQLAuthenticationEngineTest extends 
ProxyContextRestorer {
     public void assertAuthenticateFailedWithInvalidDatabase() {
         AuthorityRule rule = mock(AuthorityRule.class);
         when(rule.getAuthenticatorType(any())).thenReturn("");
-        setMetaDataContexts(rule);
         setConnectionPhase(MySQLConnectionPhase.AUTH_PHASE_FAST_PATH);
         ChannelHandlerContext context = mockChannelHandlerContext();
-        try (MockedConstruction<MySQLErrPacket> ignored = 
mockConstruction(MySQLErrPacket.class, (mock, mockContext) -> 
assertInvalidDatabaseErrorPacket(mockContext.arguments()))) {
+        ContextManager contextManager = mockContextManager(rule);
+        try (
+                MockedConstruction<MySQLErrPacket> ignored = 
mockConstruction(MySQLErrPacket.class, (mock, mockContext) -> 
assertInvalidDatabaseErrorPacket(mockContext.arguments()));
+                MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
             authenticationEngine.authenticate(context, getPayload("root", 
"invalid_db", authResponse));
             verify(context).writeAndFlush(any(MySQLErrPacket.class));
             verify(context).close();
@@ -213,20 +234,23 @@ public final class MySQLAuthenticationEngineTest extends 
ProxyContextRestorer {
         when(rule.getAuthenticatorType(any())).thenReturn("");
         ShardingSphereUser user = new ShardingSphereUser("root", "", 
"127.0.0.1");
         when(rule.findUser(user.getGrantee())).thenReturn(Optional.of(user));
-        setMetaDataContexts(rule);
         ChannelHandlerContext context = mockChannelHandlerContext();
-        authenticationEngine.authenticate(context, getPayload("root", null, 
authResponse));
-        verify(context).writeAndFlush(any(MySQLOKPacket.class));
+        ContextManager contextManager = mockContextManager(rule);
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            authenticationEngine.authenticate(context, getPayload("root", 
null, authResponse));
+            verify(context).writeAndFlush(any(MySQLOKPacket.class));
+        }
     }
     
-    private void setMetaDataContexts(final AuthorityRule rule) {
-        ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
+    private ContextManager mockContextManager(final AuthorityRule rule) {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         Map<String, ShardingSphereDatabase> databases = new LinkedHashMap<>(1, 
1);
         databases.put("sharding_db", mock(ShardingSphereDatabase.class));
         MetaDataContexts metaDataContexts = new 
MetaDataContexts(mock(MetaDataPersistService.class), new 
ShardingSphereMetaData(databases,
                 new ShardingSphereRuleMetaData(Collections.singleton(rule)), 
new ConfigurationProperties(new Properties())));
-        
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
+        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        return result;
     }
     
     private MySQLPacketPayload getPayload(final String username, final String 
database, final byte[] authResponse) {
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/authenticator/impl/MySQLClearPasswordAuthenticatorTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/authenticator/impl/MySQLClearPasswordAuthenticatorTest.java
index eda3d6e736f..6a7ddb49e87 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/authenticator/impl/MySQLClearPasswordAuthenticatorTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/authenticator/impl/MySQLClearPasswordAuthenticatorTest.java
@@ -18,7 +18,6 @@
 package 
org.apache.shardingsphere.proxy.frontend.mysql.authentication.authenticator.impl;
 
 import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
-import org.apache.shardingsphere.proxy.frontend.mysql.ProxyContextRestorer;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -26,7 +25,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public final class MySQLClearPasswordAuthenticatorTest extends 
ProxyContextRestorer {
+public final class MySQLClearPasswordAuthenticatorTest {
     
     @Test
     public void assertAuthenticationMethodName() {
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
index a9d047295c4..d1b6462c41e 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
@@ -30,18 +30,8 @@ import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.r
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.text.fieldlist.MySQLComFieldListPacket;
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.text.query.MySQLComQueryPacket;
 import org.apache.shardingsphere.db.protocol.packet.CommandPacket;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.connector.BackendConnection;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.frontend.mysql.ProxyContextRestorer;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.admin.MySQLComResetConnectionExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.admin.MySQLComSetOptionExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.admin.initdb.MySQLComInitDbExecutor;
@@ -63,19 +53,14 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.SQLException;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class MySQLCommandExecutorFactoryTest extends 
ProxyContextRestorer {
+public final class MySQLCommandExecutorFactoryTest {
     
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private ConnectionSession connectionSession;
@@ -87,22 +72,6 @@ public final class MySQLCommandExecutorFactoryTest extends 
ProxyContextRestorer
     public void setUp() {
         
when(connectionSession.getAttributeMap().attr(MySQLConstants.MYSQL_CHARACTER_SET_ATTRIBUTE_KEY).get()).thenReturn(MySQLCharacterSet.UTF8MB4_GENERAL_CI);
         
when(connectionSession.getBackendConnection()).thenReturn(backendConnection);
-        ShardingSphereDatabase database = mockDatabase();
-        Map<String, ShardingSphereDatabase> databases = new LinkedHashMap<>(1, 
1);
-        databases.put("logic_db", database);
-        ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
-        MetaDataContexts metaDataContexts = new 
MetaDataContexts(mock(MetaDataPersistService.class),
-                new ShardingSphereMetaData(databases, 
mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new 
Properties())));
-        
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
-    }
-    
-    private ShardingSphereDatabase mockDatabase() {
-        ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        
when(result.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
-        
when(result.getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0",
 new MySQLDatabaseType()));
-        when(result.getProtocolType()).thenReturn(new MySQLDatabaseType());
-        return result;
     }
     
     @Test
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
index 9855911f740..5f12377f366 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
@@ -33,16 +33,8 @@ import 
org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContex
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.connector.BackendConnection;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory;
 import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
@@ -52,7 +44,6 @@ import 
org.apache.shardingsphere.proxy.backend.response.header.query.QueryRespon
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType;
-import org.apache.shardingsphere.proxy.frontend.mysql.ProxyContextRestorer;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLServerPreparedStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment;
@@ -75,10 +66,7 @@ import java.sql.SQLException;
 import java.sql.Types;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
 import java.util.Optional;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
@@ -95,7 +83,7 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class MySQLComStmtExecuteExecutorTest extends 
ProxyContextRestorer {
+public final class MySQLComStmtExecuteExecutorTest {
     
     @Mock
     private ProxyBackendHandler proxyBackendHandler;
@@ -108,13 +96,6 @@ public final class MySQLComStmtExecuteExecutorTest extends 
ProxyContextRestorer
     
     @Before
     public void setUp() {
-        Map<String, ShardingSphereDatabase> databases = new LinkedHashMap<>(1, 
1);
-        databases.put("logic_db", mockDatabase());
-        MetaDataContexts metaDataContexts = new 
MetaDataContexts(mock(MetaDataPersistService.class),
-                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);
         
when(connectionSession.getAttributeMap().attr(MySQLConstants.MYSQL_CHARACTER_SET_ATTRIBUTE_KEY).get()).thenReturn(MySQLCharacterSet.UTF8MB4_GENERAL_CI);
         
when(connectionSession.getBackendConnection()).thenReturn(backendConnection);
         SQLStatementContext<?> selectStatementContext = 
prepareSelectStatementContext();
@@ -128,14 +109,6 @@ public final class MySQLComStmtExecuteExecutorTest extends 
ProxyContextRestorer
                 .thenReturn(new MySQLServerPreparedStatement("commit", new 
CommonSQLStatementContext<>(new MySQLCommitStatement()), 
Collections.emptyList()));
     }
     
-    private ShardingSphereDatabase mockDatabase() {
-        ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        
when(result.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
-        
when(result.getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0",
 new MySQLDatabaseType()));
-        when(result.getProtocolType()).thenReturn(new MySQLDatabaseType());
-        return result;
-    }
-    
     private SQLStatementContext<?> prepareSelectStatementContext() {
         SelectStatementContext result = mock(SelectStatementContext.class, 
RETURNS_DEEP_STUBS);
         
when(result.getTablesContext().getDatabaseName()).thenReturn(Optional.empty());
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutorTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutorTest.java
index 58bb70203cf..42ba41bdfc0 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutorTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutorTest.java
@@ -40,13 +40,11 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.proxy.backend.session.ServerPreparedStatementRegistry;
-import org.apache.shardingsphere.proxy.frontend.mysql.ProxyContextRestorer;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLServerPreparedStatement;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLStatementIDGenerator;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
@@ -58,6 +56,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.nio.charset.StandardCharsets;
@@ -71,10 +70,11 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertFalse;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class MySQLComStmtPrepareExecutorTest extends 
ProxyContextRestorer {
+public final class MySQLComStmtPrepareExecutorTest {
     
     @Mock
     private MySQLComStmtPreparePacket packet;
@@ -84,35 +84,10 @@ public final class MySQLComStmtPrepareExecutorTest extends 
ProxyContextRestorer
     
     @Before
     public void setup() {
-        ProxyContext.init(mock(ContextManager.class, RETURNS_DEEP_STUBS));
-        prepareSQLParser();
-        prepareMetaData();
         
when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new 
ServerPreparedStatementRegistry());
         
when(connectionSession.getAttributeMap().attr(MySQLConstants.MYSQL_CHARACTER_SET_ATTRIBUTE_KEY).get()).thenReturn(MySQLCharacterSet.UTF8MB4_UNICODE_CI);
     }
     
-    private void prepareSQLParser() {
-        ContextManager contextManager = 
ProxyContext.getInstance().getContextManager();
-        MetaDataContexts metaDataContexts = 
contextManager.getMetaDataContexts();
-        
when(metaDataContexts.getMetaData().getGlobalRuleMetaData()).thenReturn(mock(ShardingSphereRuleMetaData.class));
-        CacheOption cacheOption = new CacheOption(1024, 1024);
-        
when(metaDataContexts.getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class))
-                .thenReturn(new SQLParserRule(new 
SQLParserRuleConfiguration(false, cacheOption, cacheOption)));
-        
when(metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getProtocolType()).thenReturn(new
 MySQLDatabaseType());
-    }
-    
-    private static void prepareMetaData() {
-        ShardingSphereTable table = new ShardingSphereTable();
-        table.getColumns().put("id", new ShardingSphereColumn("id", 
Types.BIGINT, true, false, false, false, true));
-        table.getColumns().put("name", new ShardingSphereColumn("name", 
Types.VARCHAR, false, false, false, false, false));
-        table.getColumns().put("age", new ShardingSphereColumn("age", 
Types.SMALLINT, false, false, false, false, true));
-        ShardingSphereSchema schema = new ShardingSphereSchema();
-        schema.getTables().put("user", table);
-        ShardingSphereDatabase database = new ShardingSphereDatabase("db", new 
MySQLDatabaseType(), new ShardingSphereResourceMetaData("db", 
Collections.emptyMap()),
-                new ShardingSphereRuleMetaData(Collections.emptyList()), 
Collections.singletonMap("db", schema));
-        
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase("db")).thenReturn(database);
-    }
-    
     @Test(expected = UnsupportedPreparedStatementException.class)
     public void assertPrepareMultiStatements() {
         when(packet.getSql()).thenReturn("update t set v=v+1 where id=1;update 
t set v=v+1 where id=2;update t set v=v+1 where id=3");
@@ -127,18 +102,22 @@ public final class MySQLComStmtPrepareExecutorTest 
extends ProxyContextRestorer
         when(packet.getSql()).thenReturn(sql);
         when(connectionSession.getConnectionId()).thenReturn(1);
         MySQLStatementIDGenerator.getInstance().registerConnection(1);
-        Iterator<DatabasePacket<?>> actualIterator = new 
MySQLComStmtPrepareExecutor(packet, connectionSession).execute().iterator();
-        assertThat(actualIterator.next(), 
instanceOf(MySQLComStmtPrepareOKPacket.class));
-        assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(actualIterator.next(), instanceOf(MySQLEofPacket.class));
-        assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(actualIterator.next(), instanceOf(MySQLEofPacket.class));
-        assertFalse(actualIterator.hasNext());
-        MySQLServerPreparedStatement actualPreparedStatement = 
connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(1);
-        assertThat(actualPreparedStatement.getSql(), is(sql));
-        assertThat(actualPreparedStatement.getSqlStatementContext(), 
instanceOf(SelectStatementContext.class));
-        
assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), 
instanceOf(MySQLSelectStatement.class));
-        MySQLStatementIDGenerator.getInstance().unregisterConnection(1);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            Iterator<DatabasePacket<?>> actualIterator = new 
MySQLComStmtPrepareExecutor(packet, connectionSession).execute().iterator();
+            assertThat(actualIterator.next(), 
instanceOf(MySQLComStmtPrepareOKPacket.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLEofPacket.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLEofPacket.class));
+            assertFalse(actualIterator.hasNext());
+            MySQLServerPreparedStatement actualPreparedStatement = 
connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(1);
+            assertThat(actualPreparedStatement.getSql(), is(sql));
+            assertThat(actualPreparedStatement.getSqlStatementContext(), 
instanceOf(SelectStatementContext.class));
+            
assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), 
instanceOf(MySQLSelectStatement.class));
+            MySQLStatementIDGenerator.getInstance().unregisterConnection(1);
+        }
     }
     
     @Test
@@ -148,26 +127,30 @@ public final class MySQLComStmtPrepareExecutorTest 
extends ProxyContextRestorer
         int connectionId = 2;
         when(connectionSession.getConnectionId()).thenReturn(connectionId);
         
MySQLStatementIDGenerator.getInstance().registerConnection(connectionId);
-        Iterator<DatabasePacket<?>> actualIterator = new 
MySQLComStmtPrepareExecutor(packet, connectionSession).execute().iterator();
-        assertThat(actualIterator.next(), 
instanceOf(MySQLComStmtPrepareOKPacket.class));
-        assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(actualIterator.next(), instanceOf(MySQLEofPacket.class));
-        DatabasePacket<?> idColumnDefinitionPacket = actualIterator.next();
-        assertThat(idColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
idColumnDefinitionPacket),
-                is(MySQLColumnDefinitionFlag.PRIMARY_KEY.getValue() | 
MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
-        assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
-        DatabasePacket<?> ageColumnDefinitionPacket = actualIterator.next();
-        assertThat(ageColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
ageColumnDefinitionPacket), is(MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
-        assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(actualIterator.next(), instanceOf(MySQLEofPacket.class));
-        assertFalse(actualIterator.hasNext());
-        MySQLServerPreparedStatement actualPreparedStatement = 
connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(1);
-        assertThat(actualPreparedStatement.getSql(), is(sql));
-        assertThat(actualPreparedStatement.getSqlStatementContext(), 
instanceOf(SelectStatementContext.class));
-        
assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), 
instanceOf(MySQLSelectStatement.class));
-        
MySQLStatementIDGenerator.getInstance().unregisterConnection(connectionId);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            Iterator<DatabasePacket<?>> actualIterator = new 
MySQLComStmtPrepareExecutor(packet, connectionSession).execute().iterator();
+            assertThat(actualIterator.next(), 
instanceOf(MySQLComStmtPrepareOKPacket.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLEofPacket.class));
+            DatabasePacket<?> idColumnDefinitionPacket = actualIterator.next();
+            assertThat(idColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
idColumnDefinitionPacket),
+                    is(MySQLColumnDefinitionFlag.PRIMARY_KEY.getValue() | 
MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
+            DatabasePacket<?> ageColumnDefinitionPacket = 
actualIterator.next();
+            assertThat(ageColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
ageColumnDefinitionPacket), is(MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLEofPacket.class));
+            assertFalse(actualIterator.hasNext());
+            MySQLServerPreparedStatement actualPreparedStatement = 
connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(1);
+            assertThat(actualPreparedStatement.getSql(), is(sql));
+            assertThat(actualPreparedStatement.getSqlStatementContext(), 
instanceOf(SelectStatementContext.class));
+            
assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), 
instanceOf(MySQLSelectStatement.class));
+            
MySQLStatementIDGenerator.getInstance().unregisterConnection(connectionId);
+        }
     }
     
     @Test
@@ -178,26 +161,30 @@ public final class MySQLComStmtPrepareExecutorTest 
extends ProxyContextRestorer
         when(connectionSession.getConnectionId()).thenReturn(connectionId);
         when(connectionSession.getDefaultDatabaseName()).thenReturn("db");
         
MySQLStatementIDGenerator.getInstance().registerConnection(connectionId);
-        Iterator<DatabasePacket<?>> actualIterator = new 
MySQLComStmtPrepareExecutor(packet, connectionSession).execute().iterator();
-        assertThat(actualIterator.next(), 
instanceOf(MySQLComStmtPrepareOKPacket.class));
-        assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
-        DatabasePacket<?> firstAgeColumnDefinitionPacket = 
actualIterator.next();
-        assertThat(firstAgeColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
firstAgeColumnDefinitionPacket), 
is(MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
-        DatabasePacket<?> idColumnDefinitionPacket = actualIterator.next();
-        assertThat(idColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
idColumnDefinitionPacket),
-                is(MySQLColumnDefinitionFlag.PRIMARY_KEY.getValue() | 
MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
-        DatabasePacket<?> secondAgeColumnDefinitionPacket = 
actualIterator.next();
-        assertThat(secondAgeColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
secondAgeColumnDefinitionPacket), 
is(MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
-        assertThat(actualIterator.next(), instanceOf(MySQLEofPacket.class));
-        assertFalse(actualIterator.hasNext());
-        MySQLServerPreparedStatement actualPreparedStatement = 
connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(1);
-        assertThat(actualPreparedStatement.getSql(), is(sql));
-        assertThat(actualPreparedStatement.getSqlStatementContext(), 
instanceOf(InsertStatementContext.class));
-        
assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), 
instanceOf(MySQLInsertStatement.class));
-        
MySQLStatementIDGenerator.getInstance().unregisterConnection(connectionId);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            Iterator<DatabasePacket<?>> actualIterator = new 
MySQLComStmtPrepareExecutor(packet, connectionSession).execute().iterator();
+            assertThat(actualIterator.next(), 
instanceOf(MySQLComStmtPrepareOKPacket.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
+            DatabasePacket<?> firstAgeColumnDefinitionPacket = 
actualIterator.next();
+            assertThat(firstAgeColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
firstAgeColumnDefinitionPacket), 
is(MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
+            DatabasePacket<?> idColumnDefinitionPacket = actualIterator.next();
+            assertThat(idColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
idColumnDefinitionPacket),
+                    is(MySQLColumnDefinitionFlag.PRIMARY_KEY.getValue() | 
MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
+            DatabasePacket<?> secondAgeColumnDefinitionPacket = 
actualIterator.next();
+            assertThat(secondAgeColumnDefinitionPacket, 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(getColumnDefinitionFlag((MySQLColumnDefinition41Packet) 
secondAgeColumnDefinitionPacket), 
is(MySQLColumnDefinitionFlag.UNSIGNED.getValue()));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLEofPacket.class));
+            assertFalse(actualIterator.hasNext());
+            MySQLServerPreparedStatement actualPreparedStatement = 
connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(1);
+            assertThat(actualPreparedStatement.getSql(), is(sql));
+            assertThat(actualPreparedStatement.getSqlStatementContext(), 
instanceOf(InsertStatementContext.class));
+            
assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), 
instanceOf(MySQLInsertStatement.class));
+            
MySQLStatementIDGenerator.getInstance().unregisterConnection(connectionId);
+        }
     }
     
     private int getColumnDefinitionFlag(final MySQLColumnDefinition41Packet 
packet) {
@@ -213,23 +200,50 @@ public final class MySQLComStmtPrepareExecutorTest 
extends ProxyContextRestorer
         when(connectionSession.getConnectionId()).thenReturn(1);
         when(connectionSession.getDefaultDatabaseName()).thenReturn("db");
         MySQLStatementIDGenerator.getInstance().registerConnection(1);
-        Iterator<DatabasePacket<?>> actualIterator = new 
MySQLComStmtPrepareExecutor(packet, connectionSession).execute().iterator();
-        assertThat(actualIterator.next(), 
instanceOf(MySQLComStmtPrepareOKPacket.class));
-        assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
-        assertThat(actualIterator.next(), instanceOf(MySQLEofPacket.class));
-        assertFalse(actualIterator.hasNext());
-        MySQLServerPreparedStatement actualPreparedStatement = 
connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(1);
-        assertThat(actualPreparedStatement.getSql(), is(sql));
-        assertThat(actualPreparedStatement.getSqlStatementContext(), 
instanceOf(UpdateStatementContext.class));
-        
assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), 
instanceOf(MySQLUpdateStatement.class));
-        MySQLStatementIDGenerator.getInstance().unregisterConnection(1);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            Iterator<DatabasePacket<?>> actualIterator = new 
MySQLComStmtPrepareExecutor(packet, connectionSession).execute().iterator();
+            assertThat(actualIterator.next(), 
instanceOf(MySQLComStmtPrepareOKPacket.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLColumnDefinition41Packet.class));
+            assertThat(actualIterator.next(), 
instanceOf(MySQLEofPacket.class));
+            assertFalse(actualIterator.hasNext());
+            MySQLServerPreparedStatement actualPreparedStatement = 
connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(1);
+            assertThat(actualPreparedStatement.getSql(), is(sql));
+            assertThat(actualPreparedStatement.getSqlStatementContext(), 
instanceOf(UpdateStatementContext.class));
+            
assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), 
instanceOf(MySQLUpdateStatement.class));
+            MySQLStatementIDGenerator.getInstance().unregisterConnection(1);
+        }
     }
     
     @Test(expected = UnsupportedPreparedStatementException.class)
     public void assertPrepareNotAllowedStatement() {
         when(packet.getSql()).thenReturn("begin");
-        new MySQLComStmtPrepareExecutor(packet, connectionSession).execute();
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            new MySQLComStmtPrepareExecutor(packet, 
connectionSession).execute();
+        }
+    }
+    
+    private ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(mock(ShardingSphereRuleMetaData.class));
+        CacheOption cacheOption = new CacheOption(1024, 1024);
+        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class))
+                .thenReturn(new SQLParserRule(new 
SQLParserRuleConfiguration(false, cacheOption, cacheOption)));
+        
when(result.getMetaDataContexts().getMetaData().getDatabase(connectionSession.getDatabaseName()).getProtocolType()).thenReturn(new
 MySQLDatabaseType());
+        ShardingSphereTable table = new ShardingSphereTable();
+        table.getColumns().put("id", new ShardingSphereColumn("id", 
Types.BIGINT, true, false, false, false, true));
+        table.getColumns().put("name", new ShardingSphereColumn("name", 
Types.VARCHAR, false, false, false, false, false));
+        table.getColumns().put("age", new ShardingSphereColumn("age", 
Types.SMALLINT, false, false, false, false, true));
+        ShardingSphereSchema schema = new ShardingSphereSchema();
+        schema.getTables().put("user", table);
+        ShardingSphereDatabase database = new ShardingSphereDatabase("db", new 
MySQLDatabaseType(), new ShardingSphereResourceMetaData("db", 
Collections.emptyMap()),
+                new ShardingSphereRuleMetaData(Collections.emptyList()), 
Collections.singletonMap("db", schema));
+        
when(result.getMetaDataContexts().getMetaData().getDatabase("db")).thenReturn(database);
+        return result;
     }
 }
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
index cff1a6f872e..1b1f8a32aea 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
@@ -45,7 +45,6 @@ import org.junit.runner.RunWith;
 import org.mockito.InOrder;
 import org.mockito.Mock;
 import org.mockito.MockedStatic;
-import org.mockito.Mockito;
 import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.MockitoJUnitRunner;
 
@@ -94,7 +93,7 @@ public final class PostgreSQLBatchedStatementsExecutorTest {
                 Arrays.asList(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4, 
PostgreSQLColumnType.POSTGRESQL_TYPE_VARCHAR));
         List<List<Object>> parameterSets = Arrays.asList(Arrays.asList(1, new 
PostgreSQLTypeUnspecifiedSQLParameter("foo")),
                 Arrays.asList(2, new 
PostgreSQLTypeUnspecifiedSQLParameter("bar")), Arrays.asList(3, new 
PostgreSQLTypeUnspecifiedSQLParameter("baz")));
-        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, Mockito.RETURNS_DEEP_STUBS)) {
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
             proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
             PostgreSQLBatchedStatementsExecutor actual = new 
PostgreSQLBatchedStatementsExecutor(connectionSession, 
postgreSQLPreparedStatement, parameterSets);
             prepareExecutionUnitParameters(actual, parameterSets);
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java
index 16792e07309..08d024644e7 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java
@@ -40,7 +40,6 @@ import org.mockito.Answers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockedStatic;
-import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.SQLException;
@@ -51,6 +50,7 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.verify;
@@ -90,7 +90,7 @@ public final class PostgreSQLComBindExecutorTest {
         
when(bindPacket.readParameters(anyList())).thenReturn(Collections.emptyList());
         
when(bindPacket.readResultFormats()).thenReturn(Collections.emptyList());
         ContextManager contextManager = mockContextManager(databaseName);
-        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, Mockito.RETURNS_DEEP_STUBS)) {
+        try (MockedStatic<ProxyContext> proxyContext = 
mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
             proxyContext.when(() -> 
ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
             proxyContext.when(() -> 
ProxyContext.getInstance().getDatabase(databaseName)).thenReturn(database);
             Collection<DatabasePacket<?>> actual = executor.execute();

Reply via email to