Love it! See my comments in your pull request.
On Fri, Sep 15, 2017 at 12:08 PM Dan Smith <[email protected]> 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
>