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

Comparing jsr166/src/test/tck/ExecutorsTest.java (file contents):
Revision 1.17 by dl, Mon Apr 3 15:00:59 2006 UTC vs.
Revision 1.23 by jsr166, Thu Nov 19 03:55:29 2009 UTC

# Line 2 | Line 2
2   * 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.
5 > * Other contributors include Andrew Wright, Jeffrey Hayes,
6 > * Pat Fisher, Mike Judd.
7   */
8  
9  
# Line 13 | Line 13 | import java.util.concurrent.*;
13   import java.math.BigInteger;
14   import java.security.*;
15  
16 < public class ExecutorsTest extends JSR166TestCase{
16 > public class ExecutorsTest extends JSR166TestCase {
17      public static void main(String[] args) {
18 <        junit.textui.TestRunner.run (suite());  
18 >        junit.textui.TestRunner.run (suite());
19      }
20      public static Test suite() {
21          return new TestSuite(ExecutorsTest.class);
# Line 25 | Line 25 | public class ExecutorsTest extends JSR16
25          private final ExecutorService exec;
26          private final Callable<T> func;
27          private final long msecs;
28 <        
28 >
29          TimedCallable(ExecutorService exec, Callable<T> func, long msecs) {
30              this.exec = exec;
31              this.func = func;
32              this.msecs = msecs;
33          }
34 <        
34 >
35          public T call() throws Exception {
36              Future<T> ftask = exec.submit(func);
37              try {
# Line 90 | Line 90 | public class ExecutorsTest extends JSR16
90          try {
91              ExecutorService e = Executors.newCachedThreadPool(null);
92              shouldThrow();
93 <        }
94 <        catch(NullPointerException success) {
95 <        }
93 >        } catch (NullPointerException success) {}
94      }
95  
96  
# Line 125 | Line 123 | public class ExecutorsTest extends JSR16
123          try {
124              ExecutorService e = Executors.newSingleThreadExecutor(null);
125              shouldThrow();
126 <        }
129 <        catch(NullPointerException success) {
130 <        }
126 >        } catch (NullPointerException success) {}
127      }
128  
129      /**
# Line 137 | Line 133 | public class ExecutorsTest extends JSR16
133          ExecutorService e = Executors.newSingleThreadExecutor();
134          try {
135              ThreadPoolExecutor tpe = (ThreadPoolExecutor)e;
136 +            shouldThrow();
137          } catch (ClassCastException success) {
138          } finally {
139              joinPool(e);
# Line 173 | Line 170 | public class ExecutorsTest extends JSR16
170          try {
171              ExecutorService e = Executors.newFixedThreadPool(2, null);
172              shouldThrow();
173 <        }
177 <        catch(NullPointerException success) {
178 <        }
173 >        } catch (NullPointerException success) {}
174      }
175  
176      /**
# Line 185 | Line 180 | public class ExecutorsTest extends JSR16
180          try {
181              ExecutorService e = Executors.newFixedThreadPool(0);
182              shouldThrow();
183 <        }
189 <        catch(IllegalArgumentException success) {
190 <        }
183 >        } catch (IllegalArgumentException success) {}
184      }
185  
186  
# Line 208 | Line 201 | public class ExecutorsTest extends JSR16
201      public void testunconfigurableExecutorServiceNPE() {
202          try {
203              ExecutorService e = Executors.unconfigurableExecutorService(null);
204 <        }
205 <        catch (NullPointerException success) {
213 <        }
204 >            shouldThrow();
205 >        } catch (NullPointerException success) {}
206      }
207  
208      /**
# Line 219 | Line 211 | public class ExecutorsTest extends JSR16
211      public void testunconfigurableScheduledExecutorServiceNPE() {
212          try {
213              ExecutorService e = Executors.unconfigurableScheduledExecutorService(null);
214 <        }
215 <        catch (NullPointerException success) {
224 <        }
214 >            shouldThrow();
215 >        } catch (NullPointerException success) {}
216      }
217  
218  
219      /**
220       * a newSingleThreadScheduledExecutor successfully runs delayed task
221       */
222 <    public void testNewSingleThreadScheduledExecutor() {
222 >    public void testNewSingleThreadScheduledExecutor() throws Exception {
223          try {
224              TrackedCallable callable = new TrackedCallable();
225              ScheduledExecutorService p1 = Executors.newSingleThreadScheduledExecutor();
# Line 238 | Line 229 | public class ExecutorsTest extends JSR16
229              assertTrue(callable.done);
230              assertEquals(Boolean.TRUE, f.get());
231              joinPool(p1);
232 <        } catch(RejectedExecutionException e){}
242 <        catch(Exception e){
243 <            e.printStackTrace();
244 <            unexpectedException();
245 <        }
232 >        } catch (RejectedExecutionException e) {}
233      }
234  
235      /**
236       * a newScheduledThreadPool successfully runs delayed task
237       */
238 <    public void testnewScheduledThreadPool() {
238 >    public void testnewScheduledThreadPool() throws Exception {
239          try {
240              TrackedCallable callable = new TrackedCallable();
241              ScheduledExecutorService p1 = Executors.newScheduledThreadPool(2);
# Line 258 | Line 245 | public class ExecutorsTest extends JSR16
245              assertTrue(callable.done);
246              assertEquals(Boolean.TRUE, f.get());
247              joinPool(p1);
248 <        } catch(RejectedExecutionException e){}
262 <        catch(Exception e){
263 <            e.printStackTrace();
264 <            unexpectedException();
265 <        }
248 >        } catch (RejectedExecutionException e) {}
249      }
250  
251      /**
252       * an unconfigurable  newScheduledThreadPool successfully runs delayed task
253       */
254 <    public void testunconfigurableScheduledExecutorService() {
254 >    public void testunconfigurableScheduledExecutorService() throws Exception {
255          try {
256              TrackedCallable callable = new TrackedCallable();
257              ScheduledExecutorService p1 = Executors.unconfigurableScheduledExecutorService(Executors.newScheduledThreadPool(2));
# Line 278 | Line 261 | public class ExecutorsTest extends JSR16
261              assertTrue(callable.done);
262              assertEquals(Boolean.TRUE, f.get());
263              joinPool(p1);
264 <        } catch(RejectedExecutionException e){}
282 <        catch(Exception e){
283 <            e.printStackTrace();
284 <            unexpectedException();
285 <        }
264 >        } catch (RejectedExecutionException e) {}
265      }
266  
267      /**
268       *  timeouts from execute will time out if they compute too long.
269       */
270 <    public void testTimedCallable() {
270 >    public void testTimedCallable() throws Exception {
271          int N = 10000;
272          ExecutorService executor = Executors.newSingleThreadExecutor();
273          List<Callable<BigInteger>> tasks = new ArrayList<Callable<BigInteger>>(N);
274          try {
275              long startTime = System.currentTimeMillis();
276 <            
276 >
277              long i = 0;
278              while (tasks.size() < N) {
279                  tasks.add(new TimedCallable<BigInteger>(executor, new Fib(i), 1));
280                  i += 10;
281              }
282 <            
282 >
283              int iters = 0;
284              BigInteger sum = BigInteger.ZERO;
285              for (Iterator<Callable<BigInteger>> it = tasks.iterator(); it.hasNext();) {
# Line 312 | Line 291 | public class ExecutorsTest extends JSR16
291                      assertTrue(iters > 0);
292                      return;
293                  }
315                catch (Exception e) {
316                    unexpectedException();
317                }
294              }
295              // if by chance we didn't ever time out, total time must be small
296              long elapsed = System.currentTimeMillis() - startTime;
# Line 325 | Line 301 | public class ExecutorsTest extends JSR16
301          }
302      }
303  
304 <    
304 >
305      /**
306       * ThreadPoolExecutor using defaultThreadFactory has
307       * specified group, priority, daemon status, and name
308       */
309 <    public void testDefaultThreadFactory() {
309 >    public void testDefaultThreadFactory() throws Exception {
310          final ThreadGroup egroup = Thread.currentThread().getThreadGroup();
311          Runnable r = new Runnable() {
312                  public void run() {
# Line 352 | Line 328 | public class ExecutorsTest extends JSR16
328                  }
329              };
330          ExecutorService e = Executors.newSingleThreadExecutor(Executors.defaultThreadFactory());
331 <        
331 >
332          e.execute(r);
333          try {
334              e.shutdown();
335 <        } catch(SecurityException ok) {
335 >        } catch (SecurityException ok) {
336          }
337 <        
337 >
338          try {
339              Thread.sleep(SHORT_DELAY_MS);
364        } catch (Exception eX) {
365            unexpectedException();
340          } finally {
341              joinPool(e);
342          }
# Line 373 | Line 347 | public class ExecutorsTest extends JSR16
347       * specified group, priority, daemon status, name,
348       * access control context and context class loader
349       */
350 <    public void testPrivilegedThreadFactory() {
350 >    public void testPrivilegedThreadFactory() throws Exception {
351          Policy savedPolicy = null;
352          try {
353              savedPolicy = Policy.getPolicy();
# Line 403 | Line 377 | public class ExecutorsTest extends JSR16
377                          threadAssertTrue(name.endsWith("thread-1"));
378                          threadAssertTrue(thisccl == current.getContextClassLoader());
379                          threadAssertTrue(thisacc.equals(AccessController.getContext()));
380 <                    } catch(SecurityException ok) {
380 >                    } catch (SecurityException ok) {
381                          // Also pass if not allowed to change settings
382                      }
383                  }
384              };
385          ExecutorService e = Executors.newSingleThreadExecutor(Executors.privilegedThreadFactory());
386 <        
386 >
387          Policy.setPolicy(savedPolicy);
388          e.execute(r);
389          try {
390              e.shutdown();
391 <        } catch(SecurityException ok) {
391 >        } catch (SecurityException ok) {
392          }
393          try {
394              Thread.sleep(SHORT_DELAY_MS);
421        } catch (Exception ex) {
422            unexpectedException();
395          } finally {
396              joinPool(e);
397          }
# Line 427 | Line 399 | public class ExecutorsTest extends JSR16
399      }
400  
401      void checkCCL() {
402 <            AccessController.getContext().checkPermission(new RuntimePermission("getContextClassLoader"));
402 >        SecurityManager sm = System.getSecurityManager();
403 >        if (sm != null) {
404 >            sm.checkPermission(new RuntimePermission("setContextClassLoader"));
405 >            sm.checkPermission(new RuntimePermission("getClassLoader"));
406 >        }
407      }
408  
409      class CheckCCL implements Callable<Object> {
# Line 458 | Line 434 | public class ExecutorsTest extends JSR16
434              // too many privileges to test; so return
435              Policy.setPolicy(savedPolicy);
436              return;
437 <        } catch(AccessControlException ok) {
438 <        }
437 >        } catch (AccessControlException ok) {
438 >        }
439  
440          try {
441              Callable task = Executors.privilegedCallableUsingCurrentClassLoader(new NoOpCallable());
442              shouldThrow();
443 <        } catch(AccessControlException success) {
444 <        } catch(Exception ex) {
469 <            unexpectedException();
470 <        }
471 <        finally {
443 >        } catch (AccessControlException success) {
444 >        } finally {
445              Policy.setPolicy(savedPolicy);
446          }
447      }
# Line 477 | Line 450 | public class ExecutorsTest extends JSR16
450       * With class loader permissions, calling
451       * privilegedCallableUsingCurrentClassLoader does not throw ACE
452       */
453 <    public void testprivilegedCallableUsingCCLWithPrivs() {
453 >    public void testprivilegedCallableUsingCCLWithPrivs() throws Exception {
454          Policy savedPolicy = null;
455          try {
456              savedPolicy = Policy.getPolicy();
# Line 488 | Line 461 | public class ExecutorsTest extends JSR16
461          } catch (AccessControlException ok) {
462              return;
463          }
464 <            
464 >
465          try {
466              Callable task = Executors.privilegedCallableUsingCurrentClassLoader(new NoOpCallable());
467              task.call();
468 <        } catch(Exception ex) {
496 <            unexpectedException();
497 <        }
468 >        }
469          finally {
470              Policy.setPolicy(savedPolicy);
471          }
# Line 503 | Line 474 | public class ExecutorsTest extends JSR16
474      /**
475       * Without permissions, calling privilegedCallable throws ACE
476       */
477 <    public void testprivilegedCallableWithNoPrivs() {
477 >    public void testprivilegedCallableWithNoPrivs() throws Exception {
478          Callable task;
479          Policy savedPolicy = null;
480          AdjustablePolicy policy = null;
# Line 519 | Line 490 | public class ExecutorsTest extends JSR16
490              return; // program has too few permissions to set up test
491          }
492  
493 <        // Make sure that program doesn't have too many permissions
493 >        // Make sure that program doesn't have too many permissions
494          try {
495              AccessController.doPrivileged(new PrivilegedAction() {
496                      public Object run() {
# Line 528 | Line 499 | public class ExecutorsTest extends JSR16
499                      }}, noprivAcc);
500              // too many permssions; skip test
501              return;
502 <        } catch(AccessControlException ok) {
502 >        } catch (AccessControlException ok) {
503          }
504  
505          try {
506              task.call();
507              shouldThrow();
508 <        } catch(AccessControlException success) {
538 <        } catch(Exception ex) {
539 <            unexpectedException();
540 <        }
508 >        } catch (AccessControlException success) {}
509      }
510  
511      /**
512       * With permissions, calling privilegedCallable succeeds
513       */
514 <    public void testprivilegedCallableWithPrivs() {
514 >    public void testprivilegedCallableWithPrivs() throws Exception {
515          Policy savedPolicy = null;
516          try {
517              savedPolicy = Policy.getPolicy();
# Line 554 | Line 522 | public class ExecutorsTest extends JSR16
522          } catch (AccessControlException ok) {
523              return;
524          }
525 <            
525 >
526          Callable task = Executors.privilegedCallable(new CheckCCL());
527          try {
528              task.call();
561        } catch(Exception ex) {
562            unexpectedException();
529          } finally {
530              Policy.setPolicy(savedPolicy);
531          }
# Line 567 | Line 533 | public class ExecutorsTest extends JSR16
533  
534      /**
535       * callable(Runnable) returns null when called
536 <     */
537 <    public void testCallable1() {
538 <        try {
539 <            Callable c = Executors.callable(new NoOpRunnable());
574 <            assertNull(c.call());
575 <        } catch(Exception ex) {
576 <            unexpectedException();
577 <        }
578 <        
536 >     */
537 >    public void testCallable1() throws Exception {
538 >        Callable c = Executors.callable(new NoOpRunnable());
539 >        assertNull(c.call());
540      }
541  
542      /**
543       * callable(Runnable, result) returns result when called
544 <     */
545 <    public void testCallable2() {
546 <        try {
547 <            Callable c = Executors.callable(new NoOpRunnable(), one);
587 <            assertEquals(one, c.call());
588 <        } catch(Exception ex) {
589 <            unexpectedException();
590 <        }
544 >     */
545 >    public void testCallable2() throws Exception {
546 >        Callable c = Executors.callable(new NoOpRunnable(), one);
547 >        assertEquals(one, c.call());
548      }
549  
550      /**
551       * callable(PrivilegedAction) returns its result when called
552 <     */
553 <    public void testCallable3() {
554 <        try {
555 <            Callable c = Executors.callable(new PrivilegedAction() {
599 <                    public Object run() { return one; }});
552 >     */
553 >    public void testCallable3() throws Exception {
554 >        Callable c = Executors.callable(new PrivilegedAction() {
555 >                public Object run() { return one; }});
556          assertEquals(one, c.call());
601        } catch(Exception ex) {
602            unexpectedException();
603        }
557      }
558  
559      /**
560       * callable(PrivilegedExceptionAction) returns its result when called
561 <     */
562 <    public void testCallable4() {
563 <        try {
564 <            Callable c = Executors.callable(new PrivilegedExceptionAction() {
565 <                    public Object run() { return one; }});
613 <            assertEquals(one, c.call());
614 <        } catch(Exception ex) {
615 <            unexpectedException();
616 <        }
561 >     */
562 >    public void testCallable4() throws Exception {
563 >        Callable c = Executors.callable(new PrivilegedExceptionAction() {
564 >                public Object run() { return one; }});
565 >        assertEquals(one, c.call());
566      }
567  
568  
569      /**
570       * callable(null Runnable) throws NPE
571 <     */
571 >     */
572      public void testCallableNPE1() {
573          try {
574 <            Runnable r = null;
575 <            Callable c = Executors.callable(r);
576 <        } catch (NullPointerException success) {
628 <        }
574 >            Callable c = Executors.callable((Runnable) null);
575 >            shouldThrow();
576 >        } catch (NullPointerException success) {}
577      }
578  
579      /**
580       * callable(null, result) throws NPE
581 <     */
581 >     */
582      public void testCallableNPE2() {
583          try {
584 <            Runnable r = null;
585 <            Callable c = Executors.callable(r, one);
586 <        } catch (NullPointerException success) {
639 <        }
584 >            Callable c = Executors.callable((Runnable) null, one);
585 >            shouldThrow();
586 >        } catch (NullPointerException success) {}
587      }
588  
589      /**
590       * callable(null PrivilegedAction) throws NPE
591 <     */
591 >     */
592      public void testCallableNPE3() {
593          try {
594 <            PrivilegedAction r = null;
595 <            Callable c = Executors.callable(r);
596 <        } catch (NullPointerException success) {
650 <        }
594 >            Callable c = Executors.callable((PrivilegedAction) null);
595 >            shouldThrow();
596 >        } catch (NullPointerException success) {}
597      }
598  
599      /**
600       * callable(null PrivilegedExceptionAction) throws NPE
601 <     */
601 >     */
602      public void testCallableNPE4() {
603          try {
604 <            PrivilegedExceptionAction r = null;
605 <            Callable c = Executors.callable(r);
606 <        } catch (NullPointerException success) {
661 <        }
604 >            Callable c = Executors.callable((PrivilegedExceptionAction) null);
605 >            shouldThrow();
606 >        } catch (NullPointerException success) {}
607      }
608  
609  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines