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

zhangliang 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 4f8727976fc Add more test cases on ShardingDALResultMerger (#33715)
4f8727976fc is described below

commit 4f8727976fc55d997c1f9c1bc16494ce096c59fe
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Nov 18 22:57:04 2024 +0800

    Add more test cases on ShardingDALResultMerger (#33715)
---
 .../merge/dal/ShardingDALResultMergerTest.java     | 96 +++++++---------------
 1 file changed, 31 insertions(+), 65 deletions(-)

diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMergerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMergerTest.java
index 37633602bc2..8668eaf5fd4 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMergerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMergerTest.java
@@ -17,35 +17,30 @@
 
 package org.apache.shardingsphere.sharding.merge.dal;
 
-import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataMergedResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sharding.merge.dal.show.LogicTablesMergedResult;
 import 
org.apache.shardingsphere.sharding.merge.dal.show.ShowCreateTableMergedResult;
 import org.apache.shardingsphere.sharding.merge.dal.show.ShowIndexMergedResult;
 import 
org.apache.shardingsphere.sharding.merge.dal.show.ShowTableStatusMergedResult;
-import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLExplainStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLShowCreateTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLShowDatabasesStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLShowIndexStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLShowOtherStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLShowTableStatusStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLShowTablesStatement;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.sql.SQLException;
-import java.util.LinkedList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -56,92 +51,63 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.withSettings;
 
+@ExtendWith(MockitoExtension.class)
 class ShardingDALResultMergerTest {
     
-    private final List<QueryResult> queryResults = new LinkedList<>();
+    private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
     
-    @BeforeEach
-    void setUp() {
-        queryResults.add(mock(QueryResult.class));
-    }
+    private final ShardingDALResultMerger resultMerger = new 
ShardingDALResultMerger("foo_db", mock());
+    
+    private final List<QueryResult> queryResults = 
Collections.singletonList(mock());
     
     @Test
     void assertMergeForShowDatabasesStatement() throws SQLException {
-        DALStatement dalStatement = new MySQLShowDatabasesStatement();
-        SQLStatementContext sqlStatementContext = 
mockSQLStatementContext(dalStatement);
-        ShardingDALResultMerger resultMerger = new 
ShardingDALResultMerger(DefaultDatabase.LOGIC_NAME, null);
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
database, mock(ConnectionContext.class)), 
instanceOf(LocalDataMergedResult.class));
+        SQLStatementContext sqlStatementContext = mockSQLStatementContext(new 
MySQLShowDatabasesStatement());
+        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
mock(), mock()), instanceOf(LocalDataMergedResult.class));
     }
     
     @Test
     void assertMergeForShowShowTablesStatement() throws SQLException {
-        DALStatement dalStatement = new MySQLShowTablesStatement();
-        SQLStatementContext sqlStatementContext = 
mockSQLStatementContext(dalStatement);
-        ShardingDALResultMerger resultMerger = new 
ShardingDALResultMerger(DefaultDatabase.LOGIC_NAME, null);
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
database, mock(ConnectionContext.class)), 
instanceOf(LogicTablesMergedResult.class));
+        SQLStatementContext sqlStatementContext = mockSQLStatementContext(new 
MySQLShowTablesStatement());
+        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
mock(), mock()), instanceOf(LogicTablesMergedResult.class));
     }
     
     @Test
-    void assertMergeForShowCreateTableStatement() throws SQLException {
-        DALStatement dalStatement = new MySQLShowCreateTableStatement();
-        SQLStatementContext sqlStatementContext = 
mockSQLStatementContext(dalStatement);
-        ShardingDALResultMerger resultMerger = new 
ShardingDALResultMerger(DefaultDatabase.LOGIC_NAME, null);
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
database, mock(ConnectionContext.class)), 
instanceOf(ShowCreateTableMergedResult.class));
+    void assertMergeForShowTableStatusStatement() throws SQLException {
+        SQLStatementContext sqlStatementContext = mockSQLStatementContext(new 
MySQLShowTableStatusStatement());
+        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
mock(), mock()), instanceOf(ShowTableStatusMergedResult.class));
     }
     
     @Test
-    void assertMergeForShowOtherStatement() throws SQLException {
-        DALStatement dalStatement = new MySQLShowOtherStatement();
-        SQLStatementContext sqlStatementContext = 
mockSQLStatementContext(dalStatement);
-        ShardingDALResultMerger resultMerger = new 
ShardingDALResultMerger(DefaultDatabase.LOGIC_NAME, null);
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
database, mock(ConnectionContext.class)), 
instanceOf(TransparentMergedResult.class));
+    void assertMergeForShowIndexStatement() throws SQLException {
+        SQLStatementContext sqlStatementContext = mockSQLStatementContext(new 
MySQLShowIndexStatement());
+        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
mock(), mock()), instanceOf(ShowIndexMergedResult.class));
     }
     
     @Test
-    void assertMergeForDescribeStatement() throws SQLException {
-        DALStatement dalStatement = new MySQLExplainStatement();
-        SQLStatementContext sqlStatementContext = 
mockSQLStatementContext(dalStatement);
-        ShardingDALResultMerger resultMerger = new 
ShardingDALResultMerger(DefaultDatabase.LOGIC_NAME, mock(ShardingRule.class));
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
database, mock(ConnectionContext.class)), 
instanceOf(TransparentMergedResult.class));
+    void assertMergeForShowCreateTableStatement() throws SQLException {
+        SQLStatementContext sqlStatementContext = mockSQLStatementContext(new 
MySQLShowCreateTableStatement());
+        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
mock(), mock()), instanceOf(ShowCreateTableMergedResult.class));
     }
     
     @Test
-    void assertMergeForShowIndexStatement() throws SQLException {
-        DALStatement dalStatement = new MySQLShowIndexStatement();
-        SQLStatementContext sqlStatementContext = 
mockSQLStatementContext(dalStatement);
-        ShardingDALResultMerger resultMerger = new 
ShardingDALResultMerger(DefaultDatabase.LOGIC_NAME, mock(ShardingRule.class));
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
database, mock(ConnectionContext.class)), 
instanceOf(ShowIndexMergedResult.class));
+    void assertMergeForDescribeStatement() throws SQLException {
+        SQLStatementContext sqlStatementContext = mockSQLStatementContext(new 
MySQLExplainStatement());
+        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
mock(), mock()), instanceOf(TransparentMergedResult.class));
     }
     
     @Test
-    void assertMergeForShowTableStatusStatement() throws SQLException {
-        DALStatement dalStatement = new MySQLShowTableStatusStatement();
-        SQLStatementContext sqlStatementContext = 
mockSQLStatementContext(dalStatement);
-        ShardingDALResultMerger resultMerger = new 
ShardingDALResultMerger(DefaultDatabase.LOGIC_NAME, mock(ShardingRule.class));
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
database, mock(ConnectionContext.class)), 
instanceOf(ShowTableStatusMergedResult.class));
+    void assertMergeWithNotTableAvailable() throws SQLException {
+        SQLStatementContext sqlStatementContext = 
mock(SQLStatementContext.class);
+        when(sqlStatementContext.getDatabaseType()).thenReturn(databaseType);
+        assertThat(resultMerger.merge(queryResults, sqlStatementContext, 
mock(), mock()), instanceOf(TransparentMergedResult.class));
     }
     
     private SQLStatementContext mockSQLStatementContext(final DALStatement 
dalStatement) {
-        SQLStatementContext result = mock(SQLStatementContext.class, 
withSettings().extraInterfaces(TableAvailable.class));
+        SQLStatementContext result = mock(SQLStatementContext.class, 
withSettings().extraInterfaces(TableAvailable.class).defaultAnswer(RETURNS_DEEP_STUBS));
         when(result.getSqlStatement()).thenReturn(dalStatement);
-        TablesContext tablesContext = mock(TablesContext.class);
-        when(((TableAvailable) 
result).getTablesContext()).thenReturn(tablesContext);
-        when(tablesContext.getSchemaName()).thenReturn(Optional.empty());
-        
when(result.getDatabaseType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
+        when(((TableAvailable) 
result).getTablesContext().getSchemaName()).thenReturn(Optional.empty());
+        when(result.getDatabaseType()).thenReturn(databaseType);
         return result;
     }
 }

Reply via email to