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 Viacheslav G. Rybalov 215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 10.03.2005 255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.jdwp.ClassType; 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.TaggedObject; 335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.Value; 345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase; 355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer; 365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * JDWP unit test for ClassType.InvokeMethod command. 405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class InvokeMethodTest extends JDWPSyncTestCase { 425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final int testStatusPassed = 0; 445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes static final int testStatusFailed = -1; 455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected String getDebuggeeClassName() { 475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.InvokeMethodDebuggee"; 485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This testcase exercises ClassType.InvokeMethod command. 525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>At first the test starts debuggee. 535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>Then does the following checks: 545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - send ClassType.InvokeMethod command for method, 555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * which should not throw any Exception, and checks, 565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * that returned value is expected int value and returned 575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * exception object is null; 585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - send ClassType.InvokeMethod command for method, 595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * which should throw some Exception, and checks, that 605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * returned exception object is not null and has expected attributes; 615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testInvokeMethod001() { 635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get referenceTypeID 665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket packet = new CommandPacket( 675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CommandSetID, 685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.ClassesBySignatureCommand); 695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String classSig = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodDebuggee;"; 705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsString(classSig); 715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet); 725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "VirtualMachine::ClassesBySignature command"); 735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int classes = reply.getNextValueAsInt(); 755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("VirtualMachine::ClassesBySignature returned invalid number of classes,", 765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1, classes); //this class may be loaded only once 775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte refTypeTag = reply.getNextValueAsByte(); 785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long typeID = reply.getNextValueAsReferenceTypeID(); 795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int status = reply.getNextValueAsInt(); 805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertAllDataRead(reply); 815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("VirtualMachine::ClassesBySignature returned Invalid type tag,", 825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPConstants.TypeTag.CLASS, refTypeTag, 835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPConstants.TypeTag.getName(JDWPConstants.TypeTag.CLASS), 845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPConstants.TypeTag.getName(refTypeTag)); 855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" VirtualMachine.ClassesBySignature: classes=" 875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + classes + " refTypeTag=" + refTypeTag + " typeID= " + typeID 885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + " status=" + status); 895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get methodID 915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.MethodsCommand); 945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsClassID(typeID); 955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "ReferenceType::Methods command"); 975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int declared = reply.getNextValueAsInt(); 995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" ReferenceType.Methods: declared=" + declared); 1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long targetMethodID = 0; 1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < declared; i++) { 1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long methodID = reply.getNextValueAsMethodID(); 1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String name = reply.getNextValueAsString(); 1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String signature = reply.getNextValueAsString(); 1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int modBits = reply.getNextValueAsInt(); 1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" methodID=" + methodID + " name=" + name 1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + " signature=" + signature + " modBits=" + modBits); 1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (name.equals("testMethod2")) { 1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetMethodID = methodID; 1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertAllDataRead(reply); 1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set EventRequest 1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.CommandSetID, 1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.SetCommand); 1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte(JDWPConstants.EventKind.METHOD_ENTRY); 1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte(JDWPConstants.SuspendPolicy.ALL); 1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(1); 1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte((byte) 5); 1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsString("*.InvokeMethodDebuggee"); 1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "EventRequest::Set command"); 1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int requestID = reply.getNextValueAsInt(); 1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" EventRequest.Set: requestID=" + requestID); 1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertAllDataRead(reply); 1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long targetThreadID = 0; 1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Wait event 1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket event = debuggeeWrapper.vmMirror.receiveEvent(); 1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = event.getNextValueAsByte(); 1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int events = event.getNextValueAsInt(); 1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" EVENT_THREAD event: suspendPolicy=" + suspendPolicy + " events=" + events); 1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < events; i++) { 1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = event.getNextValueAsByte(); 1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int newRequestID = event.getNextValueAsInt(); 1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long threadID = event.getNextValueAsThreadID(); 1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes //Location location = 1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes event.getNextValueAsLocation(); 1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" EVENT_THREAD event " + i + ": eventKind=" 1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + eventKind + " requestID=" + newRequestID + " threadID=" 1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + threadID); 1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (newRequestID == requestID) { 1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetThreadID = threadID; 1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertAllDataRead(event); 1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertTrue("Invalid targetThreadID, must be != 0", targetThreadID != 0); 1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Let's clear event request 1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.CommandSetID, 1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.ClearCommand); 1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte(JDWPConstants.EventKind.METHOD_ENTRY); 1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(requestID); 1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "EventRequest::Clear command"); 1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertAllDataRead(reply); 1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Make InvokeMethod without Exception 1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.CommandSetID, 1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.InvokeMethodCommand); 1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsClassID(typeID); 1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(targetThreadID); 1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsMethodID(targetMethodID); 1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(1); 1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsValue(new Value(false)); 1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(0); 1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" Send ClassType.InvokeMethod without Exception"); 1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "ClassType::InvokeMethod command"); 1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value returnValue = reply.getNextValueAsValue(); 1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertNotNull("Returned value is null", returnValue); 1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("Invalid returned value,", 234, returnValue.getIntValue()); 1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" ClassType.InvokeMethod: returnValue.getIntValue()=" 1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + returnValue.getIntValue()); 1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TaggedObject exception = reply.getNextValueAsTaggedObject(); 1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertNotNull("Returned exception is null", exception); 1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertTrue("Invalid exception object ID:<" + exception.objectID + ">", exception.objectID == 0); 1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("Invalid exception tag,", JDWPConstants.Tag.OBJECT_TAG, exception.tag 1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes , JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG) 1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes , JDWPConstants.Tag.getName(exception.tag)); 1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" ClassType.InvokeMethod: exception.tag=" 1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + exception.tag + " exception.objectID=" + exception.objectID); 1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertAllDataRead(reply); 1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Make InvokeMethod with Exception 1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.CommandSetID, 1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.InvokeMethodCommand); 1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsClassID(typeID); 1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(targetThreadID); 1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsMethodID(targetMethodID); 2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(1); 2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsValue(new Value(true)); 2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(0); 2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" Send ClassType.InvokeMethod with Exception"); 2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "ClassType::InvokeMethod command"); 2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes returnValue = reply.getNextValueAsValue(); 2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" ClassType.InvokeMethod: returnValue.getIntValue()=" 2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + returnValue.getIntValue()); 2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes exception = reply.getNextValueAsTaggedObject(); 2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertNotNull("Returned exception is null", exception); 2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertTrue("Invalid exception object ID:<" + exception.objectID + ">", exception.objectID != 0); 2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("Invalid exception tag,", JDWPConstants.Tag.OBJECT_TAG, exception.tag 2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes , JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG) 2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes , JDWPConstants.Tag.getName(exception.tag)); 2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" ClassType.InvokeMethod: exception.tag=" 2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + exception.tag + " exception.objectID=" + exception.objectID); 2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertAllDataRead(reply); 2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Let's resume application 2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CommandSetID, 2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.ResumeCommand); 2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "VirtualMachine::Resume command"); 2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertAllDataRead(reply); 2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This testcase exercises ClassType.InvokeMethod command. 2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>At first the test starts debuggee. 2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>Then does the following checks: 2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - send ClassType.InvokeMethod command for method, 2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * which actually does not belong to passed class (taking into account 2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * inheritance). 2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>Test expects that INVALID_METHODID error is returned by command. 2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testInvokeMethod002() { 2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> testInvokeMethod002: START..."); 2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Getting debuggeeRefTypeID... "); 2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodDebuggee;"; 2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> debuggeeSignature = |" + debuggeeSignature + "|+"); 2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long debuggeeRefTypeID = debuggeeWrapper.vmMirror.getClassID(debuggeeSignature); 2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( debuggeeRefTypeID == -1 ) { 2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Can not get debuggeeRefTypeID!"); 2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fail("Can not get debuggeeRefTypeID!"); 2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> debuggeeRefTypeID = " + debuggeeRefTypeID); 2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Getting testMethodID for debuggee method 'testMethod2'... "); 2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String testMethodName = "testMethod2"; 2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long testMethodID = 2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes debuggeeWrapper.vmMirror.getMethodID(debuggeeRefTypeID, testMethodName); 2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( testMethodID == -1 ) { 2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Can not get methodID!"); 2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fail("Can not get methodID!"); 2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> testMethodID = " + testMethodID); 2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Setting EventRequest... "); 2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket packet = new CommandPacket( 2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.CommandSetID, 2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.SetCommand); 2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte(JDWPConstants.EventKind.METHOD_ENTRY); 2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte(JDWPConstants.SuspendPolicy.ALL); 2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(1); 2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte((byte) 5); 2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsString("*.InvokeMethodDebuggee"); 2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet); 2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "EventRequest::Set command"); 2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int requestID = reply.getNextValueAsInt(); 2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" EventRequest.Set: requestID=" + requestID); 2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Getting targetThreadID... "); 2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long targetThreadID = 0; 2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Wait event 2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket event = debuggeeWrapper.vmMirror 2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .receiveEvent(); 2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = event.getNextValueAsByte(); 2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int events = event.getNextValueAsInt(); 2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" EVENT_THREAD event: suspendPolicy=" + suspendPolicy 2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + " events=" + events); 2925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < events; i++) { 2935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = event.getNextValueAsByte(); 2945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int newRequestID = event.getNextValueAsInt(); 2955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long threadID = event.getNextValueAsThreadID(); 2965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes //Location location = 2975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes event.getNextValueAsLocation(); 2985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" EVENT_THREAD event " + i + ": eventKind=" 2995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + eventKind + " requestID=" + newRequestID + " threadID=" 3005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + threadID); 3015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (newRequestID == requestID) { 3025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetThreadID = threadID; 3035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> targetThreadID = " + targetThreadID); 3065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertTrue("Invalid targetThreadID, must be != 0", targetThreadID != 0); 3075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Clear EventRequest... "); 3095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 3105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.CommandSetID, 3115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.ClearCommand); 3125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte(JDWPConstants.EventKind.METHOD_ENTRY); 3135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(requestID); 3145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 3155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "EventRequest::Clear command"); 3165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Getting invalidClassRefTypeID... "); 3185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String invalidClassSignature = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/testClass2;"; 3195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> invalidClassSignature = |" + invalidClassSignature + "|+"); 3205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long invalidClassRefTypeID = debuggeeWrapper.vmMirror.getClassID(invalidClassSignature); 3215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( invalidClassRefTypeID == -1 ) { 3225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Can not get invalidClassRefTypeID!"); 3235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fail("Can not get invalidClassRefTypeID!"); 3245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> invalidClassRefTypeID = " + invalidClassRefTypeID); 3265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 3285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("\n==> Send ClassType::InvokeMethod for invalidClassRefTypeID, testMethodID..."); 3295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 3305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.CommandSetID, 3315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.InvokeMethodCommand); 3325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsClassID(invalidClassRefTypeID); 3335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(targetThreadID); 3345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsMethodID(testMethodID); 3355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(1); 3365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsValue(new Value(false)); 3375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(0); 3385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 3395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes short errorCode = reply.getErrorCode(); 3405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (errorCode == JDWPConstants.Error.NONE) { 3415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 3425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("## FAILURE: ClassType::InvokeMethod command does NOT return expected error - INVALID_METHODID"); 3435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // next is only for extra info 3455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Result if invoke method:"); 3465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value returnValue = reply.getNextValueAsValue(); 3475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (returnValue != null) { 3485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" ClassType.InvokeMethod: returnValue.getIntValue()=" 3495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + returnValue.getIntValue()); 3505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TaggedObject exception = reply.getNextValueAsTaggedObject(); 3535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (exception != null) { 3545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" ClassType.InvokeMethod: exception.tag=" 3555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + exception.tag + " exception.objectID=" + exception.objectID); 3565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( exception.objectID != 0 ) { 3575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String exceptionSignature = getObjectSignature(exception.objectID); 3585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" exceptionSignature = " + exceptionSignature); 3595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "ClassType::InvokeMethod command", JDWPConstants.Error.INVALID_METHODID); 3635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> PASSED: Expected error (INVALID_METHODID) is returned"); 3655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes resumeDebuggee(); 3665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 3685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 3715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This testcase exercises ClassType.InvokeMethod command. 3725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>At first the test starts debuggee. 3735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>Then does the following checks: 3745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR> - send ClassType.InvokeMethod command for method, 3755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * which actually is not static method. 3765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <BR>Test expects that INVALID_METHODID error is returned by command. 3775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 3785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testInvokeMethod003() { 3795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> testInvokeMethod003: START..."); 3805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 3815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Getting debuggeeRefTypeID... "); 3835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodDebuggee;"; 3845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> debuggeeSignature = |" + debuggeeSignature + "|+"); 3855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long debuggeeRefTypeID = debuggeeWrapper.vmMirror.getClassID(debuggeeSignature); 3865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( debuggeeRefTypeID == -1 ) { 3875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Can not get debuggeeRefTypeID!"); 3885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fail("Can not get debuggeeRefTypeID!"); 3895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> debuggeeRefTypeID = " + debuggeeRefTypeID); 3915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Getting nonStaticMethodID for debuggee method 'testMethod1'... "); 3935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String nonStaticMethodName = "testMethod1"; 3945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long nonStaticMethodID = 3955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes debuggeeWrapper.vmMirror.getMethodID(debuggeeRefTypeID, nonStaticMethodName); 3965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( nonStaticMethodID == -1 ) { 3975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("## FAILURE: Can not get methodID!"); 3985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fail("Can not get methodID!"); 3995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> nonStaticMethodID = " + nonStaticMethodID); 4015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Setting EventRequest... "); 4035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket packet = new CommandPacket( 4045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.CommandSetID, 4055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.SetCommand); 4065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte(JDWPConstants.EventKind.METHOD_ENTRY); 4075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte(JDWPConstants.SuspendPolicy.ALL); 4085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(1); 4095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte((byte) 5); 4105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsString("*.InvokeMethodDebuggee"); 4115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet); 4135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "EventRequest::Set command"); 4145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int requestID = reply.getNextValueAsInt(); 4165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" EventRequest.Set: requestID=" + requestID); 4175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 4195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Getting targetThreadID... "); 4215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long targetThreadID = 0; 4225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Wait event 4235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket event = debuggeeWrapper.vmMirror 4245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .receiveEvent(); 4255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = event.getNextValueAsByte(); 4265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int events = event.getNextValueAsInt(); 4275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" EVENT_THREAD event: suspendPolicy=" + suspendPolicy 4285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + " events=" + events); 4295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < events; i++) { 4305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = event.getNextValueAsByte(); 4315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int newRequestID = event.getNextValueAsInt(); 4325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long threadID = event.getNextValueAsThreadID(); 4335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes //Location location = 4345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes event.getNextValueAsLocation(); 4355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" EVENT_THREAD event " + i + ": eventKind=" 4365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + eventKind + " requestID=" + newRequestID + " threadID=" 4375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + threadID); 4385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (newRequestID == requestID) { 4395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetThreadID = threadID; 4405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> targetThreadID = " + targetThreadID); 4435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertTrue("Invalid targetThreadID, must be != 0", targetThreadID != 0); 4445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Clear EventRequest... "); 4465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 4475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.CommandSetID, 4485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.ClearCommand); 4495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsByte(JDWPConstants.EventKind.METHOD_ENTRY); 4505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(requestID); 4515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 4525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "EventRequest::Clear command"); 4535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 4555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("\n==> Send ClassType::InvokeMethod for debuggeeRefTypeID, nonStaticMethodID..."); 4565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet = new CommandPacket( 4575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.CommandSetID, 4585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.InvokeMethodCommand); 4595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsClassID(debuggeeRefTypeID); 4605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsThreadID(targetThreadID); 4615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsMethodID(nonStaticMethodID); 4625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(1); 4635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsValue(new Value(false)); 4645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsInt(0); 4655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = debuggeeWrapper.vmMirror.performCommand(packet); 4665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes short errorCode = reply.getErrorCode(); 4675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (errorCode == JDWPConstants.Error.NONE) { 4685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println 4695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ("## FAILURE: ClassType::InvokeMethod command does NOT return expected error - INVALID_METHODID"); 4705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // next is only for extra info 4725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n==> Result if invoke method:"); 4735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value returnValue = reply.getNextValueAsValue(); 4745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (returnValue != null) { 4755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" ClassType.InvokeMethod: returnValue.getIntValue()=" 4765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + returnValue.getIntValue()); 4775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TaggedObject exception = reply.getNextValueAsTaggedObject(); 4805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (exception != null) { 4815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" ClassType.InvokeMethod: exception.tag=" 4825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + exception.tag + " exception.objectID=" + exception.objectID); 4835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if ( exception.objectID != 0 ) { 4845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String exceptionSignature = getObjectSignature(exception.objectID); 4855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println(" exceptionSignature = " + exceptionSignature); 4865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReplyPacket(reply, "ClassType::InvokeMethod command", JDWPConstants.Error.INVALID_METHODID); 4905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> PASSED: Expected error (INVALID_METHODID) is returned"); 4925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes resumeDebuggee(); 4935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 4955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes} 497