private void multipleProblemTest(String isolationLevel,
String rootFqn,
boolean replSync,
boolean useMarshalling) throws Exception
{
TreeCacheMBean sender = initializeSender(isolationLevel, replSync, useMarshalling);
// Do the "after" nodes first, otherwise if there is a /LOCK parent
// node, the rollback of a tx will remove it causing the test to fail
// since the child node created by it will be gone as well.
// This is really a REPEATABLE_READ bug that this test isn't intended
// to catch; will create a separate locking test that shows it
String[] val1 = { "A", "B", "C" };
SynchronizationTxRunner[] after =
initializeSynchronizationTxRunners(val1, sender, rootFqn, false);
String[] val2 = { "D", "E", "F" };
SynchronizationTxRunner[] before =
initializeSynchronizationTxRunners(val2, sender, rootFqn, true);
String[] val3 = { "G", "H", "I" };
TxRunner[] active =
initializeTransactionRunners(val3, sender, rootFqn, false);
String[] val4 = { "J", "K", "L" };
TxRunner[] rollback =
initializeTransactionRunners(val4, sender, rootFqn, true);
String[] val5 = { "M", "N", "O" };
HangThreadRunner[] threads =
initializeHangThreadRunners(val5, sender, rootFqn);
TreeCacheMBean receiver = startReceiver(isolationLevel, replSync, useMarshalling);
checkResults(receiver, active, false);
checkResults(receiver, rollback, false);
checkResults(receiver, before, false);
checkResults(receiver, after, true);