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.9 by tim, Tue Dec 9 19:09:24 2003 UTC vs.
Revision 1.10 by tim, Wed Dec 10 01:51:12 2003 UTC

# Line 20 | Line 20 | public class ExecutorsTest extends JSR16
20          return new TestSuite(ExecutorsTest.class);
21      }
22  
23    private static final String TEST_STRING = "a test string";
24
25    private static class StringTask implements Callable<String> {
26        public String call() { return TEST_STRING; }
27    }
28
29    static class DirectExecutor implements Executor {
30        public void execute(Runnable r) {
31            r.run();
32        }
33    }
34
23      static class TimedCallable<T> implements Callable<T> {
24 <        private final Executor exec;
24 >        private final ExecutorService exec;
25          private final Callable<T> func;
26          private final long msecs;
27          
28 <        TimedCallable(Executor exec, Callable<T> func, long msecs) {
28 >        TimedCallable(ExecutorService exec, Callable<T> func, long msecs) {
29              this.exec = exec;
30              this.func = func;
31              this.msecs = msecs;
32          }
33          
34          public T call() throws Exception {
35 <            Future<T> ftask = Executors.execute(exec, func);
35 >            Future<T> ftask = exec.submit(func);
36              try {
37                  return ftask.get(msecs, TimeUnit.MILLISECONDS);
38              } finally {
# Line 187 | Line 175 | public class ExecutorsTest extends JSR16
175          }
176      }
177  
190    /**
191     * execute of runnable runs it to completion
192     */
193    public void testExecuteRunnable() {
194        try {
195            Executor e = new DirectExecutor();
196            TrackedShortRunnable task = new TrackedShortRunnable();
197            assertFalse(task.done);
198            Future<?> future = Executors.execute(e, task);
199            future.get();
200            assertTrue(task.done);
201        }
202        catch (ExecutionException ex) {
203            unexpectedException();
204        }
205        catch (InterruptedException ex) {
206            unexpectedException();
207        }
208    }
209
210    /**
211     * invoke of a runnable runs it to completion
212     */
213    public void testInvokeRunnable() {
214        try {
215            Executor e = new DirectExecutor();
216            TrackedShortRunnable task = new TrackedShortRunnable();
217            assertFalse(task.done);
218            Executors.invoke(e, task);
219            assertTrue(task.done);
220        }
221        catch (ExecutionException ex) {
222            unexpectedException();
223        }
224        catch (InterruptedException ex) {
225            unexpectedException();
226        }
227    }
228
229    /**
230     * execute of a callable runs it to completion
231     */
232    public void testExecuteCallable() {
233        try {
234            Executor e = new DirectExecutor();
235            Future<String> future = Executors.execute(e, new StringTask());
236            String result = future.get();
237            assertSame(TEST_STRING, result);
238        }
239        catch (ExecutionException ex) {
240            unexpectedException();
241        }
242        catch (InterruptedException ex) {
243            unexpectedException();
244        }
245    }
246
247
248    /**
249     * execute of a privileged action runs it to completion
250     */
251    public void testExecutePrivilegedAction() {
252        Policy savedPolicy = Policy.getPolicy();
253        AdjustablePolicy policy = new AdjustablePolicy();
254        policy.addPermission(new RuntimePermission("getContextClassLoader"));
255        policy.addPermission(new RuntimePermission("setContextClassLoader"));
256        Policy.setPolicy(policy);
257        try {
258            Executor e = new DirectExecutor();
259            Future future = Executors.execute(e, new PrivilegedAction() {
260                    public Object run() {
261                        return TEST_STRING;
262                    }});
263
264            Object result = future.get();
265            assertSame(TEST_STRING, result);
266        }
267        catch (ExecutionException ex) {
268            unexpectedException();
269        }
270        catch (InterruptedException ex) {
271            unexpectedException();
272        }
273        finally {
274            Policy.setPolicy(savedPolicy);
275        }
276    }
277
278    /**
279     * execute of a privileged exception action runs it to completion
280     */
281    public void testExecutePrivilegedExceptionAction() {
282        Policy savedPolicy = Policy.getPolicy();
283        AdjustablePolicy policy = new AdjustablePolicy();
284        policy.addPermission(new RuntimePermission("getContextClassLoader"));
285        policy.addPermission(new RuntimePermission("setContextClassLoader"));
286        Policy.setPolicy(policy);
287        try {
288            Executor e = new DirectExecutor();
289            Future future = Executors.execute(e, new PrivilegedExceptionAction() {
290                    public Object run() {
291                        return TEST_STRING;
292                    }});
293
294            Object result = future.get();
295            assertSame(TEST_STRING, result);
296        }
297        catch (ExecutionException ex) {
298            unexpectedException();
299        }
300        catch (InterruptedException ex) {
301            unexpectedException();
302        }
303        finally {
304            Policy.setPolicy(savedPolicy);
305        }
306    }
307
308    /**
309     * execute of a failed privileged exception action reports exception
310     */
311    public void testExecuteFailedPrivilegedExceptionAction() {
312        Policy savedPolicy = Policy.getPolicy();
313        AdjustablePolicy policy = new AdjustablePolicy();
314        policy.addPermission(new RuntimePermission("getContextClassLoader"));
315        policy.addPermission(new RuntimePermission("setContextClassLoader"));
316        Policy.setPolicy(policy);
317        try {
318            Executor e = new DirectExecutor();
319            Future future = Executors.execute(e, new PrivilegedExceptionAction() {
320                    public Object run() throws Exception {
321                        throw new IndexOutOfBoundsException();
322                    }});
323
324            Object result = future.get();
325            shouldThrow();
326        }
327        catch (ExecutionException success) {
328        }
329        catch (InterruptedException ex) {
330            unexpectedException();
331        }
332        finally {
333            Policy.setPolicy(savedPolicy);
334        }
335    }
336
337    /**
338     * invoke of a collable runs it to completion
339     */
340    public void testInvokeCallable() {
341        try {
342            Executor e = new DirectExecutor();
343            String result = Executors.invoke(e, new StringTask());
344
345            assertSame(TEST_STRING, result);
346        }
347        catch (ExecutionException ex) {
348            unexpectedException();
349        }
350        catch (InterruptedException ex) {
351            unexpectedException();
352        }
353    }
354
355    /**
356     * execute with null executor throws NPE
357     */
358    public void testNullExecuteRunnable() {
359        try {
360            TrackedShortRunnable task = new TrackedShortRunnable();
361            assertFalse(task.done);
362            Future<?> future = Executors.execute(null, task);
363            shouldThrow();
364        }
365        catch (NullPointerException success) {
366        }
367        catch (Exception ex) {
368            unexpectedException();
369        }
370    }
371
372    /**
373     * execute with a null runnable throws NPE
374     */
375    public void testExecuteNullRunnable() {
376        try {
377            Executor e = new DirectExecutor();
378            TrackedShortRunnable task = null;
379            Future<?> future = Executors.execute(e, task);
380            shouldThrow();
381        }
382        catch (NullPointerException success) {
383        }
384        catch (Exception ex) {
385            unexpectedException();
386        }
387    }
388
389    /**
390     * invoke of a null runnable throws NPE
391     */
392    public void testInvokeNullRunnable() {
393        try {
394            Executor e = new DirectExecutor();
395            TrackedShortRunnable task = null;
396            Executors.invoke(e, task);
397            shouldThrow();
398        }
399        catch (NullPointerException success) {
400        }
401        catch (Exception ex) {
402            unexpectedException();
403        }
404    }
405
406    /**
407     * execute of a null callable throws NPE
408     */
409    public void testExecuteNullCallable() {
410        try {
411            Executor e = new DirectExecutor();
412            StringTask t = null;
413            Future<String> future = Executors.execute(e, t);
414            shouldThrow();
415        }
416        catch (NullPointerException success) {
417        }
418        catch (Exception ex) {
419            unexpectedException();
420        }
421    }
422
423    /**
424     * invoke of a null callable throws NPE
425     */
426    public void testInvokeNullCallable() {
427        try {
428            Executor e = new DirectExecutor();
429            StringTask t = null;
430            String result = Executors.invoke(e, t);
431            shouldThrow();
432        }
433        catch (NullPointerException success) {
434        }
435        catch (Exception ex) {
436            unexpectedException();
437        }
438    }
439
440    /**
441     *  execute(Executor, Runnable) throws RejectedExecutionException
442     *  if saturated.
443     */
444    public void testExecute1() {
445        ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1));
446        try {
447            
448            for(int i = 0; i < 5; ++i){
449                Executors.execute(p, new MediumRunnable());
450            }
451            shouldThrow();
452        } catch(RejectedExecutionException success){}
453        joinPool(p);
454    }
455
456    /**
457     *  execute(Executor, Callable)throws RejectedExecutionException
458     *  if saturated.
459     */
460    public void testExecute2() {
461         ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1));
462        try {
463            for(int i = 0; i < 5; ++i) {
464                Executors.execute(p, new SmallCallable());
465            }
466            shouldThrow();
467        } catch(RejectedExecutionException e){}
468        joinPool(p);
469    }
470
471
472    /**
473     *  invoke(Executor, Runnable) throws InterruptedException if
474     *  caller interrupted.
475     */
476    public void testInterruptedInvoke() {
477        final ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
478        Thread t = new Thread(new Runnable() {
479                public void run() {
480                    try {
481                        Executors.invoke(p,new Runnable() {
482                                public void run() {
483                                    try {
484                                        Thread.sleep(MEDIUM_DELAY_MS);
485                                        shouldThrow();
486                                    } catch(InterruptedException e){
487                                    }
488                                }
489                            });
490                    } catch(InterruptedException success){
491                    } catch(Exception e) {
492                        unexpectedException();
493                    }
494                    
495                }
496            });
497        try {
498            t.start();
499            Thread.sleep(SHORT_DELAY_MS);
500            t.interrupt();
501        } catch(Exception e){
502            unexpectedException();
503        }
504        joinPool(p);
505    }
506
507    /**
508     *  invoke(Executor, Runnable) throws ExecutionException if
509     *  runnable throws exception.
510     */
511    public void testInvoke3() {
512        ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
513        try {
514            Runnable r = new Runnable() {
515                    public void run() {
516                        int i = 5/0;
517                    }
518                };
519            
520            for(int i =0; i < 5; i++){
521                Executors.invoke(p,r);
522            }
523            
524            shouldThrow();
525        } catch(ExecutionException success){
526        } catch(Exception e){
527            unexpectedException();
528        }
529        joinPool(p);
530    }
531
532
533
534    /**
535     *  invoke(Executor, Callable) throws InterruptedException if
536     *  callable throws exception
537     */
538    public void testInvoke5() {
539        final ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
540        
541        final Callable c = new Callable() {
542                public Object call() {
543                    try {
544                        Executors.invoke(p, new SmallCallable());
545                        shouldThrow();
546                    } catch(InterruptedException e){}
547                    catch(RejectedExecutionException e2){}
548                    catch(ExecutionException e3){}
549                    return Boolean.TRUE;
550                }
551            };
552
553
554        
555        Thread t = new Thread(new Runnable() {
556                public void run() {
557                    try {
558                        c.call();
559                    } catch(Exception e){}
560                }
561          });
562        try {
563            t.start();
564            Thread.sleep(SHORT_DELAY_MS);
565            t.interrupt();
566            t.join();
567        } catch(InterruptedException e){
568            unexpectedException();
569        }
570        
571        joinPool(p);
572    }
573
574    /**
575     *  invoke(Executor, Callable) will throw ExecutionException
576     *  if callable throws exception
577     */
578    public void testInvoke6() {
579        ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
580
581        try {
582            Callable c = new Callable() {
583                    public Object call() {
584                        int i = 5/0;
585                        return Boolean.TRUE;
586                    }
587                };
588            
589            for(int i =0; i < 5; i++){
590                Executors.invoke(p,c);
591            }
592            
593            shouldThrow();
594        }
595        catch(ExecutionException success){
596        } catch(Exception e) {
597            unexpectedException();
598        }
599        joinPool(p);
600    }
601
602
178  
179      /**
180       *  timeouts from execute will time out if they compute too long.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines