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 |
|
/** |
1063 |
|
} |
1064 |
|
|
1065 |
|
/** |
1066 |
< |
* Checks that thread does not terminate within the default |
1062 |
< |
* millisecond delay of {@code timeoutMillis()}. |
1063 |
< |
*/ |
1064 |
< |
void assertThreadStaysAlive(Thread thread) { |
1065 |
< |
assertThreadStaysAlive(thread, timeoutMillis()); |
1066 |
< |
} |
1067 |
< |
|
1068 |
< |
/** |
1069 |
< |
* Checks that thread does not terminate within the given millisecond delay. |
1070 |
< |
*/ |
1071 |
< |
void assertThreadStaysAlive(Thread thread, long millis) { |
1072 |
< |
try { |
1073 |
< |
// No need to optimize the failing case via Thread.join. |
1074 |
< |
delay(millis); |
1075 |
< |
assertTrue(thread.isAlive()); |
1076 |
< |
} catch (InterruptedException fail) { |
1077 |
< |
threadFail("Unexpected InterruptedException"); |
1078 |
< |
} |
1079 |
< |
} |
1080 |
< |
|
1081 |
< |
/** |
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. |
1066 |
> |
* Checks that thread eventually enters the expected blocked thread state. |
1067 |
|
*/ |
1068 |
< |
void assertThreadsStayAlive(long millis, Thread... threads) { |
1069 |
< |
try { |
1070 |
< |
// No need to optimize the failing case via Thread.join. |
1071 |
< |
delay(millis); |
1072 |
< |
for (Thread thread : threads) |
1073 |
< |
assertTrue(thread.isAlive()); |
1074 |
< |
} catch (InterruptedException fail) { |
1075 |
< |
threadFail("Unexpected InterruptedException"); |
1068 |
> |
void assertThreadBlocks(Thread thread, Thread.State expected) { |
1069 |
> |
// always sleep at least 1 ms, with high probability avoiding |
1070 |
> |
// transitory states |
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 |
|
/** |
1120 |
|
} |
1121 |
|
|
1122 |
|
/** |
1123 |
+ |
* The maximum number of consecutive spurious wakeups we should |
1124 |
+ |
* tolerate (from APIs like LockSupport.park) before failing a test. |
1125 |
+ |
*/ |
1126 |
+ |
static final int MAX_SPURIOUS_WAKEUPS = 10; |
1127 |
+ |
|
1128 |
+ |
/** |
1129 |
|
* The number of elements to place in collections, arrays, etc. |
1130 |
|
*/ |
1131 |
|
public static final int SIZE = 20; |
1592 |
|
} catch (Throwable fail) { |
1593 |
|
threadUnexpectedException(fail); |
1594 |
|
} |
1595 |
+ |
} |
1596 |
+ |
|
1597 |
+ |
public void await(CyclicBarrier barrier) { |
1598 |
+ |
try { |
1599 |
+ |
barrier.await(LONG_DELAY_MS, MILLISECONDS); |
1600 |
+ |
} catch (Throwable fail) { |
1601 |
+ |
threadUnexpectedException(fail); |
1602 |
+ |
} |
1603 |
|
} |
1604 |
|
|
1605 |
|
// /** |