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

Comparing jsr166/src/test/tck/JSR166TestCase.java (file contents):
Revision 1.221 by jsr166, Tue Mar 14 00:54:27 2017 UTC vs.
Revision 1.227 by jsr166, Sun May 14 03:12:05 2017 UTC

# Line 658 | Line 658 | public class JSR166TestCase extends Test
658          LONG_DELAY_MS   = SHORT_DELAY_MS * 200;
659      }
660  
661 +    private static final long TIMEOUT_DELAY_MS
662 +        = (long) (12.0 * Math.cbrt(delayFactor));
663 +
664      /**
665 <     * Returns a timeout in milliseconds to be used in tests that
666 <     * verify that operations block or time out.
665 >     * Returns a timeout in milliseconds to be used in tests that verify
666 >     * that operations block or time out.  We want this to be longer
667 >     * than the OS scheduling quantum, but not too long, so don't scale
668 >     * linearly with delayFactor; we use "crazy" cube root instead.
669       */
670 <    long timeoutMillis() {
671 <        return SHORT_DELAY_MS / 4;
670 >    static long timeoutMillis() {
671 >        return TIMEOUT_DELAY_MS;
672      }
673  
674      /**
# Line 1058 | Line 1063 | public class JSR166TestCase extends Test
1063      }
1064  
1065      /**
1066 +     * Checks that thread eventually enters the expected blocked thread state.
1067 +     */
1068 +    void assertThreadBlocks(Thread thread, Thread.State expected) {
1069 +        // always sleep at least 1 ms, avoiding transitional states
1070 +        // with high probability
1071 +        for (long retries = LONG_DELAY_MS * 3 / 4; retries-->0; ) {
1072 +            try { delay(1); }
1073 +            catch (InterruptedException fail) {
1074 +                fail("Unexpected InterruptedException");
1075 +            }
1076 +            Thread.State s = thread.getState();
1077 +            if (s == expected)
1078 +                return;
1079 +            else if (s == Thread.State.TERMINATED)
1080 +                fail("Unexpected thread termination");
1081 +        }
1082 +        fail("timed out waiting for thread to enter thread state " + expected);
1083 +    }
1084 +
1085 +    /**
1086       * Checks that thread does not terminate within the default
1087       * millisecond delay of {@code timeoutMillis()}.
1088       */
# Line 1079 | Line 1104 | public class JSR166TestCase extends Test
1104      }
1105  
1106      /**
1082     * Checks that the threads do not terminate within the default
1083     * millisecond delay of {@code timeoutMillis()}.
1084     */
1085    void assertThreadsStayAlive(Thread... threads) {
1086        assertThreadsStayAlive(timeoutMillis(), threads);
1087    }
1088
1089    /**
1090     * Checks that the threads do not terminate within the given millisecond delay.
1091     */
1092    void assertThreadsStayAlive(long millis, Thread... threads) {
1093        try {
1094            // No need to optimize the failing case via Thread.join.
1095            delay(millis);
1096            for (Thread thread : threads)
1097                assertTrue(thread.isAlive());
1098        } catch (InterruptedException fail) {
1099            threadFail("Unexpected InterruptedException");
1100        }
1101    }
1102
1103    /**
1107       * Checks that future.get times out, with the default timeout of
1108       * {@code timeoutMillis()}.
1109       */
# Line 1138 | Line 1141 | public class JSR166TestCase extends Test
1141      }
1142  
1143      /**
1144 +     * The maximum number of consecutive spurious wakeups we should
1145 +     * tolerate (from APIs like LockSupport.park) before failing a test.
1146 +     */
1147 +    static final int MAX_SPURIOUS_WAKEUPS = 10;
1148 +
1149 +    /**
1150       * The number of elements to place in collections, arrays, etc.
1151       */
1152      public static final int SIZE = 20;
# Line 1604 | Line 1613 | public class JSR166TestCase extends Test
1613          } catch (Throwable fail) {
1614              threadUnexpectedException(fail);
1615          }
1616 +    }
1617 +
1618 +    public void await(CyclicBarrier barrier) {
1619 +        try {
1620 +            barrier.await(LONG_DELAY_MS, MILLISECONDS);
1621 +        } catch (Throwable fail) {
1622 +            threadUnexpectedException(fail);
1623 +        }
1624      }
1625  
1626   //     /**

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines