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

Reply via email to