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 efebb9c9e94 Add more test cases on
FirebirdFetchStatementCommandExecutorTest (#37948)
efebb9c9e94 is described below
commit efebb9c9e946db1d70e2781dcb313a400c99af36
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Feb 3 23:02:43 2026 +0800
Add more test cases on FirebirdFetchStatementCommandExecutorTest (#37948)
---
.../FirebirdFetchStatementCommandExecutorTest.java | 94 +++++++++++++++-------
1 file changed, 64 insertions(+), 30 deletions(-)
diff --git
a/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/fetch/FirebirdFetchStatementCommandExecutorTest.java
b/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/fetch/FirebirdFetchStatementCommandExecutorTest.java
index 3be58d2591a..c0bc6c15dea 100644
---
a/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/fetch/FirebirdFetchStatementCommandExecutorTest.java
+++
b/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/fetch/FirebirdFetchStatementCommandExecutorTest.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
import org.firebirdsql.gds.ISCConstants;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -40,10 +41,11 @@ import java.util.Collections;
import java.util.Iterator;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.hamcrest.Matchers.nullValue;
+import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.verify;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
@ExtendWith(MockitoExtension.class)
class FirebirdFetchStatementCommandExecutorTest {
@@ -58,51 +60,83 @@ class FirebirdFetchStatementCommandExecutorTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ConnectionSession connectionSession;
+ @Mock
+ private ProxyDatabaseConnectionManager databaseConnectionManager;
+
@Mock
private ProxyBackendHandler proxyBackendHandler;
+ private FirebirdFetchStatementCommandExecutor executor;
+
@BeforeEach
void setup() {
FirebirdFetchStatementCache.getInstance().registerConnection(CONNECTION_ID);
-
FirebirdFetchStatementCache.getInstance().registerStatement(CONNECTION_ID,
STATEMENT_ID, proxyBackendHandler);
when(connectionSession.getConnectionId()).thenReturn(CONNECTION_ID);
+
when(connectionSession.getDatabaseConnectionManager()).thenReturn(databaseConnectionManager);
when(packet.getStatementId()).thenReturn(STATEMENT_ID);
- when(packet.getFetchSize()).thenReturn(1);
}
@AfterEach
void tearDown() {
-
FirebirdFetchStatementCache.getInstance().unregisterStatement(CONNECTION_ID,
STATEMENT_ID);
FirebirdFetchStatementCache.getInstance().unregisterConnection(CONNECTION_ID);
}
@Test
- void assertExecute() throws SQLException {
- when(proxyBackendHandler.next()).thenReturn(true);
- QueryResponseRow row = new
QueryResponseRow(Collections.singletonList(new QueryResponseCell(Types.INTEGER,
1)));
- when(proxyBackendHandler.getRowData()).thenReturn(row, row);
- FirebirdFetchStatementCommandExecutor executor = new
FirebirdFetchStatementCommandExecutor(packet, connectionSession);
- Collection<DatabasePacket> actual = executor.execute();
- Iterator<DatabasePacket> iterator = actual.iterator();
- FirebirdFetchResponsePacket first = (FirebirdFetchResponsePacket)
iterator.next();
- assertThat(first.getStatus(), equalTo(ISCConstants.FETCH_OK));
- assertThat(first.getCount(), equalTo(1));
- assertThat(first.getRow(), notNullValue());
- FirebirdFetchResponsePacket second = (FirebirdFetchResponsePacket)
iterator.next();
- assertThat(second.getStatus(), equalTo(ISCConstants.FETCH_OK));
- assertThat(second.getCount(), equalTo(0));
- assertThat(second.getRow(), nullValue());
+ void assertExecuteWhenNoBackendHandler() throws SQLException {
+ executor = new FirebirdFetchStatementCommandExecutor(packet,
connectionSession);
+ Collection<DatabasePacket> actualPackets = executor.execute();
+ Iterator<DatabasePacket> packetIterator = actualPackets.iterator();
+ FirebirdFetchResponsePacket actualPacket =
(FirebirdFetchResponsePacket) packetIterator.next();
+ assertThat(actualPackets.size(), is(1));
+ assertThat(actualPacket.getStatus(),
is(ISCConstants.FETCH_NO_MORE_ROWS));
+ assertThat(actualPacket.getCount(), is(0));
+ assertNull(actualPacket.getRow());
}
@Test
- void assertExecuteNoMoreRows() throws SQLException {
- when(proxyBackendHandler.next()).thenReturn(false);
- FirebirdFetchStatementCommandExecutor executor = new
FirebirdFetchStatementCommandExecutor(packet, connectionSession);
- Collection<DatabasePacket> actual = executor.execute();
- Iterator<DatabasePacket> iterator = actual.iterator();
- FirebirdFetchResponsePacket packet = (FirebirdFetchResponsePacket)
iterator.next();
- assertThat(packet.getStatus(),
equalTo(ISCConstants.FETCH_NO_MORE_ROWS));
- assertThat(packet.getCount(), equalTo(0));
- assertThat(packet.getRow(), nullValue());
+ void assertExecuteWithRowsAndFetchEnd() throws SQLException {
+
FirebirdFetchStatementCache.getInstance().registerStatement(CONNECTION_ID,
STATEMENT_ID, proxyBackendHandler);
+ when(packet.getFetchSize()).thenReturn(2);
+ QueryResponseRow responseRow = new
QueryResponseRow(Collections.singletonList(new QueryResponseCell(Types.INTEGER,
1)));
+ when(proxyBackendHandler.next()).thenReturn(true, true);
+ when(proxyBackendHandler.getRowData()).thenReturn(responseRow,
responseRow);
+ executor = new FirebirdFetchStatementCommandExecutor(packet,
connectionSession);
+ Collection<DatabasePacket> actualPackets = executor.execute();
+ Iterator<DatabasePacket> packetIterator = actualPackets.iterator();
+ FirebirdFetchResponsePacket actualFirstPacket =
(FirebirdFetchResponsePacket) packetIterator.next();
+ assertThat(actualPackets.size(), is(3));
+ assertThat(actualFirstPacket.getStatus(), is(ISCConstants.FETCH_OK));
+ assertThat(actualFirstPacket.getCount(), is(1));
+ assertNotNull(actualFirstPacket.getRow());
+ FirebirdFetchResponsePacket actualSecondPacket =
(FirebirdFetchResponsePacket) packetIterator.next();
+ assertThat(actualSecondPacket.getStatus(), is(ISCConstants.FETCH_OK));
+ assertThat(actualSecondPacket.getCount(), is(1));
+ assertNotNull(actualSecondPacket.getRow());
+ FirebirdFetchResponsePacket actualEndPacket =
(FirebirdFetchResponsePacket) packetIterator.next();
+ assertThat(actualEndPacket.getStatus(), is(ISCConstants.FETCH_OK));
+ assertThat(actualEndPacket.getCount(), is(0));
+ assertNull(actualEndPacket.getRow());
+ }
+
+ @Test
+ void assertExecuteStopsWhenRowsExhausted() throws SQLException {
+
FirebirdFetchStatementCache.getInstance().registerStatement(CONNECTION_ID,
STATEMENT_ID, proxyBackendHandler);
+ when(packet.getFetchSize()).thenReturn(2);
+ QueryResponseRow responseRow = new
QueryResponseRow(Collections.singletonList(new QueryResponseCell(Types.INTEGER,
1)));
+ when(proxyBackendHandler.next()).thenReturn(true, false);
+ when(proxyBackendHandler.getRowData()).thenReturn(responseRow);
+ executor = new FirebirdFetchStatementCommandExecutor(packet,
connectionSession);
+ Collection<DatabasePacket> actualPackets = executor.execute();
+ Iterator<DatabasePacket> packetIterator = actualPackets.iterator();
+ FirebirdFetchResponsePacket actualRowPacket =
(FirebirdFetchResponsePacket) packetIterator.next();
+ assertThat(actualPackets.size(), is(2));
+ assertThat(actualRowPacket.getStatus(), is(ISCConstants.FETCH_OK));
+ assertThat(actualRowPacket.getCount(), is(1));
+ assertNotNull(actualRowPacket.getRow());
+ FirebirdFetchResponsePacket actualNoMorePacket =
(FirebirdFetchResponsePacket) packetIterator.next();
+ assertThat(actualNoMorePacket.getStatus(),
is(ISCConstants.FETCH_NO_MORE_ROWS));
+ assertThat(actualNoMorePacket.getCount(), is(0));
+ assertNull(actualNoMorePacket.getRow());
+
verify(databaseConnectionManager).unmarkResourceInUse(proxyBackendHandler);
}
}