1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 /** 20 * @author Aleksander V. Budniy 21 */ 22 23 /** 24 * Created on 8.7.2005 25 */ 26 package org.apache.harmony.jpda.tests.jdwp.MultiSession; 27 28 import org.apache.harmony.jpda.tests.framework.TestOptions; 29 import org.apache.harmony.jpda.tests.framework.TestErrorException; 30 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket; 31 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants; 32 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent; 33 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase; 34 import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper; 35 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer; 36 37 38 /** 39 * JDWP Unit test for verifying canceling of some events after re-connection. 40 */ 41 public class MethodEntryExitTest extends JDWPSyncTestCase { 42 43 private String DEBUGGEE_SIGNATURE = "Lorg/apache/harmony/jpda/tests/jdwp/MultiSession/MultiSessionDebuggee;"; 44 45 private String METHOD_NAME = "printWord"; 46 47 String classNameRegexp = "org.apache.harmony.jpda.tests.jdwp.MultiSession.MultiSessionDebuggee"; 48 getDebuggeeClassName()49 protected String getDebuggeeClassName() { 50 return "org.apache.harmony.jpda.tests.jdwp.MultiSession.MultiSessionDebuggee"; 51 } 52 53 /** 54 * This testcase verifies canceling of some events after re-connection. 55 * <BR>It runs MultiSessionDebuggee, sets requests for BREAKPOINT, METHOD_ENTRY 56 * and METHOD_EXIT events and then re-connects. 57 * <BR>It is expected that no any events, including requested events, occur after re-connection 58 * and before MultiSessionDebuggee finish. 59 */ testMethodEvent001()60 public void testMethodEvent001() { 61 logWriter.println("==> testMethodEvent001 started.."); 62 63 synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 64 65 long classID = debuggeeWrapper.vmMirror.getClassID(DEBUGGEE_SIGNATURE); 66 67 logWriter.println("=> Set breakpoint at method begin"); 68 //long requestID = 69 debuggeeWrapper.vmMirror.setBreakpointAtMethodBegin( 70 classID, METHOD_NAME); 71 72 logWriter.println("=> Set request for METHOD_ENTRY event"); 73 debuggeeWrapper.vmMirror 74 .setMethodEntry(classNameRegexp); 75 76 logWriter.println("=> Set request for METHOD_EXIT event"); 77 debuggeeWrapper.vmMirror.setMethodExit(classNameRegexp); 78 79 logWriter.println(""); 80 logWriter.println("=> CLOSE CONNECTION.."); 81 closeConnection(); 82 logWriter.println("=> CONNECTION CLOSED"); 83 84 logWriter.println(""); 85 logWriter.println("=> OPEN NEW CONNECTION.."); 86 openConnection(); 87 logWriter.println("=> CONNECTION OPENED"); 88 89 //resuming debuggee 90 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 91 synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 92 synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 93 94 // receive event 95 logWriter.println("=> Wait for event.."); 96 CommandPacket event = null; 97 try { 98 event = debuggeeWrapper.vmMirror.receiveEvent(); 99 } catch (TestErrorException thrown) { 100 logWriter.println("=> Exception while receiving event:" + thrown); 101 102 } 103 if (event == null) { 104 logWriter.println("=> It's expected result, nothing was caught"); 105 logWriter.println("=> Resuming debuggee"); 106 //resuming debuggee 107 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 108 logWriter.println("==> testMethodEvent001 PASSED! "); 109 } else { 110 111 logWriter.println("##FAILURE: Event was received"); 112 113 try { 114 ParsedEvent[] parsedEvents = ParsedEvent 115 .parseEventPacket(event); 116 117 logWriter.println("=> Number of events = " 118 + parsedEvents.length); 119 for (int i = 0; i < parsedEvents.length; i++) { 120 logWriter.println("=> EventKind() = " 121 + parsedEvents[0].getEventKind() 122 + " (" 123 + JDWPConstants.EventKind.getName(parsedEvents[0] 124 .getEventKind()) + ")"); 125 logWriter.println("=> EventRequestID() = " 126 + parsedEvents[0].getRequestID()); 127 128 } 129 } catch (Throwable thrown) { 130 logWriter 131 .println("##FAILURE: Exception while analyzing received event:" 132 + thrown); 133 fail("Exception while analyzing received event:" + thrown); 134 } 135 136 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 137 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 138 logWriter.println("==> testMethodEvent001 failed"); 139 } 140 } 141 beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper)142 protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) { 143 settings.setAttachConnectorKind(); 144 if(settings.getTransportAddress() == null) { 145 settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS); 146 } 147 logWriter.println("ATTACH connector kind"); 148 super.beforeDebuggeeStart(debuggeeWrapper); 149 } 150 } 151