use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.
the class InterestListEndpointDUnitTest method testInterestListEndpointAfterFailover.
@Test
public void testInterestListEndpointAfterFailover() throws Exception {
final long maxWaitTime = 20000;
client1.invoke(() -> createEntriesK1andK2());
server2.invoke(() -> createEntriesK1andK2());
server1.invoke(() -> createEntriesK1andK2());
client1.invoke(() -> registerKey1());
boolean firstIsPrimary = isVm0Primary();
VM primary = firstIsPrimary ? server1 : server2;
primary.invoke(() -> stopILEndpointServer());
Wait.pause(5000);
// Since the loadbalancing policy is roundrobin & there are two servers so
// do two dumb puts, which will ensure that fail over happens from the
// interest list end point in case Live ServerMonitor is not working
client1.invoke(new CacheSerializableRunnable("Ensure that the failover from ILEP occurs") {
public void run2() throws CacheException {
Region r = cache.getRegion("/" + REGION_NAME);
String poolName = r.getAttributes().getPoolName();
assertNotNull(poolName);
final PoolImpl pool = (PoolImpl) PoolManager.find(poolName);
assertNotNull(pool);
pool.acquireConnection();
try {
// Used in the case where we don't have a LiveServerMonitorThread
r.put("ping", "pong1");
} catch (CacheWriterException itsOK) {
}
try {
// Used in the case where we don't have a LiveServerMonitorThread
r.put("ping", "pong2");
} catch (CacheWriterException itsOK) {
}
WaitCriterion ev = new WaitCriterion() {
public boolean done() {
return pool.getConnectedServerCount() != 2;
}
public String description() {
return null;
}
};
Wait.waitForCriterion(ev, maxWaitTime, 200, true);
}
});
// put on stopped server
primary.invoke(() -> put());
client1.invoke(() -> verifyPut());
}
use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.
the class InterestListEndpointDUnitTest method verifyPut.
public static void verifyPut() {
try {
final Region r = cache.getRegion("/" + REGION_NAME);
assertNotNull(r);
WaitCriterion ev = new WaitCriterion() {
public boolean done() {
Region.Entry e1 = r.getEntry(k1);
if (e1 == null)
return false;
Region.Entry e2 = r.getEntry(k2);
if (e2 == null)
return false;
Object v1 = e1.getValue();
if (!server_k1.equals(v1))
return false;
Object v2 = e2.getValue();
if (!client_k2.equals(v2))
return false;
// our state is ready for the assertions
return true;
}
public String description() {
Region.Entry e1 = r.getEntry(k1);
if (e1 == null)
return "Entry for " + k1 + " is null";
Region.Entry e2 = r.getEntry(k2);
if (e2 == null)
return "Entry for " + k2 + " is null";
Object v1 = e1.getValue();
if (!server_k1.equals(v1)) {
return "v1 supposed to be " + server_k1 + " but is " + v1;
}
Object v2 = e2.getValue();
if (!client_k2.equals(v2)) {
return "v2 supposed to be " + client_k2 + " but is " + v2;
}
return "Test missed a success";
}
};
Wait.waitForCriterion(ev, 20 * 1000, 200, true);
// yes update
assertEquals(server_k1, r.getEntry(k1).getValue());
// no update
assertEquals(client_k2, r.getEntry(k2).getValue());
} catch (Exception ex) {
throw new RuntimeException("failed while region.verifyPut()", ex);
}
}
use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.
the class InterestListFailoverDUnitTest method _validateEntries.
public static void _validateEntries(final String v) {
try {
final Region r = CacheServerTestUtil.getCache().getRegion("/" + REGION_NAME);
final String key1 = "key-1";
assertNotNull(r);
// Verify that 'key-1' was updated
// assertIndexDetailsEquals("vm2-key-1", r.getEntry("key-1").getValue());
WaitCriterion wc = new WaitCriterion() {
String excuse;
public boolean done() {
Object val = r.get(key1);
if (val == null) {
return false;
}
if (!val.equals("vm2-key-1" + v)) {
return false;
}
return true;
}
public String description() {
return excuse;
}
};
Wait.waitForCriterion(wc, 40 * 1000, 1000, true);
// Verify that 'key-6' was not invalidated
assertEquals("key-6", r.getEntry("key-6").getValue());
} catch (Exception ex) {
Assert.fail("failed while r.put()", ex);
}
}
use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.
the class InterestListDUnitTest method validateEntriesK1andK2.
private static void validateEntriesK1andK2(final String vm) {
WaitCriterion ev = new WaitCriterion() {
@Override
public boolean done() {
try {
Region r = cache.getRegion(Region.SEPARATOR + REGION_NAME);
assertNotNull(r);
if (vm.equals("vm1")) {
// Verify that 'key-1' was updated, but 'key-2' was not and contains the
// original value
assertEquals("vm2-key-1", r.getEntry(key1).getValue());
assertEquals("vm1-key-2", r.getEntry(key2).getValue());
} else {
// Verify that 'key-2' was updated, but 'key-1' was not and contains the
// original value
assertEquals(key1_originalValue, r.getEntry(key1).getValue());
assertEquals("vm1-key-2", r.getEntry(key2).getValue());
}
return true;
} catch (AssertionError ex) {
return false;
}
}
@Override
public String description() {
return "waiting for client to apply events from server";
}
};
Wait.waitForCriterion(ev, 5 * 10 * 1000, 200, true);
}
use of org.apache.geode.test.dunit.WaitCriterion in project geode by apache.
the class InterestRegrListenerDUnitTest method testDurableClientExit_ServerExpressedInterest_NonDurableInterest.
@Test
public void testDurableClientExit_ServerExpressedInterest_NonDurableInterest() throws Exception {
final Host host = Host.getHost(0);
final VM serverVM = host.getVM(0);
final VM clientVM_1 = host.getVM(1);
final VM clientVM_2 = host.getVM(2);
final VM clientVM_3 = host.getVM(3);
serverVM.invoke(() -> InterestRegrListenerDUnitTest.setUpServerVMTask());
serverVM.invoke(() -> InterestRegrListenerDUnitTest.createServerTask());
Object[] array = (Object[]) serverVM.invoke(() -> InterestRegrListenerDUnitTest.getCacheServerEndPointTask());
String hostName = (String) array[0];
int port = (Integer) array[1];
Object[] params = new Object[4];
params[0] = hostName;
params[1] = port;
params[2] = true;
params[3] = "VM_1";
LogWriterUtils.getLogWriter().info("Starting client1 with server endpoint <" + hostName + ">:" + port);
clientVM_1.invoke(InterestRegrListenerDUnitTest.class, "setUpClientVMTask", params);
params[3] = "VM_2";
LogWriterUtils.getLogWriter().info("Starting client2 with server endpoint <" + hostName + ">:" + port);
clientVM_2.invoke(InterestRegrListenerDUnitTest.class, "setUpClientVMTask", params);
params[3] = "VM_3";
LogWriterUtils.getLogWriter().info("Starting client2 with server endpoint <" + hostName + ">:" + port);
clientVM_3.invoke(InterestRegrListenerDUnitTest.class, "setUpClientVMTask", params);
params = new Object[1];
// non-durable interest
params[0] = false;
serverVM.invoke(() -> InterestRegrListenerDUnitTest.doRegisterListenerTask());
serverVM.invoke(InterestRegrListenerDUnitTest.class, "doExpressInterestOnServerTask", params);
clientVM_1.invoke(() -> InterestRegrListenerDUnitTest.doClientRegionPutTask());
clientVM_2.invoke(() -> InterestRegrListenerDUnitTest.doClientRegionPutTask());
clientVM_3.invoke(() -> InterestRegrListenerDUnitTest.doClientRegionPutTask());
serverVM.invoke(() -> InterestRegrListenerDUnitTest.doServerRegionPutTask());
clientVM_1.invoke(() -> InterestRegrListenerDUnitTest.closeClientCacheTask(false));
clientVM_2.invoke(() -> InterestRegrListenerDUnitTest.closeClientCacheTask(false));
clientVM_3.invoke(() -> InterestRegrListenerDUnitTest.closeClientCacheTask(false));
Thread.sleep(2);
WaitCriterion wc = new WaitCriterion() {
int registerCount = 0;
int unregisterCount = 0;
@Override
public boolean done() {
Map<String, Integer> listnerMap = (Map<String, Integer>) serverVM.invoke(() -> InterestRegrListenerDUnitTest.getListenerMapTask());
LogWriterUtils.getLogWriter().info("Listener Map " + listnerMap);
registerCount = getMapValueForKey(listnerMap, REGISTER_INTEREST);
unregisterCount = getMapValueForKey(listnerMap, UNREGISTER_INTEREST);
if (registerCount == 3 && unregisterCount == 3) {
return true;
}
LogWriterUtils.getLogWriter().info("Waiting for counts to each reach 3. Current registerCount=" + registerCount + "; unregisterCount=" + unregisterCount);
return false;
}
@Override
public String description() {
return "Waiting for counts to each reach 3. Current registerCount=" + registerCount + "; unregisterCount=" + unregisterCount;
}
};
Wait.waitForCriterion(wc, 20000, 500, true);
LogWriterUtils.getLogWriter().info("Sleeping till durable client queue are expired and unregister event is called on to listener");
Thread.sleep((DURABLE_CLIENT_TIMEOUT_TEST + 5) * 1000);
serverVM.invoke(() -> InterestRegrListenerDUnitTest.closeCacheTask());
}
Aggregations