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 Hughespackage org.apache.harmony.jpda.tests.jdwp.ObjectReference; 205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.Random; 225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket; 245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands; 255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants; 265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket; 275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.Value; 285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase; 295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer; 305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class ReferringObjectsTest extends JDWPSyncTestCase { 325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final int testStatusPassed = 0; 345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final int testStatusFailed = -1; 365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static int maxReferrers; 385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final String thisCommandName = "ObjectReference.ReferringObjects command"; 405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsDebuggee;"; 425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final String referreeObjSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsReferree001;"; 445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final String referrerObjSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsReferrer001;"; 465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected String getDebuggeeClassName() { 485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.ReferringObjectsDebuggee"; 495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This testcase exercises ObjectReference.ReferringObjects command. 535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>The test starts ReferringObjectsDebuggee class, requests referree objectID, 545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * for this class by ReferenceType.Instances command, then performs ObjectReference.ReferringObjects 555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * command and checks that returned instances are equal to the expected referrer objects. Since maxReferrers 565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * equals zero, all instances are returned. 575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testReferringObjects_MaxReferrersIsZero() { 595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes maxReferrers = 0; 605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes DoTestReferringObjects(); 615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This testcase exercises ObjectReference.ReferringObjects command. 655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>The test starts ReferringObjectsDebuggee class, requests referree objectID, 665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * for this class by ReferenceType.Instances command, then performs ObjectReference.ReferringObjects 675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * command and checks that returned instances are equal to the expected referrer objects. Since maxReferrers 685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is more than the number of referrer objects, all instances are returned. 695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testReferringObjects_MaxReferrersIsLarge() { 715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes maxReferrers = 20; 725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes DoTestReferringObjects(); 735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This testcase exercises ObjectReference.ReferringObjects command. 775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>The test starts ReferringObjectsDebuggee class, requests referree objectID, 785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * for this class by ReferenceType.Instances command, then performs ObjectReference.ReferringObjects 795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * command and checks that returned instances are equal to the expected referrer objects. Since maxReferrers 805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is less than the number of referrer objects, the number of instances returned is equal to maxReferrers. 815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testReferringObjects_MaxReferrersIsSmall() { 835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes maxReferrers = 1; 845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes DoTestReferringObjects(); 855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This is the real body of the testcase which exercises ObjectReference.ReferringObjects command. 895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>The test starts ReferringObjectsDebuggee class, requests referree objectID, 905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * for this class by ReferenceType.Instances command, then performs ObjectReference.ReferringObjects 915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * command and checks that returned instances are equal to the expected referrer objects. 925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void DoTestReferringObjects() { 940d3a487c78cf562bf179609ac4737a873463a454Sebastien Hertz String thisTestName = getName(); 955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": START..."); 975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get the number of referrer objects in ReferringObjectsDebugee 1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long debuggeeRefTypeID = getClassIDBySignature(debuggeeSignature); 1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long referringObjNumID = debuggeeWrapper.vmMirror.getFieldID( 1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes debuggeeRefTypeID, "referringObjNum"); 1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long[] fieldIDs = new long[1]; 1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fieldIDs[0] = referringObjNumID; 1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value[] values = debuggeeWrapper.vmMirror.getReferenceTypeValues( 1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes debuggeeRefTypeID, fieldIDs); 1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int expectedReferringObjNum = values[0].getIntValue(); 1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("=> ReferringObjNum in debuggee is: " + expectedReferringObjNum); 1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if(maxReferrers > 0) { 1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes expectedReferringObjNum = (maxReferrers > expectedReferringObjNum) ? expectedReferringObjNum : maxReferrers; 1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Compose Instances command to get referree objectID 1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket InstancesCommand = new CommandPacket( 1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.InstancesCommand); 1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long referreeObjTypeID = getClassIDBySignature(referreeObjSignature); 1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes InstancesCommand.setNextValueAsReferenceTypeID(referreeObjTypeID); 1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes InstancesCommand.setNextValueAsInt(1); 1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket checkedReply = debuggeeWrapper.vmMirror.performCommand(InstancesCommand); 1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes InstancesCommand = null; 1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get the number of instances that returned. 1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int objNum = checkedReply.getNextValueAsInt(); 1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get the tagged-objectID 1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte tag = checkedReply.getNextValueAsByte(); 1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long objectID = checkedReply.getNextValueAsObjectID(); 1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Compose ReferringObjects commnad 1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket ReferringObjectsCommand = new CommandPacket( 1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.ReferringObjectsCommand); 1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReferringObjectsCommand.setNextValueAsObjectID(objectID); 1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReferringObjectsCommand.setNextValueAsInt(maxReferrers); 1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Perform ReferringObjects command and attain reply package 1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkedReply = debuggeeWrapper.vmMirror 1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .performCommand(ReferringObjectsCommand); 1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReferringObjectsCommand = null; 1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get referrer objects numbers 1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int referringObjects = checkedReply.getNextValueAsInt(); 1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals(thisCommandName + "returned instances number is wrong.", expectedReferringObjNum, referringObjects,null,null); 1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long referrerTypeID = getClassIDBySignature(referrerObjSignature); 1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long referrerFieldID = debuggeeWrapper.vmMirror.getFieldID( 1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes referrerTypeID, "isReferrer"); 1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Check the returned objects are referrer objects 1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < referringObjects; i++) { 1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes //Get the tagged-objectID 1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes tag = checkedReply.getNextValueAsByte(); 1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals(thisCommandName 1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "returned object tag is invalid.", 'L', tag, null, null); 1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes objectID = checkedReply.getNextValueAsObjectID(); 1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("=> ObjectID is: " + objectID); 1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes values = debuggeeWrapper.vmMirror.getObjectReferenceValues( 1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes objectID, new long[] { referrerFieldID }); 1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean isReferrer = values[0].getBooleanValue(); 1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (!isReferrer) { 1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail(thisCommandName 1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + "returned object is not a referrer which references this object."); 1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("=> CHECK: PASSED: expected instances are returned:"); 1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("=> Returned referringObjects number is" + referringObjects); 1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": FINISH"); 1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertAllDataRead(checkedReply); 1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This testcase exercises ObjectReference.ReferringObjects command. <BR> 1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Compose a ReferringObjects command with negative maxReferrers 1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The vm should throw a ILLEGAL_ARGUMENT exception. 1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testReferringObjects_IllegalArgument() { 1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String thisTestName = "testReferringObjects_IllegalArgument"; 1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int maxReferrers = -1; 1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": START..."); 1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Compose Instances command to get referree objectID 1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket InstancesCommand = new CommandPacket( 1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.InstancesCommand); 1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long referreeObjTypeID = getClassIDBySignature(referreeObjSignature); 1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes InstancesCommand.setNextValueAsReferenceTypeID(referreeObjTypeID); 1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes InstancesCommand.setNextValueAsInt(1); 2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket checkedReply = debuggeeWrapper.vmMirror.performCommand(InstancesCommand); 2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes InstancesCommand = null; 2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get the number of instances that returned. 2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int objNum = checkedReply.getNextValueAsInt(); 2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get the tagged-objectID 2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte tag = checkedReply.getNextValueAsByte(); 2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long objectID = checkedReply.getNextValueAsObjectID(); 2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Compose ReferringObjects commnad 2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket ReferringObjectsCommand = new CommandPacket( 2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.ReferringObjectsCommand); 2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReferringObjectsCommand.setNextValueAsObjectID(objectID); 2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReferringObjectsCommand.setNextValueAsInt(maxReferrers); 2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Perform ReferringObjects command and attain reply package 2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkedReply = debuggeeWrapper.vmMirror 2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .performCommand(ReferringObjectsCommand); 2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReferringObjectsCommand = null; 2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes short errorCode = checkedReply.getErrorCode(); 2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (errorCode != JDWPConstants.Error.NONE) { 2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (errorCode == JDWPConstants.Error.NOT_IMPLEMENTED) { 2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("=> CHECK PASSED: Expected error (NOT_IMPLEMENTED) is returned"); 2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return; 2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes else if(errorCode == JDWPConstants.Error.ILLEGAL_ARGUMENT) { 2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("=> CHECK PASSED: Expected error (ILLEGAL_ARGUMENT) is returned"); 2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return; 2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail(thisCommandName + " should throw ILLEGAL_ARGUMENT exception when maxReferrers is negative."); 2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes} 237