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.Events; 205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestErrorException; 225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket; 235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants; 245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent; 255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent.Event_MONITOR_WAIT; 265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase; 275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer; 285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class MonitorWaitTest extends JDWPSyncTestCase { 305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String monitorSignature = "Lorg/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitMockMonitor;"; 315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected String getDebuggeeClassName() { 335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitAndWaitedDebuggee"; 345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testMonitorWaitForClassOnly() { 375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Attain Object class id 405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long monitorRefTypeID = getClassIDBySignature(monitorSignature); 415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Object ReferenceType ID = " + monitorRefTypeID); 425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set MonitorWait request for MockMonitorClass 445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes debuggeeWrapper.vmMirror.setMonitorWaitForClassOnly(monitorRefTypeID); 455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Verify received event 475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes verifyEvent(); 485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testMonitorWaitForClassMatchExact() { 515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String classPattern = "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitMockMonitor"; 545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> tested class match pattern: " + classPattern); 555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set MonitorWait request for MockMonitorClass 575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes debuggeeWrapper.vmMirror.setMonitorWaitForClassMatch(classPattern); 585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Verify received event 605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes verifyEvent(); 615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testMonitorWaitForClassMatchFirst() { 645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String classPattern = "org.apache.harmony.jpda.tests.jdwp.Events.*"; 675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> tested class match pattern: " + classPattern); 685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set MonitorWait request for MockMonitorClass 705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes debuggeeWrapper.vmMirror.setMonitorWaitForClassMatch(classPattern); 715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Verify received event 735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes verifyEvent(); 745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testMonitorWaitForClassMatchSecond() { 775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String classPattern = "*MonitorWaitMockMonitor"; 805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> tested class match pattern: " + classPattern); 815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set MonitorWait request for MockMonitorClass 835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes debuggeeWrapper.vmMirror.setMonitorWaitForClassMatch(classPattern); 845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Verify received event 865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes verifyEvent(); 875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void testMonitorWaitForClassExclude() { 905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String classPattern = "MockPatter*"; 935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> tested class exclude pattern: " + classPattern); 945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set MonitorWait request for MockMonitorClass 965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes debuggeeWrapper.vmMirror.setMonitorWaitForClassExclude(classPattern); 975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Verify received event 995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes verifyEvent(); 1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes private void verifyEvent(){ 1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Inform debuggee that the request has been set 1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Request has been set."); 1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Receive event of MonitorWait 1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Receive Event."); 1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket receiveEvent = null; 1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes receiveEvent = debuggeeWrapper.vmMirror.receiveEvent(); 1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (TestErrorException e) { 1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes printErrorAndFail("There is no event received."); 1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ParsedEvent[] parsedEvents = ParsedEvent.parseEventPacket(receiveEvent); 1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event_MONITOR_WAIT event = (ParsedEvent.Event_MONITOR_WAIT)parsedEvents[0]; 1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Check event basic message 1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("Invalid number of events,", 1, parsedEvents.length); 1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("Invalid event kind,", JDWPConstants.EventKind.MONITOR_WAIT, parsedEvents[0].getEventKind() 1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes , JDWPConstants.EventKind.getName(JDWPConstants.EventKind.MONITOR_WAIT) 1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes , JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind())); 1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> CHECK: Event Kind: " + JDWPConstants.EventKind.getName(JDWPConstants.EventKind.MONITOR_WAIT)); 1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Check tested thread message 1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> Get testedThreadID..."); 1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long testedThreadID = debuggeeWrapper.vmMirror.getThreadID("main"); 1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("Invalid tested thread id: ", testedThreadID, event.getThreadID()); 1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> CHECK: tested blocked thread id: " + testedThreadID ); 1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Check the ReferenceType of monitor object 1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long objID = event.getTaggedObject().objectID; 1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long refID = debuggeeWrapper.vmMirror.getReferenceType(objID); 1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String actualSignature = debuggeeWrapper.vmMirror.getReferenceTypeSignature(refID); 1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("Invalid monitor class signature: ", monitorSignature 1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes , actualSignature); 1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> CHECK: monitor class signature: " + actualSignature); 1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Check wait's timeout 1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes assertEquals("Invalid reference type of prepared class,", MonitorWaitAndWaitedDebuggee.TIMEOUT 1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes , ((ParsedEvent.Event_MONITOR_WAIT)parsedEvents[0]).getTimeout()); 1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("==> CHECK: Wait time out: " + MonitorWaitAndWaitedDebuggee.TIMEOUT); 1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes} 146