1 /* 2 * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 6571655 6571881 6574585 6571297 27 * @summary Test various args to task scheduling methods 28 */ 29 30 import java.util.*; 31 import java.util.concurrent.*; 32 33 public class Args { 34 void schedule(final Timer t, final TimerTask task, final Date d) { 35 t.schedule(task, d); 36 THROWS(IllegalStateException.class, 37 new F(){void f(){ t.schedule(task, d); }}); 38 } 39 40 void schedule(final Timer t, final TimerTask task, final Date d, final long period) { 41 t.schedule(task, d, period); 42 THROWS(IllegalStateException.class, 43 new F(){void f(){ t.schedule(task, d, period); }}); 44 } 45 46 void scheduleAtFixedRate(final Timer t, final TimerTask task, final Date d, final long period) { 47 t.scheduleAtFixedRate(task, d, period); 48 THROWS(IllegalStateException.class, 49 new F(){void f(){ t.scheduleAtFixedRate(task, d, period); }}); 50 } 51 52 TimerTask counter(final CountDownLatch latch) { 53 return new TimerTask() { public void run() { 54 check(latch.getCount() > 0); 55 latch.countDown(); 56 }}; 57 } 58 59 void test(String[] args) throws Throwable { 60 final Timer t = new Timer(); 61 final TimerTask x = new TimerTask() { public void run() {}}; 62 THROWS(IllegalArgumentException.class, 63 new F(){void f(){ t.schedule(x, -42); }}, 64 new F(){void f(){ t.schedule(x, new Date(-42)); }}, 65 66 new F(){void f(){ t.schedule(x, Long.MAX_VALUE); }}, 67 new F(){void f(){ t.schedule(x, -42, 42); }}, 68 new F(){void f(){ t.schedule(x, new Date(-42), 42); }}, 69 new F(){void f(){ t.schedule(x, Long.MAX_VALUE, 42); }}, 70 new F(){void f(){ t.schedule(x, 42, 0); }}, 71 new F(){void f(){ t.schedule(x, new Date(42), 0); }}, 72 new F(){void f(){ t.schedule(x, 42, -42); }}, 73 new F(){void f(){ t.schedule(x, new Date(42), -42); }}, 74 75 new F(){void f(){ t.scheduleAtFixedRate(x, -42, 42); }}, 76 new F(){void f(){ t.scheduleAtFixedRate(x, new Date(-42), 42); }}, 77 new F(){void f(){ t.scheduleAtFixedRate(x, Long.MAX_VALUE, 42); }}, 78 new F(){void f(){ t.scheduleAtFixedRate(x, 42, 0); }}, 79 new F(){void f(){ t.scheduleAtFixedRate(x, new Date(42), 0); }}, 80 new F(){void f(){ t.scheduleAtFixedRate(x, 42, -42); }}, 81 new F(){void f(){ t.scheduleAtFixedRate(x, new Date(42), -42); }} 82 ); 83 84 THROWS(NullPointerException.class, 85 new F(){void f(){ t.schedule(null, 42); }}, 86 new F(){void f(){ t.schedule(x, (Date)null); }}, 87 88 new F(){void f(){ t.schedule(null, 42, 42); }}, 89 new F(){void f(){ t.schedule(x, (Date)null, 42); }}, 90 91 new F(){void f(){ t.scheduleAtFixedRate(null, 42, 42); }}, 92 new F(){void f(){ t.scheduleAtFixedRate(x, (Date)null, 42); }} 93 ); 94 95 final CountDownLatch y1 = new CountDownLatch(1); 96 final CountDownLatch y2 = new CountDownLatch(1); 97 final CountDownLatch y3 = new CountDownLatch(11); 98 final long start = System.currentTimeMillis(); 99 final Date past = new Date(start - 10500); 100 101 schedule( t, counter(y1), past); 102 schedule( t, counter(y2), past, 1000); 103 scheduleAtFixedRate(t, counter(y3), past, 1000); 104 y3.await(); 105 y1.await(); 106 y2.await(); 107 108 final long elapsed = System.currentTimeMillis() - start; 109 System.out.printf("elapsed=%d%n", elapsed); 110 check(elapsed < 500); 111 112 t.cancel(); 113 114 THROWS(IllegalStateException.class, 115 new F(){void f(){ t.schedule(x, 42); }}, 116 new F(){void f(){ t.schedule(x, past); }}, 117 new F(){void f(){ t.schedule(x, 42, 42); }}, 118 new F(){void f(){ t.schedule(x, past, 42); }}, 119 new F(){void f(){ t.scheduleAtFixedRate(x, 42, 42); }}, 120 new F(){void f(){ t.scheduleAtFixedRate(x, past, 42); }}); 121 122 } 123 124 //--------------------- Infrastructure --------------------------- 125 volatile int passed = 0, failed = 0; 126 void pass() {passed++;} 127 void fail() {failed++; Thread.dumpStack();} 128 void fail(String msg) {System.err.println(msg); fail();} 129 void unexpected(Throwable t) {failed++; t.printStackTrace();} 130 void check(boolean cond) {if (cond) pass(); else fail();} 131 void equal(Object x, Object y) { 132 if (x == null ? y == null : x.equals(y)) pass(); | 1 /* 2 * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 6571655 6571881 6574585 6571297 8004807 27 * @summary Test various args to task scheduling methods 28 * @run main/othervm Args 29 */ 30 31 import java.util.*; 32 import java.util.concurrent.*; 33 34 public class Args { 35 void schedule(final Timer t, final TimerTask task, final Date d) { 36 t.schedule(task, d); 37 THROWS(IllegalStateException.class, 38 new F(){void f(){ t.schedule(task, d); }}); 39 } 40 41 void schedule(final Timer t, final TimerTask task, final Date d, final long period) { 42 t.schedule(task, d, period); 43 THROWS(IllegalStateException.class, 44 new F(){void f(){ t.schedule(task, d, period); }}); 45 } 46 47 void scheduleAtFixedRate(final Timer t, final TimerTask task, final Date d, final long period) { 48 t.scheduleAtFixedRate(task, d, period); 49 THROWS(IllegalStateException.class, 50 new F(){void f(){ t.scheduleAtFixedRate(task, d, period); }}); 51 } 52 53 TimerTask counter(final CountDownLatch latch, final Timer timer, final boolean repeatable) { 54 return new TimerTask() { 55 private boolean executed = false; 56 public void run() { 57 // check if the unrepeatable task is executed repeatedly. 58 check(!executed ? executed = true : repeatable); 59 latch.countDown(); 60 if (latch.getCount() == 0) { 61 timer.cancel(); 62 } 63 }}; 64 } 65 66 void test(String[] args) throws Throwable { 67 final Timer t = new Timer(); 68 final TimerTask x = new TimerTask() { public void run() {}}; 69 THROWS(IllegalArgumentException.class, 70 new F(){void f(){ t.schedule(x, -42); }}, 71 new F(){void f(){ t.schedule(x, new Date(-42)); }}, 72 73 new F(){void f(){ t.schedule(x, Long.MAX_VALUE); }}, 74 new F(){void f(){ t.schedule(x, -42, 42); }}, 75 new F(){void f(){ t.schedule(x, new Date(-42), 42); }}, 76 new F(){void f(){ t.schedule(x, Long.MAX_VALUE, 42); }}, 77 new F(){void f(){ t.schedule(x, 42, 0); }}, 78 new F(){void f(){ t.schedule(x, new Date(42), 0); }}, 79 new F(){void f(){ t.schedule(x, 42, -42); }}, 80 new F(){void f(){ t.schedule(x, new Date(42), -42); }}, 81 82 new F(){void f(){ t.scheduleAtFixedRate(x, -42, 42); }}, 83 new F(){void f(){ t.scheduleAtFixedRate(x, new Date(-42), 42); }}, 84 new F(){void f(){ t.scheduleAtFixedRate(x, Long.MAX_VALUE, 42); }}, 85 new F(){void f(){ t.scheduleAtFixedRate(x, 42, 0); }}, 86 new F(){void f(){ t.scheduleAtFixedRate(x, new Date(42), 0); }}, 87 new F(){void f(){ t.scheduleAtFixedRate(x, 42, -42); }}, 88 new F(){void f(){ t.scheduleAtFixedRate(x, new Date(42), -42); }} 89 ); 90 91 THROWS(NullPointerException.class, 92 new F(){void f(){ t.schedule(null, 42); }}, 93 new F(){void f(){ t.schedule(x, (Date)null); }}, 94 95 new F(){void f(){ t.schedule(null, 42, 42); }}, 96 new F(){void f(){ t.schedule(x, (Date)null, 42); }}, 97 98 new F(){void f(){ t.scheduleAtFixedRate(null, 42, 42); }}, 99 new F(){void f(){ t.scheduleAtFixedRate(x, (Date)null, 42); }} 100 ); 101 102 final CountDownLatch y = new CountDownLatch(13); 103 final long start = System.currentTimeMillis(); 104 final Date past = new Date(start - 10500); 105 106 schedule(t, counter(y, t, false), past); 107 schedule(t, counter(y, t, false), past, 1000); 108 scheduleAtFixedRate(t, counter(y, t, true), past, 1000); 109 y.await(); 110 111 final long elapsed = System.currentTimeMillis() - start; 112 check(elapsed < 500); 113 System.out.printf("elapsed=%d%n", elapsed); 114 115 t.cancel(); //cancel the timer if it hasn't been cancelled by task 116 117 THROWS(IllegalStateException.class, 118 new F(){void f(){ t.schedule(x, 42); }}, 119 new F(){void f(){ t.schedule(x, past); }}, 120 new F(){void f(){ t.schedule(x, 42, 42); }}, 121 new F(){void f(){ t.schedule(x, past, 42); }}, 122 new F(){void f(){ t.scheduleAtFixedRate(x, 42, 42); }}, 123 new F(){void f(){ t.scheduleAtFixedRate(x, past, 42); }}); 124 125 } 126 127 //--------------------- Infrastructure --------------------------- 128 volatile int passed = 0, failed = 0; 129 void pass() {passed++;} 130 void fail() {failed++; Thread.dumpStack();} 131 void fail(String msg) {System.err.println(msg); fail();} 132 void unexpected(Throwable t) {failed++; t.printStackTrace();} 133 void check(boolean cond) {if (cond) pass(); else fail();} 134 void equal(Object x, Object y) { 135 if (x == null ? y == null : x.equals(y)) pass(); |