+1 for unit tests for multithreaded code. High fives to Dan.
Sarge > On 15 Sep, 2017, at 12:08, Dan Smith <dsm...@pivotal.io> wrote: > > Hi Geode devs, > > I've been messing around with an open source tool called Java > Pathfinder for writing tests of multithreaded code. Java Pathfinder is > a special JVM which among other things tries to execute your code > using all possible thread interleavings. > > I'd like to propose two things: > > 1) We introduce a framework for writing unit tests of code that is > supposed to be thread safe. This framework should let a developer > easily write a test with multiple things going on in parallel. The > framework can then take that code and try to run it with different > thread interleavings. > > Here's an example of what this could look like: > > @RunWith(ConcurrentTestRunner.class) > public class AtomicIntegerTest { > > @Test > public void parallelIncrementReturns2(ParallelExecutor executor) > throws ExecutionException, InterruptedException { > AtomicInteger atomicInteger = new AtomicInteger(); > executor.inParallel(() -> atomicInteger.incrementAndGet()); > executor.inParallel(() -> atomicInteger.incrementAndGet()); > executor.execute(); > assertEquals(2, atomicInteger.get()); > } > > > 2) We implement this framework initially using Java Pathfinder, but > allow for other methods of testing the code to be plugged in for > example just running the test in the loop. Java pathfinder is cool > because it can run the code with different interleavings but it does > have some serious limitations. > > I've put together some code for this proposal which is available in > this github PR: > > https://github.com/apache/geode/pull/787 > > What do you think? > > -Dan