7 |
|
*/ |
8 |
|
|
9 |
|
import junit.framework.*; |
10 |
+ |
import java.util.Arrays; |
11 |
+ |
import java.util.NoSuchElementException; |
12 |
|
import java.util.PropertyPermission; |
13 |
|
import java.util.concurrent.*; |
14 |
|
import java.util.concurrent.atomic.AtomicReference; |
15 |
|
import static java.util.concurrent.TimeUnit.MILLISECONDS; |
16 |
+ |
import static java.util.concurrent.TimeUnit.NANOSECONDS; |
17 |
|
import java.security.CodeSource; |
18 |
|
import java.security.Permission; |
19 |
|
import java.security.PermissionCollection; |
134 |
|
System.out.printf("%n%s: %d%n", toString(), elapsedMillis); |
135 |
|
} |
136 |
|
} |
137 |
< |
|
137 |
> |
|
138 |
|
/** |
139 |
|
* Runs all JSR166 unit tests using junit.textui.TestRunner |
140 |
|
*/ |
262 |
|
SHORT_DELAY_MS = getShortDelay(); |
263 |
|
SMALL_DELAY_MS = SHORT_DELAY_MS * 5; |
264 |
|
MEDIUM_DELAY_MS = SHORT_DELAY_MS * 10; |
265 |
< |
LONG_DELAY_MS = SHORT_DELAY_MS * 50; |
265 |
> |
LONG_DELAY_MS = SHORT_DELAY_MS * 200; |
266 |
|
} |
267 |
|
|
268 |
|
/** |
291 |
|
* earlier by threadRecordFailure. |
292 |
|
*/ |
293 |
|
public void tearDown() throws Exception { |
294 |
< |
Throwable t = threadFailure.get(); |
294 |
> |
Throwable t = threadFailure.getAndSet(null); |
295 |
|
if (t != null) { |
296 |
|
if (t instanceof Error) |
297 |
|
throw (Error) t; |
449 |
|
try { |
450 |
|
exec.shutdown(); |
451 |
|
assertTrue("ExecutorService did not terminate in a timely manner", |
452 |
< |
exec.awaitTermination(LONG_DELAY_MS, MILLISECONDS)); |
452 |
> |
exec.awaitTermination(2 * LONG_DELAY_MS, MILLISECONDS)); |
453 |
|
} catch (SecurityException ok) { |
454 |
|
// Allowed in case test doesn't have privs |
455 |
|
} catch (InterruptedException ie) { |
608 |
|
} |
609 |
|
|
610 |
|
/** |
611 |
+ |
* Waits up to the specified number of milliseconds for the given |
612 |
+ |
* thread to enter a wait state: BLOCKED, WAITING, or TIMED_WAITING. |
613 |
+ |
*/ |
614 |
+ |
void waitForThreadToEnterWaitState(Thread thread, long timeoutMillis) { |
615 |
+ |
long timeoutNanos = timeoutMillis * 1000L * 1000L; |
616 |
+ |
long t0 = System.nanoTime(); |
617 |
+ |
for (;;) { |
618 |
+ |
Thread.State s = thread.getState(); |
619 |
+ |
if (s == Thread.State.BLOCKED || |
620 |
+ |
s == Thread.State.WAITING || |
621 |
+ |
s == Thread.State.TIMED_WAITING) |
622 |
+ |
return; |
623 |
+ |
else if (s == Thread.State.TERMINATED) |
624 |
+ |
fail("Unexpected thread termination"); |
625 |
+ |
else if (System.nanoTime() - t0 > timeoutNanos) { |
626 |
+ |
threadAssertTrue(thread.isAlive()); |
627 |
+ |
return; |
628 |
+ |
} |
629 |
+ |
Thread.yield(); |
630 |
+ |
} |
631 |
+ |
} |
632 |
+ |
|
633 |
+ |
/** |
634 |
+ |
* Returns the number of milliseconds since time given by |
635 |
+ |
* startNanoTime, which must have been previously returned from a |
636 |
+ |
* call to {@link System.nanoTime()}. |
637 |
+ |
*/ |
638 |
+ |
long millisElapsedSince(long startNanoTime) { |
639 |
+ |
return NANOSECONDS.toMillis(System.nanoTime() - startNanoTime); |
640 |
+ |
} |
641 |
+ |
|
642 |
+ |
/** |
643 |
|
* Returns a new started daemon Thread running the given runnable. |
644 |
|
*/ |
645 |
|
Thread newStartedThread(Runnable runnable) { |
781 |
|
|
782 |
|
public Callable<String> latchAwaitingStringTask(final CountDownLatch latch) { |
783 |
|
return new CheckedCallable<String>() { |
784 |
< |
public String realCall() { |
784 |
> |
protected String realCall() { |
785 |
|
try { |
786 |
|
latch.await(); |
787 |
|
} catch (InterruptedException quittingTime) {} |
842 |
|
} |
843 |
|
} |
844 |
|
|
845 |
+ |
public Runnable possiblyInterruptedRunnable(final long timeoutMillis) { |
846 |
+ |
return new CheckedRunnable() { |
847 |
+ |
protected void realRun() { |
848 |
+ |
try { |
849 |
+ |
Thread.sleep(timeoutMillis); |
850 |
+ |
} catch (InterruptedException ok) {} |
851 |
+ |
}}; |
852 |
+ |
} |
853 |
+ |
|
854 |
|
public class MediumPossiblyInterruptedRunnable extends CheckedRunnable { |
855 |
|
protected void realRun() { |
856 |
|
try { |
1009 |
|
} |
1010 |
|
} |
1011 |
|
|
1012 |
+ |
public void checkEmpty(BlockingQueue q) { |
1013 |
+ |
try { |
1014 |
+ |
assertTrue(q.isEmpty()); |
1015 |
+ |
assertEquals(0, q.size()); |
1016 |
+ |
assertNull(q.peek()); |
1017 |
+ |
assertNull(q.poll()); |
1018 |
+ |
assertNull(q.poll(0, MILLISECONDS)); |
1019 |
+ |
assertEquals(q.toString(), "[]"); |
1020 |
+ |
assertTrue(Arrays.equals(q.toArray(), new Object[0])); |
1021 |
+ |
assertFalse(q.iterator().hasNext()); |
1022 |
+ |
try { |
1023 |
+ |
q.element(); |
1024 |
+ |
shouldThrow(); |
1025 |
+ |
} catch (NoSuchElementException success) {} |
1026 |
+ |
try { |
1027 |
+ |
q.iterator().next(); |
1028 |
+ |
shouldThrow(); |
1029 |
+ |
} catch (NoSuchElementException success) {} |
1030 |
+ |
try { |
1031 |
+ |
q.remove(); |
1032 |
+ |
shouldThrow(); |
1033 |
+ |
} catch (NoSuchElementException success) {} |
1034 |
+ |
} catch (InterruptedException ie) { |
1035 |
+ |
threadUnexpectedException(ie); |
1036 |
+ |
} |
1037 |
+ |
} |
1038 |
+ |
|
1039 |
|
} |