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>&nbsp;&nbsp; - command does not cause any error if thread is not suspended;
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <BR>&nbsp;&nbsp; - command does not resume thread actually if number of suspendings
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *   is greater than number of resumings;
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <BR>&nbsp;&nbsp; - 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