Utils.java revision 1255:2aeaffb6c897
1/* 2 * Copyright 2003-2006 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 20 * CA 95054 USA or visit www.sun.com if you need additional information or 21 * have any questions. 22 */ 23 24/* 25 * Utility class for ThreadMXBean tests 26 */ 27import java.lang.management.ManagementFactory; 28import java.lang.management.ThreadMXBean; 29 30public class Utils { 31 private static final ThreadMXBean tm = ManagementFactory.getThreadMXBean(); 32 private static final int MAX_RETRY = 200; 33 34 public static boolean waitForBlockWaitingState(Thread t) { 35 // wait for the thread to transition to the expected state 36 int retryCount=0; 37 while (t.getState() == Thread.State.RUNNABLE && retryCount < MAX_RETRY) { 38 goSleep(100); 39 retryCount++; 40 } 41 return (t.getState() != Thread.State.RUNNABLE); 42 } 43 44 public static boolean waitForThreadState(Thread t, Thread.State expected) { 45 // wait for the thread to transition to the expected state 46 int retryCount=0; 47 while (t.getState() != expected && retryCount < MAX_RETRY) { 48 goSleep(100); 49 retryCount++; 50 } 51 return (t.getState() == expected); 52 } 53 54 public static void checkThreadState(Thread t, Thread.State expected) { 55 waitForThreadState(t, expected); 56 57 Thread.State state = tm.getThreadInfo(t.getId()).getThreadState(); 58 if (state == null) { 59 throw new RuntimeException(t.getName() + " expected to have " + 60 expected + " but got null."); 61 } 62 if (state != expected) { 63 t.dumpStack(); 64 throw new RuntimeException(t.getName() + 65 " expected to have " + expected + " but got " + state); 66 } 67 } 68 69 public static void goSleep(long ms) { 70 try { 71 Thread.sleep(ms); 72 } catch (InterruptedException e) { 73 e.printStackTrace(); 74 System.out.println("TEST FAILED: Unexpected exception."); 75 throw new RuntimeException(e); 76 } 77 } 78 79} 80