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();