/*
* Copyright 2003-2012 Yusuke Yamamoto
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package samurai.core;
import junit.framework.TestCase;
import junit.textui.TestRunner;
import samurai.web.VelocityHtmlRenderer;
import java.io.File;
import java.io.IOException;
public class TestBEAThreadDump extends TestCase {
samurai.core.ThreadStatistic statistic = new ThreadStatistic();
public TestBEAThreadDump(String name) {
super(name);
}
public static void main(String[] args) {
TestRunner.run(TestBEAThreadDump.class);
}
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
/* public void testJRockit142_03stacked() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/1.4.2_03BEAstacked.dmp"), false);
assertEquals(3, statistic.getFullThreadDumpCount());
assertEquals(11, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(9);
assertEquals("Thread-1",dump.getName());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
dump = statistic.getFullThreadDump(0).getThreadDump(10);
assertEquals("Thread-2",dump.getName());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
}
public void testJRockit142_03idle() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/1.4.2_03BEAidle.dmp"), false);
assertEquals(3, statistic.getFullThreadDumpCount());
assertEquals(9, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(0);
assertEquals("Main Thread",dump.getName());
assertFalse(dump.isBlocked());
assertTrue(dump.isIdle());
}
public void testJRockit142_05stacked() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/1.4.2_05BEAstacked.dmp"), false);
assertEquals(3, statistic.getFullThreadDumpCount());
assertEquals(11, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(9);
assertEquals("Thread-1",dump.getName());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
dump = statistic.getFullThreadDump(0).getThreadDump(10);
assertEquals("Thread-2",dump.getName());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
}
public void testJRockit142_05idle() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/1.4.2_05BEAidle.dmp"), false);
assertEquals(3, statistic.getFullThreadDumpCount());
assertEquals(9, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(0);
assertEquals("Main Thread",dump.getName());
assertFalse(dump.isBlocked());
assertTrue(dump.isIdle());
}
public void testJRockit150_03stacked() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/1.5.0_03BEAstacked.dmp"), false);
assertEquals(3, statistic.getFullThreadDumpCount());
assertEquals(11, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(9);
assertEquals("Thread-0",dump.getName());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
dump = statistic.getFullThreadDump(0).getThreadDump(10);
assertEquals("Thread-1",dump.getName());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
}
public void testJRockit150_03idle() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/1.5.0_03BEAidle.dmp"), false);
assertEquals(3, statistic.getFullThreadDumpCount());
assertEquals(9, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(0);
assertEquals("Main Thread",dump.getName());
assertFalse(dump.isBlocked());
assertTrue(dump.isIdle());
}
public void testBEAStacked() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/jrockit81sp2_141_05stack.dmp"), false);
assertEquals(1, statistic.getFullThreadDumpCount());
assertEquals(8,statistic.getFullThreadDump(0).getThreadCount());
assertTrue(statistic.getFullThreadDump(0).getThreadDump(5).isBlocked());
assertFalse(statistic.getFullThreadDump(0).getThreadDump(5).isDaemon());
assertTrue(statistic.getFullThreadDump(0).getThreadDump(6).isBlocked());
assertTrue(statistic.getFullThreadDump(0).getThreadDump(0).isIdle());
assertTrue(statistic.getFullThreadDump(0).getThreadDump(0).isDaemon());
assertFalse(statistic.getFullThreadDump(0).getThreadDump(1).isIdle());
assertFalse(statistic.getFullThreadDump(0).getThreadDump(1).isBlocked());
assertTrue(statistic.getFullThreadDump(0).getThreadDump(3).isIdle());
}
public void testBEAStackLine(){
BEAStackLine line = new BEAStackLine(" at java.lang.Thread.doYield(Native Method)@116C0A68");
assertTrue(line.isNativeMethod());
assertEquals("java.lang.Thread",line.getClassName());
assertTrue(line.isLine());
assertEquals("doYield",line.getMethodName());
assertEquals("Native Method",line.getSource());
line = new BEAStackLine(" at java.lang.Object.wait0(Unknown Source)@116C2103");
assertFalse(line.isNativeMethod());
assertEquals("java.lang.Object",line.getClassName());
assertTrue(line.isLine());
assertEquals("wait0",line.getMethodName());
assertEquals("Unknown Source",line.getSource());
assertEquals("Unknown Source",line.getLineNumber());
line = new BEAStackLine(" at weblogic/kernel/ExecuteThread.waitForRequest(ExecuteThread.java:145)@19163A91");
assertFalse(line.isNativeMethod());
assertEquals("weblogic/kernel/ExecuteThread",line.getClassName());
assertTrue(line.isLine());
assertEquals("waitForRequest",line.getMethodName());
assertEquals("ExecuteThread.java",line.getSource());
assertEquals("145",line.getLineNumber());
}
public void test811JRockitweblogicadmin() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/weblogic.admin/weblogic.admin811JRockit.dmp"), false);
assertEquals(4, statistic.getFullThreadDumpCount());
assertEquals(42, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(0);
assertEquals("ExecuteThread: '0' for queue: 'weblogic.kernel.Default'",dump.getName());
assertEquals("0x80",dump.getId());
assertFalse(dump.isBlocked());
assertTrue(dump.isIdle());
}
// public void test812JRockitweblogicadmin() throws IOException {
// ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
// analyzer.analyze(new File("testcases/weblogic.admin/weblogic.admin812JRockit.dmp"), false);
// assertEquals(4, statistic.getFullThreadDumpCount());
// assertEquals(42, statistic.getFullThreadDump(0).getThreadCount());
// ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(0);
// assertEquals("ExecuteThread: '0' for queue: 'weblogic.kernel.Default'",dump.getName());
// assertEquals("0x80",dump.getId());
// assertFalse(dump.isStacked());
// assertTrue(dump.isIdle());
// }*/
public void test813JRockitweblogicadmin() throws IOException {
ThreadDumpExtractor dumpExtractor = new ThreadDumpExtractor(statistic);
dumpExtractor.analyze(new File("testcases/BEA/weblogic.admin813JRockit.dmp"));
assertEquals(5, statistic.getFullThreadDumpCount());
assertEquals(46, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDumpById("0xc80");
assertEquals("ExecuteThread: '14' for queue: 'weblogic.kernel.Default'", dump.getName());
assertEquals("0xb80", dump.getBlockerId());
assertEquals("0xc80", dump.getId());
assertTrue(dump.isBlocked());
assertTrue(statistic.getFullThreadDump(0).isDeadLocked());
assertTrue(dump.isDeadLocked());
assertFalse(dump.isIdle());
samurai.core.StackLine line = dump.getLine(0);
assertTrue(line.isTryingToGetLock());
assertEquals("java/lang/Object", line.getLockedClassName());
assertEquals("13a92710", line.getLockedObjectId());
assertEquals(" -- Blocked trying to get lock: java/lang/Object@<a href=\"#13a92710\">13a92710</a>[thin lock]",new VelocityHtmlRenderer.Util().asHTML(line));
assertEquals("0xb80", dump.getBlockerId());
line = dump.getLine(6);
assertTrue(line.isHoldingLock());
assertTrue(-1 != new VelocityHtmlRenderer.Util().asHTML(line).indexOf("<a name"));
assertEquals("java/lang/Object", line.getLockedClassName());
assertTrue(-1 != new VelocityHtmlRenderer.Util().asHTML(line).indexOf("<a name"));
assertEquals("13a92718", line.getLockedObjectId());
System.out.println("[" + new VelocityHtmlRenderer.Util().asHTML(line) + "]");
assertEquals(" ^-- Holding lock: java/lang/Object@<a name=\"13a92718\"></a>13a92718[thin lock]", new VelocityHtmlRenderer.Util().asHTML(line));
dump = statistic.getFullThreadDump(0).getThreadDumpById("0xb80");
assertEquals("ExecuteThread: '12' for queue: 'weblogic.kernel.Default'", dump.getName());
assertTrue(dump.isBlocked());
assertEquals("0xc80", dump.getBlockerId());
assertTrue(dump.isDeadLocked());
assertFalse(dump.isIdle());
dump = statistic.getFullThreadDump(0).getThreadDumpById("0xa80");
assertEquals("ExecuteThread: '10' for queue: 'weblogic.kernel.Default'", dump.getName());
assertTrue(dump.isBlocked());
assertEquals("0xc80", dump.getBlockerId());
assertFalse(dump.isDeadLocked());
assertFalse(dump.isIdle());
}/*
public void test814JRockitweblogicadmin() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/weblogic.admin/weblogic.admin814JRockit.dmp"), false);
assertEquals(6, statistic.getFullThreadDumpCount());
assertEquals(50, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(1).getThreadDumpById("0x700");
assertEquals("ExecuteThread: '3' for queue: 'weblogic.kernel.Default'",dump.getName());
assertEquals("0x700",dump.getId());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
assertEquals("0xb80",dump.getBlockerId());
StackLine line = dump.getLine(0);
assertTrue(line.isTryingToGetLock());
assertEquals("java/lang/Object",line.getLockedClassName());
assertEquals("43d07c8",line.getLockedObjectId());
line = dump.getLine(6);
assertTrue(line.isHoldingLock());
assertEquals("java/lang/Object",line.getLockedClassName());
assertEquals("43d07d0",line.getLockedObjectId());
}
public void test815JRockitweblogicadmin() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/weblogic.admin/weblogic.admin815JRockit.dmp"), false);
assertEquals(3, statistic.getFullThreadDumpCount());
assertEquals(46, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDumpById("0xb80");
assertEquals("ExecuteThread: '12' for queue: 'weblogic.kernel.Default'",dump.getName());
assertEquals("0xb80",dump.getId());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
StackLine line = dump.getLine(0);
assertTrue(line.isTryingToGetLock());
assertEquals("java/lang/Object",line.getLockedClassName());
assertEquals("60ef830",line.getLockedObjectId());
line = dump.getLine(6);
assertTrue(line.isHoldingLock());
assertEquals("java/lang/Object",line.getLockedClassName());
assertEquals("60ef828",line.getLockedObjectId());
}
public void test900JRockitweblogicadmin() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/weblogic.admin/weblogic.admin900JRockit.dmp"), false);
assertEquals(6, statistic.getFullThreadDumpCount());
assertEquals(25, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(0);
assertEquals("Main Thread",dump.getName());
assertEquals("1",dump.getId());
assertFalse(dump.isBlocked());
assertTrue(dump.isIdle());
dump = statistic.getFullThreadDump(1).getThreadDumpById("17");
assertEquals("[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'",dump.getName());
assertEquals("17",dump.getId());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
StackLine line = dump.getLine(0);
assertTrue(line.isTryingToGetLock());
assertEquals("java.lang.Object",line.getLockedClassName());
assertEquals("847a42",line.getLockedObjectId());
line = dump.getLine(6);
assertTrue(line.isHoldingLock());
assertEquals("java.lang.Object",line.getLockedClassName());
assertEquals("847a41",line.getLockedObjectId());
}
public void test910JRockitweblogicadmin() throws IOException {
ThreadDumpExtractor analyzer = new ThreadDumpExtractor(statistic);
analyzer.analyze(new File("testcases/weblogic.admin/weblogic.admin910JRockit.dmp"), false);
assertEquals(1, statistic.getFullThreadDumpCount());
assertEquals(29, statistic.getFullThreadDump(0).getThreadCount());
ThreadDump dump = statistic.getFullThreadDump(0).getThreadDump(0);
assertEquals("Main Thread",dump.getName());
assertEquals("1",dump.getId());
assertFalse(dump.isBlocked());
assertTrue(dump.isIdle());
dump = statistic.getFullThreadDump(0).getThreadDumpById("28");
assertEquals("[ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'",dump.getName());
assertEquals("28",dump.getId());
assertTrue(dump.isBlocked());
assertFalse(dump.isIdle());
StackLine line = dump.getLine(0);
assertTrue(line.isTryingToGetLock());
assertEquals("java.lang.Object",line.getLockedClassName());
assertEquals("99c0a5",line.getLockedObjectId());
line = dump.getLine(6);
assertTrue(line.isHoldingLock());
assertEquals("java.lang.Object",line.getLockedClassName());
assertEquals("99c099",line.getLockedObjectId());
}
*/
}