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

timoninmaxim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 987d1a1a3ab IGNITE-22215 Fix for ThinClientIndexQueryTest#testPageSize 
(#11349)
987d1a1a3ab is described below

commit 987d1a1a3ab7e5a634a5e7ee4357d1004ee2bb78
Author: oleg-vlsk <153691984+oleg-v...@users.noreply.github.com>
AuthorDate: Tue May 28 02:33:55 2024 +1000

    IGNITE-22215 Fix for ThinClientIndexQueryTest#testPageSize (#11349)
---
 .../cache/query/ThinClientIndexQueryTest.java      | 58 ++++++++++++++++++++--
 1 file changed, 54 insertions(+), 4 deletions(-)

diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/cache/query/ThinClientIndexQueryTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/cache/query/ThinClientIndexQueryTest.java
index 08cc8b76477..0d9ffed37b5 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/cache/query/ThinClientIndexQueryTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/cache/query/ThinClientIndexQueryTest.java
@@ -18,12 +18,14 @@
 package org.apache.ignite.cache.query;
 
 import java.lang.reflect.Field;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Random;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 import javax.cache.Cache;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteDataStreamer;
@@ -40,6 +42,8 @@ import org.apache.ignite.configuration.ClientConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.TestRecordingCommunicationSpi;
 import org.apache.ignite.internal.client.thin.ProtocolBitmaskFeature;
+import org.apache.ignite.internal.processors.cache.query.GridCacheQueryRequest;
+import 
org.apache.ignite.internal.processors.cache.query.GridCacheQueryResponse;
 import 
org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryNextPageRequest;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.F;
@@ -224,14 +228,46 @@ public class ThinClientIndexQueryTest extends 
GridCommonAbstractTest {
             for (int pageSize: F.asList(1, 10, 100, 1000, 10_000)) {
                 idxQry.setPageSize(pageSize);
 
-                
TestRecordingCommunicationSpi.spi(grid(0)).record(GridQueryNextPageRequest.class);
+                for (int i = 0; i < NODES; i++) {
+                    TestRecordingCommunicationSpi.spi(grid(i)).record(
+                        GridCacheQueryRequest.class,
+                        GridCacheQueryResponse.class);
+                }
 
                 assertClientQuery(cache, NULLS_CNT, CNT, idxQry);
 
-                List<Object> reqs = 
TestRecordingCommunicationSpi.spi(grid(0)).recordedMessages(true);
+                int nodeOneEntries = cache.query(new ScanQuery<Integer, 
Person>().setLocal(true)).getAll().size();
+                int nodeTwoEntries = (CNT - NULLS_CNT) - nodeOneEntries;
+
+                int nodeOneExpectedReqs = (nodeOneEntries + pageSize - 1) / 
pageSize;
+                int nodeTwoExpectedReqs = (nodeTwoEntries + pageSize - 1) / 
pageSize;
+
+                int nodeOneLastPageEntries = nodeOneEntries % pageSize;
+                int nodeTwoLastPageEntries = nodeTwoEntries % pageSize;
+
+                List<Object> msgs = new ArrayList<>();
+
+                for (int i = 0; i < NODES; i++)
+                    
msgs.addAll(TestRecordingCommunicationSpi.spi(grid(i)).recordedMessages(true));
+
+                List<GridCacheQueryRequest> reqs = getFilteredMessages(msgs, 
GridCacheQueryRequest.class);
+                List<GridCacheQueryResponse> resp = getFilteredMessages(msgs, 
GridCacheQueryResponse.class);
 
-                for (Object r: reqs)
-                    assertEquals(pageSize, 
((GridQueryNextPageRequest)r).pageSize());
+                int reqsSize = reqs.size();
+
+                assert (reqsSize == nodeOneExpectedReqs || reqsSize == 
nodeTwoExpectedReqs) && reqsSize == resp.size();
+
+                for (int i = 0; i < reqsSize; i++) {
+                    int reqPage = reqs.get(i).pageSize();
+                    int respData = resp.get(i).data().size();
+
+                    assert reqPage == pageSize;
+
+                    if (i == reqsSize - 1 && (nodeOneLastPageEntries != 0 || 
nodeTwoLastPageEntries != 0))
+                        assert respData == nodeOneLastPageEntries || respData 
== nodeTwoLastPageEntries;
+                    else
+                        assert respData == reqPage;
+                }
             }
 
             for (int pageSize: F.asList(-10, -1, 0)) {
@@ -449,6 +485,20 @@ public class ThinClientIndexQueryTest extends 
GridCommonAbstractTest {
         }
     }
 
+    /**
+     * Filter messages in a collection by a certain class.
+     *
+     * @param msgs List of mixed messages.
+     * @param cls Class of messages that need to be filtered.
+     * @return List of messages filtered by the specified class.
+     */
+    public <T> List<T> getFilteredMessages(List<Object> msgs, Class<T> cls) {
+        return msgs.stream()
+            .filter(msg -> msg.getClass().equals(cls))
+            .map(msg -> (T)msg)
+            .collect(Collectors.toList());
+    }
+
     /** */
     private static class Person {
         /** */

Reply via email to