ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/SubmissionPublisherTest.java
(Generate patch)

Comparing jsr166/src/test/tck/SubmissionPublisherTest.java (file contents):
Revision 1.23 by dl, Sun Nov 26 21:37:56 2017 UTC vs.
Revision 1.30 by jsr166, Mon Dec 16 22:55:54 2019 UTC

# Line 6 | Line 6
6   */
7  
8   import java.util.concurrent.CompletableFuture;
9 + import java.util.concurrent.CountDownLatch;
10   import java.util.concurrent.Executor;
11   import java.util.concurrent.Executors;
12   import java.util.concurrent.Flow;
# Line 333 | Line 334 | public class SubmissionPublisherTest ext
334          TestSubscriber s = new TestSubscriber();
335          SubmissionPublisher<Integer> p = basicPublisher();
336          s.throwOnCall = true;
337 <        try {
337 <            p.subscribe(s);
338 <        } catch (Exception ok) {}
337 >        p.subscribe(s);
338          s.awaitError();
339          assertEquals(0, s.nexts);
340          assertEquals(1, s.errors);
# Line 403 | Line 402 | public class SubmissionPublisherTest ext
402       */
403      public void testCancel() {
404          SubmissionPublisher<Integer> p =
405 <            new SubmissionPublisher<Integer>(basicExecutor, 4); // must be < 20
405 >            new SubmissionPublisher<>(basicExecutor, 4); // must be < 20
406          TestSubscriber s1 = new TestSubscriber();
407          TestSubscriber s2 = new TestSubscriber();
408          p.subscribe(s1);
# Line 959 | Line 958 | public class SubmissionPublisherTest ext
958      public void testConsumeNPE() {
959          SubmissionPublisher<Integer> p = basicPublisher();
960          try {
961 <            CompletableFuture<Void> f = p.consume(null);
961 >            CompletableFuture<Void> unused = p.consume(null);
962              shouldThrow();
963          } catch (NullPointerException success) {}
964      }
# Line 978 | Line 977 | public class SubmissionPublisherTest ext
977          assertTrue(count.get() < n);
978      }
979  
980 +    /**
981 +     * Tests scenario for
982 +     * JDK-8187947: A race condition in SubmissionPublisher
983 +     * cvs update -D '2017-11-25' src/main/java/util/concurrent/SubmissionPublisher.java && ant -Djsr166.expensiveTests=true -Djsr166.tckTestClass=SubmissionPublisherTest -Djsr166.methodFilter=testMissedSignal tck; cvs update -A src/main/java/util/concurrent/SubmissionPublisher.java
984 +     */
985 +    public void testMissedSignal_8187947() throws Exception {
986 +        if (!atLeastJava9()) return; // backport to jdk8 too hard
987 +        final int N =
988 +            ((ForkJoinPool.getCommonPoolParallelism() < 2) // JDK-8212899
989 +             ? (1 << 5)
990 +             : (1 << 10))
991 +            * (expensiveTests ? (1 << 10) : 1);
992 +        final CountDownLatch finished = new CountDownLatch(1);
993 +        final SubmissionPublisher<Boolean> pub = new SubmissionPublisher<>();
994 +        class Sub implements Subscriber<Boolean> {
995 +            int received;
996 +            public void onSubscribe(Subscription s) {
997 +                s.request(N);
998 +            }
999 +            public void onNext(Boolean item) {
1000 +                if (++received == N)
1001 +                    finished.countDown();
1002 +                else
1003 +                    CompletableFuture.runAsync(() -> pub.submit(Boolean.TRUE));
1004 +            }
1005 +            public void onError(Throwable t) { throw new AssertionError(t); }
1006 +            public void onComplete() {}
1007 +        }
1008 +        pub.subscribe(new Sub());
1009 +        checkTimedGet(
1010 +            CompletableFuture.runAsync(() -> pub.submit(Boolean.TRUE)),
1011 +            null);
1012 +        await(finished);
1013 +    }
1014   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines