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 Vitaly A. Provodin, Anatoly F. Bondarenko 215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 15.02.2005 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 Hughes 355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * JDWP Unit test for ThreadReference.Resume command. 385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class ResumeTest 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/ResumeDebuggee;"; 455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected String getDebuggeeClassName() { 475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ResumeDebuggee"; 485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This testcase exercises ThreadReference.Resume command. 525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>At first the test starts ResumeDebuggee which starts and runs some tested threads. 535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> Then the tests checks that for every tested thread the ThreadReference.Resume 545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * command acts according to spec: 555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - command does not cause any error if thread is not suspended; 565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - command does not resume thread actually if number of suspendings 575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is greater than number of resumings; 585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - command resumes thread actually if number of suspendings 595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is equal to number of resumings; 605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testResume001() { 625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> testResume001: START..."); 635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String debuggeeMessage = synchronizer.receiveMessage(); 645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int testedThreadsNumber = 0; 655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsNumber = Integer.valueOf(debuggeeMessage).intValue(); 675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (NumberFormatException exception) { 685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("## FAILURE: Exception while getting number of started threads from debuggee = " + exception); 705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes setStaticIntField(debuggeeSignature, ResumeDebuggee.TO_FINISH_DEBUGGEE_FIELD_NAME, 99); 715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\n## Can NOT get number of started threads from debuggee! "); 725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsNumber++; // to add debuggee main thread 745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Number of threads in debuggee to test = " + testedThreadsNumber); 755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String[] testedThreadsNames = new String[testedThreadsNumber]; 765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long[] testedThreadsIDs = new long[testedThreadsNumber]; 775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String debuggeeMainThreadName = synchronizer.receiveMessage(); 785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < testedThreadsNumber; i++) { 795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( i < (testedThreadsNumber-1) ) { 805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsNames[i] = ResumeDebuggee.THREAD_NAME_PATTERN + i; 815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsNames[i] = debuggeeMainThreadName; 835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsIDs[i] = 0; 855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // getting ID of the tested thread 885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket allThreadIDReply = null; 895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes allThreadIDReply = debuggeeWrapper.vmMirror.getAllThreadID(); 915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (ReplyErrorCodeException exception) { 925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("## FAILURE: Exception in vmMirror.getAllThreadID() = " + exception); 945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes setStaticIntField(debuggeeSignature, ResumeDebuggee.TO_FINISH_DEBUGGEE_FIELD_NAME, 99); 955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\n## Can NOT get all ThreadID in debuggee! "); 965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int threads = allThreadIDReply.getNextValueAsInt(); 985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Number of all threads in debuggee = " + threads); 995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < threads; i++) { 1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long threadID = allThreadIDReply.getNextValueAsThreadID(); 1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String threadName = null; 1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadName = debuggeeWrapper.vmMirror.getThreadName(threadID); 1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (ReplyErrorCodeException exception) { 1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("==> WARNING: Can NOT get thread name for threadID = " + threadID); 1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int k = 0; 1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (; k < testedThreadsNumber; k++) { 1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( threadName.equals(testedThreadsNames[k]) ) { 1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadsIDs[k] = threadID; 1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean testedThreadNotFound = false; 1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < testedThreadsNumber; i++) { 1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( testedThreadsIDs[i] == 0 ) { 1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Tested thread is not found out among debuggee threads!"); 1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Thread name = " + testedThreadsNames[i]); 1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes testedThreadNotFound = true; 1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( testedThreadNotFound ) { 1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes setStaticIntField(debuggeeSignature, ResumeDebuggee.TO_FINISH_DEBUGGEE_FIELD_NAME, 99); 1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\n## Some of tested threads are not found!"); 1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket packet = null; 1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = null; 1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String errorMessage = ""; 1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean resumeCommandFailed = false; 1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean statusCommandFailed = false; 1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean suspendStatusFailed = false; 1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean suspendCommandFailed = false; 1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("\n==> Check that ThreadReference.Resume command does not cause any error if thread is not suspended..."); 1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < testedThreadsNumber; i++) { 1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Check for Thread: threadID = " + testedThreadsIDs[i] 1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "; threadName = " + testedThreadsNames[i]); 1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Resume command..."); 1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.ResumeCommand); 1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(testedThreadsIDs[i]); 1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Resume command") ) { 1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes resumeCommandFailed = true; 1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> OK - ThreadReference.Resume command without any error!"); 1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( resumeCommandFailed ) { 1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes setStaticIntField(debuggeeSignature, ResumeDebuggee.TO_FINISH_DEBUGGEE_FIELD_NAME, 99); 1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\n## Error found out while ThreadReference.Resume command performing!"); 1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("\n==> Check that ThreadReference.Resume command resumes threads after VirtualMachine.Suspend command..."); 1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Send VirtualMachine.Suspend command..."); 1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CommandSetID, 1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.SuspendCommand); 1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int errorCode = reply.getErrorCode(); 1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( errorCode != JDWPConstants.Error.NONE ) { 1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes setStaticIntField(debuggeeSignature, ResumeDebuggee.TO_FINISH_DEBUGGEE_FIELD_NAME, 99); 1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: VirtualMachine.Suspend command returns error = " + errorCode 1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "(" + JDWPConstants.Error.getName(errorCode) + ")"); 1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("## VirtualMachine.Suspend command FAILED!"); 1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> VirtualMachine.Suspend command is OK!"); 1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < testedThreadsNumber; i++) { 1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Check for Thread: threadID = " + testedThreadsIDs[i] 1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "; threadName = " + testedThreadsNames[i]); 1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Status command..."); 1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.StatusCommand); 1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsReferenceTypeID(testedThreadsIDs[i]); 1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Status command") ) { 1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes statusCommandFailed = true; 1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int threadStatus = reply.getNextValueAsInt(); 1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int suspendStatus = reply.getNextValueAsInt(); 1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> threadStatus = " + threadStatus + "(" 2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.ThreadStatus.getName(threadStatus) + ")"); 2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> suspendStatus = " + suspendStatus + "(" 2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.SuspendStatus.getName(suspendStatus) + ")"); 2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (suspendStatus 2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes != JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED) { 2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Unexpected suspendStatus for thread!"); 2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Expected suspendStatus = " 2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED 2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "(" + JDWPConstants.SuspendStatus.getName 2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes (JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED) +")"); 2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes suspendStatusFailed = true; 2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Resume command..."); 2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.ResumeCommand); 2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(testedThreadsIDs[i]); 2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Resume command") ) { 2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes resumeCommandFailed = true; 2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Status command..."); 2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.StatusCommand); 2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsReferenceTypeID(testedThreadsIDs[i]); 2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Status command") ) { 2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes statusCommandFailed = true; 2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadStatus = reply.getNextValueAsInt(); 2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes suspendStatus = reply.getNextValueAsInt(); 2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> threadStatus = " + threadStatus + "(" 2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.ThreadStatus.getName(threadStatus) + ")"); 2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> suspendStatus = " + suspendStatus + "(" 2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.SuspendStatus.getName(suspendStatus) + ")"); 2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (suspendStatus 2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes == JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED) { 2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("## FAILURE: Thread still is suspended after ThreadReference.Resume command!"); 2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes suspendStatusFailed = true; 2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Send VirtualMachine.Resume command..."); 2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CommandSetID, 2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.ResumeCommand); 2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorCode = reply.getErrorCode(); 2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( errorCode != JDWPConstants.Error.NONE ) { 2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes setStaticIntField(debuggeeSignature, ResumeDebuggee.TO_FINISH_DEBUGGEE_FIELD_NAME, 99); 2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: VirtualMachine.Resume command returns error = " + errorCode 2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "(" + JDWPConstants.Error.getName(errorCode) + ")"); 2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("## VirtualMachine.Resume command FAILED!"); 2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> VirtualMachine.Resume command is OK!"); 2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( statusCommandFailed ) { 2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + "## Error found out while ThreadReference.Status command performing!\n"; 2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( suspendStatusFailed ) { 2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + "## Unexpected suspendStatus found out!\n"; 2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( resumeCommandFailed ) { 2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + "## Error found out while ThreadReference.Resume command performing!\n"; 2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! errorMessage.equals("") ) { 2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes setStaticIntField(debuggeeSignature, ResumeDebuggee.TO_FINISH_DEBUGGEE_FIELD_NAME, 99); 2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\ntestResume001 FAILED:\n" + errorMessage); 2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("\n==> Check ThreadReference.Resume command after ThreadReference.Suspend command..."); 2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int suspendNumber = 3; 2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < testedThreadsNumber; i++) { 2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Check for Thread: threadID = " + testedThreadsIDs[i] 2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "; threadName = " + testedThreadsNames[i]); 2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Suspend commands: number of commandss = " 2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + suspendNumber + "..."); 2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int j = 0; 2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (; j < suspendNumber; j++) { 2925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 2935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 2945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.SuspendCommand); 2955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(testedThreadsIDs[i]); 2965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 2975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Suspend command") ) { 2985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 2995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( j < suspendNumber ) { 3025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes suspendCommandFailed = true; 3035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 3045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Status command..."); 3075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 3085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 3095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.StatusCommand); 3105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsReferenceTypeID(testedThreadsIDs[i]); 3115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 3125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Status command") ) { 3135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes statusCommandFailed = true; 3145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 3155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int threadStatus = reply.getNextValueAsInt(); 3185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int suspendStatus = reply.getNextValueAsInt(); 3195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> threadStatus = " + threadStatus + "(" 3215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.ThreadStatus.getName(threadStatus) + ")"); 3225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> suspendStatus = " + suspendStatus + "(" 3235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.SuspendStatus.getName(suspendStatus) + ")"); 3245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (suspendStatus 3255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes != JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED) { 3265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Unexpected suspendStatus for thread!"); 3275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Expected suspendStatus = " 3285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED 3295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "(" + JDWPConstants.SuspendStatus.getName 3305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes (JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED) +")"); 3315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes suspendStatusFailed = true; 3325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 3335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 3365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("==> Send ThreadReference.Resume command 1 time - thread must NOT be actually resumed..."); 3375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 3385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 3395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.ResumeCommand); 3405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(testedThreadsIDs[i]); 3415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 3425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Resume command") ) { 3435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes resumeCommandFailed = true; 3445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 3455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Status command..."); 3485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 3495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 3505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.StatusCommand); 3515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsReferenceTypeID(testedThreadsIDs[i]); 3525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 3535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Status command") ) { 3545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes statusCommandFailed = true; 3555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 3565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadStatus = reply.getNextValueAsInt(); 3595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes suspendStatus = reply.getNextValueAsInt(); 3605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> threadStatus = " + threadStatus + "(" 3625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.ThreadStatus.getName(threadStatus) + ")"); 3635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> suspendStatus = " + suspendStatus + "(" 3645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.SuspendStatus.getName(suspendStatus) + ")"); 3655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (suspendStatus 3665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes != JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED) { 3675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Unexpected suspendStatus for thread!"); 3685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## Expected suspendStatus = " 3695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED 3705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "(" + JDWPConstants.SuspendStatus.getName 3715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes (JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED) +")"); 3725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes suspendStatusFailed = true; 3735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 3745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Resume commands: number of commands = " 3775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + (suspendNumber-1) + " - thread must be actually resumed"); 3785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes j = 0; 3795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (; j < (suspendNumber-1); j++) { 3805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 3815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 3825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.ResumeCommand); 3835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(testedThreadsIDs[i]); 3845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 3855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Resume command") ) { 3865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 3875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( j < (suspendNumber-1) ) { 3905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes resumeCommandFailed = true; 3915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 3925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Send ThreadReference.Status command..."); 3955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 3965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 3975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.StatusCommand); 3985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsReferenceTypeID(testedThreadsIDs[i]); 3995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 4005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! checkReplyPacketWithoutFail(reply, "ThreadReference.Status command") ) { 4015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes statusCommandFailed = true; 4025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 4035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadStatus = reply.getNextValueAsInt(); 4065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes suspendStatus = reply.getNextValueAsInt(); 4075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> threadStatus = " + threadStatus + "(" 4095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.ThreadStatus.getName(threadStatus) + ")"); 4105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> suspendStatus = " + suspendStatus + "(" 4115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.SuspendStatus.getName(suspendStatus) + ")"); 4125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (suspendStatus 4135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes == JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED) { 4145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 4155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("## FAILURE: Thread still is suspended after ThreadReference.Resume commands: " 4165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "number of total resume commands = "+ suspendNumber + " !"); 4175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes suspendStatusFailed = true; 4185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( suspendCommandFailed ) { 4225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + "## Error found out while ThreadReference.Suspend command performing!\n"; 4235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( resumeCommandFailed ) { 4255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + "## Error found out while ThreadReference.Resume command performing!\n"; 4265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( statusCommandFailed ) { 4285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + "## Error found out while ThreadReference.Status command performing!\n"; 4295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( suspendStatusFailed ) { 4315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes errorMessage = errorMessage + "## Unexpected suspendStatus found out!\n"; 4325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes setStaticIntField(debuggeeSignature, ResumeDebuggee.TO_FINISH_DEBUGGEE_FIELD_NAME, 99); 4355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( ! errorMessage.equals("") ) { 4365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("\ntestResume001 FAILED:\n" + errorMessage); 4375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> testResume001 - OK!"); 4405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes} 442