--- jsr166/src/test/tck/SubmissionPublisherTest.java 2015/09/07 20:20:40 1.2 +++ jsr166/src/test/tck/SubmissionPublisherTest.java 2015/09/08 19:44:10 1.9 @@ -47,7 +47,7 @@ public class SubmissionPublisherTest ext } static final Executor basicExecutor = - (ForkJoinPool.getCommonPoolParallelism() > 0) ? + (ForkJoinPool.getCommonPoolParallelism() > 1) ? ForkJoinPool.commonPool() : new ThreadPoolExecutor(1, 1, 60, SECONDS, new LinkedBlockingQueue(), @@ -153,15 +153,15 @@ public class SubmissionPublisherTest ext */ void checkInitialState(SubmissionPublisher p) { assertFalse(p.hasSubscribers()); - assertEquals(p.getNumberOfSubscribers(), 0); + assertEquals(0, p.getNumberOfSubscribers()); assertTrue(p.getSubscribers().isEmpty()); assertFalse(p.isClosed()); assertNull(p.getClosedException()); int n = p.getMaxBufferCapacity(); assertTrue((n & (n - 1)) == 0); // power of two assertNotNull(p.getExecutor()); - assertEquals(p.estimateMinimumDemand(), 0); - assertEquals(p.estimateMaximumLag(), 0); + assertEquals(0, p.estimateMinimumDemand()); + assertEquals(0, p.estimateMaximumLag()); } /** @@ -185,7 +185,7 @@ public class SubmissionPublisherTest ext SubmissionPublisher p = new SubmissionPublisher(e, 8); checkInitialState(p); assertSame(p.getExecutor(), e); - assertEquals(p.getMaxBufferCapacity(), 8); + assertEquals(8, p.getMaxBufferCapacity()); } /** @@ -264,27 +264,28 @@ public class SubmissionPublisherTest ext SubmissionPublisher p = basicPublisher(); p.subscribe(s); assertTrue(p.hasSubscribers()); - assertEquals(p.getNumberOfSubscribers(), 1); + assertEquals(1, p.getNumberOfSubscribers()); assertTrue(p.getSubscribers().contains(s)); assertTrue(p.isSubscribed(s)); s.awaitSubscribe(); assertNotNull(s.sn); - assertEquals(s.nexts, 0); - assertEquals(s.errors, 0); - assertEquals(s.completes, 0); + assertEquals(0, s.nexts); + assertEquals(0, s.errors); + assertEquals(0, s.completes); TestSubscriber s2 = new TestSubscriber(); p.subscribe(s2); assertTrue(p.hasSubscribers()); - assertEquals(p.getNumberOfSubscribers(), 2); + assertEquals(2, p.getNumberOfSubscribers()); assertTrue(p.getSubscribers().contains(s)); assertTrue(p.getSubscribers().contains(s2)); assertTrue(p.isSubscribed(s)); assertTrue(p.isSubscribed(s2)); s2.awaitSubscribe(); assertNotNull(s2.sn); - assertEquals(s2.nexts, 0); - assertEquals(s2.errors, 0); - assertEquals(s2.completes, 0); + assertEquals(0, s2.nexts); + assertEquals(0, s2.errors); + assertEquals(0, s2.completes); + p.close(); } /** @@ -297,9 +298,9 @@ public class SubmissionPublisherTest ext p.close(); p.subscribe(s); s.awaitComplete(); - assertEquals(s.nexts, 0); - assertEquals(s.errors, 0); - assertEquals(s.completes, 1); + assertEquals(0, s.nexts); + assertEquals(0, s.errors); + assertEquals(1, s.completes, 1); } /** @@ -315,8 +316,8 @@ public class SubmissionPublisherTest ext assertSame(p.getClosedException(), ex); p.subscribe(s); s.awaitError(); - assertEquals(s.nexts, 0); - assertEquals(s.errors, 1); + assertEquals(0, s.nexts); + assertEquals(1, s.errors); } /** @@ -328,18 +329,18 @@ public class SubmissionPublisherTest ext SubmissionPublisher p = basicPublisher(); p.subscribe(s); assertTrue(p.hasSubscribers()); - assertEquals(p.getNumberOfSubscribers(), 1); + assertEquals(1, p.getNumberOfSubscribers()); assertTrue(p.getSubscribers().contains(s)); assertTrue(p.isSubscribed(s)); s.awaitSubscribe(); assertNotNull(s.sn); - assertEquals(s.nexts, 0); - assertEquals(s.errors, 0); - assertEquals(s.completes, 0); + assertEquals(0, s.nexts); + assertEquals(0, s.errors); + assertEquals(0, s.completes); p.subscribe(s); s.awaitError(); - assertEquals(s.nexts, 0); - assertEquals(s.errors, 1); + assertEquals(0, s.nexts); + assertEquals(1, s.errors); assertFalse(p.isSubscribed(s)); } @@ -354,13 +355,13 @@ public class SubmissionPublisherTest ext p.subscribe(s); } catch (Exception ok) {} s.awaitError(); - assertEquals(s.nexts, 0); - assertEquals(s.errors, 1); - assertEquals(s.completes, 0); + assertEquals(0, s.nexts); + assertEquals(1, s.errors); + assertEquals(0, s.completes); } /** - * subscribe(null) thows NPE + * subscribe(null) throws NPE */ public void testSubscribe6() { SubmissionPublisher p = basicPublisher(); @@ -385,11 +386,11 @@ public class SubmissionPublisherTest ext assertTrue(p.isClosed()); assertNull(p.getClosedException()); s1.awaitComplete(); - assertEquals(s1.nexts, 1); - assertEquals(s1.completes, 1); + assertEquals(1, s1.nexts); + assertEquals(1, s1.completes); s2.awaitComplete(); - assertEquals(s2.nexts, 1); - assertEquals(s2.completes, 1); + assertEquals(1, s2.nexts); + assertEquals(1, s2.completes); } /** @@ -406,10 +407,10 @@ public class SubmissionPublisherTest ext assertTrue(p.isClosed()); s1.awaitError(); assertTrue(s1.nexts <= 1); - assertEquals(s1.errors, 1); + assertEquals(1, s1.errors); s2.awaitError(); assertTrue(s2.nexts <= 1); - assertEquals(s2.errors, 1); + assertEquals(1, s2.errors); } /** @@ -428,8 +429,8 @@ public class SubmissionPublisherTest ext p.submit(i); p.close(); s2.awaitComplete(); - assertEquals(s2.nexts, 20); - assertEquals(s2.completes, 1); + assertEquals(20, s2.nexts); + assertEquals(1, s2.completes); assertTrue(s1.nexts < 20); assertFalse(p.isSubscribed(s1)); } @@ -449,13 +450,13 @@ public class SubmissionPublisherTest ext p.submit(2); p.close(); s2.awaitComplete(); - assertEquals(s2.nexts, 2); + assertEquals(2, s2.nexts); s1.awaitComplete(); - assertEquals(s1.errors, 1); + assertEquals(1, s1.errors); } /** - * If a handler is supplied in conctructor, it is invoked when + * If a handler is supplied in constructor, it is invoked when * subscriber throws an exception in onNext */ public void testThrowOnNextHandler() { @@ -473,11 +474,11 @@ public class SubmissionPublisherTest ext p.submit(2); p.close(); s2.awaitComplete(); - assertEquals(s2.nexts, 2); - assertEquals(s2.completes, 1); + assertEquals(2, s2.nexts); + assertEquals(1, s2.completes); s1.awaitError(); - assertEquals(s1.errors, 1); - assertEquals(calls.get(), 1); + assertEquals(1, s1.errors); + assertEquals(1, calls.get()); } /** @@ -494,10 +495,10 @@ public class SubmissionPublisherTest ext p.close(); s2.awaitComplete(); s1.awaitComplete(); - assertEquals(s2.nexts, 20); - assertEquals(s2.completes, 1); - assertEquals(s1.nexts, 20); - assertEquals(s1.completes, 1); + assertEquals(20, s2.nexts); + assertEquals(1, s2.completes); + assertEquals(20, s1.nexts); + assertEquals(1, s1.completes); } /** @@ -515,16 +516,16 @@ public class SubmissionPublisherTest ext p.submit(1); p.submit(2); s2.awaitNext(1); - assertEquals(s1.nexts, 0); + assertEquals(0, s1.nexts); s1.sn.request(3); p.submit(3); p.close(); s2.awaitComplete(); - assertEquals(s2.nexts, 3); - assertEquals(s2.completes, 1); + assertEquals(3, s2.nexts); + assertEquals(1, s2.completes); s1.awaitComplete(); assertTrue(s1.nexts > 0); - assertEquals(s1.completes, 1); + assertEquals(1, s1.completes); } /** @@ -543,10 +544,10 @@ public class SubmissionPublisherTest ext p.submit(2); p.close(); s2.awaitComplete(); - assertEquals(s2.nexts, 2); - assertEquals(s2.completes, 1); + assertEquals(2, s2.nexts); + assertEquals(1, s2.completes); s1.awaitNext(1); - assertEquals(s1.nexts, 1); + assertEquals(1, s1.nexts); } /** @@ -565,10 +566,10 @@ public class SubmissionPublisherTest ext p.submit(2); p.close(); s2.awaitComplete(); - assertEquals(s2.nexts, 2); - assertEquals(s2.completes, 1); + assertEquals(2, s2.nexts); + assertEquals(1, s2.completes); s1.awaitError(); - assertEquals(s1.errors, 1); + assertEquals(1, s1.errors); assertTrue(s1.lastError instanceof IllegalArgumentException); } @@ -582,24 +583,24 @@ public class SubmissionPublisherTest ext s.request = false; p.subscribe(s); s.awaitSubscribe(); - assertEquals(p.estimateMinimumDemand(), 0); + assertEquals(0, p.estimateMinimumDemand()); s.sn.request(1); - assertEquals(p.estimateMinimumDemand(), 1); + assertEquals(1, p.estimateMinimumDemand()); p.submit(1); s.awaitNext(1); - assertEquals(p.estimateMinimumDemand(), 0); + assertEquals(0, p.estimateMinimumDemand()); } /** - * Submit to a publisher with no subscribers returns lag 0 + * submit to a publisher with no subscribers returns lag 0 */ public void testEmptySubmit() { SubmissionPublisher p = basicPublisher(); - assertEquals(p.submit(1), 0); + assertEquals(0, p.submit(1)); } /** - * Submit(null) throws NPE + * submit(null) throws NPE */ public void testNullSubmit() { SubmissionPublisher p = basicPublisher(); @@ -610,7 +611,7 @@ public class SubmissionPublisherTest ext } /** - * Submit returns number of lagged items, compatible with result + * submit returns number of lagged items, compatible with result * of estimateMaximumLag. */ public void testLaggedSubmit() { @@ -623,7 +624,7 @@ public class SubmissionPublisherTest ext p.subscribe(s2); s2.awaitSubscribe(); s1.awaitSubscribe(); - assertEquals(p.submit(1), 1); + assertEquals(1, p.submit(1)); assertTrue(p.estimateMaximumLag() >= 1); assertTrue(p.submit(2) >= 2); assertTrue(p.estimateMaximumLag() >= 2); @@ -634,9 +635,9 @@ public class SubmissionPublisherTest ext p.submit(4); p.close(); s2.awaitComplete(); - assertEquals(s2.nexts, 4); + assertEquals(4, s2.nexts); s1.awaitComplete(); - assertEquals(s2.nexts, 4); + assertEquals(4, s2.nexts); } /** @@ -656,10 +657,10 @@ public class SubmissionPublisherTest ext p.close(); s2.awaitComplete(); s1.awaitComplete(); - assertEquals(s2.nexts, 20); - assertEquals(s2.completes, 1); - assertEquals(s1.nexts, 20); - assertEquals(s1.completes, 1); + assertEquals(20, s2.nexts); + assertEquals(1, s2.completes); + assertEquals(20, s1.nexts); + assertEquals(1, s1.completes); } static boolean noopHandle(AtomicInteger count) { @@ -674,15 +675,15 @@ public class SubmissionPublisherTest ext } /** - * Offer to a publisher with no subscribers returns lag 0 + * offer to a publisher with no subscribers returns lag 0 */ public void testEmptyOffer() { SubmissionPublisher p = basicPublisher(); - assertEquals(p.offer(1, null), 0); + assertEquals(0, p.offer(1, null)); } /** - * Offer(null) throws NPE + * offer(null) throws NPE */ public void testNullOffer() { SubmissionPublisher p = basicPublisher(); @@ -693,7 +694,7 @@ public class SubmissionPublisherTest ext } /** - * Offer returns number of lagged items if not saturated + * offer returns number of lagged items if not saturated */ public void testLaggedOffer() { SubmissionPublisher p = basicPublisher(); @@ -713,13 +714,13 @@ public class SubmissionPublisherTest ext p.offer(4, null); p.close(); s2.awaitComplete(); - assertEquals(s2.nexts, 4); + assertEquals(4, s2.nexts); s1.awaitComplete(); - assertEquals(s2.nexts, 4); + assertEquals(4, s2.nexts); } /** - * Offer reports drops if saturated + * offer reports drops if saturated */ public void testDroppedOffer() { SubmissionPublisher p = new SubmissionPublisher( @@ -747,7 +748,7 @@ public class SubmissionPublisherTest ext } /** - * Offer invokes drop handler if saturated + * offer invokes drop handler if saturated */ public void testHandledDroppedOffer() { AtomicInteger calls = new AtomicInteger(); @@ -774,9 +775,8 @@ public class SubmissionPublisherTest ext assertTrue(calls.get() >= 4); } - /** - * Offer succeeds if drop handler forces request + * offer succeeds if drop handler forces request */ public void testRecoveredHandledDroppedOffer() { AtomicInteger calls = new AtomicInteger(); @@ -798,36 +798,39 @@ public class SubmissionPublisherTest ext p.close(); s2.awaitComplete(); s1.awaitComplete(); - assertEquals(s1.nexts + s2.nexts, n); + assertEquals(n, s1.nexts + s2.nexts); assertTrue(calls.get() >= 2); } - /** - * TimedOffer to a publisher with no subscribers returns lag 0 + * Timed offer to a publisher with no subscribers returns lag 0 */ public void testEmptyTimedOffer() { SubmissionPublisher p = basicPublisher(); - assertEquals(p.offer(1, null), 0); + long startTime = System.nanoTime(); + assertEquals(0, p.offer(1, LONG_DELAY_MS, MILLISECONDS, null)); + assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS / 2); } /** - * Timed Offer with null item or TimeUnit throws NPE + * Timed offer with null item or TimeUnit throws NPE */ public void testNullTimedOffer() { SubmissionPublisher p = basicPublisher(); + long startTime = System.nanoTime(); try { - p.offer(null, SHORT_DELAY_MS, MILLISECONDS, null); + p.offer(null, LONG_DELAY_MS, MILLISECONDS, null); shouldThrow(); } catch (NullPointerException success) {} try { - p.offer(1, SHORT_DELAY_MS, null, null); + p.offer(1, LONG_DELAY_MS, null, null); shouldThrow(); } catch (NullPointerException success) {} + assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS / 2); } /** - * Timed Offer returns number of lagged items if not saturated + * Timed offer returns number of lagged items if not saturated */ public void testLaggedTimedOffer() { SubmissionPublisher p = basicPublisher(); @@ -839,21 +842,23 @@ public class SubmissionPublisherTest ext p.subscribe(s2); s2.awaitSubscribe(); s1.awaitSubscribe(); - assertTrue(p.offer(1, SHORT_DELAY_MS, MILLISECONDS, null) >= 1); - assertTrue(p.offer(2, SHORT_DELAY_MS, MILLISECONDS, null) >= 2); + long startTime = System.nanoTime(); + assertTrue(p.offer(1, LONG_DELAY_MS, MILLISECONDS, null) >= 1); + assertTrue(p.offer(2, LONG_DELAY_MS, MILLISECONDS, null) >= 2); s1.sn.request(4); - assertTrue(p.offer(3, SHORT_DELAY_MS, MILLISECONDS, null) >= 3); + assertTrue(p.offer(3, LONG_DELAY_MS, MILLISECONDS, null) >= 3); s2.sn.request(4); - p.offer(4, SHORT_DELAY_MS, MILLISECONDS, null); + p.offer(4, LONG_DELAY_MS, MILLISECONDS, null); p.close(); s2.awaitComplete(); - assertEquals(s2.nexts, 4); + assertEquals(4, s2.nexts); s1.awaitComplete(); - assertEquals(s2.nexts, 4); + assertEquals(4, s2.nexts); + assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS / 2); } /** - * Timed Offer reports drops if saturated + * Timed offer reports drops if saturated */ public void testDroppedTimedOffer() { SubmissionPublisher p = new SubmissionPublisher( @@ -866,12 +871,15 @@ public class SubmissionPublisherTest ext p.subscribe(s2); s2.awaitSubscribe(); s1.awaitSubscribe(); + long delay = timeoutMillis(); for (int i = 1; i <= 4; ++i) - assertTrue(p.offer(i, SHORT_DELAY_MS, MILLISECONDS, null) >= 0); - p.offer(5, SHORT_DELAY_MS, MILLISECONDS, null); - assertTrue(p.offer(6, SHORT_DELAY_MS, MILLISECONDS, null) < 0); + assertTrue(p.offer(i, delay, MILLISECONDS, null) >= 0); + long startTime = System.nanoTime(); + assertTrue(p.offer(5, delay, MILLISECONDS, null) < 0); s1.sn.request(64); - assertTrue(p.offer(7, SHORT_DELAY_MS, MILLISECONDS, null) < 0); + assertTrue(p.offer(6, delay, MILLISECONDS, null) < 0); + // 2 * delay should elapse but check only 1 * delay to allow timer slop + assertTrue(millisElapsedSince(startTime) >= delay); s2.sn.request(64); p.close(); s2.awaitComplete(); @@ -881,7 +889,7 @@ public class SubmissionPublisherTest ext } /** - * Timed Offer invokes drop handler if saturated + * Timed offer invokes drop handler if saturated */ public void testHandledDroppedTimedOffer() { AtomicInteger calls = new AtomicInteger(); @@ -895,12 +903,14 @@ public class SubmissionPublisherTest ext p.subscribe(s2); s2.awaitSubscribe(); s1.awaitSubscribe(); + long delay = timeoutMillis(); for (int i = 1; i <= 4; ++i) - assertTrue(p.offer(i, SHORT_DELAY_MS, MILLISECONDS, (s, x) -> noopHandle(calls)) >= 0); - p.offer(5, (s, x) -> noopHandle(calls)); - assertTrue(p.offer(6, SHORT_DELAY_MS, MILLISECONDS, (s, x) -> noopHandle(calls)) < 0); + assertTrue(p.offer(i, delay, MILLISECONDS, (s, x) -> noopHandle(calls)) >= 0); + long startTime = System.nanoTime(); + assertTrue(p.offer(5, delay, MILLISECONDS, (s, x) -> noopHandle(calls)) < 0); s1.sn.request(64); - assertTrue(p.offer(7, SHORT_DELAY_MS, MILLISECONDS, (s, x) -> noopHandle(calls)) < 0); + assertTrue(p.offer(6, delay, MILLISECONDS, (s, x) -> noopHandle(calls)) < 0); + assertTrue(millisElapsedSince(startTime) >= delay); s2.sn.request(64); p.close(); s2.awaitComplete(); @@ -909,7 +919,7 @@ public class SubmissionPublisherTest ext } /** - * Timed Offer succeeds if drop handler forces request + * Timed offer succeeds if drop handler forces request */ public void testRecoveredHandledDroppedTimedOffer() { AtomicInteger calls = new AtomicInteger(); @@ -924,16 +934,18 @@ public class SubmissionPublisherTest ext s2.awaitSubscribe(); s1.awaitSubscribe(); int n = 0; - for (int i = 1; i <= 8; ++i) { - int d = p.offer(i, SHORT_DELAY_MS, MILLISECONDS, (s, x) -> reqHandle(calls, s)); + long delay = timeoutMillis(); + long startTime = System.nanoTime(); + for (int i = 1; i <= 6; ++i) { + int d = p.offer(i, delay, MILLISECONDS, (s, x) -> reqHandle(calls, s)); n = n + 2 + (d < 0 ? d : 0); } + assertTrue(millisElapsedSince(startTime) >= delay); p.close(); s2.awaitComplete(); s1.awaitComplete(); - assertEquals(s1.nexts + s2.nexts, n); + assertEquals(n, s1.nexts + s2.nexts); assertTrue(calls.get() >= 2); } - }