I've recently debugged various distributed tests which fail as a result of
prior tests not cleaning up enough. It's somewhat painful and this is my
usual debug process:
- Examine the progress.txt file to determine which tests ran before my
failing test.
- I pick 20-25 of these tests and create a Suite (including my failing
test) - as these tests may have run in parallel, it's not clear which tests
would have run immediately prior to your test
- Run the whole suite to see if I can get my test to fail
- Bisect or manually iterate through the tests to see which one is
causing the problem.
The last step is painful, so I've updated SuiteRunner to use a 'candidate'
test class and run this class after every other class in the list of
SuiteClasses. For example:
@Suite.SuiteClasses(value = {
org.apache.geode.cache.snapshot.SnapshotByteArrayDUnitTest.class,
org.apache.geode.cache.query.dunit.QueryDataInconsistencyDUnitTest.class,
org.apache.geode.cache.query.internal.index.MultiIndexCreationDUnitTest.class,
})
@SuiteRunner.Candidate(org.apache.geode.management.internal.configuration.ClusterConfigDistributionDUnitTest.class)
@RunWith(SuiteRunner.class)
public class DebugSuite {
}
The Candidate is optional, but this would run the following tests:
- SnapshotByteArrayDUnitTest
- *ClusterConfigDistributionDUnitTest*
- QueryDataInconsistencyDUnitTest
- *ClusterConfigDistributionDUnitTest*
- MultiIndexCreationDUnitTest
- *ClusterConfigDistributionDUnitTest*
--Jens