Repository: incubator-geode Updated Branches: refs/heads/develop cd8743d45 -> 819339834
GEODE-988: CI Failure: CqPerfUsingPoolDUnitTest.testMatchingCqs failed with AssertionFailedError Test issue. The test is not waiting for events to arrive for all the CqListeners; it waits for one of the CqListener (thae last one registered) and validates for all CqListener; based on the order at which CQlistners are invoked (and thread scheduling), when check for expected events are made, the events may not have arrived at all CqListeners. Added wait logic in the Listner code, so that we wait for all the expected event to arrive. Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/81933983 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/81933983 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/81933983 Branch: refs/heads/develop Commit: 819339834edf4e8fc813574e5dbfbc954b0af2bc Parents: cd8743d Author: Anil <[email protected]> Authored: Wed Mar 23 10:57:21 2016 -0700 Committer: Anil <[email protected]> Committed: Fri Mar 25 12:11:27 2016 -0700 ---------------------------------------------------------------------- .../query/cq/dunit/CqQueryTestListener.java | 31 ++++++++++++++++++++ .../cq/dunit/CqQueryUsingPoolDUnitTest.java | 17 ++++++----- 2 files changed, 41 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/81933983/geode-core/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryTestListener.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryTestListener.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryTestListener.java index e402671..fe5e20f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryTestListener.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryTestListener.java @@ -23,6 +23,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.TimeUnit; import com.gemstone.gemfire.LogWriter; import com.gemstone.gemfire.cache.Operation; @@ -32,6 +33,7 @@ import com.gemstone.gemfire.cache.query.CqStatusListener; import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem; import com.gemstone.gemfire.test.dunit.Wait; import com.gemstone.gemfire.test.dunit.WaitCriterion; +import com.jayway.awaitility.Awaitility; /** * @author rmadduri @@ -386,6 +388,35 @@ public class CqQueryTestListener implements CqStatusListener { return true; } + public void waitForEvents( + final int creates, + final int updates, + final int deletes, + final int queryInserts, + final int queryUpdates, + final int queryDeletes, + final int totalEvents) { + // Wait for expected events to arrive + try { + Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> { + if ((creates > 0 && creates != this.getCreateEventCount()) || + (updates > 0 && updates != this.getUpdateEventCount()) || + (deletes > 0 && deletes != this.getDeleteEventCount()) || + (queryInserts > 0 && queryInserts != this.getQueryInsertEventCount()) || + (queryUpdates > 0 && queryUpdates != this.getQueryUpdateEventCount()) || + (queryDeletes > 0 && queryDeletes != this.getQueryDeleteEventCount()) || + (totalEvents > 0 && totalEvents != this.getTotalEventCount()) + ) { + return false; + } + return true; + }); + } catch (Exception ex) { + // We just wait for expected events to arrive. + // Caller will do validation and throw exception. + } + } + public void getEventHistory() { destroys.clear(); http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/81933983/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryUsingPoolDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryUsingPoolDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryUsingPoolDUnitTest.java index be91665..506460c 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryUsingPoolDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryUsingPoolDUnitTest.java @@ -1011,10 +1011,13 @@ public class CqQueryUsingPoolDUnitTest extends CacheTestCase { CqQueryTestListener listener = (CqQueryTestListener) cqListeners[0]; listener.printInfo(false); + // Wait for expected events to arrive at Listener. + listener.waitForEvents(creates, updates, deletes, queryInserts, queryUpdates, queryDeletes, totalEvents); + // Check for totalEvents count. if (totalEvents != noTest) { // Result size validation. - listener.printInfo(true); + //listener.printInfo(true); assertEquals("Total Event Count mismatch", totalEvents, listener.getTotalEventCount()); } @@ -1031,42 +1034,42 @@ public class CqQueryUsingPoolDUnitTest extends CacheTestCase { // Check for create count. if (creates != noTest) { // Result size validation. - listener.printInfo(true); + //listener.printInfo(true); assertEquals("Create Event mismatch", creates, listener.getCreateEventCount()); } // Check for update count. if (updates != noTest) { // Result size validation. - listener.printInfo(true); + //listener.printInfo(true); assertEquals("Update Event mismatch", updates, listener.getUpdateEventCount()); } // Check for delete count. if (deletes != noTest) { // Result size validation. - listener.printInfo(true); + //listener.printInfo(true); assertEquals("Delete Event mismatch", deletes, listener.getDeleteEventCount()); } // Check for queryInsert count. if (queryInserts != noTest) { // Result size validation. - listener.printInfo(true); + //listener.printInfo(true); assertEquals("Query Insert Event mismatch", queryInserts, listener.getQueryInsertEventCount()); } // Check for queryUpdate count. if (queryUpdates != noTest) { // Result size validation. - listener.printInfo(true); + //listener.printInfo(true); assertEquals("Query Update Event mismatch", queryUpdates, listener.getQueryUpdateEventCount()); } // Check for queryDelete count. if (queryDeletes != noTest) { // Result size validation. - listener.printInfo(true); + //listener.printInfo(true); assertEquals("Query Delete Event mismatch", queryDeletes, listener.getQueryDeleteEventCount()); } }
