15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/* 25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements. See the NOTICE file distributed with 45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership. 55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with 75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License. You may obtain a copy of the License at 85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Unless required by applicable law or agreed to in writing, software 125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * See the License for the specific language governing permissions and 165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * limitations under the License. 175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Anatoly F. Bondarenko 215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 19.06.2006 255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.jdwp.ThreadReference; 275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.exceptions.*; 295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket; 305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands; 315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants; 325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket; 335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase; 345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer; 355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * JDWP Unit test for ThreadReference.ThreadGroup command. 385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class ThreadGroup002Test extends JDWPSyncTestCase { 405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final int testStatusPassed = 0; 425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final int testStatusFailed = -1; 435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final String debuggeeSignature = 445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "Lorg/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Debuggee;"; 455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 46e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz @Override 475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected String getDebuggeeClassName() { 485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ThreadGroup002Debuggee"; 495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This testcase exercises ThreadReference.ThreadGroup command. 535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>At first the test starts ThreadGroup002Debuggee which creates some thread 545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * groups and starts some tested threads which belong to different created thread groups. 555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>After the tested threads start, at first the test wait for the some first 565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * tested threads to finish. 575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> Then the test for every tested thread does: 585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - performs ThreadReference.Status command; 595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - performs the ThreadReference.ThreadGroup command; 605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - performs the ThreadGroupReference.name command; 615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>It is expected that 625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - all threads with status ZOMBIE are only finished tested threads; 635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - all threads without status ZOMBIE are only NOT finished tested threads; 645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - if status of thread is ZOMBIE then returned groupID must be null; 655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - if status of thread is not ZOMBIE then returned groupID must not be null; 665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - thread group name should be expected name for thread which is not ZOMBIE; 675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testThreadGroup002() { 695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> testThreadGroup002: START..."); 705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String debuggeeMessage = synchronizer.receiveMessage(); 715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int testedThreadsNumber = 0; 725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsNumber = Integer.valueOf(debuggeeMessage).intValue(); 745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (NumberFormatException exception) { 755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("## FAILURE: Exception while getting number of started threads from debuggee = " + exception); 775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage("FINISH"); 785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\n## Can NOT get number of started threads from debuggee! "); 795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsNumber++; // to add debuggee main thread 815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Number of threads in debuggee to test = " + testedThreadsNumber); 825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String[] testedThreadsNames = new String[testedThreadsNumber]; 835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String[] testedThreadGroupsNames = new String[testedThreadsNumber]; 845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long[] testedThreadsIDs = new long[testedThreadsNumber]; 855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String debuggeeMainThreadName = synchronizer.receiveMessage(); 865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String debuggeeMainThreadGroupName = synchronizer.receiveMessage(); 875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < testedThreadsNumber; i++) { 885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( i < (testedThreadsNumber-1) ) { 895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsNames[i] = ThreadGroup002Debuggee.THREAD_NAME_PATTERN + i; 905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadGroupsNames[i] = ThreadGroup002Debuggee.THREAD_GROUP_NAME_PATTERN + (i%2); 915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsNames[i] = debuggeeMainThreadName; 935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadGroupsNames[i] = debuggeeMainThreadGroupName; 945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsIDs[i] = 0; 965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // getting ID of the tested thread 995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket allThreadIDReply = null; 1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes allThreadIDReply = debuggeeWrapper.vmMirror.getAllThreadID(); 1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (ReplyErrorCodeException exception) { 1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("## FAILURE: Exception in vmMirror.getAllThreadID() = " + exception); 1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage("FINISH"); 1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\n## Can NOT get all ThreadID in debuggee! "); 1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int threads = allThreadIDReply.getNextValueAsInt(); 1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Number of all threads in debuggee = " + threads); 1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < threads; i++) { 1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long threadID = allThreadIDReply.getNextValueAsThreadID(); 1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String threadName = null; 1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadName = debuggeeWrapper.vmMirror.getThreadName(threadID); 1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (ReplyErrorCodeException exception) { 1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("==> WARNING: Can NOT get thread name for threadID = " + threadID); 1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int k = 0; 1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (; k < testedThreadsNumber; k++) { 1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( threadName.equals(testedThreadsNames[k]) ) { 1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsIDs[k] = threadID; 1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean testedThreadNotFound = false; 1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < testedThreadsNumber; i++) { 1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( testedThreadsIDs[i] == 0 ) { 1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Tested thread is not found out among debuggee threads!"); 1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Thread name = " + testedThreadsNames[i]); 1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadNotFound = true; 1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( testedThreadNotFound ) { 1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage("FINISH"); 1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\n## Some of tested threads are not found!"); 1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send signal to debuggee to continue and to finish some first threads..."); 1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Wait signal from the debuggee that some first threads finished..."); 1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String messageFromDebuggee = synchronizer.receiveMessageWithoutException("testThreadGroup002"); 1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! JPDADebuggeeSynchronizer.SGNL_READY.equals(messageFromDebuggee) ) { 1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Could NOT receive expected signal from debuggee!"); 1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\n## Could NOT receive expected signal from debuggee! "); 1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int finishedTestedThreadsNumber = testedThreadsNumber/2; 1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("==> Number of debuggee's finished threads = " + finishedTestedThreadsNumber); 1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket packet = null; 1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = null; 1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String errorMessage = ""; 1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean statusCommandFailed = false; 1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean threadStatusFailed = false; 1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean groupIDFailed = false; 1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean threadGroupCommandFailed = false; 1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean groupNameFailed = false; 1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("\n==> Check that ThreadReference.ThreadGroup command returns expected thread group for each tsted thread..."); 1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int threadCount = 0; threadCount < testedThreadsNumber; threadCount++) { 1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Check for Thread: threadID = " + testedThreadsIDs[threadCount] 1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "; threadName = " + testedThreadsNames[threadCount]); 1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Status command..."); 1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.StatusCommand); 1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsReferenceTypeID(testedThreadsIDs[threadCount]); 1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Status command") ) { 1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes statusCommandFailed = true; 1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int threadStatus = reply.getNextValueAsInt(); 1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes //int suspendStatus = 1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); 1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> thread status of checked thread = " + threadStatus + "(" 1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.ThreadStatus.getName(threadStatus) + ")"); 1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.ThreadGroup command..."); 1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.ThreadGroupCommand); 1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(testedThreadsIDs[threadCount]); 1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.ThreadGroup command") ) { 1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadGroupCommandFailed = true; 1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long threadGroupID = reply.getNextValueAsThreadGroupID(); 2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> thread groupID for checked thread = " + threadGroupID); 2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (threadStatus == JDWPConstants.ThreadStatus.ZOMBIE) { 2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( threadCount >= finishedTestedThreadsNumber ) { 2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Unexpected status for checked thread!"); 2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Thread witn number = " + threadCount + 2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes " should NOT be ZOMBIE!"); 2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadStatusFailed = true; 2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // according to JVMTI spec groupID is NULL if the thread has died 2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( threadGroupID != 0 ) { 2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Unexpected thread groupID for checked thread with status = ZOMBIE!"); 2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Expected thread groupID = 0"); 2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes groupIDFailed = true; 2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( threadCount < finishedTestedThreadsNumber ) { 2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Unexpected status for checked thread!"); 2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Thread witn number = " + threadCount + 2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes " should be ZOMBIE!"); 2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadStatusFailed = true; 2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( threadGroupID == 0 ) { 2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Unexpected thread groupID for checked thread with status != ZOMBIE!"); 2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Expected thread groupID != 0"); 2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes groupIDFailed = true; 2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Getting thread group name by ThreadGroupReference.Name command..."); 2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadGroupReferenceCommandSet.CommandSetID, 2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadGroupReferenceCommandSet.NameCommand); 2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(threadGroupID); 2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.ThreadGroup command") ) { 2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadGroupCommandFailed = true; 2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String threadGroupName = reply.getNextValueAsString(); 2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> thread group name for checked thread = '" + threadGroupName + "'"); 2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! testedThreadGroupsNames[threadCount].equals(threadGroupName) ) { 2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Unexpected thread group name for checked thread!"); 2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Expected thread group name = '" + 2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadGroupsNames[threadCount] + "'"); 2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes groupNameFailed = true; 2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( statusCommandFailed ) { 2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + 2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "## Error found out while ThreadReference.Status command performing!\n"; 2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( threadStatusFailed ) { 2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + 2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "## Unexpected thread status found out for some tested threads!\n"; 2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( groupIDFailed ) { 2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + 2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "## Unexpected thread groupID found out for some tested threads!\n"; 2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( threadGroupCommandFailed ) { 2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + 2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "## Error found out while ThreadReference.ThreadGroup command performing!\n"; 2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( groupNameFailed ) { 2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + 2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "## Unexpected thread group name found out for some tested threads!\n"; 2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send signal to debuggee to finish..."); 2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! errorMessage.equals("") ) { 2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\ntestThreadGroup002 FAILED:\n" + errorMessage); 2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> testThreadGroup002 - OK!"); 2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes} 292