THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block |
---|
GemFireCacheImpl cache = Fakes.cache(); RegionAttributes ra = createRegionAttributes(isConcurrencyChecksEnabled); InternalRegionArguments ira = new InternalRegionArguments(); // specify more mock behaviors for ParitionedRegion and BucketRegion PartitionedRegion pr = mock(PartitionedRegion.class); BucketAdvisor ba = mock(BucketAdvisor.class); ReadWriteLock primaryMoveLock = new ReentrantReadWriteLock(); Lock activeWriteLock = primaryMoveLock.readLock(); when(ba.getActiveWriteLock()).thenReturn(activeWriteLock); when(ba.isPrimary()).thenReturn(true); ira.setPartitionedRegion(pr) .setPartitionedRegionBucketRedundancy(1) .setBucketAdvisor(ba); // create Bucket Region BucketRegion br = new BucketRegion("testRegion", ra, null, cache, ira); // since br is a real bucket region object, we need to tell mockito to monitor it br = Mockito.spy(br); doNothing().when(br).distributeUpdateOperation(any(), anyLong()); doNothing().when(br).distributeDestroyOperation(any()); doNothing().when(br).distributeInvalidateOperation(any()); doNothing().when(br).distributeUpdateEntryVersionOperation(any()); doNothing().when(br).checkForPrimary(); doNothing().when(br).handleWANEvent(any()); doReturn(false).when(br).needWriteLock(any()); if (isConcurrencyChecksEnabled) { region.enableConcurrencyChecks(); } doNothing().when(region).notifyGatewaySender(any(), any()); doReturn(true).when(region).hasSeenEvent(any(EntryEventImpl.class)); EntryEventImpl event = createDummyEvent(region); VersionTag tag = createVersionTag(false); event.setVersionTag(tag); br.virtualPut(event, false, false, null, false, 12345L, false); // verify the result if (cnt > 0) { verify(br, times(cnt)).distributeUpdateOperation(eq(event), eq(12345L)); } else { verify(br, never()).distributeUpdateOperation(eq(event), eq(12345L)); } |
Running a single hydra test, continously if necessary
We often need to reproduce a hydra test failure. The following scripts are very useful in practice. It can keep running one specific hydra test until it failed. I added another parameter to only stop when a specific failure happened.
There're following files: runbt.sh, local.conf, testforever.sh
- runbt.sh
Code Block |
---|
#! /bin/sh
exec 1>&1
exec 2>&1
exec 0>&1
set -v
date
##
rm batterytest.log
rm oneliner.txt
rm summ*.txt
################################################################################
# edit this section as desired to choose
# 1) java version
# 2) checkout directory
# 3) an open or closed build
JAVA_HOME=/export/gcm/where/jdk/1.8.0_45/x86_64.linux
checkoutDir=/export/aruba2/users/zhouxh/wan_develop/git3/gemfire
buildRoot=$checkoutDir # when build is redirected
# choose to run open or closed
# open
#buildType=open
#GEMFIRE=$buildRoot/$buildType/gemfire-assembly/build/install/geode
# closed
buildType=closed
GEMFIRE=$buildRoot/$buildType/pivotalgf-assembly/build/install/pivotal-gemfire
################################################################################
PATH=$JAVA_HOME/bin:$PATH
JTESTS=$buildRoot/closed/gemfire-test/build/resources/test
CLASSPATH=$GEMFIRE/lib/geode-core-9.0.0-SNAPSHOT.jar:$JTESTS:$JTESTS/../../classes/test:$JTESTS/../../classes/hydraClasses:$GEMFIRE/lib/gemfire-core-dependencies.jar:$GEMFIRE/lib/log4j-api-2.5.jar:$GEMFIRE/lib/log4j-core-2.5.jar:$JTESTS/../extraJars/groovy-all-2.4.3.jar
BT=batt.bt
if [ "$1" != "" ]; then
BT="$1"
fi
echo "BT=$BT"
CONF=./local.conf
if [ "$2" != "" ]; then
CONF="$2"
fi
echo "local.conf=$CONF"
java -cp $CLASSPATH \
-DRELEASE_DIR=/export/gcm/where/gemfire/releases \
-DprovideBugReportTemplate=true \
-DprovideRegressionSummary=true \
-DlocalConf=$CONF \
-DmoveRemoteDirs=true \
-DremovePassedTest=true \
-DnukeHungTest=true \
-DJTESTS=$JTESTS \
-DGEMFIRE=$GEMFIRE \
-DtestFileName=$BT \
-DnumTimesToRun=1 batterytest.BatteryTest
|
2. local.conf
Code Block |
---|
// hydra.GemFirePrms-logLevel=fine;
// hydra.VmPrms-extraVMArgs = "-DDistributionManager.VERBOSE=true -ea";
// hydra.GemFirePrms-lockMemory = ONEOF true false FOENO;
// hydra.VmPrms-extraClassPaths += "$GEMFIRE/lib/jna-4.0.0.jar";
// hydra.GemFirePrms-extraLocatorClassPath += "$GEMFIRE/lib/jna-4.0.0.jar";
// hydra.Prms-maxResultWaitSec=1200;
// hydra.Prms-randomSeed=1427554905641;
// newWan.WANOperationsClientPrms-randModValueForDebug = true;
// hydra.RegionPrms-concurrencyChecksEnabled = true;
|
An advanced local.conf to run on multiple hosts using hostdirs.
Code Block |
---|
hydra.HostPrms-hostNames =
fcn "newWan.WanTestConfigFcns.pool(\"w2-2013-lin-03 w2-2013-lin-04 w2-2013-lin-14 w2-2013-lin-15\", 1, 4)" ncf
fcn "newWan.WanTestConfigFcns.pool(\"w2-2013-lin-03 w2-2013-lin-04 w2-2013-lin-14 w2-2013-lin-15\", 1, 4)" ncf
fcn "newWan.WanTestConfigFcns.pool(\"w2-2013-lin-03 w2-2013-lin-04 w2-2013-lin-14 w2-2013-lin-15\", 1, 4)" ncf
;
hydra.HostPrms-resourceDirBaseMapFileName = /home/xzhou/bin/hostdirs.prop; |
3. testforever.sh
Code Block |
---|
#!/bin/bash
testfile=$1
testcase=$2
greppattern=$3
if [ "$testcase" = "" ]; then
echo "Usage: ./testforever.sh testX.bt testcase [greppattern]"
exit 1
fi
while [ 1 -eq 1 ]
do
./runbt.sh ${testfile}
if [ -f ${testcase}*/errors.txt ]; then
date >> merged_errors.txt
cat ${testcase}*/errors.txt >> merged_errors.txt
if [ "$greppattern" != "" ]; then
grep "${greppattern}" ${testcase}*/errors.txt
if [ $? -eq 0 ]; then
${testcase}*/nukerun.sh
break
else
${testcase}*/nukerun.sh
sleep 30
rm -rf ${testcase}*
fi
else
${testcase}*/nukerun.sh
break
fi
else
${testcase}*/nukerun.sh
sleep 30
rm -rf ${testcase}*
fi
done
|
An example of using the scripts:
To reproduce bug 52028, run:
./testforever.sh test52028.bt p2pEventTransportFilterHA
It will run until the hydra test fails.
However, it might fail due to other reasons, while I only care about reproducing NullPointerException. So run following command instead:
./testforever.sh test52028.bt p2pEventTransportFilterHA NullPointerException
Under current directory, you will find a merged_errors.txt file, which contains all the errors ever happened before the script detected a NullPointerException.