You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/02/22 12:21:33 UTC
[shardingsphere] branch master updated: Remove ProxyContextRestorer in backend-mysql module (#24305)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 44f21086486 Remove ProxyContextRestorer in backend-mysql module (#24305)
44f21086486 is described below
commit 44f21086486ed1d5669c8b05d02304ec45fc3058
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Feb 22 20:21:24 2023 +0800
Remove ProxyContextRestorer in backend-mysql module (#24305)
* Remove ProxyContextRestorer in MySQLAdminExecutorCreatorTest
* Remove ProxyContextRestorer in MySQLSetVariableAdminExecutorTest
* Remove ProxyContextRestorer in ShowCreateDatabaseExecutorTest
* Remove ProxyContextRestorer in MySQLStatementMemoryStrictlyFetchSizeSetterTest
* Remove ProxyContextRestorer in ShowProcedureStatusExecutorTest
* Remove ProxyContextRestorer in SelectInformationSchemataExecutorTest
* Remove ProxyContextRestorer in ShowCurrentUserExecutorTest
* Remove ProxyContextRestorer in ShowDatabasesExecutorTest
* Remove ProxyContextRestorer in ShowTablesExecutorTest
* Remove ProxyContextRestorer in UseDatabaseExecutorTest
* Remove ProxyContextRestorer in ShowProcessListExecutorTest
* Remove ProxyContextRestorer
* Remove ProxyContextRestorer
---
...StatementMemoryStrictlyFetchSizeSetterTest.java | 28 +--
.../executor/MySQLAdminExecutorCreatorTest.java | 3 +-
.../MySQLSetVariableAdminExecutorTest.java | 3 +-
.../executor/ShowCreateDatabaseExecutorTest.java | 48 +++---
.../executor/ShowCurrentUserExecutorTest.java | 39 +++--
.../admin/executor/ShowDatabasesExecutorTest.java | 160 ++++++++++-------
.../executor/ShowFunctionStatusExecutorTest.java | 33 ++--
.../executor/ShowProcedureStatusExecutorTest.java | 33 ++--
.../executor/ShowProcessListExecutorTest.java | 49 +++---
.../admin/executor/ShowTablesExecutorTest.java | 190 ++++++++++++---------
.../admin/executor/UseDatabaseExecutorTest.java | 63 +++----
.../SelectInformationSchemataExecutorTest.java | 92 ++++++----
.../proxy/backend/util/ProxyContextRestorer.java | 38 -----
13 files changed, 418 insertions(+), 361 deletions(-)
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/connector/jdbc/statement/MySQLStatementMemoryStrictlyFetchSizeSetterTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/connector/jdbc/statement/MySQLStatementMemoryStrictlyFetchSizeSetterTest.java
index 24022a401b3..04f0ead1786 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/connector/jdbc/statement/MySQLStatementMemoryStrictlyFetchSizeSetterTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/connector/jdbc/statement/MySQLStatementMemoryStrictlyFetchSizeSetterTest.java
@@ -20,32 +20,34 @@ package org.apache.shardingsphere.proxy.backend.mysql.connector.jdbc.statement;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
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.junit.Before;
import org.junit.Test;
+import org.mockito.MockedStatic;
import java.sql.SQLException;
import java.sql.Statement;
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;
-public final class MySQLStatementMemoryStrictlyFetchSizeSetterTest extends ProxyContextRestorer {
-
- @Before
- public void setUp() {
- ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
- when(contextManager.getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.PROXY_BACKEND_QUERY_FETCH_SIZE)).thenReturn(-1);
- ProxyContext.init(contextManager);
- }
+public final class MySQLStatementMemoryStrictlyFetchSizeSetterTest {
@Test
public void assertSetFetchSize() throws SQLException {
- when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.PROXY_BACKEND_QUERY_FETCH_SIZE)).thenReturn(-1);
Statement statement = mock(Statement.class);
- new MySQLStatementMemoryStrictlyFetchSizeSetter().setFetchSize(statement);
- verify(statement).setFetchSize(Integer.MIN_VALUE);
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ new MySQLStatementMemoryStrictlyFetchSizeSetter().setFetchSize(statement);
+ verify(statement).setFetchSize(Integer.MIN_VALUE);
+ }
+ }
+
+ private static ContextManager mockContextManager() {
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.PROXY_BACKEND_QUERY_FETCH_SIZE)).thenReturn(-1);
+ return result;
}
}
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLAdminExecutorCreatorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLAdminExecutorCreatorTest.java
index 44d788f10c5..52e75430a87 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLAdminExecutorCreatorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLAdminExecutorCreatorTest.java
@@ -33,7 +33,6 @@ import org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAd
import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.MySQLAdminExecutorCreator;
import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.MySQLSetVariableAdminExecutor;
import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.information.SelectInformationSchemataExecutor;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
@@ -72,7 +71,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
-public final class MySQLAdminExecutorCreatorTest extends ProxyContextRestorer {
+public final class MySQLAdminExecutorCreatorTest {
@SuppressWarnings("rawtypes")
@Mock
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
index 59c9176d9f9..2ec045e7886 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
@@ -27,7 +27,6 @@ import org.apache.shardingsphere.proxy.backend.connector.DatabaseConnector;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.MySQLSetVariableAdminExecutor;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableAssignSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableSegment;
@@ -45,7 +44,7 @@ import static org.mockito.Mockito.mockConstruction;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-public final class MySQLSetVariableAdminExecutorTest extends ProxyContextRestorer {
+public final class MySQLSetVariableAdminExecutorTest {
@Test
public void assertExecute() throws SQLException {
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
index 2a3c2aaea66..b5d06b5cffb 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
@@ -28,10 +28,9 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowCreateDatabaseStatement;
-import org.junit.Before;
import org.junit.Test;
+import org.mockito.MockedStatic;
import java.sql.SQLException;
import java.util.HashMap;
@@ -42,20 +41,39 @@ import static org.hamcrest.CoreMatchers.is;
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.mockStatic;
import static org.mockito.Mockito.when;
-public final class ShowCreateDatabaseExecutorTest extends ProxyContextRestorer {
+public final class ShowCreateDatabaseExecutorTest {
private static final String DATABASE_PATTERN = "db_%s";
- @Before
- public void setUp() {
+ @Test
+ public void assertExecute() throws SQLException {
+ MySQLShowCreateDatabaseStatement statement = new MySQLShowCreateDatabaseStatement();
+ statement.setDatabaseName("db_0");
+ ShowCreateDatabaseExecutor executor = new ShowCreateDatabaseExecutor(statement);
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().databaseExists("db_0")).thenReturn(true);
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ int count = 0;
+ while (executor.getMergedResult().next()) {
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is(String.format(DATABASE_PATTERN, count)));
+ count++;
+ }
+ }
+ }
+
+ private ContextManager mockContextManager() {
Map<String, ShardingSphereDatabase> databases = getDatabases();
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);
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+ return result;
}
private Map<String, ShardingSphereDatabase> getDatabases() {
@@ -68,20 +86,6 @@ public final class ShowCreateDatabaseExecutorTest extends ProxyContextRestorer {
return result;
}
- @Test
- public void assertExecute() throws SQLException {
- MySQLShowCreateDatabaseStatement statement = new MySQLShowCreateDatabaseStatement();
- statement.setDatabaseName("db_0");
- ShowCreateDatabaseExecutor showCreateDatabaseExecutor = new ShowCreateDatabaseExecutor(statement);
- showCreateDatabaseExecutor.execute(mockConnectionSession());
- assertThat(showCreateDatabaseExecutor.getQueryResultMetaData().getColumnCount(), is(2));
- int count = 0;
- while (showCreateDatabaseExecutor.getMergedResult().next()) {
- assertThat(showCreateDatabaseExecutor.getMergedResult().getValue(1, Object.class), is(String.format(DATABASE_PATTERN, count)));
- count++;
- }
- }
-
private ConnectionSession mockConnectionSession() {
ConnectionSession result = mock(ConnectionSession.class);
when(result.getGrantee()).thenReturn(new Grantee("root", ""));
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
index 543f38109a0..01697eedb82 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
@@ -28,9 +28,8 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
-import org.junit.Before;
import org.junit.Test;
+import org.mockito.MockedStatic;
import java.sql.SQLException;
import java.util.Collections;
@@ -42,19 +41,33 @@ import static org.hamcrest.CoreMatchers.is;
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.mockStatic;
import static org.mockito.Mockito.when;
-public final class ShowCurrentUserExecutorTest extends ProxyContextRestorer {
+public final class ShowCurrentUserExecutorTest {
private static final Grantee GRANTEE = new Grantee("root", "");
- @Before
- public void setUp() {
- ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ @Test
+ public void assertExecute() throws SQLException {
+ ShowCurrentUserExecutor executor = new ShowCurrentUserExecutor();
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+ while (executor.getMergedResult().next()) {
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("root@%"));
+ }
+ }
+ }
+
+ private ContextManager mockContextManager() {
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
new ShardingSphereMetaData(new HashMap<>(), mockShardingSphereRuleMetaData(), new ConfigurationProperties(new Properties())));
- when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
- ProxyContext.init(contextManager);
+ when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+ return result;
}
private ShardingSphereRuleMetaData mockShardingSphereRuleMetaData() {
@@ -65,16 +78,6 @@ public final class ShowCurrentUserExecutorTest extends ProxyContextRestorer {
return new ShardingSphereRuleMetaData(Collections.singletonList(authorityRule));
}
- @Test
- public void assertExecute() throws SQLException {
- ShowCurrentUserExecutor executor = new ShowCurrentUserExecutor();
- executor.execute(mockConnectionSession());
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
- while (executor.getMergedResult().next()) {
- assertThat(executor.getMergedResult().getValue(1, Object.class), is("root@%"));
- }
- }
-
private ConnectionSession mockConnectionSession() {
ConnectionSession result = mock(ConnectionSession.class);
when(result.getGrantee()).thenReturn(GRANTEE);
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
index d1b1095cd96..71d1b2c13c5 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
@@ -30,12 +30,11 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowFilterSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowLikeSegment;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowDatabasesStatement;
-import org.junit.Before;
import org.junit.Test;
+import org.mockito.MockedStatic;
import java.sql.SQLException;
import java.util.Collection;
@@ -45,53 +44,33 @@ import java.util.Map;
import java.util.Optional;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import static org.hamcrest.CoreMatchers.is;
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.mockStatic;
import static org.mockito.Mockito.when;
-public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
+public final class ShowDatabasesExecutorTest {
private static final String DATABASE_PATTERN = "database_%s";
- private ShowDatabasesExecutor showDatabasesExecutor;
-
- @Before
- public void setUp() {
- showDatabasesExecutor = new ShowDatabasesExecutor(new MySQLShowDatabasesStatement());
- ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
- ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Collections.singleton(mockAuthorityRule()));
- MetaDataContexts metaDataContexts = new MetaDataContexts(
- mock(MetaDataPersistService.class), new ShardingSphereMetaData(getDatabases(), globalRuleMetaData, new ConfigurationProperties(new Properties())));
- when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
- ProxyContext.init(contextManager);
- }
-
- private AuthorityRule mockAuthorityRule() {
- AuthorityRule result = mock(AuthorityRule.class);
- when(result.findPrivileges(new Grantee("root", ""))).thenReturn(Optional.of(new AllPrivilegesPermittedShardingSpherePrivileges()));
- return result;
- }
-
- private Map<String, ShardingSphereDatabase> getDatabases() {
- Map<String, ShardingSphereDatabase> result = new LinkedHashMap<>(10, 1);
- for (int i = 0; i < 10; i++) {
- ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
- when(database.getProtocolType()).thenReturn(new MySQLDatabaseType());
- when(database.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
- when(database.getName()).thenReturn(String.format(DATABASE_PATTERN, i));
- result.put(String.format(DATABASE_PATTERN, i), database);
- }
- return result;
- }
+ private ShowDatabasesExecutor executor = new ShowDatabasesExecutor(new MySQLShowDatabasesStatement());
@Test
public void assertExecute() throws SQLException {
- showDatabasesExecutor.execute(mockConnectionSession());
- assertThat(showDatabasesExecutor.getQueryResultMetaData().getColumnCount(), is(1));
- assertThat(getActual(), is(getExpected()));
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+ .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+ assertThat(getActual(), is(getExpected()));
+ }
}
@Test
@@ -101,15 +80,21 @@ public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
ShowLikeSegment showLikeSegment = new ShowLikeSegment(0, 0, "database%");
showFilterSegment.setLike(showLikeSegment);
showDatabasesStatement.setFilter(showFilterSegment);
- showDatabasesExecutor = new ShowDatabasesExecutor(showDatabasesStatement);
- showDatabasesExecutor.execute(mockConnectionSession());
- assertThat(getActual(), is(getExpected()));
+ ContextManager contextManager = mockContextManager();
+ executor = new ShowDatabasesExecutor(showDatabasesStatement);
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+ .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+ executor.execute(mockConnectionSession());
+ assertThat(getActual(), is(getExpected()));
+ }
}
private Collection<String> getActual() throws SQLException {
Map<String, String> result = new ConcurrentHashMap<>(10, 1);
- while (showDatabasesExecutor.getMergedResult().next()) {
- String value = showDatabasesExecutor.getMergedResult().getValue(1, Object.class).toString();
+ while (executor.getMergedResult().next()) {
+ String value = executor.getMergedResult().getValue(1, Object.class).toString();
result.put(value, value);
}
return result.keySet();
@@ -131,15 +116,21 @@ public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
ShowLikeSegment showLikeSegment = new ShowLikeSegment(0, 0, "%_1");
showFilterSegment.setLike(showLikeSegment);
showDatabasesStatement.setFilter(showFilterSegment);
- showDatabasesExecutor = new ShowDatabasesExecutor(showDatabasesStatement);
- showDatabasesExecutor.execute(mockConnectionSession());
- assertThat(showDatabasesExecutor.getQueryResultMetaData().getColumnCount(), is(1));
- int count = 0;
- while (showDatabasesExecutor.getMergedResult().next()) {
- assertThat(showDatabasesExecutor.getMergedResult().getValue(1, Object.class), is("database_1"));
- count++;
+ executor = new ShowDatabasesExecutor(showDatabasesStatement);
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+ .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+ int count = 0;
+ while (executor.getMergedResult().next()) {
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("database_1"));
+ count++;
+ }
+ assertThat(count, is(1));
}
- assertThat(count, is(1));
}
@Test
@@ -149,15 +140,21 @@ public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
ShowLikeSegment showLikeSegment = new ShowLikeSegment(0, 0, "database_9");
showFilterSegment.setLike(showLikeSegment);
showDatabasesStatement.setFilter(showFilterSegment);
- showDatabasesExecutor = new ShowDatabasesExecutor(showDatabasesStatement);
- showDatabasesExecutor.execute(mockConnectionSession());
- assertThat(showDatabasesExecutor.getQueryResultMetaData().getColumnCount(), is(1));
- int count = 0;
- while (showDatabasesExecutor.getMergedResult().next()) {
- assertThat(showDatabasesExecutor.getMergedResult().getValue(1, Object.class), is("database_9"));
- count++;
+ executor = new ShowDatabasesExecutor(showDatabasesStatement);
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+ .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+ int count = 0;
+ while (executor.getMergedResult().next()) {
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("database_9"));
+ count++;
+ }
+ assertThat(count, is(1));
}
- assertThat(count, is(1));
}
@Test
@@ -167,15 +164,48 @@ public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
ShowLikeSegment showLikeSegment = new ShowLikeSegment(0, 0, "not_exist_database");
showFilterSegment.setLike(showLikeSegment);
showDatabasesStatement.setFilter(showFilterSegment);
- showDatabasesExecutor = new ShowDatabasesExecutor(showDatabasesStatement);
- showDatabasesExecutor.execute(mockConnectionSession());
- assertThat(showDatabasesExecutor.getQueryResultMetaData().getColumnCount(), is(1));
- int count = 0;
- while (showDatabasesExecutor.getMergedResult().next()) {
- assertThat(showDatabasesExecutor.getMergedResult().getValue(1, Object.class), is("not_exist_database"));
- count++;
+ executor = new ShowDatabasesExecutor(showDatabasesStatement);
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+ .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+ int count = 0;
+ while (executor.getMergedResult().next()) {
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("not_exist_database"));
+ count++;
+ }
+ assertThat(count, is(0));
}
- assertThat(count, is(0));
+ }
+
+ private ContextManager mockContextManager() {
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Collections.singleton(mockAuthorityRule()));
+ MetaDataContexts metaDataContexts = new MetaDataContexts(
+ mock(MetaDataPersistService.class), new ShardingSphereMetaData(getDatabases(), globalRuleMetaData, new ConfigurationProperties(new Properties())));
+ when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+ return result;
+ }
+
+ private AuthorityRule mockAuthorityRule() {
+ AuthorityRule result = mock(AuthorityRule.class);
+ when(result.findPrivileges(new Grantee("root", ""))).thenReturn(Optional.of(new AllPrivilegesPermittedShardingSpherePrivileges()));
+ return result;
+ }
+
+ private Map<String, ShardingSphereDatabase> getDatabases() {
+ Map<String, ShardingSphereDatabase> result = new LinkedHashMap<>(10, 1);
+ for (int i = 0; i < 10; i++) {
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
+ when(database.getProtocolType()).thenReturn(new MySQLDatabaseType());
+ when(database.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
+ when(database.getName()).thenReturn(String.format(DATABASE_PATTERN, i));
+ result.put(String.format(DATABASE_PATTERN, i), database);
+ }
+ return result;
}
private ConnectionSession mockConnectionSession() {
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
index 3c19a4d32c8..e59df62616f 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
@@ -28,10 +28,9 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowFunctionStatusStatement;
-import org.junit.Before;
import org.junit.Test;
+import org.mockito.MockedStatic;
import java.sql.SQLException;
import java.util.HashMap;
@@ -42,23 +41,31 @@ import static org.hamcrest.CoreMatchers.is;
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.mockStatic;
import static org.mockito.Mockito.when;
-public final class ShowFunctionStatusExecutorTest extends ProxyContextRestorer {
+public final class ShowFunctionStatusExecutorTest {
private static final String DATABASE_PATTERN = "db_%s";
- private ShowFunctionStatusExecutor showFunctionStatusExecutor;
+ @Test
+ public void assertExecute() throws SQLException {
+ ShowFunctionStatusExecutor executor = new ShowFunctionStatusExecutor(new MySQLShowFunctionStatusStatement());
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(11));
+ }
+ }
- @Before
- public void setUp() {
- showFunctionStatusExecutor = new ShowFunctionStatusExecutor(new MySQLShowFunctionStatusStatement());
+ private ContextManager mockContextManager() {
Map<String, ShardingSphereDatabase> databases = getDatabases();
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);
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+ return result;
}
private Map<String, ShardingSphereDatabase> getDatabases() {
@@ -72,12 +79,6 @@ public final class ShowFunctionStatusExecutorTest extends ProxyContextRestorer {
return result;
}
- @Test
- public void assertExecute() throws SQLException {
- showFunctionStatusExecutor.execute(mockConnectionSession());
- assertThat(showFunctionStatusExecutor.getQueryResultMetaData().getColumnCount(), is(11));
- }
-
private ConnectionSession mockConnectionSession() {
ConnectionSession result = mock(ConnectionSession.class);
when(result.getGrantee()).thenReturn(new Grantee("root", ""));
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
index 9976c69faab..e04c912ac8d 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
@@ -28,10 +28,9 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowProcedureStatusStatement;
-import org.junit.Before;
import org.junit.Test;
+import org.mockito.MockedStatic;
import java.sql.SQLException;
import java.util.HashMap;
@@ -42,20 +41,31 @@ import static org.hamcrest.CoreMatchers.is;
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.mockStatic;
import static org.mockito.Mockito.when;
-public final class ShowProcedureStatusExecutorTest extends ProxyContextRestorer {
+public final class ShowProcedureStatusExecutorTest {
private static final String DATABASE_PATTERN = "db_%s";
- @Before
- public void setUp() {
+ @Test
+ public void assertExecute() throws SQLException {
+ ShowProcedureStatusExecutor executor = new ShowProcedureStatusExecutor(new MySQLShowProcedureStatusStatement());
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(11));
+ }
+ }
+
+ private ContextManager mockContextManager() {
Map<String, ShardingSphereDatabase> databases = getDatabases();
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);
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+ return result;
}
private Map<String, ShardingSphereDatabase> getDatabases() {
@@ -69,13 +79,6 @@ public final class ShowProcedureStatusExecutorTest extends ProxyContextRestorer
return result;
}
- @Test
- public void assertExecute() throws SQLException {
- ShowProcedureStatusExecutor executor = new ShowProcedureStatusExecutor(new MySQLShowProcedureStatusStatement());
- executor.execute(mockConnectionSession());
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(11));
- }
-
private ConnectionSession mockConnectionSession() {
ConnectionSession result = mock(ConnectionSession.class);
when(result.getGrantee()).thenReturn(new Grantee("root", ""));
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
index 4c403b8d72a..79b92143a47 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
@@ -23,10 +23,9 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.transaction.api.TransactionType;
-import org.junit.Before;
import org.junit.Test;
+import org.mockito.MockedStatic;
import org.mockito.internal.configuration.plugins.Plugins;
import java.sql.SQLException;
@@ -36,19 +35,32 @@ import static org.hamcrest.CoreMatchers.is;
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.mockStatic;
-public final class ShowProcessListExecutorTest extends ProxyContextRestorer {
+public final class ShowProcessListExecutorTest {
- private ShowProcessListExecutor showProcessListExecutor;
-
- @Before
- public void setUp() throws ReflectiveOperationException {
- ProxyContext.init(mock(ContextManager.class, RETURNS_DEEP_STUBS));
- showProcessListExecutor = new ShowProcessListExecutor();
- setupBatchProcessContexts();
+ @Test
+ public void assertExecute() throws SQLException, ReflectiveOperationException {
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ ShowProcessListExecutor showProcessListExecutor = new ShowProcessListExecutor();
+ setupBatchProcessContexts(showProcessListExecutor);
+ showProcessListExecutor.execute(new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new DefaultAttributeMap()));
+ assertThat(showProcessListExecutor.getQueryResultMetaData().getColumnCount(), is(8));
+ MergedResult mergedResult = showProcessListExecutor.getMergedResult();
+ while (mergedResult.next()) {
+ assertThat(mergedResult.getValue(1, String.class), is("f6c2336a-63ba-41bf-941e-2e3504eb2c80"));
+ assertThat(mergedResult.getValue(2, String.class), is("sharding"));
+ assertThat(mergedResult.getValue(3, String.class), is("127.0.0.1"));
+ assertThat(mergedResult.getValue(4, String.class), is("sharding_db"));
+ assertThat(mergedResult.getValue(7, String.class), is("Executing 1/2"));
+ assertThat(mergedResult.getValue(8, String.class), is("alter table t_order add column a varchar(64) after order_id"));
+ }
+ }
}
- private void setupBatchProcessContexts() throws ReflectiveOperationException {
+ private void setupBatchProcessContexts(final ShowProcessListExecutor showProcessListExecutor) throws ReflectiveOperationException {
String executionNodeValue = "contexts:\n"
+ "- executionID: f6c2336a-63ba-41bf-941e-2e3504eb2c80\n"
+ " sql: alter table t_order add column a varchar(64) after order_id\n"
@@ -63,19 +75,4 @@ public final class ShowProcessListExecutorTest extends ProxyContextRestorer {
+ " unitID: unitID2\n";
Plugins.getMemberAccessor().set(showProcessListExecutor.getClass().getDeclaredField("batchProcessContexts"), showProcessListExecutor, Collections.singleton(executionNodeValue));
}
-
- @Test
- public void assertExecute() throws SQLException {
- showProcessListExecutor.execute(new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new DefaultAttributeMap()));
- assertThat(showProcessListExecutor.getQueryResultMetaData().getColumnCount(), is(8));
- MergedResult mergedResult = showProcessListExecutor.getMergedResult();
- while (mergedResult.next()) {
- assertThat(mergedResult.getValue(1, String.class), is("f6c2336a-63ba-41bf-941e-2e3504eb2c80"));
- assertThat(mergedResult.getValue(2, String.class), is("sharding"));
- assertThat(mergedResult.getValue(3, String.class), is("127.0.0.1"));
- assertThat(mergedResult.getValue(4, String.class), is("sharding_db"));
- assertThat(mergedResult.getValue(7, String.class), is("Executing 1/2"));
- assertThat(mergedResult.getValue(8, String.class), is("alter table t_order add column a varchar(64) after order_id"));
- }
- }
}
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
index 6318e7104be..9990c135ecf 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
@@ -33,15 +33,14 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.FromSchemaSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowFilterSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowLikeSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTablesStatement;
-import org.junit.Before;
import org.junit.Test;
+import org.mockito.MockedStatic;
import java.sql.SQLException;
import java.util.Collections;
@@ -55,55 +54,33 @@ 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;
-public final class ShowTablesExecutorTest extends ProxyContextRestorer {
+public final class ShowTablesExecutorTest {
private static final String DATABASE_PATTERN = "db_%s";
- @Before
- public void setUp() {
- Map<String, ShardingSphereDatabase> databases = getDatabases();
- 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);
- }
-
- private Map<String, ShardingSphereDatabase> getDatabases() {
- Map<String, ShardingSphereTable> tables = new HashMap<>(4, 1);
- tables.put("t_account", new ShardingSphereTable("t_account", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
- tables.put("t_account_bak", new ShardingSphereTable("t_account_bak", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
- tables.put("t_account_detail", new ShardingSphereTable("t_account_detail", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
- tables.put("t_test", new ShardingSphereTable("T_TEST", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
- ShardingSphereSchema schema = new ShardingSphereSchema(tables, Collections.emptyMap());
- ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
- when(database.getSchema(String.format(DATABASE_PATTERN, 0))).thenReturn(schema);
- when(database.isComplete()).thenReturn(true);
- when(database.getProtocolType()).thenReturn(new MySQLDatabaseType());
- Map<String, ShardingSphereDatabase> result = new HashMap<>(2, 1);
- result.put(String.format(DATABASE_PATTERN, 0), database);
- ShardingSphereDatabase uncompletedDatabase = mock(ShardingSphereDatabase.class);
- when(uncompletedDatabase.isComplete()).thenReturn(false);
- result.put("uncompleted", uncompletedDatabase);
- return result;
- }
-
@Test
public void assertShowTablesExecutorWithoutFilter() throws SQLException {
- ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(new MySQLShowTablesStatement(), DatabaseTypeEngine.getDatabaseType("MySQL"));
- showTablesExecutor.execute(mockConnectionSession());
- assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account"));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account_bak"));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account_detail"));
- assertFalse(showTablesExecutor.getMergedResult().next());
+ ShowTablesExecutor executor = new ShowTablesExecutor(new MySQLShowTablesStatement(), DatabaseTypeEngine.getDatabaseType("MySQL"));
+ Map<String, ShardingSphereDatabase> databases = getDatabases();
+ ContextManager contextManager = mockContextManager(databases);
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account"));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account_bak"));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account_detail"));
+ assertFalse(executor.getMergedResult().next());
+ }
}
@Test
@@ -112,16 +89,22 @@ public final class ShowTablesExecutorTest extends ProxyContextRestorer {
ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
when(showFilterSegment.getLike()).thenReturn(Optional.of(new ShowLikeSegment(0, 10, "t_account%")));
showTablesStatement.setFilter(showFilterSegment);
- ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
- showTablesExecutor.execute(mockConnectionSession());
- assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account"));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account_bak"));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account_detail"));
- assertFalse(showTablesExecutor.getMergedResult().next());
+ ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+ Map<String, ShardingSphereDatabase> databases = getDatabases();
+ ContextManager contextManager = mockContextManager(databases);
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account"));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account_bak"));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account_detail"));
+ assertFalse(executor.getMergedResult().next());
+ }
}
@Test
@@ -130,12 +113,18 @@ public final class ShowTablesExecutorTest extends ProxyContextRestorer {
ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
when(showFilterSegment.getLike()).thenReturn(Optional.of(new ShowLikeSegment(0, 10, "t_account")));
showTablesStatement.setFilter(showFilterSegment);
- ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
- showTablesExecutor.execute(mockConnectionSession());
- assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account"));
- assertFalse(showTablesExecutor.getMergedResult().next());
+ ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+ Map<String, ShardingSphereDatabase> databases = getDatabases();
+ ContextManager contextManager = mockContextManager(databases);
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account"));
+ assertFalse(executor.getMergedResult().next());
+ }
}
@Test
@@ -144,12 +133,18 @@ public final class ShowTablesExecutorTest extends ProxyContextRestorer {
ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
when(showFilterSegment.getLike()).thenReturn(Optional.of(new ShowLikeSegment(0, 10, "T_TEST")));
showTablesStatement.setFilter(showFilterSegment);
- ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
- showTablesExecutor.execute(mockConnectionSession());
- assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
- assertFalse(showTablesExecutor.getMergedResult().next());
+ ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+ Map<String, ShardingSphereDatabase> databases = getDatabases();
+ ContextManager contextManager = mockContextManager(databases);
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
+ assertFalse(executor.getMergedResult().next());
+ }
}
@Test
@@ -158,25 +153,62 @@ public final class ShowTablesExecutorTest extends ProxyContextRestorer {
ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
when(showFilterSegment.getLike()).thenReturn(Optional.of(new ShowLikeSegment(0, 10, "t_test")));
showTablesStatement.setFilter(showFilterSegment);
- ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
- showTablesExecutor.execute(mockConnectionSession());
- assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
- showTablesExecutor.getMergedResult().next();
- assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
- assertFalse(showTablesExecutor.getMergedResult().next());
+ ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+ Map<String, ShardingSphereDatabase> databases = getDatabases();
+ ContextManager contextManager = mockContextManager(databases);
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ executor.getMergedResult().next();
+ assertThat(executor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
+ assertFalse(executor.getMergedResult().next());
+ }
}
@Test
public void assertShowTableFromUncompletedDatabase() throws SQLException {
MySQLShowTablesStatement showTablesStatement = new MySQLShowTablesStatement();
showTablesStatement.setFromSchema(new FromSchemaSegment(0, 0, new DatabaseSegment(0, 0, new IdentifierValue("uncompleted"))));
- ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
- showTablesExecutor.execute(mockConnectionSession());
- QueryResultMetaData actualMetaData = showTablesExecutor.getQueryResultMetaData();
- assertThat(actualMetaData.getColumnCount(), is(2));
- assertThat(actualMetaData.getColumnName(1), is("Tables_in_uncompleted"));
- MergedResult actualResult = showTablesExecutor.getMergedResult();
- assertFalse(actualResult.next());
+ ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+ ContextManager contextManager = mockContextManager(getDatabases());
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ executor.execute(mockConnectionSession());
+ QueryResultMetaData actualMetaData = executor.getQueryResultMetaData();
+ assertThat(actualMetaData.getColumnCount(), is(2));
+ assertThat(actualMetaData.getColumnName(1), is("Tables_in_uncompleted"));
+ MergedResult actualResult = executor.getMergedResult();
+ assertFalse(actualResult.next());
+ }
+ }
+
+ private ContextManager mockContextManager(final Map<String, ShardingSphereDatabase> databases) {
+ MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
+ new ShardingSphereMetaData(databases, mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+ return result;
+ }
+
+ private Map<String, ShardingSphereDatabase> getDatabases() {
+ Map<String, ShardingSphereTable> tables = new HashMap<>(4, 1);
+ tables.put("t_account", new ShardingSphereTable("t_account", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+ tables.put("t_account_bak", new ShardingSphereTable("t_account_bak", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+ tables.put("t_account_detail", new ShardingSphereTable("t_account_detail", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+ tables.put("t_test", new ShardingSphereTable("T_TEST", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+ ShardingSphereSchema schema = new ShardingSphereSchema(tables, Collections.emptyMap());
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
+ when(database.getSchema(String.format(DATABASE_PATTERN, 0))).thenReturn(schema);
+ when(database.isComplete()).thenReturn(true);
+ when(database.getProtocolType()).thenReturn(new MySQLDatabaseType());
+ Map<String, ShardingSphereDatabase> result = new HashMap<>(2, 1);
+ result.put(String.format(DATABASE_PATTERN, 0), database);
+ ShardingSphereDatabase uncompletedDatabase = mock(ShardingSphereDatabase.class);
+ when(uncompletedDatabase.isComplete()).thenReturn(false);
+ result.put("uncompleted", uncompletedDatabase);
+ return result;
}
private ConnectionSession mockConnectionSession() {
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
index 5bd540a0760..25fbc7e6779 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
@@ -28,12 +28,11 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLUseStatement;
-import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.MockedStatic;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.HashMap;
@@ -44,24 +43,50 @@ import java.util.Properties;
import static org.mockito.ArgumentMatchers.anyString;
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 UseDatabaseExecutorTest extends ProxyContextRestorer {
+public final class UseDatabaseExecutorTest {
private static final String DATABASE_PATTERN = "db_%s";
@Mock
private ConnectionSession connectionSession;
- @Before
- public void setUp() {
- ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ @Test
+ public void assertExecuteUseStatementBackendHandler() {
+ MySQLUseStatement useStatement = mock(MySQLUseStatement.class);
+ when(useStatement.getSchema()).thenReturn(String.format(DATABASE_PATTERN, 0));
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().databaseExists("db_0")).thenReturn(true);
+ UseDatabaseExecutor executor = new UseDatabaseExecutor(useStatement);
+ executor.execute(connectionSession);
+ verify(connectionSession).setCurrentDatabase(anyString());
+ }
+ }
+
+ @Test(expected = UnknownDatabaseException.class)
+ public void assertExecuteUseStatementBackendHandlerWhenSchemaNotExist() {
+ MySQLUseStatement useStatement = mock(MySQLUseStatement.class);
+ when(useStatement.getSchema()).thenReturn(String.format(DATABASE_PATTERN, 10));
+ UseDatabaseExecutor executor = new UseDatabaseExecutor(useStatement);
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ executor.execute(connectionSession);
+ }
+ }
+
+ private ContextManager mockContextManager() {
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
new ShardingSphereMetaData(getDatabases(), mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
- when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
- ProxyContext.init(contextManager);
+ when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+ return result;
}
private Map<String, ShardingSphereDatabase> getDatabases() {
@@ -74,26 +99,4 @@ public final class UseDatabaseExecutorTest extends ProxyContextRestorer {
}
return result;
}
-
- @Test
- public void assertExecuteUseStatementBackendHandler() {
- MySQLUseStatement useStatement = mock(MySQLUseStatement.class);
- when(useStatement.getSchema()).thenReturn(String.format(DATABASE_PATTERN, 0));
- ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
- MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
- new ShardingSphereMetaData(getDatabases(), mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
- when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
- ProxyContext.init(contextManager);
- UseDatabaseExecutor useSchemaBackendHandler = new UseDatabaseExecutor(useStatement);
- useSchemaBackendHandler.execute(connectionSession);
- verify(connectionSession).setCurrentDatabase(anyString());
- }
-
- @Test(expected = UnknownDatabaseException.class)
- public void assertExecuteUseStatementBackendHandlerWhenSchemaNotExist() {
- MySQLUseStatement useStatement = mock(MySQLUseStatement.class);
- when(useStatement.getSchema()).thenReturn(String.format(DATABASE_PATTERN, 10));
- UseDatabaseExecutor useSchemaBackendHandler = new UseDatabaseExecutor(useStatement);
- useSchemaBackendHandler.execute(connectionSession);
- }
}
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
index 4ed794ccb3d..cd1d0ec7d3f 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
@@ -33,25 +33,27 @@ import org.apache.shardingsphere.parser.rule.SQLParserRule;
import org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.MockedStatic;
import org.mockito.junit.MockitoJUnitRunner;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
+import java.util.stream.Collectors;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -60,10 +62,11 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
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 SelectInformationSchemataExecutorTest extends ProxyContextRestorer {
+public final class SelectInformationSchemataExecutorTest {
private final Grantee grantee = new Grantee("root", "127.0.0.1");
@@ -76,28 +79,21 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
@Before
public void setUp() {
- ProxyContext.init(mockContextManager());
when(connectionSession.getGrantee()).thenReturn(grantee);
statement = (SelectStatement) new SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build()).getSQLParserEngine("MySQL").parse(sql, false);
}
- private ContextManager mockContextManager() {
- AuthorityRule authorityRule = mock(AuthorityRule.class);
- when(authorityRule.findPrivileges(grantee)).thenReturn(Optional.of(new DatabasePermittedPrivileges(Collections.singleton("auth_db"))));
- ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
- MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class), new ShardingSphereMetaData(new HashMap<>(),
- new ShardingSphereRuleMetaData(Collections.singleton(authorityRule)), new ConfigurationProperties(new Properties())));
- when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
- return result;
- }
-
@Test
public void assertExecuteWithUnauthorizedDatabase() throws SQLException {
- ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("no_auth_db", createDatabase("no_auth_db"));
SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
- executor.execute(connectionSession);
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
- assertFalse(executor.getMergedResult().next());
+ ContextManager contextManager = mockContextManager(createDatabase("no_auth_db"));
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Collections.singleton("no_auth_db"));
+ executor.execute(connectionSession);
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
+ assertFalse(executor.getMergedResult().next());
+ }
}
@Test
@@ -105,33 +101,59 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
Map<String, String> expectedResultSetMap = new HashMap<>(2, 1);
expectedResultSetMap.put("SCHEMA_NAME", "foo_ds");
expectedResultSetMap.put("DEFAULT_COLLATION_NAME", "utf8mb4");
- ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("auth_db", createDatabase(expectedResultSetMap));
SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
- executor.execute(connectionSession);
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
- assertTrue(executor.getMergedResult().next());
- assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
- assertThat(executor.getMergedResult().getValue(2, String.class), is("utf8mb4"));
- assertFalse(executor.getMergedResult().next());
+ ShardingSphereDatabase database = createDatabase(expectedResultSetMap);
+ ContextManager contextManager = mockContextManager(database);
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Collections.singleton("auth_db"));
+ proxyContext.when(() -> ProxyContext.getInstance().getDatabase("auth_db")).thenReturn(database);
+ executor.execute(connectionSession);
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ assertTrue(executor.getMergedResult().next());
+ assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
+ assertThat(executor.getMergedResult().getValue(2, String.class), is("utf8mb4"));
+ assertFalse(executor.getMergedResult().next());
+ }
}
@Test
public void assertExecuteWithAuthorizedDatabaseAndEmptyResource() throws SQLException {
- ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("auth_db", createDatabase("auth_db"));
SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
- executor.execute(connectionSession);
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
- assertTrue(executor.getMergedResult().next());
- assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
- assertThat(executor.getMergedResult().getValue(2, String.class), is(""));
- assertFalse(executor.getMergedResult().next());
+ ContextManager contextManager = mockContextManager(createDatabase("auth_db"));
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Collections.singleton("auth_db"));
+ executor.execute(connectionSession);
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ assertTrue(executor.getMergedResult().next());
+ assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
+ assertThat(executor.getMergedResult().getValue(2, String.class), is(""));
+ assertFalse(executor.getMergedResult().next());
+ }
}
@Test
public void assertExecuteWithoutDatabase() throws SQLException {
SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
- executor.execute(connectionSession);
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
+ ContextManager contextManager = mockContextManager();
+ try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+ proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Collections.emptyList());
+ executor.execute(connectionSession);
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
+ }
+ }
+
+ private ContextManager mockContextManager(final ShardingSphereDatabase... databases) {
+ AuthorityRule authorityRule = mock(AuthorityRule.class);
+ when(authorityRule.findPrivileges(grantee)).thenReturn(Optional.of(new DatabasePermittedPrivileges(Collections.singleton("auth_db"))));
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class), new ShardingSphereMetaData(
+ Arrays.stream(databases).collect(Collectors.toMap(ShardingSphereDatabase::getName, each -> each, (key, value) -> value)),
+ new ShardingSphereRuleMetaData(Collections.singleton(authorityRule)), new ConfigurationProperties(new Properties())));
+ when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+ return result;
}
private ShardingSphereDatabase createDatabase(final String databaseName, final ShardingSphereResourceMetaData resourceMetaData) {
@@ -139,11 +161,11 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
}
private ShardingSphereDatabase createDatabase(final String databaseName) {
- return createDatabase(databaseName, new ShardingSphereResourceMetaData("sharding_db", Collections.emptyMap()));
+ return createDatabase(databaseName, new ShardingSphereResourceMetaData(databaseName, Collections.emptyMap()));
}
private ShardingSphereDatabase createDatabase(final Map<String, String> expectedResultSetMap) throws SQLException {
- return createDatabase("auth_db", new ShardingSphereResourceMetaData("sharding_db", Collections.singletonMap("foo_ds", new MockedDataSource(mockConnection(expectedResultSetMap)))));
+ return createDatabase("auth_db", new ShardingSphereResourceMetaData("auth_db", Collections.singletonMap("foo_ds", new MockedDataSource(mockConnection(expectedResultSetMap)))));
}
private Connection mockConnection(final Map<String, String> expectedResultSetMap) throws SQLException {
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/util/ProxyContextRestorer.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/util/ProxyContextRestorer.java
deleted file mode 100644
index 395d919da30..00000000000
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/util/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.backend.util;
-
-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);
- }
-}