I am working on a framework which uses some third party libraries. The frameworks clients may use the code in multi-threaded context but the framework itself does not spawn Threads or use shared memory or locks/synchronization. I am seeing some multithreading issues in the client environment and looking for a deterministic multi-threading testing framework as the problem seems to be occuring in the third party framework.
Tried so Far:
1) Able to reproduce it in a few runs in the jmeter performance testing environment
2)Able to reproduce it in a not so consistent way by stress testing using the testng multithreading annotation. (@Test(threadPoolSize = 10, invocationCount = 100, timeOut = 10000))
Cons: This just executes the method in a threadpool and does not guarantee interleaving/static code analysis or provide a way to deterministically reproduce.
3) Tried Junit's ActiveTestSuite and @ConcurrentJunitRunner. Its similar to the testng annotation.
4) MultiThreadedTC : seems to work well for lock/synchronization/shared memory based multithreading code
5) GroboUtils Seems to oriented more towards testing/monitoring shared-memory
6) IBM ConTest seems to be licensed and there is no trial version for us to ensure that it fits our needs and ask our management to purchase it.
Any suggestions similar to Microsoft Chess or HelGrind/DRD for Java which could record specific thread inter-leavings through static code analysis or byte code instrumentation and replay for debugging purposes.?
I am also looking at integrating this tool to our unit test/build process to avoid future occurences of similar error.