Search in sources :

Example 21 with WaitCriterion

use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.

the class PdxQueryCQDUnitTest method testCq.

/**
   * Tests client-server query on PdxInstance.
   */
@Test
public void testCq() throws CacheException {
    final Host host = Host.getHost(0);
    VM vm0 = host.getVM(0);
    VM vm1 = host.getVM(1);
    VM vm2 = host.getVM(2);
    VM vm3 = host.getVM(3);
    final int numberOfEntries = 10;
    // where id > 5 (0-5)
    final int queryLimit = 6;
    // Start server1
    vm0.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            configAndStartBridgeServer();
            Region region = getRootRegion().getSubregion(regionName);
            for (int i = 0; i < numberOfEntries; i++) {
                region.put("key-" + i, new TestObject(i, "vmware"));
            }
        }
    });
    // Start server2
    vm1.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            configAndStartBridgeServer();
            Region region = getRootRegion().getSubregion(regionName);
        }
    });
    // Client pool.
    final int port0 = vm0.invoke(() -> PdxQueryCQTestBase.getCacheServerPort());
    final int port1 = vm1.invoke(() -> PdxQueryCQTestBase.getCacheServerPort());
    final String host0 = NetworkUtils.getServerHostName(vm0.getHost());
    // Create client pool.
    final String poolName = "testCqPool";
    createPool(vm2, poolName, new String[] { host0 }, new int[] { port0 }, true);
    createPool(vm3, poolName, new String[] { host0 }, new int[] { port1 }, true);
    final String cqName = "testCq";
    // Execute CQ
    SerializableRunnable executeCq = new CacheSerializableRunnable("Execute queries") {

        public void run2() throws CacheException {
            LogWriterUtils.getLogWriter().info("### Create CQ. ###" + cqName);
            // Get CQ Service.
            QueryService qService = null;
            try {
                qService = (PoolManager.find(poolName)).getQueryService();
            } catch (Exception cqe) {
                Assert.fail("Failed to getCQService.", cqe);
            }
            // Create CQ Attributes.
            CqAttributesFactory cqf = new CqAttributesFactory();
            CqListener[] cqListeners = { new CqQueryTestListener(LogWriterUtils.getLogWriter()) };
            ((CqQueryTestListener) cqListeners[0]).cqName = cqName;
            cqf.initCqListeners(cqListeners);
            CqAttributes cqa = cqf.create();
            // Create CQ.
            try {
                CqQuery cq = qService.newCq(cqName, queryString[3], cqa);
                SelectResults sr = cq.executeWithInitialResults();
                for (Object o : sr.asSet()) {
                    Struct s = (Struct) o;
                    Object value = s.get("value");
                    if (!(value instanceof TestObject)) {
                        fail("Expected type TestObject, not found in result set. Found type :" + o.getClass());
                    }
                }
            } catch (Exception ex) {
                AssertionError err = new AssertionError("Failed to create CQ " + cqName + " . ");
                err.initCause(ex);
                LogWriterUtils.getLogWriter().info("QueryService is :" + qService, err);
                throw err;
            }
        }
    };
    vm2.invoke(executeCq);
    vm3.invoke(executeCq);
    // Check for TestObject instances on Server2.
    // It should be 0
    vm1.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            assertEquals(0, TestObject.numInstance);
        }
    });
    // update
    vm0.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            Region region = getRootRegion().getSubregion(regionName);
            for (int i = 0; i < numberOfEntries * 2; i++) {
                region.put("key-" + i, new TestObject(i, "vmware"));
            }
            // Check for TestObject instances.
            assertEquals(numberOfEntries * 3, TestObject.numInstance);
        }
    });
    // Check for TestObject instances on Server2.
    // It should be 0
    vm1.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            assertEquals(0, TestObject.numInstance);
        }
    });
    SerializableRunnable validateCq = new CacheSerializableRunnable("Validate CQs") {

        public void run2() throws CacheException {
            LogWriterUtils.getLogWriter().info("### Validating CQ. ### " + cqName);
            // Get CQ Service.
            QueryService cqService = null;
            try {
                cqService = getCache().getQueryService();
            } catch (Exception cqe) {
                Assert.fail("Failed to getCQService.", cqe);
            }
            CqQuery cQuery = cqService.getCq(cqName);
            if (cQuery == null) {
                fail("Failed to get CqQuery for CQ : " + cqName);
            }
            CqAttributes cqAttr = cQuery.getCqAttributes();
            CqListener[] cqListeners = cqAttr.getCqListeners();
            final CqQueryTestListener listener = (CqQueryTestListener) cqListeners[0];
            // Wait for the events to show up on the client.
            Wait.waitForCriterion(new WaitCriterion() {

                public boolean done() {
                    return listener.getTotalEventCount() >= (numberOfEntries * 2 - queryLimit);
                }

                public String description() {
                    return null;
                }
            }, 30000, 100, false);
            listener.printInfo(false);
            // Check for event type.
            Object[] cqEvents = listener.getEvents();
            for (Object o : cqEvents) {
                CqEvent cqEvent = (CqEvent) o;
                Object value = cqEvent.getNewValue();
                if (!(value instanceof TestObject)) {
                    fail("Expected type TestObject, not found in result set. Found type :" + o.getClass());
                }
            }
            // Check for totalEvents count.
            assertEquals("Total Event Count mismatch", (numberOfEntries * 2 - queryLimit), listener.getTotalEventCount());
            // Check for create count.
            assertEquals("Create Event mismatch", numberOfEntries, listener.getCreateEventCount());
            // Check for update count.
            assertEquals("Update Event mismatch", numberOfEntries - queryLimit, listener.getUpdateEventCount());
        }
    };
    vm2.invoke(validateCq);
    vm3.invoke(validateCq);
    this.closeClient(vm2);
    this.closeClient(vm3);
    this.closeClient(vm1);
    this.closeClient(vm0);
}
Also used : CqQueryTestListener(org.apache.geode.cache.query.cq.dunit.CqQueryTestListener) CacheException(org.apache.geode.cache.CacheException) CqListener(org.apache.geode.cache.query.CqListener) SerializableRunnable(org.apache.geode.test.dunit.SerializableRunnable) CacheSerializableRunnable(org.apache.geode.cache30.CacheSerializableRunnable) TestObject(org.apache.geode.cache.query.dunit.PdxQueryCQTestBase.TestObject) Host(org.apache.geode.test.dunit.Host) CacheException(org.apache.geode.cache.CacheException) Struct(org.apache.geode.cache.query.Struct) SelectResults(org.apache.geode.cache.query.SelectResults) WaitCriterion(org.apache.geode.test.dunit.WaitCriterion) CacheSerializableRunnable(org.apache.geode.cache30.CacheSerializableRunnable) CqEvent(org.apache.geode.cache.query.CqEvent) QueryService(org.apache.geode.cache.query.QueryService) CqAttributes(org.apache.geode.cache.query.CqAttributes) VM(org.apache.geode.test.dunit.VM) Region(org.apache.geode.cache.Region) CqAttributesFactory(org.apache.geode.cache.query.CqAttributesFactory) TestObject(org.apache.geode.cache.query.dunit.PdxQueryCQTestBase.TestObject) CqQuery(org.apache.geode.cache.query.CqQuery) ClientSubscriptionTest(org.apache.geode.test.junit.categories.ClientSubscriptionTest) Test(org.junit.Test) SerializationTest(org.apache.geode.test.junit.categories.SerializationTest) DistributedTest(org.apache.geode.test.junit.categories.DistributedTest)

Example 22 with WaitCriterion

use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.

the class CqTimeTestListener method waitForClose.

public boolean waitForClose() {
    WaitCriterion ev = new WaitCriterion() {

        public boolean done() {
            return CqTimeTestListener.this.eventClose;
        }

        public String description() {
            return "never got close event for CQ " + CqTimeTestListener.this.cqName;
        }
    };
    Wait.waitForCriterion(ev, MAX_TIME, 200, true);
    return true;
}
Also used : WaitCriterion(org.apache.geode.test.dunit.WaitCriterion)

Example 23 with WaitCriterion

use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.

the class CqTimeTestListener method waitForCreated.

public boolean waitForCreated(final Object key) {
    WaitCriterion ev = new WaitCriterion() {

        public boolean done() {
            return CqTimeTestListener.this.creates.contains(key);
        }

        public String description() {
            return "never got create event for CQ " + CqTimeTestListener.this.cqName;
        }
    };
    Wait.waitForCriterion(ev, MAX_TIME, 200, true);
    return true;
}
Also used : WaitCriterion(org.apache.geode.test.dunit.WaitCriterion)

Example 24 with WaitCriterion

use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.

the class CqTimeTestListener method waitForDestroyed.

public boolean waitForDestroyed(final Object key) {
    WaitCriterion ev = new WaitCriterion() {

        public boolean done() {
            return CqTimeTestListener.this.destroys.contains(key);
        }

        public String description() {
            return "never got destroy event for CQ " + CqTimeTestListener.this.cqName;
        }
    };
    Wait.waitForCriterion(ev, MAX_TIME, 200, true);
    return true;
}
Also used : WaitCriterion(org.apache.geode.test.dunit.WaitCriterion)

Example 25 with WaitCriterion

use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.

the class CqTimeTestListener method waitForInvalidated.

public boolean waitForInvalidated(final Object key) {
    WaitCriterion ev = new WaitCriterion() {

        public boolean done() {
            return CqTimeTestListener.this.invalidates.contains(key);
        }

        public String description() {
            return "never got invalidate event for CQ " + CqTimeTestListener.this.cqName;
        }
    };
    Wait.waitForCriterion(ev, MAX_TIME, 200, true);
    return true;
}
Also used : WaitCriterion(org.apache.geode.test.dunit.WaitCriterion)

Aggregations

WaitCriterion (org.apache.geode.test.dunit.WaitCriterion)368 Test (org.junit.Test)132 Region (org.apache.geode.cache.Region)105 VM (org.apache.geode.test.dunit.VM)96 DistributedTest (org.apache.geode.test.junit.categories.DistributedTest)93 Host (org.apache.geode.test.dunit.Host)73 LocalRegion (org.apache.geode.internal.cache.LocalRegion)58 CacheException (org.apache.geode.cache.CacheException)57 SerializableRunnable (org.apache.geode.test.dunit.SerializableRunnable)53 FlakyTest (org.apache.geode.test.junit.categories.FlakyTest)50 AttributesFactory (org.apache.geode.cache.AttributesFactory)41 IgnoredException (org.apache.geode.test.dunit.IgnoredException)40 IOException (java.io.IOException)36 SerializableCallable (org.apache.geode.test.dunit.SerializableCallable)36 Cache (org.apache.geode.cache.Cache)34 CacheSerializableRunnable (org.apache.geode.cache30.CacheSerializableRunnable)34 PartitionedRegion (org.apache.geode.internal.cache.PartitionedRegion)33 Properties (java.util.Properties)31 AsyncInvocation (org.apache.geode.test.dunit.AsyncInvocation)28 Iterator (java.util.Iterator)27