public void testStickinessAfterFailover()
{
testCount++;
List<String> targets = Arrays.asList(TARGETS);
FamilyClusterInfo fci = ClusteringTargetsRepository.initTarget(FAMILY_BASE + testCount, targets);
LoadBalancePolicy lbp = getLoadBalancePolicy();
Object firstTarget;
Object target = firstTarget = lbp.chooseTarget(fci);
assertTrue(targets.contains(target));
for (int i = 0; i < 5; i++)
assertEquals(target, lbp.chooseTarget(fci));
fci.removeDeadTarget(target);
Object secondTarget;
target = secondTarget = lbp.chooseTarget(fci);
assertFalse(firstTarget.equals(secondTarget));
assertTrue(targets.contains(target));
for (int i = 0; i < 5; i++)
assertEquals(target, lbp.chooseTarget(fci));
fci.removeDeadTarget(target);
Object thirdTarget;
target = thirdTarget = lbp.chooseTarget(fci);
assertFalse(firstTarget.equals(thirdTarget));
assertFalse(secondTarget.equals(thirdTarget));
assertTrue(targets.contains(target));
for (int i = 0; i < 5; i++)
assertEquals(target, lbp.chooseTarget(fci));
fci.removeDeadTarget(target);
assertNull(lbp.chooseTarget(fci));
}