blob: f7bda28e08f3f57b3fed94e4c1ca65655291ac81 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.internal.cache.execute;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import com.gemstone.gemfire.cache.AttributesFactory;
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.CacheFactory;
import com.gemstone.gemfire.cache.DataPolicy;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.Scope;
import com.gemstone.gemfire.cache.client.Pool;
import com.gemstone.gemfire.cache.client.PoolManager;
import com.gemstone.gemfire.cache.execute.Execution;
import com.gemstone.gemfire.cache.execute.Function;
import com.gemstone.gemfire.cache.execute.FunctionAdapter;
import com.gemstone.gemfire.cache.execute.FunctionContext;
import com.gemstone.gemfire.cache.execute.FunctionInvocationTargetException;
import com.gemstone.gemfire.cache.execute.FunctionService;
import com.gemstone.gemfire.cache.execute.ResultCollector;
import com.gemstone.gemfire.cache.server.CacheServer;
import com.gemstone.gemfire.distributed.DistributedSystem;
import com.gemstone.gemfire.distributed.internal.DM;
import com.gemstone.gemfire.distributed.internal.DistributionConfig;
import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
import com.gemstone.gemfire.distributed.internal.LonerDistributionManager;
import com.gemstone.gemfire.internal.AvailablePort;
import com.gemstone.gemfire.internal.cache.functions.DistribuedRegionFunctionFunctionInvocationException;
import com.gemstone.gemfire.internal.cache.functions.DistributedRegionFunction;
import com.gemstone.gemfire.internal.cache.functions.TestFunction;
import com.gemstone.gemfire.internal.cache.tier.sockets.CacheServerTestUtil;
import dunit.AsyncInvocation;
import dunit.DistributedTestCase;
import dunit.Host;
import dunit.VM;
public class DistributedRegionFunctionExecutionDUnitTest extends
DistributedTestCase {
VM replicate1 = null;
VM replicate2 = null;
VM replicate3 = null;
VM normal = null;
public static final String REGION_NAME = "DistributedRegionFunctionExecutionDUnitTest";
public static Cache cache = null;
public static Region region = null;
public static final Function function = new DistributedRegionFunction();
public static final Function functionWithNoResultThrowsException = new MyFunctionException();
public DistributedRegionFunctionExecutionDUnitTest(String name) {
super(name);
}
@Override
public void setUp() throws Exception {
super.setUp();
Host host = Host.getHost(0);
replicate1 = host.getVM(0);
replicate2 = host.getVM(1);
replicate3 = host.getVM(2);
normal = host.getVM(3);
}
@Override
public void tearDown2() throws Exception {
// this test creates a cache that is incompatible with CacheTestCase,
// so we need to close it and null out the cache variable
disconnectAllFromDS();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyEmpty() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
executeFunction();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyEmpty_SendException() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
executeFunction_SendException();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyEmpty_NoLastResult() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
executeFunction_NoLastResult();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyNormal() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
try {
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"executeFunction");
fail("Function execution was expecting an Exception as it was executed on Region with DataPolicy.NORMAL");
}
catch (Exception expected) {
}
}
public void testDistributedRegionFunctionExecutionOnDataPolicyReplicate() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"executeFunction");
}
public void testDistributedRegionFunctionExecutionOnDataPolicyReplicate_SendException() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"executeFunction_SendException");
}
public void testDistributedRegionFunctionExecutionOnDataPolicyReplicate_NoLastResult() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"executeFunction_NoLastResult");
}
public void testDistributedRegionFunctionExecutionWithFunctionInvocationTargetException() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
registerFunction(new Boolean(true), new Integer(5));
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
// add expected exception to avoid suspect strings
final ExpectedException ex = addExpectedException("I have been thrown");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"executeFunctionFunctionInvocationTargetException");
ex.remove();
}
public void testDistributedRegionFunctionExecutionWithFunctionInvocationTargetException_WithoutHA() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
registerFunction(new Boolean(false), new Integer(0));
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
normal
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
replicate1
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
replicate2
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
replicate3
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
// add expected exception to avoid suspect strings
final ExpectedException ex = addExpectedException("I have been thrown");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"executeFunctionFunctionInvocationTargetExceptionWithoutHA");
ex.remove();
}
public void testDistributedRegionFunctionExecutionWithFunctionInvocationTargetExceptionForEmptyDataPolicy() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
registerFunction(new Boolean(true), new Integer(5));
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
// add expected exception to avoid suspect strings
final ExpectedException ex = addExpectedException("I have been thrown");
executeFunctionFunctionInvocationTargetException();
ex.remove();
}
public void testDistributedRegionFunctionExecutionWithFunctionInvocationTargetExceptionForEmptyDataPolicy_WithoutHA() {
createCacheInVm(); // Empty
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
registerFunction(new Boolean(false), new Integer(0));
createPeer(DataPolicy.EMPTY);
populateRegion();
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
// add expected exception to avoid suspect strings
final ExpectedException ex = addExpectedException("I have been thrown");
executeFunctionFunctionInvocationTargetExceptionWithoutHA();
ex.remove();
}
public void testDistributedRegionFunctionExecutionHACacheClosedException() {
VM empty = normal;
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.EMPTY });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"populateRegion");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
/* (original code below is not proper since function execution may not find
* any node for execution when the first node closes; now closing cache
* from within function body)
int AsyncInvocationArrSize = 1;
AsyncInvocation[] async = new AsyncInvocation[AsyncInvocationArrSize];
async[0] = empty.invokeAsync(
DistributedRegionFunctionExecutionDUnitTest.class, "executeFunctionHA");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"closeCache");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
DistributedTestCase.join(async[0], 50 * 1000, getLogWriter());
if (async[0].getException() != null) {
fail("UnExpected Exception Occured : ", async[0].getException());
}
List l = (List)async[0].getReturnValue();
*/
List l = (List)empty.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"executeFunctionHACacheClose");
assertEquals(5001, l.size());
for (int i = 0; i < 5001; i++) {
assertEquals(l.get(i), Boolean.TRUE);
}
}
public void testDistributedRegionFunctionExecutionHANodeFailure() {
VM empty = normal;
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.EMPTY });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"populateRegion");
int AsyncInvocationArrSize = 1;
AsyncInvocation[] async = new AsyncInvocation[AsyncInvocationArrSize];
async[0] = empty.invokeAsync(
DistributedRegionFunctionExecutionDUnitTest.class, "executeFunctionHA");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"disconnect");
DistributedTestCase.join(async[0], 50 * 1000, getLogWriter());
if (async[0].getException() != null) {
fail("UnExpected Exception Occured : ", async[0].getException());
}
List l = (List)async[0].getReturnValue();
assertEquals(5001, l.size());
for (int i = 0; i < 5001; i++) {
assertEquals(l.get(i), Boolean.TRUE);
}
}
public void testDistributedRegionFunctionExecutionOnDataPolicyEmpty_ClientServer() {
VM empty1 = replicate3;
VM empty2 = normal;
empty2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
Integer port1 = (Integer)empty1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.EMPTY });
Integer port2 = (Integer) empty2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.EMPTY });
replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
executeFunction();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyEmpty_ClientServer_SendException() {
VM empty1 = replicate3;
VM empty2 = normal;
empty2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
Integer port1 = (Integer)empty1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.EMPTY });
Integer port2 = (Integer) empty2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.EMPTY });
replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
executeFunction_SendException();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyEmpty_ClientServer_NoLastResult() {
VM empty1 = replicate3;
VM empty2 = normal;
empty2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
Integer port1 = (Integer)empty1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.EMPTY });
Integer port2 = (Integer) empty2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.EMPTY });
replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
// add ExpectedException's to servers since client can connect to any
// one of those
final ExpectedException expectedEx = addExpectedException(
"did not send last result", empty1);
final ExpectedException expectedEx2 = addExpectedException(
"did not send last result", empty2);
try {
executeFunction_NoLastResult();
} finally {
expectedEx.remove();
expectedEx2.remove();
}
}
/*
* Ensure that the while executing the function if the servers is down then
* the execution is failover to other available server
*/
public void testServerFailoverWithTwoServerAliveHA()
throws InterruptedException {
VM emptyServer1 = replicate1;
VM client = normal;
emptyServer1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
client.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInClientVm");
Integer port1 = (Integer)emptyServer1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.EMPTY });
Integer port2 = (Integer)replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.REPLICATE });
replicate3.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
client.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createClientAndPopulateClientRegion", new Object[] { DataPolicy.EMPTY,
port1, port2 });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"stopServerHA");
int AsyncInvocationArrSize = 1;
AsyncInvocation[] async = new AsyncInvocation[AsyncInvocationArrSize];
async[0] = client.invokeAsync(
DistributedRegionFunctionExecutionDUnitTest.class, "executeFunctionHA");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"startServerHA");
emptyServer1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"closeCacheHA");
DistributedTestCase.join(async[0], 4 * 60 * 1000, getLogWriter());
if (async[0].getException() != null) {
fail("UnExpected Exception Occured : ", async[0].getException());
}
List l = (List)async[0].getReturnValue();
assertEquals(5001, l.size());
for (int i = 0; i < 5001; i++) {
assertEquals(l.get(i), Boolean.TRUE);
}
}
public void testDistributedRegionFunctionExecutionOnDataPolicyNormal_ClientServer() {
VM normal1 = normal;
VM normal2 = replicate3;
VM empty = replicate2 ;
normal1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
normal2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
Integer port1 = (Integer)normal1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.NORMAL });
Integer port2 = (Integer)normal2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.NORMAL });
empty.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.EMPTY });
replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
// add expected exception
final ExpectedException ex = addExpectedException(
"DataPolicy.NORMAL is not supported");
try {
executeFunction();
fail("Function execution was expecting an Exception as it was executed "
+ "on Region with DataPolicy.NORMAL");
} catch (Exception expected) {
assertTrue("Got unexpected exception message: " + expected, expected
.getMessage().contains("DataPolicy.NORMAL is not supported"));
} finally {
ex.remove();
}
}
public void testDistributedRegionFunctionExecutionOnDataPolicyReplicate_ClientServer() {
VM empty = replicate3;
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
Integer port1 = (Integer)replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.REPLICATE });
Integer port2 = (Integer)replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.REPLICATE });
normal.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
empty.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.EMPTY });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
executeUnregisteredFunction();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyReplicate_ClientServer_WithoutRegister() {
VM empty = replicate3;
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
Integer port1 = (Integer)replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.REPLICATE });
Integer port2 = (Integer)replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.REPLICATE });
normal.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
empty.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.EMPTY });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
executeFunction();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyReplicate_ClientServer_FunctionInvocationTargetException() {
VM empty = replicate3;
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
registerFunction(new Boolean(true), new Integer(5));
Integer port1 = (Integer)replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.REPLICATE });
Integer port2 = (Integer)replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.REPLICATE });
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.EMPTY });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
// add expected exception to avoid suspect strings
final ExpectedException ex = addExpectedException("I have been thrown");
executeFunctionFunctionInvocationTargetException_ClientServer();
ex.remove();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyReplicate_ClientServer_FunctionInvocationTargetException_WithoutHA() {
VM empty = replicate3;
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
registerFunction(new Boolean(false), new Integer(0));
Integer port1 = (Integer)replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.REPLICATE });
Integer port2 = (Integer)replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.REPLICATE });
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.NORMAL });
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.EMPTY });
replicate1
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
replicate2
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
normal
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
empty
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
// add expected exception to avoid suspect strings
final ExpectedException ex = addExpectedException("I have been thrown");
executeFunctionFunctionInvocationTargetException_ClientServer_WithoutHA();
ex.remove();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyEmpty_ClientServer_FunctionInvocationTargetException() {
VM empty1 = replicate3;
VM empty2 = normal;
empty2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
registerFunction(new Boolean(true), new Integer(5));
Integer port1 = (Integer)empty1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.EMPTY });
Integer port2 = (Integer)empty2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.EMPTY });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
empty1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
empty2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(true), new Integer(5) });
// add expected exception to avoid suspect strings
final ExpectedException ex = addExpectedException("I have been thrown");
executeFunctionFunctionInvocationTargetException_ClientServer();
ex.remove();
}
public void testDistributedRegionFunctionExecutionOnDataPolicyEmpty_ClientServer_FunctionInvocationTargetException_WithoutHA() {
VM empty1 = replicate3;
VM empty2 = normal;
empty2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
registerFunction(new Boolean(false), new Integer(0));
Integer port1 = (Integer)empty1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.EMPTY });
Integer port2 = (Integer)empty2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.EMPTY });
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
empty1
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
empty2
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
replicate1
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
replicate2
.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction", new Object[] { new Boolean(false),
new Integer(0) });
// add expected exception to avoid suspect strings
final ExpectedException ex = addExpectedException("I have been thrown");
executeFunctionFunctionInvocationTargetException_ClientServer_WithoutHA();
ex.remove();
}
public void testBug40714() {
VM empty = replicate3;
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
Integer port1 = (Integer)replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.REPLICATE });
Integer port2 = (Integer)replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.REPLICATE });
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createPeer", new Object[] { DataPolicy.REPLICATE });
normal.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction");
empty.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"registerFunction");
createCacheInVm();
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
registerFunction();
executeInlineFunction();
}
/**
* This tests make sure that, in case of LonerDistributedSystem we don't get
* ClassCast Exception. Just making sure that the function is executed successfully on
* lonerDistribuedSystem
*/
public void testBug41118() {
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"bug41118");
}
/**
* Test for bug41367: This test is to verify that the"com.gemstone.gemfire.security.AuthenticationRequiredException: No security-* properties are provided"
* is not thrown. We have to grep for this exception in logs for any
* occerence.
*/
public void testBug41367() {
VM client = replicate1;
VM server = replicate2;
server.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm_41367");
client.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInClientVm_41367");
Integer port1 = (Integer)server.invoke(
DistributedRegionFunctionExecutionDUnitTest.class, "createServer",
new Object[] { DataPolicy.REPLICATE });
client.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createClient_41367", new Object[] { port1 });
for (int i = 0; i < 3; i++) {
try {
client.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"executeFunction_NoResult");
client.invoke(DistributedRegionFunctionExecutionDUnitTest.class, "put");
}
catch (Exception e) {
fail("Exception " + e + " not expected");
e.printStackTrace();
}
}
}
public void testFunctionWithNoResultThrowsException(){
addExpectedException("RuntimeException");
replicate1.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
replicate2.invoke(DistributedRegionFunctionExecutionDUnitTest.class,
"createCacheInVm");
createCacheInClientVm();
Integer port1 = (Integer)replicate1.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.REPLICATE });
Integer port2 = (Integer)replicate2.invoke(
DistributedRegionFunctionExecutionDUnitTest.class,
"createServer", new Object[] { DataPolicy.REPLICATE });
createClientAndPopulateClientRegion(DataPolicy.EMPTY, port1, port2);
executeFunctionWithNoResultThrowException();
pause(10000);
}
public static void executeFunction_NoResult() {
Function function = new TestFunction(false, TestFunction.TEST_FUNCTION1);
Execution dataset = FunctionService.onRegion(region);
dataset.execute(function);
}
public static void put() {
region.put("K1", "B1");
}
public static void bug41118(){
InternalDistributedSystem ds = new DistributedRegionFunctionExecutionDUnitTest("temp").getSystem();
assertNotNull(ds);
ds.disconnect();
Properties props = new Properties();
props.setProperty("mcast-port", "0");
ds = (InternalDistributedSystem)DistributedSystem.connect(props);
DM dm = ds.getDistributionManager();
assertEquals("Distributed System is not loner", true, dm instanceof LonerDistributionManager);
Cache cache = CacheFactory.create(ds);
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.LOCAL);
factory.setDataPolicy(DataPolicy.REPLICATE);
assertNotNull(cache);
region = cache.createRegion(REGION_NAME, factory.create());
try {
executeInlineFunction();
ds.disconnect();
}
catch (Exception e) {
getLogWriter().info("Exception Occured : " + e.getMessage());
e.printStackTrace();
fail("Test failed", e);
}
}
public static void executeInlineFunction() {
List list = (List)FunctionService.onRegion(region).withArgs(Boolean.TRUE)
.execute(new FunctionAdapter() {
@Override
public void execute(FunctionContext context) {
if (context.getArguments() instanceof String) {
context.getResultSender().lastResult("Success");
}
else if (context.getArguments() instanceof Boolean) {
context.getResultSender().lastResult(Boolean.TRUE);
}
}
@Override
public String getId() {
return "Function";
}
@Override
public boolean hasResult() {
return true;
}
}).getResult();
assertEquals(1, list.size());
assertEquals(Boolean.TRUE, list.get(0));
}
public static void registerFunction() {
FunctionService.registerFunction(new FunctionAdapter() {
@Override
public void execute(FunctionContext context) {
if (context.getArguments() instanceof String) {
context.getResultSender().lastResult("Failure");
}
else if (context.getArguments() instanceof Boolean) {
context.getResultSender().lastResult(Boolean.FALSE);
}
}
@Override
public String getId() {
return "Function";
}
@Override
public boolean hasResult() {
return true;
}
});
}
public static void registerFunction(Boolean isHA, Integer retryCount) {
Function function = new DistribuedRegionFunctionFunctionInvocationException(
isHA.booleanValue(), retryCount.intValue());
FunctionService.registerFunction(function);
}
public static void createCacheInVm() {
new DistributedRegionFunctionExecutionDUnitTest("temp")
.createCache(new Properties());
}
public static void createCacheInVm_41367() {
Properties props = new Properties();
props.put(DistributionConfig.NAME_NAME, "SecurityServer");
props.put("security-client-authenticator",
"templates.security.DummyAuthenticator.create");
new DistributedRegionFunctionExecutionDUnitTest("temp").createCache(props);
}
public static void createCacheInClientVm() {
Properties props = new Properties();
props.put("mcast-port", "0");
props.put("locators", "");
new DistributedRegionFunctionExecutionDUnitTest("temp")
.createCache(new Properties());
}
public static void createCacheInClientVm_41367() {
Properties props = new Properties();
props.put("mcast-port", "0");
props.put("locators", "");
props.put(DistributionConfig.NAME_NAME, "SecurityClient");
props.put("security-client-auth-init",
"templates.security.UserPasswordAuthInit.create");
props.put("security-username", "reader1");
props.put("security-password", "reader1");
new DistributedRegionFunctionExecutionDUnitTest("temp").createCache(props);
}
public static void executeFunction() {
Set filter = new HashSet();
for (int i = 100; i < 120; i++) {
filter.add("execKey-" + i);
}
FunctionService.onRegion(region).withFilter(filter)
.execute(function).getResult();
}
public static void executeFunctionWithNoResultThrowException() {
Set filter = new HashSet();
for (int i = 100; i < 120; i++) {
filter.add("execKey-" + i);
}
FunctionService.onRegion(region).withFilter(filter)
.execute(functionWithNoResultThrowsException);
}
public static void executeFunction_SendException() {
Function function = new TestFunction(true, TestFunction.TEST_FUNCTION_SEND_EXCEPTION);
Set filter = new HashSet();
for (int i = 100; i < 120; i++) {
filter.add("execKey-" + i);
}
ResultCollector rs = FunctionService.onRegion(region).withFilter(filter).withArgs(Boolean.TRUE)
.execute(function);
List list = (List)rs.getResult();
assertTrue(list.get(0) instanceof MyFunctionExecutionException);
rs = FunctionService.onRegion(region).withFilter(filter).withArgs((Serializable)filter)
.execute(function);
List resultList = (List)rs.getResult();
assertEquals((filter.size()+1), resultList.size());
Iterator resultIterator = resultList.iterator();
int exceptionCount = 0;
while(resultIterator.hasNext()){
Object o = resultIterator.next();
if(o instanceof MyFunctionExecutionException){
exceptionCount++;
}
}
assertEquals(1, exceptionCount);
}
public static void executeFunction_NoLastResult() {
Set filter = new HashSet();
for (int i = 100; i < 120; i++) {
filter.add("execKey-" + i);
}
try {
FunctionService.onRegion(region).withFilter(filter)
.execute(
new TestFunction(true, TestFunction.TEST_FUNCTION_NO_LASTRESULT))
.getResult();
fail("FunctionException expected : Function did not send last result");
}
catch (Exception ex) {
assertTrue(ex.getMessage().contains("did not send last result"));
}
}
public static void executeUnregisteredFunction() {
FunctionService.unregisterFunction(function.getId());
Set filter = new HashSet();
for (int i = 100; i < 120; i++) {
filter.add("execKey-" + i);
}
FunctionService.onRegion(region).withFilter(filter)
.execute(function).getResult();
}
public static void executeFunctionFunctionInvocationTargetException() {
try {
ResultCollector rc1 = FunctionService.onRegion(region).withArgs(
Boolean.TRUE).execute(
"DistribuedRegionFunctionFunctionInvocationException");
List list = (ArrayList)rc1.getResult();
assertEquals(5, list.get(0));
}
catch (Exception e) {
e.printStackTrace();
fail("This is not expected Exception", e);
}
}
public static void executeFunctionFunctionInvocationTargetExceptionWithoutHA() {
try {
ResultCollector rc1 = FunctionService.onRegion(region).withArgs(
Boolean.TRUE).execute(
"DistribuedRegionFunctionFunctionInvocationException",true,false);
rc1.getResult();
fail("Function Invocation Target Exception should be thrown");
}
catch (Exception e) {
e.printStackTrace();
if (!(e.getCause() instanceof FunctionInvocationTargetException)) {
fail("FunctionInvocationTargetException should be thrown");
}
}
}
public static void executeFunctionFunctionInvocationTargetException_ClientServer() {
try {
List list = (ArrayList)FunctionService.onRegion(region).withArgs(
Boolean.TRUE).execute(
"DistribuedRegionFunctionFunctionInvocationException").getResult();
assertEquals(1, list.size());
assertEquals(5, list.get(0));
}
catch (Exception e) {
e.printStackTrace();
fail("This is not expected Exception", e);
}
}
public static void executeFunctionFunctionInvocationTargetException_ClientServer_WithoutHA() {
try {
FunctionService.onRegion(region).withArgs(
Boolean.TRUE).execute(
"DistribuedRegionFunctionFunctionInvocationException", true, false).getResult();
fail("Function Invocation Target Exception should be thrown");
}
catch (Exception e) {
e.printStackTrace();
if (!(e.getCause() instanceof FunctionInvocationTargetException)) {
fail("FunctionInvocationTargetException should be thrown");
}
}
}
public static List executeFunctionHA() {
Set filter = new HashSet();
for (int i = 100; i < 120; i++) {
filter.add("execKey-" + i);
}
List list = (List)FunctionService.onRegion(region).withFilter(filter)
.execute(function).getResult();
return list;
}
/**
* This will do a cache close from within the body of function to simulate
* failover during function execution.
*/
public static List executeFunctionHACacheClose() {
Set filter = new HashSet();
for (int i = 100; i < 120; i++) {
filter.add("execKey-" + i);
}
// dummy argument Boolean.TRUE indicates that cache should be closed
// in the function body itself on the first try
List list = (List)FunctionService.onRegion(region).withFilter(filter)
.withArgs(Boolean.TRUE).execute(function).getResult();
return list;
}
public static void createClientAndPopulateClientRegion(DataPolicy policy,
Integer port1, Integer port2) {
CacheServerTestUtil.disableShufflingOfEndpoints();
Pool p;
try {
p = PoolManager.createFactory().addServer("localhost", port1.intValue())
.addServer("localhost", port2.intValue())
.setPingInterval(3000).setSubscriptionEnabled(false)
.setSubscriptionRedundancy(-1).setReadTimeout(2000)
.setSocketBufferSize(1000).setMinConnections(6).setMaxConnections(10)
.setRetryAttempts(2).create(
"DistributedRegionFunctionExecutionDUnitTest_pool");
}
finally {
CacheServerTestUtil.enableShufflingOfEndpoints();
}
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.LOCAL);
factory.setDataPolicy(DataPolicy.EMPTY);
factory.setPoolName(p.getName());
factory.setDataPolicy(policy);
assertNotNull(cache);
region = cache.createRegion(REGION_NAME, factory.create());
getLogWriter().info("Client Region Created :" + region);
assertNotNull(region);
for (int i = 1; i <= 200; i++) {
region.put("execKey-" + i, new Integer(i));
}
}
public static void createClient_41367(Integer port1) {
CacheServerTestUtil.disableShufflingOfEndpoints();
Pool p;
try {
p = PoolManager.createFactory().addServer("localhost", port1.intValue())
.setPingInterval(3000).setSubscriptionEnabled(false)
.setSubscriptionRedundancy(-1).setReadTimeout(2000)
.setSocketBufferSize(1000).setMinConnections(1).setMaxConnections(1)
.setRetryAttempts(2).create(
"DistributedRegionFunctionExecutionDUnitTest_pool");
}
finally {
CacheServerTestUtil.enableShufflingOfEndpoints();
}
AttributesFactory factory = new AttributesFactory();
factory.setDataPolicy(DataPolicy.EMPTY);
factory.setPoolName(p.getName());
assertNotNull(cache);
region = cache.createRegion(REGION_NAME, factory.create());
getLogWriter().info("Client Region Created :" + region);
assertNotNull(region);
}
public static Integer createServer(DataPolicy policy) {
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.DISTRIBUTED_ACK);
factory.setDataPolicy(policy);
assertNotNull(cache);
region = cache.createRegion(REGION_NAME, factory.create());
getLogWriter().info("Region Created :" + region);
assertNotNull(region);
CacheServer server = cache.addCacheServer();
assertNotNull(server);
int port = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
server.setPort(port);
try {
server.start();
}
catch (IOException e) {
fail("Failed to start the Server", e);
}
assertTrue(server.isRunning());
return new Integer(server.getPort());
}
public static void createPeer(DataPolicy policy) {
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.DISTRIBUTED_ACK);
factory.setDataPolicy(policy);
assertNotNull(cache);
region = cache.createRegion(REGION_NAME, factory.create());
getLogWriter().info("Region Created :" + region);
assertNotNull(region);
}
public static void populateRegion() {
assertNotNull(cache);
region = cache.getRegion(REGION_NAME);
assertNotNull(region);
for (int i = 1; i <= 200; i++) {
region.put("execKey-" + i, new Integer(i));
}
}
private void createCache(Properties props) {
try {
DistributedSystem ds = getSystem(props);
assertNotNull(ds);
ds.disconnect();
ds = getSystem(props);
cache = CacheFactory.create(ds);
getLogWriter().info("Created Cache on peer");
assertNotNull(cache);
FunctionService.registerFunction(function);
}
catch (Exception e) {
fail(
"DistributedRegionFunctionExecutionDUnitTest#createCache() Failed while creating the cache",
e);
}
}
public static void closeCache() {
long startTime = System.currentTimeMillis();
WaitCriterion wc = new WaitCriterion() {
String excuse;
public boolean done() {
return false;
}
public String description() {
return excuse;
}
};
DistributedTestCase.waitForCriterion(wc, 3000, 200, false);
long endTime = System.currentTimeMillis();
region.getCache().getLogger().fine(
"Time wait for Cache Close = " + (endTime - startTime));
cache.close();
}
public static void startServerHA() {
WaitCriterion wc = new WaitCriterion() {
String excuse;
public boolean done() {
return false;
}
public String description() {
return excuse;
}
};
DistributedTestCase.waitForCriterion(wc, 2000, 500, false);
Collection bridgeServers = cache.getCacheServers();
getLogWriter().info(
"Start Server Bridge Servers list : " + bridgeServers.size());
Iterator bridgeIterator = bridgeServers.iterator();
CacheServer bridgeServer = (CacheServer)bridgeIterator.next();
getLogWriter().info("start Server Bridge Server" + bridgeServer);
try {
bridgeServer.start();
}
catch (IOException e) {
fail("not able to start the server");
}
}
public static void stopServerHA() {
WaitCriterion wc = new WaitCriterion() {
String excuse;
public boolean done() {
return false;
}
public String description() {
return excuse;
}
};
DistributedTestCase.waitForCriterion(wc, 1000, 200, false);
try {
Iterator iter = cache.getCacheServers().iterator();
if (iter.hasNext()) {
CacheServer server = (CacheServer)iter.next();
server.stop();
}
}
catch (Exception e) {
fail("failed while stopServer()" + e);
}
}
public static void closeCacheHA() {
WaitCriterion wc = new WaitCriterion() {
String excuse;
public boolean done() {
return false;
}
public String description() {
return excuse;
}
};
DistributedTestCase.waitForCriterion(wc, 1000, 200, false);
if (cache != null && !cache.isClosed()) {
try {
Iterator iter = cache.getCacheServers().iterator();
if (iter.hasNext()) {
CacheServer server = (CacheServer)iter.next();
server.stop();
}
}
catch (Exception e) {
fail("failed while stopServer()" + e);
}
cache.close();
cache.getDistributedSystem().disconnect();
}
}
public static void disconnect() {
long startTime = System.currentTimeMillis();
WaitCriterion wc = new WaitCriterion() {
String excuse;
public boolean done() {
return false;
}
public String description() {
return excuse;
}
};
DistributedTestCase.waitForCriterion(wc, 2000, 200, false);
long endTime = System.currentTimeMillis();
region.getCache().getLogger().fine(
"Time wait for Disconnecting = " + (endTime - startTime));
cache.getDistributedSystem().disconnect();
}
}
class MyFunctionException extends FunctionAdapter {
@Override
public void execute(FunctionContext context) {
System.out.println("SKSKSK ");
throw new RuntimeException("failure");
}
@Override
public String getId() {
return this.getClass().getName();
}
@Override
public boolean hasResult() {
return false;
}
@Override
public boolean isHA() {
return false;
}
}