ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ThreadPoolExecutorTest.java
Revision: 1.15
Committed: Sat Dec 27 20:42:48 2003 UTC (20 years, 4 months ago) by dl
Branch: MAIN
Changes since 1.14: +5 -4 lines
Log Message:
Headers reference Creative Commons

File Contents

# User Rev Content
1 dl 1.1 /*
2 dl 1.15 * Written by Doug Lea with assistance from members of JCP JSR-166
3     * Expert Group and released to the public domain, as explained at
4     * http://creativecommons.org/licenses/publicdomain
5     * Other contributors include Andrew Wright, Jeffrey Hayes,
6     * Pat Fisher, Mike Judd.
7 dl 1.1 */
8    
9     import java.util.concurrent.*;
10     import junit.framework.*;
11 dl 1.12 import java.util.*;
12 dl 1.1
13 dl 1.3 public class ThreadPoolExecutorTest extends JSR166TestCase {
14 dl 1.1 public static void main(String[] args) {
15     junit.textui.TestRunner.run (suite());
16     }
17     public static Test suite() {
18     return new TestSuite(ThreadPoolExecutorTest.class);
19     }
20    
21 dl 1.8 static class ExtendedTPE extends ThreadPoolExecutor {
22     volatile boolean beforeCalled = false;
23     volatile boolean afterCalled = false;
24     volatile boolean terminatedCalled = false;
25     public ExtendedTPE() {
26     super(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new SynchronousQueue<Runnable>());
27     }
28     protected void beforeExecute(Thread t, Runnable r) {
29     beforeCalled = true;
30     }
31     protected void afterExecute(Runnable r, Throwable t) {
32     afterCalled = true;
33     }
34     protected void terminated() {
35     terminatedCalled = true;
36     }
37     }
38 dl 1.1
39 dl 1.3 /**
40 dl 1.8 * execute successfully executes a runnable
41 dl 1.1 */
42 dl 1.5 public void testExecute() {
43 dl 1.8 ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
44 dl 1.1 try {
45 dl 1.5 p1.execute(new Runnable() {
46     public void run() {
47     try {
48 dl 1.1 Thread.sleep(SHORT_DELAY_MS);
49 dl 1.2 } catch(InterruptedException e){
50 dl 1.5 threadUnexpectedException();
51 dl 1.1 }
52     }
53     });
54 dl 1.3 Thread.sleep(SMALL_DELAY_MS);
55 dl 1.2 } catch(InterruptedException e){
56 dl 1.5 unexpectedException();
57 dl 1.3 }
58 dl 1.5 joinPool(p1);
59 dl 1.1 }
60    
61     /**
62 dl 1.6 * getActiveCount increases but doesn't overestimate, when a
63     * thread becomes active
64 dl 1.1 */
65 dl 1.5 public void testGetActiveCount() {
66 dl 1.8 ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
67 dl 1.5 assertEquals(0, p2.getActiveCount());
68     p2.execute(new MediumRunnable());
69     try {
70 dl 1.3 Thread.sleep(SHORT_DELAY_MS);
71     } catch(Exception e){
72 dl 1.5 unexpectedException();
73 dl 1.1 }
74 dl 1.5 assertEquals(1, p2.getActiveCount());
75     joinPool(p2);
76 dl 1.1 }
77 dl 1.8
78     /**
79     * prestartCoreThread starts a thread if under corePoolSize, else doesn't
80     */
81     public void testPrestartCoreThread() {
82     ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
83     assertEquals(0, p2.getPoolSize());
84     assertTrue(p2.prestartCoreThread());
85     assertEquals(1, p2.getPoolSize());
86     assertTrue(p2.prestartCoreThread());
87     assertEquals(2, p2.getPoolSize());
88     assertFalse(p2.prestartCoreThread());
89     assertEquals(2, p2.getPoolSize());
90     joinPool(p2);
91     }
92    
93     /**
94     * prestartAllCoreThreads starts all corePoolSize threads
95     */
96     public void testPrestartAllCoreThreads() {
97     ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
98     assertEquals(0, p2.getPoolSize());
99     p2.prestartAllCoreThreads();
100     assertEquals(2, p2.getPoolSize());
101     p2.prestartAllCoreThreads();
102     assertEquals(2, p2.getPoolSize());
103     joinPool(p2);
104     }
105 dl 1.1
106     /**
107 dl 1.6 * getCompletedTaskCount increases, but doesn't overestimate,
108     * when tasks complete
109 dl 1.1 */
110 dl 1.5 public void testGetCompletedTaskCount() {
111 dl 1.8 ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
112 dl 1.5 assertEquals(0, p2.getCompletedTaskCount());
113     p2.execute(new ShortRunnable());
114     try {
115 dl 1.8 Thread.sleep(SMALL_DELAY_MS);
116 dl 1.3 } catch(Exception e){
117 dl 1.5 unexpectedException();
118 dl 1.1 }
119 dl 1.5 assertEquals(1, p2.getCompletedTaskCount());
120     p2.shutdown();
121     joinPool(p2);
122 dl 1.1 }
123    
124     /**
125 dl 1.6 * getCorePoolSize returns size given in constructor if not otherwise set
126 dl 1.1 */
127 dl 1.5 public void testGetCorePoolSize() {
128 dl 1.8 ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
129 dl 1.5 assertEquals(1, p1.getCorePoolSize());
130     joinPool(p1);
131 dl 1.1 }
132    
133     /**
134 dl 1.6 * getKeepAliveTime returns value given in constructor if not otherwise set
135 dl 1.1 */
136 dl 1.5 public void testGetKeepAliveTime() {
137     ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, 1000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
138     assertEquals(1, p2.getKeepAliveTime(TimeUnit.SECONDS));
139     joinPool(p2);
140 dl 1.1 }
141 dl 1.8
142    
143     /**
144     * getThreadFactory returns factory in constructor if not set
145     */
146     public void testGetThreadFactory() {
147     ThreadFactory tf = new SimpleThreadFactory();
148     ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10), tf, new NoOpREHandler());
149     assertSame(tf, p.getThreadFactory());
150     p.shutdown();
151     joinPool(p);
152     }
153    
154     /**
155     * setThreadFactory sets the thread factory returned by getThreadFactory
156     */
157     public void testSetThreadFactory() {
158     ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
159     ThreadFactory tf = new SimpleThreadFactory();
160     p.setThreadFactory(tf);
161     assertSame(tf, p.getThreadFactory());
162     p.shutdown();
163     joinPool(p);
164     }
165    
166    
167     /**
168     * setThreadFactory(null) throws NPE
169     */
170     public void testSetThreadFactoryNull() {
171     ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
172     try {
173     p.setThreadFactory(null);
174     shouldThrow();
175     } catch (NullPointerException success) {
176     } finally {
177     joinPool(p);
178     }
179     }
180    
181 dl 1.9 /**
182     * getRejectedExecutionHandler returns handler in constructor if not set
183     */
184     public void testGetRejectedExecutionHandler() {
185     RejectedExecutionHandler h = new NoOpREHandler();
186     ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10), h);
187     assertSame(h, p.getRejectedExecutionHandler());
188     p.shutdown();
189     joinPool(p);
190     }
191    
192     /**
193     * setRejectedExecutionHandler sets the handler returned by
194     * getRejectedExecutionHandler
195     */
196     public void testSetRejectedExecutionHandler() {
197     ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
198     RejectedExecutionHandler h = new NoOpREHandler();
199     p.setRejectedExecutionHandler(h);
200     assertSame(h, p.getRejectedExecutionHandler());
201     p.shutdown();
202     joinPool(p);
203     }
204    
205    
206     /**
207     * setRejectedExecutionHandler(null) throws NPE
208     */
209     public void testSetRejectedExecutionHandlerNull() {
210     ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
211     try {
212     p.setRejectedExecutionHandler(null);
213     shouldThrow();
214     } catch (NullPointerException success) {
215     } finally {
216     joinPool(p);
217     }
218     }
219    
220 dl 1.1
221     /**
222 dl 1.6 * getLargestPoolSize increases, but doesn't overestimate, when
223     * multiple threads active
224 dl 1.1 */
225 dl 1.5 public void testGetLargestPoolSize() {
226 dl 1.8 ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
227 dl 1.1 try {
228 dl 1.5 assertEquals(0, p2.getLargestPoolSize());
229     p2.execute(new MediumRunnable());
230     p2.execute(new MediumRunnable());
231 dl 1.3 Thread.sleep(SHORT_DELAY_MS);
232 dl 1.5 assertEquals(2, p2.getLargestPoolSize());
233 dl 1.3 } catch(Exception e){
234 dl 1.5 unexpectedException();
235 dl 1.3 }
236 dl 1.5 joinPool(p2);
237 dl 1.1 }
238    
239     /**
240 dl 1.6 * getMaximumPoolSize returns value given in constructor if not
241     * otherwise set
242 dl 1.1 */
243 dl 1.5 public void testGetMaximumPoolSize() {
244 dl 1.8 ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
245 dl 1.5 assertEquals(2, p2.getMaximumPoolSize());
246     joinPool(p2);
247 dl 1.1 }
248    
249     /**
250 dl 1.6 * getPoolSize increases, but doesn't overestimate, when threads
251     * become active
252 dl 1.1 */
253 dl 1.5 public void testGetPoolSize() {
254 dl 1.8 ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
255 dl 1.5 assertEquals(0, p1.getPoolSize());
256     p1.execute(new MediumRunnable());
257     assertEquals(1, p1.getPoolSize());
258     joinPool(p1);
259 dl 1.1 }
260    
261     /**
262 dl 1.8 * getTaskCount increases, but doesn't overestimate, when tasks submitted
263 dl 1.1 */
264 dl 1.5 public void testGetTaskCount() {
265 dl 1.8 ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
266 dl 1.1 try {
267 dl 1.5 assertEquals(0, p1.getTaskCount());
268     p1.execute(new MediumRunnable());
269 dl 1.3 Thread.sleep(SHORT_DELAY_MS);
270 dl 1.5 assertEquals(1, p1.getTaskCount());
271 dl 1.3 } catch(Exception e){
272 dl 1.5 unexpectedException();
273 dl 1.3 }
274 dl 1.5 joinPool(p1);
275 dl 1.1 }
276    
277     /**
278 dl 1.6 * isShutDown is false before shutdown, true after
279 dl 1.1 */
280 dl 1.5 public void testIsShutdown() {
281 dl 1.1
282 dl 1.8 ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
283 dl 1.5 assertFalse(p1.isShutdown());
284     p1.shutdown();
285     assertTrue(p1.isShutdown());
286     joinPool(p1);
287 dl 1.1 }
288    
289    
290     /**
291 dl 1.6 * isTerminated is false before termination, true after
292 dl 1.1 */
293 dl 1.5 public void testIsTerminated() {
294 dl 1.8 ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
295 dl 1.6 assertFalse(p1.isTerminated());
296 dl 1.1 try {
297 dl 1.5 p1.execute(new MediumRunnable());
298 dl 1.1 } finally {
299 dl 1.5 p1.shutdown();
300 dl 1.1 }
301 dl 1.3 try {
302 dl 1.5 assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS));
303     assertTrue(p1.isTerminated());
304 dl 1.3 } catch(Exception e){
305 dl 1.5 unexpectedException();
306     }
307     }
308    
309     /**
310 dl 1.6 * isTerminating is not true when running or when terminated
311 dl 1.5 */
312     public void testIsTerminating() {
313 dl 1.8 ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
314 dl 1.5 assertFalse(p1.isTerminating());
315     try {
316     p1.execute(new SmallRunnable());
317     assertFalse(p1.isTerminating());
318     } finally {
319     p1.shutdown();
320     }
321     try {
322     assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS));
323     assertTrue(p1.isTerminated());
324     assertFalse(p1.isTerminating());
325     } catch(Exception e){
326     unexpectedException();
327 dl 1.3 }
328 dl 1.1 }
329    
330     /**
331 dl 1.8 * getQueue returns the work queue, which contains queued tasks
332     */
333     public void testGetQueue() {
334     BlockingQueue<Runnable> q = new ArrayBlockingQueue<Runnable>(10);
335     ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, q);
336 dl 1.11 FutureTask[] tasks = new FutureTask[5];
337 dl 1.8 for(int i = 0; i < 5; i++){
338 dl 1.11 tasks[i] = new FutureTask(new MediumPossiblyInterruptedRunnable(), Boolean.TRUE);
339 dl 1.8 p1.execute(tasks[i]);
340     }
341     try {
342     Thread.sleep(SHORT_DELAY_MS);
343     BlockingQueue<Runnable> wq = p1.getQueue();
344     assertSame(q, wq);
345     assertFalse(wq.contains(tasks[0]));
346     assertTrue(wq.contains(tasks[4]));
347     p1.shutdownNow();
348     } catch(Exception e) {
349     unexpectedException();
350     } finally {
351     joinPool(p1);
352     }
353     }
354    
355     /**
356     * remove(task) removes queued task, and fails to remove active task
357     */
358     public void testRemove() {
359     BlockingQueue<Runnable> q = new ArrayBlockingQueue<Runnable>(10);
360     ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, q);
361 dl 1.11 FutureTask[] tasks = new FutureTask[5];
362 dl 1.8 for(int i = 0; i < 5; i++){
363 dl 1.11 tasks[i] = new FutureTask(new MediumPossiblyInterruptedRunnable(), Boolean.TRUE);
364 dl 1.8 p1.execute(tasks[i]);
365     }
366     try {
367     Thread.sleep(SHORT_DELAY_MS);
368     assertFalse(p1.remove(tasks[0]));
369     assertTrue(q.contains(tasks[4]));
370     assertTrue(q.contains(tasks[3]));
371     assertTrue(p1.remove(tasks[4]));
372     assertFalse(p1.remove(tasks[4]));
373     assertFalse(q.contains(tasks[4]));
374     assertTrue(q.contains(tasks[3]));
375     assertTrue(p1.remove(tasks[3]));
376     assertFalse(q.contains(tasks[3]));
377     p1.shutdownNow();
378     } catch(Exception e) {
379     unexpectedException();
380     } finally {
381     joinPool(p1);
382     }
383     }
384    
385     /**
386 dl 1.6 * purge removes cancelled tasks from the queue
387 dl 1.1 */
388 dl 1.5 public void testPurge() {
389 dl 1.8 ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
390 dl 1.11 FutureTask[] tasks = new FutureTask[5];
391 dl 1.3 for(int i = 0; i < 5; i++){
392 dl 1.11 tasks[i] = new FutureTask(new MediumPossiblyInterruptedRunnable(), Boolean.TRUE);
393 dl 1.5 p1.execute(tasks[i]);
394 dl 1.3 }
395     tasks[4].cancel(true);
396     tasks[3].cancel(true);
397 dl 1.5 p1.purge();
398     long count = p1.getTaskCount();
399 dl 1.3 assertTrue(count >= 2 && count < 5);
400 dl 1.8 p1.shutdownNow();
401 dl 1.5 joinPool(p1);
402 dl 1.1 }
403    
404     /**
405 dl 1.6 * shutDownNow returns a list containing tasks that were not run
406 dl 1.1 */
407 dl 1.5 public void testShutDownNow() {
408 dl 1.8 ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
409 dl 1.1 List l;
410     try {
411     for(int i = 0; i < 5; i++)
412 dl 1.5 p1.execute(new MediumPossiblyInterruptedRunnable());
413 dl 1.1 }
414     finally {
415 dl 1.5 l = p1.shutdownNow();
416 dl 1.1 }
417 dl 1.5 assertTrue(p1.isShutdown());
418 dl 1.1 assertTrue(l.size() <= 4);
419     }
420    
421     // Exception Tests
422    
423    
424 dl 1.6 /**
425     * Constructor throws if corePoolSize argument is less than zero
426     */
427 dl 1.1 public void testConstructor1() {
428 dl 1.5 try {
429 dl 1.3 new ThreadPoolExecutor(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
430 dl 1.5 shouldThrow();
431 dl 1.1 }
432 dl 1.3 catch (IllegalArgumentException success){}
433 dl 1.1 }
434    
435 dl 1.6 /**
436     * Constructor throws if maximumPoolSize is less than zero
437     */
438 dl 1.1 public void testConstructor2() {
439 dl 1.5 try {
440 dl 1.3 new ThreadPoolExecutor(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
441 dl 1.5 shouldThrow();
442 dl 1.1 }
443 dl 1.3 catch (IllegalArgumentException success){}
444 dl 1.1 }
445    
446 dl 1.6 /**
447     * Constructor throws if maximumPoolSize is equal to zero
448     */
449 dl 1.1 public void testConstructor3() {
450 dl 1.5 try {
451 dl 1.3 new ThreadPoolExecutor(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
452 dl 1.5 shouldThrow();
453 dl 1.1 }
454 dl 1.3 catch (IllegalArgumentException success){}
455 dl 1.1 }
456    
457 dl 1.6 /**
458     * Constructor throws if keepAliveTime is less than zero
459     */
460 dl 1.1 public void testConstructor4() {
461 dl 1.5 try {
462 dl 1.1 new ThreadPoolExecutor(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
463 dl 1.5 shouldThrow();
464 dl 1.1 }
465 dl 1.3 catch (IllegalArgumentException success){}
466 dl 1.1 }
467    
468 dl 1.6 /**
469     * Constructor throws if corePoolSize is greater than the maximumPoolSize
470     */
471 dl 1.1 public void testConstructor5() {
472 dl 1.5 try {
473 dl 1.3 new ThreadPoolExecutor(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
474 dl 1.5 shouldThrow();
475 dl 1.1 }
476 dl 1.3 catch (IllegalArgumentException success){}
477 dl 1.1 }
478    
479 dl 1.6 /**
480     * Constructor throws if workQueue is set to null
481     */
482 dl 1.8 public void testConstructorNullPointerException() {
483 dl 1.5 try {
484 dl 1.8 new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null);
485 dl 1.5 shouldThrow();
486 dl 1.1 }
487 dl 1.3 catch (NullPointerException success){}
488 dl 1.1 }
489    
490    
491    
492 dl 1.6 /**
493     * Constructor throws if corePoolSize argument is less than zero
494     */
495 dl 1.1 public void testConstructor6() {
496 dl 1.5 try {
497 dl 1.7 new ThreadPoolExecutor(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory());
498 dl 1.5 shouldThrow();
499 dl 1.3 } catch (IllegalArgumentException success){}
500 dl 1.1 }
501    
502 dl 1.6 /**
503     * Constructor throws if maximumPoolSize is less than zero
504     */
505 dl 1.1 public void testConstructor7() {
506 dl 1.5 try {
507 dl 1.8 new ThreadPoolExecutor(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory());
508 dl 1.5 shouldThrow();
509 dl 1.1 }
510 dl 1.3 catch (IllegalArgumentException success){}
511 dl 1.1 }
512    
513 dl 1.6 /**
514     * Constructor throws if maximumPoolSize is equal to zero
515     */
516 dl 1.1 public void testConstructor8() {
517 dl 1.5 try {
518 dl 1.8 new ThreadPoolExecutor(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory());
519 dl 1.5 shouldThrow();
520 dl 1.1 }
521 dl 1.3 catch (IllegalArgumentException success){}
522 dl 1.1 }
523    
524 dl 1.6 /**
525     * Constructor throws if keepAliveTime is less than zero
526     */
527 dl 1.1 public void testConstructor9() {
528 dl 1.5 try {
529 dl 1.7 new ThreadPoolExecutor(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory());
530 dl 1.5 shouldThrow();
531 dl 1.1 }
532 dl 1.3 catch (IllegalArgumentException success){}
533 dl 1.1 }
534    
535 dl 1.6 /**
536     * Constructor throws if corePoolSize is greater than the maximumPoolSize
537     */
538 dl 1.1 public void testConstructor10() {
539 dl 1.5 try {
540 dl 1.8 new ThreadPoolExecutor(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory());
541 dl 1.5 shouldThrow();
542 dl 1.1 }
543 dl 1.3 catch (IllegalArgumentException success){}
544 dl 1.1 }
545    
546 dl 1.6 /**
547     * Constructor throws if workQueue is set to null
548     */
549 dl 1.8 public void testConstructorNullPointerException2() {
550 dl 1.5 try {
551 dl 1.8 new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null,new SimpleThreadFactory());
552 dl 1.5 shouldThrow();
553 dl 1.1 }
554 dl 1.3 catch (NullPointerException success){}
555 dl 1.1 }
556    
557 dl 1.6 /**
558     * Constructor throws if threadFactory is set to null
559     */
560 dl 1.8 public void testConstructorNullPointerException3() {
561 dl 1.5 try {
562 dl 1.1 ThreadFactory f = null;
563 dl 1.8 new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(10),f);
564 dl 1.5 shouldThrow();
565 dl 1.1 }
566 dl 1.3 catch (NullPointerException success){}
567 dl 1.1 }
568    
569    
570 dl 1.6 /**
571     * Constructor throws if corePoolSize argument is less than zero
572     */
573 dl 1.1 public void testConstructor11() {
574 dl 1.5 try {
575 dl 1.8 new ThreadPoolExecutor(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new NoOpREHandler());
576 dl 1.5 shouldThrow();
577 dl 1.1 }
578 dl 1.3 catch (IllegalArgumentException success){}
579 dl 1.1 }
580    
581 dl 1.6 /**
582     * Constructor throws if maximumPoolSize is less than zero
583     */
584 dl 1.1 public void testConstructor12() {
585 dl 1.5 try {
586 dl 1.8 new ThreadPoolExecutor(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new NoOpREHandler());
587 dl 1.5 shouldThrow();
588 dl 1.1 }
589 dl 1.3 catch (IllegalArgumentException success){}
590 dl 1.1 }
591    
592 dl 1.6 /**
593     * Constructor throws if maximumPoolSize is equal to zero
594     */
595 dl 1.1 public void testConstructor13() {
596 dl 1.5 try {
597 dl 1.8 new ThreadPoolExecutor(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new NoOpREHandler());
598 dl 1.5 shouldThrow();
599 dl 1.1 }
600 dl 1.3 catch (IllegalArgumentException success){}
601 dl 1.1 }
602    
603 dl 1.6 /**
604     * Constructor throws if keepAliveTime is less than zero
605     */
606 dl 1.1 public void testConstructor14() {
607 dl 1.5 try {
608 dl 1.7 new ThreadPoolExecutor(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new NoOpREHandler());
609 dl 1.5 shouldThrow();
610 dl 1.1 }
611 dl 1.3 catch (IllegalArgumentException success){}
612 dl 1.1 }
613    
614 dl 1.6 /**
615     * Constructor throws if corePoolSize is greater than the maximumPoolSize
616     */
617 dl 1.1 public void testConstructor15() {
618 dl 1.5 try {
619 dl 1.8 new ThreadPoolExecutor(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new NoOpREHandler());
620 dl 1.5 shouldThrow();
621 dl 1.1 }
622 dl 1.3 catch (IllegalArgumentException success){}
623 dl 1.1 }
624    
625 dl 1.6 /**
626     * Constructor throws if workQueue is set to null
627     */
628 dl 1.8 public void testConstructorNullPointerException4() {
629 dl 1.5 try {
630 dl 1.8 new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null,new NoOpREHandler());
631 dl 1.5 shouldThrow();
632 dl 1.1 }
633 dl 1.3 catch (NullPointerException success){}
634 dl 1.1 }
635    
636 dl 1.6 /**
637     * Constructor throws if handler is set to null
638     */
639 dl 1.8 public void testConstructorNullPointerException5() {
640 dl 1.5 try {
641 dl 1.1 RejectedExecutionHandler r = null;
642 dl 1.8 new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(10),r);
643 dl 1.5 shouldThrow();
644 dl 1.1 }
645 dl 1.3 catch (NullPointerException success){}
646 dl 1.1 }
647    
648    
649 dl 1.6 /**
650     * Constructor throws if corePoolSize argument is less than zero
651     */
652 dl 1.1 public void testConstructor16() {
653 dl 1.5 try {
654 dl 1.8 new ThreadPoolExecutor(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory(),new NoOpREHandler());
655 dl 1.5 shouldThrow();
656 dl 1.1 }
657 dl 1.3 catch (IllegalArgumentException success){}
658 dl 1.1 }
659    
660 dl 1.6 /**
661     * Constructor throws if maximumPoolSize is less than zero
662     */
663 dl 1.1 public void testConstructor17() {
664 dl 1.5 try {
665 dl 1.8 new ThreadPoolExecutor(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory(),new NoOpREHandler());
666 dl 1.5 shouldThrow();
667 dl 1.1 }
668 dl 1.3 catch (IllegalArgumentException success){}
669 dl 1.1 }
670    
671 dl 1.6 /**
672     * Constructor throws if maximumPoolSize is equal to zero
673     */
674 dl 1.1 public void testConstructor18() {
675 dl 1.5 try {
676 dl 1.8 new ThreadPoolExecutor(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory(),new NoOpREHandler());
677 dl 1.5 shouldThrow();
678 dl 1.1 }
679 dl 1.3 catch (IllegalArgumentException success){}
680 dl 1.1 }
681    
682 dl 1.6 /**
683     * Constructor throws if keepAliveTime is less than zero
684     */
685 dl 1.1 public void testConstructor19() {
686 dl 1.5 try {
687 dl 1.7 new ThreadPoolExecutor(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory(),new NoOpREHandler());
688 dl 1.5 shouldThrow();
689 dl 1.1 }
690 dl 1.3 catch (IllegalArgumentException success){}
691 dl 1.1 }
692    
693 dl 1.6 /**
694     * Constructor throws if corePoolSize is greater than the maximumPoolSize
695     */
696 dl 1.1 public void testConstructor20() {
697 dl 1.5 try {
698 dl 1.8 new ThreadPoolExecutor(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory(),new NoOpREHandler());
699 dl 1.5 shouldThrow();
700 dl 1.1 }
701 dl 1.3 catch (IllegalArgumentException success){}
702 dl 1.1 }
703    
704 dl 1.6 /**
705     * Constructor throws if workQueue is set to null
706     */
707 dl 1.8 public void testConstructorNullPointerException6() {
708 dl 1.5 try {
709 dl 1.8 new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null,new SimpleThreadFactory(),new NoOpREHandler());
710 dl 1.5 shouldThrow();
711 dl 1.1 }
712 dl 1.3 catch (NullPointerException success){}
713 dl 1.1 }
714    
715 dl 1.6 /**
716     * Constructor throws if handler is set to null
717     */
718 dl 1.8 public void testConstructorNullPointerException7() {
719 dl 1.5 try {
720 dl 1.1 RejectedExecutionHandler r = null;
721 dl 1.8 new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(10),new SimpleThreadFactory(),r);
722 dl 1.5 shouldThrow();
723 dl 1.1 }
724 dl 1.3 catch (NullPointerException success){}
725 dl 1.1 }
726    
727 dl 1.6 /**
728     * Constructor throws if ThreadFactory is set top null
729     */
730 dl 1.8 public void testConstructorNullPointerException8() {
731 dl 1.5 try {
732 dl 1.1 ThreadFactory f = null;
733 dl 1.8 new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(10),f,new NoOpREHandler());
734 dl 1.5 shouldThrow();
735 dl 1.1 }
736 dl 1.3 catch (NullPointerException successdn8){}
737 dl 1.1 }
738    
739    
740     /**
741 dl 1.8 * execute throws RejectedExecutionException
742     * if saturated.
743     */
744     public void testSaturatedExecute() {
745     ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1));
746     try {
747    
748     for(int i = 0; i < 5; ++i){
749     p.execute(new MediumRunnable());
750     }
751     shouldThrow();
752     } catch(RejectedExecutionException success){}
753     joinPool(p);
754     }
755    
756     /**
757     * executor using CallerRunsPolicy runs task if saturated.
758     */
759     public void testSaturatedExecute2() {
760     RejectedExecutionHandler h = new ThreadPoolExecutor.CallerRunsPolicy();
761     ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1), h);
762     try {
763    
764     TrackedNoOpRunnable[] tasks = new TrackedNoOpRunnable[5];
765     for(int i = 0; i < 5; ++i){
766     tasks[i] = new TrackedNoOpRunnable();
767     }
768     TrackedLongRunnable mr = new TrackedLongRunnable();
769     p.execute(mr);
770     for(int i = 0; i < 5; ++i){
771     p.execute(tasks[i]);
772     }
773     for(int i = 1; i < 5; ++i) {
774     assertTrue(tasks[i].done);
775     }
776     p.shutdownNow();
777     } catch(RejectedExecutionException ex){
778     unexpectedException();
779     } finally {
780     joinPool(p);
781     }
782     }
783    
784     /**
785     * executor using DiscardPolicy drops task if saturated.
786     */
787     public void testSaturatedExecute3() {
788     RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardPolicy();
789     ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1), h);
790     try {
791    
792     TrackedNoOpRunnable[] tasks = new TrackedNoOpRunnable[5];
793     for(int i = 0; i < 5; ++i){
794     tasks[i] = new TrackedNoOpRunnable();
795     }
796     p.execute(new TrackedLongRunnable());
797     for(int i = 0; i < 5; ++i){
798     p.execute(tasks[i]);
799     }
800     for(int i = 0; i < 5; ++i){
801     assertFalse(tasks[i].done);
802     }
803     p.shutdownNow();
804     } catch(RejectedExecutionException ex){
805     unexpectedException();
806     } finally {
807     joinPool(p);
808     }
809     }
810    
811     /**
812     * executor using DiscardOldestPolicy drops oldest task if saturated.
813     */
814     public void testSaturatedExecute4() {
815     RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardOldestPolicy();
816     ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1), h);
817     try {
818     p.execute(new TrackedLongRunnable());
819     TrackedLongRunnable r2 = new TrackedLongRunnable();
820     p.execute(r2);
821     assertTrue(p.getQueue().contains(r2));
822     TrackedNoOpRunnable r3 = new TrackedNoOpRunnable();
823     p.execute(r3);
824     assertFalse(p.getQueue().contains(r2));
825     assertTrue(p.getQueue().contains(r3));
826     p.shutdownNow();
827     } catch(RejectedExecutionException ex){
828     unexpectedException();
829     } finally {
830     joinPool(p);
831     }
832     }
833    
834     /**
835 dl 1.6 * execute throws RejectedExecutionException if shutdown
836 dl 1.1 */
837 dl 1.8 public void testRejectedExecutionExceptionOnShutdown() {
838     ThreadPoolExecutor tpe =
839     new ThreadPoolExecutor(1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(1));
840 dl 1.1 tpe.shutdown();
841 dl 1.5 try {
842 dl 1.3 tpe.execute(new NoOpRunnable());
843 dl 1.5 shouldThrow();
844 dl 1.2 } catch(RejectedExecutionException success){}
845 dl 1.1
846 dl 1.3 joinPool(tpe);
847 dl 1.1 }
848 dl 1.6
849     /**
850 dl 1.8 * execute using CallerRunsPolicy drops task on shutdown
851     */
852     public void testCallerRunsOnShutdown() {
853     RejectedExecutionHandler h = new ThreadPoolExecutor.CallerRunsPolicy();
854     ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1), h);
855    
856     p.shutdown();
857     try {
858     TrackedNoOpRunnable r = new TrackedNoOpRunnable();
859     p.execute(r);
860     assertFalse(r.done);
861     } catch(RejectedExecutionException success){
862     unexpectedException();
863     } finally {
864     joinPool(p);
865     }
866     }
867    
868     /**
869     * execute using DiscardPolicy drops task on shutdown
870     */
871     public void testDiscardOnShutdown() {
872     RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardPolicy();
873     ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1), h);
874    
875     p.shutdown();
876     try {
877     TrackedNoOpRunnable r = new TrackedNoOpRunnable();
878     p.execute(r);
879     assertFalse(r.done);
880     } catch(RejectedExecutionException success){
881     unexpectedException();
882     } finally {
883     joinPool(p);
884     }
885     }
886    
887    
888     /**
889     * execute using DiscardOldestPolicy drops task on shutdown
890 dl 1.6 */
891 dl 1.8 public void testDiscardOldestOnShutdown() {
892     RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardOldestPolicy();
893     ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1), h);
894    
895     p.shutdown();
896     try {
897     TrackedNoOpRunnable r = new TrackedNoOpRunnable();
898     p.execute(r);
899     assertFalse(r.done);
900     } catch(RejectedExecutionException success){
901     unexpectedException();
902     } finally {
903     joinPool(p);
904     }
905 dl 1.6 }
906    
907 dl 1.8
908 dl 1.6 /**
909     * execute (null) throws NPE
910     */
911     public void testExecuteNull() {
912     ThreadPoolExecutor tpe = null;
913     try {
914 dl 1.8 tpe = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(10));
915 dl 1.6 tpe.execute(null);
916     shouldThrow();
917     } catch(NullPointerException success){}
918    
919     joinPool(tpe);
920     }
921 dl 1.1
922     /**
923 dl 1.8 * setCorePoolSize of negative value throws IllegalArgumentException
924 dl 1.1 */
925 dl 1.5 public void testCorePoolSizeIllegalArgumentException() {
926 dl 1.1 ThreadPoolExecutor tpe = null;
927 dl 1.5 try {
928 dl 1.8 tpe = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(10));
929 dl 1.2 } catch(Exception e){}
930 dl 1.5 try {
931 dl 1.1 tpe.setCorePoolSize(-1);
932 dl 1.5 shouldThrow();
933 dl 1.2 } catch(IllegalArgumentException success){
934 dl 1.1 } finally {
935     tpe.shutdown();
936     }
937 dl 1.3 joinPool(tpe);
938 dl 1.1 }
939    
940     /**
941 dl 1.6 * setMaximumPoolSize(int) throws IllegalArgumentException if
942     * given a value less the core pool size
943 dl 1.1 */
944 dl 1.5 public void testMaximumPoolSizeIllegalArgumentException() {
945 dl 1.1 ThreadPoolExecutor tpe = null;
946 dl 1.5 try {
947 dl 1.8 tpe = new ThreadPoolExecutor(2,3,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(10));
948 dl 1.2 } catch(Exception e){}
949 dl 1.5 try {
950 dl 1.1 tpe.setMaximumPoolSize(1);
951 dl 1.5 shouldThrow();
952 dl 1.2 } catch(IllegalArgumentException success){
953 dl 1.1 } finally {
954     tpe.shutdown();
955     }
956 dl 1.3 joinPool(tpe);
957 dl 1.1 }
958    
959     /**
960 dl 1.6 * setMaximumPoolSize throws IllegalArgumentException
961     * if given a negative value
962 dl 1.1 */
963 dl 1.5 public void testMaximumPoolSizeIllegalArgumentException2() {
964 dl 1.1 ThreadPoolExecutor tpe = null;
965 dl 1.5 try {
966 dl 1.8 tpe = new ThreadPoolExecutor(2,3,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(10));
967 dl 1.2 } catch(Exception e){}
968 dl 1.5 try {
969 dl 1.1 tpe.setMaximumPoolSize(-1);
970 dl 1.5 shouldThrow();
971 dl 1.2 } catch(IllegalArgumentException success){
972 dl 1.1 } finally {
973     tpe.shutdown();
974     }
975 dl 1.3 joinPool(tpe);
976 dl 1.1 }
977    
978    
979     /**
980 dl 1.6 * setKeepAliveTime throws IllegalArgumentException
981 dl 1.1 * when given a negative value
982     */
983 dl 1.5 public void testKeepAliveTimeIllegalArgumentException() {
984 dl 1.1 ThreadPoolExecutor tpe = null;
985 dl 1.5 try {
986 dl 1.8 tpe = new ThreadPoolExecutor(2,3,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(10));
987 dl 1.2 } catch(Exception e){}
988 dl 1.1
989 dl 1.5 try {
990 dl 1.1 tpe.setKeepAliveTime(-1,TimeUnit.MILLISECONDS);
991 dl 1.5 shouldThrow();
992 dl 1.2 } catch(IllegalArgumentException success){
993 dl 1.1 } finally {
994     tpe.shutdown();
995     }
996 dl 1.3 joinPool(tpe);
997 dl 1.1 }
998 dl 1.8
999     /**
1000     * terminated() is called on termination
1001     */
1002     public void testTerminated() {
1003     ExtendedTPE tpe = new ExtendedTPE();
1004     tpe.shutdown();
1005     assertTrue(tpe.terminatedCalled);
1006     joinPool(tpe);
1007     }
1008    
1009     /**
1010     * beforeExecute and afterExecute are called when executing task
1011     */
1012     public void testBeforeAfter() {
1013     ExtendedTPE tpe = new ExtendedTPE();
1014     try {
1015     TrackedNoOpRunnable r = new TrackedNoOpRunnable();
1016     tpe.execute(r);
1017     Thread.sleep(SHORT_DELAY_MS);
1018     assertTrue(r.done);
1019     assertTrue(tpe.beforeCalled);
1020     assertTrue(tpe.afterCalled);
1021     tpe.shutdown();
1022     }
1023     catch(Exception ex) {
1024     unexpectedException();
1025     } finally {
1026     joinPool(tpe);
1027     }
1028     }
1029 dl 1.12
1030     /**
1031     * completed submit of callable returns result
1032     */
1033     public void testSubmitCallable() {
1034     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1035     try {
1036     Future<String> future = e.submit(new StringTask());
1037     String result = future.get();
1038     assertSame(TEST_STRING, result);
1039     }
1040     catch (ExecutionException ex) {
1041     unexpectedException();
1042     }
1043     catch (InterruptedException ex) {
1044     unexpectedException();
1045     } finally {
1046     joinPool(e);
1047     }
1048     }
1049    
1050     /**
1051     * completed submit of runnable returns successfully
1052     */
1053     public void testSubmitRunnable() {
1054     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1055     try {
1056     Future<?> future = e.submit(new NoOpRunnable());
1057     future.get();
1058     assertTrue(future.isDone());
1059     }
1060     catch (ExecutionException ex) {
1061     unexpectedException();
1062     }
1063     catch (InterruptedException ex) {
1064     unexpectedException();
1065     } finally {
1066     joinPool(e);
1067     }
1068     }
1069    
1070     /**
1071     * completed submit of (runnable, result) returns result
1072     */
1073     public void testSubmitRunnable2() {
1074     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1075     try {
1076     Future<String> future = e.submit(new NoOpRunnable(), TEST_STRING);
1077     String result = future.get();
1078     assertSame(TEST_STRING, result);
1079     }
1080     catch (ExecutionException ex) {
1081     unexpectedException();
1082     }
1083     catch (InterruptedException ex) {
1084     unexpectedException();
1085     } finally {
1086     joinPool(e);
1087     }
1088     }
1089    
1090    
1091    
1092    
1093    
1094     /**
1095     * invokeAny(null) throws NPE
1096     */
1097     public void testInvokeAny1() {
1098     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1099     try {
1100     e.invokeAny(null);
1101     } catch (NullPointerException success) {
1102     } catch(Exception ex) {
1103     unexpectedException();
1104     } finally {
1105     joinPool(e);
1106     }
1107     }
1108    
1109     /**
1110     * invokeAny(empty collection) throws IAE
1111     */
1112     public void testInvokeAny2() {
1113     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1114     try {
1115     e.invokeAny(new ArrayList<Callable<String>>());
1116     } catch (IllegalArgumentException success) {
1117     } catch(Exception ex) {
1118     unexpectedException();
1119     } finally {
1120     joinPool(e);
1121     }
1122     }
1123    
1124     /**
1125     * invokeAny(c) throws NPE if c has null elements
1126     */
1127     public void testInvokeAny3() {
1128     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1129     try {
1130     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1131     l.add(new StringTask());
1132     l.add(null);
1133     e.invokeAny(l);
1134     } catch (NullPointerException success) {
1135     } catch(Exception ex) {
1136     unexpectedException();
1137     } finally {
1138     joinPool(e);
1139     }
1140     }
1141    
1142     /**
1143     * invokeAny(c) throws ExecutionException if no task completes
1144     */
1145     public void testInvokeAny4() {
1146     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1147     try {
1148     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1149     l.add(new NPETask());
1150     e.invokeAny(l);
1151     } catch (ExecutionException success) {
1152     } catch(Exception ex) {
1153     unexpectedException();
1154     } finally {
1155     joinPool(e);
1156     }
1157     }
1158    
1159     /**
1160     * invokeAny(c) returns result of some task
1161     */
1162     public void testInvokeAny5() {
1163     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1164     try {
1165     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1166     l.add(new StringTask());
1167     l.add(new StringTask());
1168     String result = e.invokeAny(l);
1169     assertSame(TEST_STRING, result);
1170     } catch (ExecutionException success) {
1171     } catch(Exception ex) {
1172     unexpectedException();
1173     } finally {
1174     joinPool(e);
1175     }
1176     }
1177    
1178     /**
1179     * invokeAll(null) throws NPE
1180     */
1181     public void testInvokeAll1() {
1182     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1183     try {
1184     e.invokeAll(null);
1185     } catch (NullPointerException success) {
1186     } catch(Exception ex) {
1187     unexpectedException();
1188     } finally {
1189     joinPool(e);
1190     }
1191     }
1192    
1193     /**
1194     * invokeAll(empty collection) returns empty collection
1195     */
1196     public void testInvokeAll2() {
1197     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1198     try {
1199     List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>());
1200     assertTrue(r.isEmpty());
1201     } catch(Exception ex) {
1202     unexpectedException();
1203     } finally {
1204     joinPool(e);
1205     }
1206     }
1207    
1208     /**
1209     * invokeAll(c) throws NPE if c has null elements
1210     */
1211     public void testInvokeAll3() {
1212     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1213     try {
1214     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1215     l.add(new StringTask());
1216     l.add(null);
1217     e.invokeAll(l);
1218     } catch (NullPointerException success) {
1219     } catch(Exception ex) {
1220     unexpectedException();
1221     } finally {
1222     joinPool(e);
1223     }
1224     }
1225    
1226     /**
1227     * get of element of invokeAll(c) throws exception on failed task
1228     */
1229     public void testInvokeAll4() {
1230     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1231     try {
1232     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1233     l.add(new NPETask());
1234     List<Future<String>> result = e.invokeAll(l);
1235     assertEquals(1, result.size());
1236     for (Iterator<Future<String>> it = result.iterator(); it.hasNext();)
1237     it.next().get();
1238     } catch(ExecutionException success) {
1239     } catch(Exception ex) {
1240     unexpectedException();
1241     } finally {
1242     joinPool(e);
1243     }
1244     }
1245    
1246     /**
1247     * invokeAll(c) returns results of all completed tasks
1248     */
1249     public void testInvokeAll5() {
1250     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1251     try {
1252     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1253     l.add(new StringTask());
1254     l.add(new StringTask());
1255     List<Future<String>> result = e.invokeAll(l);
1256     assertEquals(2, result.size());
1257     for (Iterator<Future<String>> it = result.iterator(); it.hasNext();)
1258     assertSame(TEST_STRING, it.next().get());
1259     } catch (ExecutionException success) {
1260     } catch(Exception ex) {
1261     unexpectedException();
1262     } finally {
1263     joinPool(e);
1264     }
1265     }
1266    
1267    
1268 dl 1.13
1269     /**
1270     * timed invokeAny(null) throws NPE
1271     */
1272     public void testTimedInvokeAny1() {
1273     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1274     try {
1275     e.invokeAny(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1276     } catch (NullPointerException success) {
1277     } catch(Exception ex) {
1278     unexpectedException();
1279     } finally {
1280     joinPool(e);
1281     }
1282     }
1283    
1284     /**
1285     * timed invokeAny(,,null) throws NPE
1286     */
1287     public void testTimedInvokeAnyNullTimeUnit() {
1288     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1289     try {
1290     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1291     l.add(new StringTask());
1292     e.invokeAny(l, MEDIUM_DELAY_MS, null);
1293     } catch (NullPointerException success) {
1294     } catch(Exception ex) {
1295     unexpectedException();
1296     } finally {
1297     joinPool(e);
1298     }
1299     }
1300    
1301     /**
1302     * timed invokeAny(empty collection) throws IAE
1303     */
1304     public void testTimedInvokeAny2() {
1305     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1306     try {
1307     e.invokeAny(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1308     } catch (IllegalArgumentException success) {
1309     } catch(Exception ex) {
1310     unexpectedException();
1311     } finally {
1312     joinPool(e);
1313     }
1314     }
1315    
1316     /**
1317     * timed invokeAny(c) throws NPE if c has null elements
1318     */
1319     public void testTimedInvokeAny3() {
1320     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1321     try {
1322     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1323     l.add(new StringTask());
1324     l.add(null);
1325     e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1326     } catch (NullPointerException success) {
1327     } catch(Exception ex) {
1328     ex.printStackTrace();
1329     unexpectedException();
1330     } finally {
1331     joinPool(e);
1332     }
1333     }
1334    
1335     /**
1336     * timed invokeAny(c) throws ExecutionException if no task completes
1337     */
1338     public void testTimedInvokeAny4() {
1339     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1340     try {
1341     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1342     l.add(new NPETask());
1343     e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1344     } catch(ExecutionException success) {
1345     } catch(Exception ex) {
1346     unexpectedException();
1347     } finally {
1348     joinPool(e);
1349     }
1350     }
1351    
1352     /**
1353     * timed invokeAny(c) returns result of some task
1354     */
1355     public void testTimedInvokeAny5() {
1356     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1357     try {
1358     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1359     l.add(new StringTask());
1360     l.add(new StringTask());
1361     String result = e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1362     assertSame(TEST_STRING, result);
1363     } catch (ExecutionException success) {
1364     } catch(Exception ex) {
1365     unexpectedException();
1366     } finally {
1367     joinPool(e);
1368     }
1369     }
1370    
1371     /**
1372     * timed invokeAll(null) throws NPE
1373     */
1374     public void testTimedInvokeAll1() {
1375     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1376     try {
1377     e.invokeAll(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1378     } catch (NullPointerException success) {
1379     } catch(Exception ex) {
1380     unexpectedException();
1381     } finally {
1382     joinPool(e);
1383     }
1384     }
1385    
1386     /**
1387     * timed invokeAll(,,null) throws NPE
1388     */
1389     public void testTimedInvokeAllNullTimeUnit() {
1390     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1391     try {
1392     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1393     l.add(new StringTask());
1394     e.invokeAll(l, MEDIUM_DELAY_MS, null);
1395     } catch (NullPointerException success) {
1396     } catch(Exception ex) {
1397     unexpectedException();
1398     } finally {
1399     joinPool(e);
1400     }
1401     }
1402    
1403     /**
1404     * timed invokeAll(empty collection) returns empty collection
1405     */
1406     public void testTimedInvokeAll2() {
1407     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1408     try {
1409     List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1410     assertTrue(r.isEmpty());
1411     } catch(Exception ex) {
1412     unexpectedException();
1413     } finally {
1414     joinPool(e);
1415     }
1416     }
1417    
1418     /**
1419     * timed invokeAll(c) throws NPE if c has null elements
1420     */
1421     public void testTimedInvokeAll3() {
1422     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1423     try {
1424     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1425     l.add(new StringTask());
1426     l.add(null);
1427     e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1428     } catch (NullPointerException success) {
1429     } catch(Exception ex) {
1430     unexpectedException();
1431     } finally {
1432     joinPool(e);
1433     }
1434     }
1435    
1436     /**
1437     * get of element of invokeAll(c) throws exception on failed task
1438     */
1439     public void testTimedInvokeAll4() {
1440     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1441     try {
1442     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1443     l.add(new NPETask());
1444     List<Future<String>> result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1445     assertEquals(1, result.size());
1446     for (Iterator<Future<String>> it = result.iterator(); it.hasNext();)
1447     it.next().get();
1448     } catch(ExecutionException success) {
1449     } catch(Exception ex) {
1450     unexpectedException();
1451     } finally {
1452     joinPool(e);
1453     }
1454     }
1455    
1456     /**
1457     * timed invokeAll(c) returns results of all completed tasks
1458     */
1459     public void testTimedInvokeAll5() {
1460     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1461     try {
1462     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1463     l.add(new StringTask());
1464     l.add(new StringTask());
1465     List<Future<String>> result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
1466     assertEquals(2, result.size());
1467     for (Iterator<Future<String>> it = result.iterator(); it.hasNext();)
1468     assertSame(TEST_STRING, it.next().get());
1469     } catch (ExecutionException success) {
1470     } catch(Exception ex) {
1471     unexpectedException();
1472     } finally {
1473     joinPool(e);
1474     }
1475     }
1476    
1477     /**
1478     * timed invokeAll(c) cancels tasks not completed by timeout
1479     */
1480     public void testTimedInvokeAll6() {
1481     ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
1482     try {
1483     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
1484     l.add(new StringTask());
1485 dl 1.14 l.add(Executors.callable(new MediumPossiblyInterruptedRunnable(), TEST_STRING));
1486 dl 1.13 List<Future<String>> result = e.invokeAll(l, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
1487     assertEquals(2, result.size());
1488     Iterator<Future<String>> it = result.iterator();
1489     Future<String> f1 = it.next();
1490     Future<String> f2 = it.next();
1491     assertTrue(f1.isDone());
1492     assertFalse(f1.isCancelled());
1493     assertTrue(f2.isDone());
1494     assertTrue(f2.isCancelled());
1495     } catch(Exception ex) {
1496     unexpectedException();
1497     } finally {
1498     joinPool(e);
1499     }
1500     }
1501    
1502    
1503 dl 1.1 }