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 03.03.2005
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.jdwp.ObjectReference;
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.Value;
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/**
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * JDWP Unit test for ObjectReference.MonitorInfo command.
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class MonitorInfoTest extends JDWPSyncTestCase {
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    static final String thisCommandName = "ObjectReference.MonitorInfo command";
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoDebuggee;";
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected String getDebuggeeClassName() {
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.MonitorInfoDebuggee";
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This test exercises ObjectReference.MonitorInfo command.
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <BR>The test starts MonitorInfoDebuggee class, gets objectID
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * as value of static field of this class which (field) represents checked object.
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Then for this objectID test executes ObjectReference.MonitorInfo command for
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * checked object and checks that command returns the expected monitor info:
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <BR>monitorOwnerThreadID = 0, monitorEntryCount = 0, monitorWaiters = 0
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <BR>Then test waits for Debuggee to continue and to enter in synchronized block
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and again executes ObjectReference.MonitorInfo for checked object.
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Then test checks that expected results are received:
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <BR>monitorOwnerThreadID = 'not null', monitorEntryCount = 1, monitorWaiters = 0
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testMonitorInfo001() {
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String thisTestName = "testMonitorInfo001";
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        //check capability, relevant for this test
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Check capability: canGetMonitorInfo");
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        debuggeeWrapper.vmMirror.capabilities();
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        boolean isCapability = debuggeeWrapper.vmMirror.targetVMCapabilities.canGetMonitorInfo;
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (!isCapability) {
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("##WARNING: this VM doesn't possess capability: canGetMonitorInfo");
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return;
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": START...");
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String failMessage = "";
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        finalSyncMessage = "TO_FINISH";
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long refTypeID = getClassIDBySignature(debuggeeSignature);
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Debuggee class = " + getDebuggeeClassName());
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> referenceTypeID for Debuggee class = " + refTypeID);
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long checkedFieldID = checkField(refTypeID, "lockObject");
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ("=> Send ReferenceType::GetValues command for received fieldID and get ObjectID to check...");
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        CommandPacket getValuesCommand = new CommandPacket(
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand);
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getValuesCommand.setNextValueAsReferenceTypeID(refTypeID);
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getValuesCommand.setNextValueAsInt(1);
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getValuesCommand.setNextValueAsFieldID(checkedFieldID);
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ReplyPacket getValuesReply = debuggeeWrapper.vmMirror.performCommand(getValuesCommand);
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getValuesCommand = null;
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(getValuesReply, "ReferenceType::GetValues command");
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int returnedValuesNumber = getValuesReply.getNextValueAsInt();
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned values number = " + returnedValuesNumber);
1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals("Invalid number of values returned by ReferenceType::GetValues command,", 1, returnedValuesNumber);
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Value checkedObjectFieldValue = getValuesReply.getNextValueAsValue();
1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte checkedObjectFieldTag = checkedObjectFieldValue.getTag();
1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned field value tag for checked object= " + checkedObjectFieldTag
1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            + "(" + JDWPConstants.Tag.getName(checkedObjectFieldTag) + ")");
1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals("Invalid value tag for checked object,", JDWPConstants.Tag.OBJECT_TAG, checkedObjectFieldTag
1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                , JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG)
1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                , JDWPConstants.Tag.getName(checkedObjectFieldTag));
1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long checkedObjectID = checkedObjectFieldValue.getLongValue();
1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned checked ObjectID = " + checkedObjectID);
1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Send VirtualMachine::Suspend command...");
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        CommandPacket suspendCommand = new CommandPacket(
1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.VirtualMachineCommandSet.CommandSetID,
1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.VirtualMachineCommandSet.SuspendCommand);
1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ReplyPacket suspendReply = debuggeeWrapper.vmMirror.performCommand(suspendCommand);
1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        suspendCommand = null;
1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(suspendReply, "VirtualMachine::Suspend command");
1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            ("\n=> CHECK 1: send " + thisCommandName + " for checked ObjectID and check reply...");
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        CommandPacket checkedCommand = new CommandPacket(
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.MonitorInfoCommand);
1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand.setNextValueAsObjectID(checkedObjectID);
1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ReplyPacket checkedReply = debuggeeWrapper.vmMirror.performCommand(checkedCommand);
1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand = null;
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        short errorCode = checkedReply.getErrorCode();
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ( errorCode == JDWPConstants.Error.NOT_IMPLEMENTED ) {
1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            // it is possible case
1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("=> " +  thisCommandName + " returns ERROR = " + errorCode
1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + "(" + JDWPConstants.Error.getName(errorCode) + ")");
1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("=> It is possible case - CHECK 1 PASSED");
1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("=> Send to Debuggee signal to funish ...");
1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            synchronizer.sendMessage("TO_FINISH");
1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": FINISH");
1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } else {
1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            checkReplyPacket(checkedReply, thisCommandName);
1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long monitorOwnerThreadID = checkedReply.getNextValueAsThreadID();
1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned monitorOwnerThreadID = " + monitorOwnerThreadID);
1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ( monitorOwnerThreadID != 0) {
1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println
1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ("## FAILURE: " + thisCommandName + " returns unexpected monitorOwnerThreadID:" +
1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        monitorOwnerThreadID);
1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("## Expected monitorOwnerThreadID = 0");
1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            failMessage = failMessage +
1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                thisCommandName + " returns unexpected monitorOwnerThreadID: " +
1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                monitorOwnerThreadID +
1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ", Expected: 0\n";
1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int monitorEntryCount = checkedReply.getNextValueAsInt();
1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned monitorEntryCount = " + monitorEntryCount);
1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ( monitorEntryCount != 0) {
1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println
1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ("## FAILURE: " + thisCommandName + " returns unexpected monitorEntryCount:");
1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("## Expected monitorEntryCount = 0");
1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            failMessage = failMessage +
1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                thisCommandName + " returns unexpected monitorEntryCount:" +
1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                monitorEntryCount +
1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ", expected: 0\n";
1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int monitorWaiters = checkedReply.getNextValueAsInt();
1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned monitorWaiters = " + monitorWaiters);
1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ( monitorWaiters != 0) {
1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println
1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ("## FAILURE: " + thisCommandName + " returns unexpected monitorWaiters:");
1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("## Expected monitorWaiters = 0");
1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            failMessage = failMessage +
1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                thisCommandName + " returns unexpected monitorWaiters:" +
1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                monitorWaiters +
1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ", expected: 0\n";
1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertAllDataRead(checkedReply);
1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> CHECK 1: PASSED - expected monitor info is received");
1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedReply = null;
1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        resumeDebuggee();
1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Send to Debuggee signal to continue and to enter in synchronized block ...");
1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        finalSyncMessage = null;
1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Send VirtualMachine::Suspend command...");
1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        suspendCommand = new CommandPacket(
2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.VirtualMachineCommandSet.CommandSetID,
2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.VirtualMachineCommandSet.SuspendCommand);
2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        suspendReply = debuggeeWrapper.vmMirror.performCommand(suspendCommand);
2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        suspendCommand = null;
2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(suspendReply, "VirtualMachine::Suspend command");
2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println
2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            ("\n=> CHECK 2: send " + thisCommandName + " for checked ObjectID when it is locked...");
2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand = new CommandPacket(
2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.MonitorInfoCommand);
2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand.setNextValueAsObjectID(checkedObjectID);
2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedReply = debuggeeWrapper.vmMirror.performCommand(checkedCommand);
2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand = null;
2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(checkedReply, thisCommandName);
2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        monitorOwnerThreadID = checkedReply.getNextValueAsThreadID();
2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned monitorOwnerThreadID = " + monitorOwnerThreadID);
2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ( monitorOwnerThreadID == 0) {
2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println
2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ("## FAILURE: " + thisCommandName + " returns unexpected monitorOwnerThreadID:");
2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("## Expected monitorOwnerThreadID = 'not null'");
2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            failMessage = failMessage +
2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                thisCommandName + " returns unexpected monitorOwnerThreadID: 0" +
2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ", Expected monitorOwnerThreadID: 'not null'\n";
2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        monitorEntryCount = checkedReply.getNextValueAsInt();
2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned monitorEntryCount = " + monitorEntryCount);
2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ( monitorEntryCount != 1) {
2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println
2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ("## FAILURE: " + thisCommandName + " returns unexpected monitorEntryCount:" +
2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        monitorEntryCount);
2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("## Expected monitorEntryCount = 1");
2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            failMessage = failMessage +
2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                thisCommandName + " returns unexpected monitorEntryCount: " +
2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                monitorEntryCount +
2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ", expected: 1\n";
2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        monitorWaiters = checkedReply.getNextValueAsInt();
2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned monitorWaiters = " + monitorWaiters);
2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ( monitorWaiters != 0) {
2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println
2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ("## FAILURE: " + thisCommandName + " returns unexpected monitorWaiters:" +
2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        monitorWaiters);
2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("## Expected monitorWaiters = 0");
2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            failMessage = failMessage +
2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                thisCommandName + " returns unexpected monitorWaiters: " +
2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                monitorWaiters +
2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ", expected: 0\n";
2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> CHECK 2: PASSED - expected monitor info is received");
2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("\n=> Send VirtualMachine::Resume command ...");
2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        resumeDebuggee();
2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Send to Debuggee signal to funish ...");
2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": FINISH");
2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertAllDataRead(checkedReply);
2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (failMessage.length() > 0) {
2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            fail(failMessage);
2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
273