+1 to Dan's Changes but also +1 to Galen's suggestion.  JPF looks like it
might take a bit to run all the different states even for a small
interleaving of code (maybe we can tune/configure it though).  Or we can
mark these as a different category and not run as a "UnitTest"

On Fri, Sep 15, 2017 at 2:22 PM Jacob Barrett <jbarr...@pivotal.io> wrote:

> What? You don’t think Travis can run these fast?
>
> > On Sep 15, 2017, at 2:07 PM, Galen O'Sullivan <gosulli...@pivotal.io>
> wrote:
> >
> > +1 This is great! I'll take a look at your PR when I get the time.
> >
> > We may want to think carefully about how often we run these tests,
> because
> > unlike regular unit tests, they will take forever to run.
> >
> > On Fri, Sep 15, 2017 at 1:42 PM, Michael William Dodge <
> mdo...@pivotal.io>
> > wrote:
> >
> >> +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
> >>
> >>
>

Reply via email to