IsCollectedTest.java revision 37b95e332fe4d776e33e64f0fa1980fb4f7a83e0
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 Anatoly F. Bondarenko 21 */ 22 23/** 24 * Created on 05.03.2005 25 */ 26package org.apache.harmony.jpda.tests.jdwp.ObjectReference; 27 28import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket; 29import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands; 30import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants; 31import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket; 32import org.apache.harmony.jpda.tests.framework.jdwp.Value; 33import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase; 34import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer; 35 36 37/** 38 * JDWP Unit test for ObjectReference.IsCollected command. 39 */ 40public class IsCollectedTest extends JDWPSyncTestCase { 41 42 static final String thisCommandName = "ObjectReference.IsCollected command"; 43 44 static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee;"; 45 46 protected String getDebuggeeClassName() { 47 return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.IsCollectedDebuggee"; 48 } 49 50 /** 51 * This test exercises ObjectReference.IsCollected command. 52 * <BR>The test starts IsCollectedDebuggee class, gets two 53 * objectIDs as value of static fields of this class which (fields) 54 * represent two checked objects. Then for the first objectID test executes 55 * ObjectReference.DisableCollection command. After that Debuggee tries to 56 * unload checked objects. Then the test executes 57 * ObjectReference.IsCollected commands for both checked objects and checks 58 * replies. 59 */ 60 public void testIsCollected001() { 61 String thisTestName = "testIsCollected001"; 62 logWriter.println("==> " + thisTestName + " for " + thisCommandName 63 + ": START..."); 64 String failMessage = ""; 65 synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 66 finalSyncMessage = "TO_FINISH"; 67 68 long refTypeID = getClassIDBySignature(debuggeeSignature); 69 70 logWriter.println("=> Debuggee class = " + getDebuggeeClassName()); 71 logWriter.println("=> referenceTypeID for Debuggee class = " 72 + refTypeID); 73 74 String checkedFieldNames[] = { "checkedObject_01", "checkedObject_02", }; 75 long checkedFieldIDs[] = checkFields(refTypeID, checkedFieldNames); 76 long checkedField_01ID = checkedFieldIDs[0]; 77 long checkedField_02ID = checkedFieldIDs[1]; 78 79 logWriter 80 .println("=> Send ReferenceType::GetValues command for received fieldIDs and get ObjectIDs to check..."); 81 82 CommandPacket getValuesCommand = new CommandPacket( 83 JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 84 JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand); 85 getValuesCommand.setNextValueAsReferenceTypeID(refTypeID); 86 getValuesCommand.setNextValueAsInt(2); 87 getValuesCommand.setNextValueAsFieldID(checkedField_01ID); 88 getValuesCommand.setNextValueAsFieldID(checkedField_02ID); 89 90 ReplyPacket getValuesReply = debuggeeWrapper.vmMirror 91 .performCommand(getValuesCommand); 92 getValuesCommand = null; 93 checkReplyPacket(getValuesReply, "ReferenceType::GetValues command"); 94 95 int returnedValuesNumber = getValuesReply.getNextValueAsInt(); 96 logWriter 97 .println("=> Returned values number = " + returnedValuesNumber); 98 assertEquals("Invalid number of values,", 2, returnedValuesNumber); 99 100 Value checkedObjectFieldValue = getValuesReply.getNextValueAsValue(); 101 byte checkedObjectFieldTag = checkedObjectFieldValue.getTag(); 102 logWriter.println("=> Returned field value tag for checkedObject_01 = " 103 + checkedObjectFieldTag + "(" 104 + JDWPConstants.Tag.getName(checkedObjectFieldTag) + ")"); 105 assertEquals("Invalid value tag for checkedObject_01", 106 JDWPConstants.Tag.OBJECT_TAG, checkedObjectFieldTag, 107 JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG), 108 JDWPConstants.Tag.getName(checkedObjectFieldTag)); 109 110 long checkedObject_01ID = checkedObjectFieldValue.getLongValue(); 111 logWriter.println("=> Returned ObjectID for checkedObject_01 = " 112 + checkedObject_01ID); 113 114 checkedObjectFieldValue = getValuesReply.getNextValueAsValue(); 115 checkedObjectFieldTag = checkedObjectFieldValue.getTag(); 116 logWriter.println("=> Returned field value tag for checkedObject_02 = " 117 + checkedObjectFieldTag + "(" 118 + JDWPConstants.Tag.getName(checkedObjectFieldTag) + ")"); 119 assertEquals("Invalid value tag for checkedObject_02", 120 JDWPConstants.Tag.OBJECT_TAG, checkedObjectFieldTag, 121 JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG), 122 JDWPConstants.Tag.getName(checkedObjectFieldTag)); 123 124 long checkedObject_02ID = checkedObjectFieldValue.getLongValue(); 125 logWriter.println("=> Returned ObjectID for checkedObject_02 = " 126 + checkedObject_02ID); 127 128 logWriter 129 .println("\n=> Send ObjectReference::DisableCollection command for checkedObject_01..."); 130 131 CommandPacket disableCollectionCommand = new CommandPacket( 132 JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 133 JDWPCommands.ObjectReferenceCommandSet.DisableCollectionCommand); 134 disableCollectionCommand.setNextValueAsObjectID(checkedObject_01ID); 135 136 ReplyPacket disableCollectionReply = debuggeeWrapper.vmMirror 137 .performCommand(disableCollectionCommand); 138 disableCollectionCommand = null; 139 checkReplyPacket(disableCollectionReply, 140 "ObjectReference::DisableCollection command"); 141 142 logWriter 143 .println("=> Send to Debuggee signal to continue and try to unload checked objects..."); 144 finalSyncMessage = null; 145 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 146 String messageFromDebuggee = synchronizer.receiveMessage(); 147 logWriter.println("\n=> Received message from Debuggee = \"" 148 + messageFromDebuggee + "\""); 149 150 logWriter.println("\n=> Send " + thisCommandName 151 + " for checkedObject_01 and check reply..."); 152 153 CommandPacket checkedCommand = new CommandPacket( 154 JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 155 JDWPCommands.ObjectReferenceCommandSet.IsCollectedCommand); 156 checkedCommand.setNextValueAsObjectID(checkedObject_01ID); 157 158 ReplyPacket checkedReply = debuggeeWrapper.vmMirror 159 .performCommand(checkedCommand); 160 checkedCommand = null; 161 checkReplyPacket(checkedReply, thisCommandName); 162 163 boolean checkedObject_01_IsCollected = checkedReply 164 .getNextValueAsBoolean(); 165 logWriter.println("=> IsCollected for checkedObject_01 = " 166 + checkedObject_01_IsCollected); 167 168 if (messageFromDebuggee.indexOf("checkedObject_01 is UNLOADed;") != -1) { 169 if (!checkedObject_01_IsCollected) { 170 logWriter 171 .println("## FAILURE: Unexpected result for checkedObject_01 of " 172 + thisCommandName + ":"); 173 logWriter 174 .println("## checkedObject_01 is UNLOADed so IsCollected must be 'true'"); 175 failMessage = failMessage + 176 "Unexpected result for checkedObject_01 of " 177 + thisCommandName + "\n"; 178 } 179 } else { 180 if (checkedObject_01_IsCollected) { 181 logWriter 182 .println("## FAILURE: Unexpected result for checkedObject_01 of " 183 + thisCommandName + ":"); 184 logWriter 185 .println("## checkedObject_01 is NOT UNLOADed so IsCollected must be 'false'"); 186 failMessage = failMessage + 187 "Unexpected result for checkedObject_01 of " 188 + thisCommandName + "\n"; 189 } 190 } 191 192 logWriter.println("=> PASSED for checkedObject_01"); 193 194 logWriter.println("\n=> Send " + thisCommandName 195 + " for checkedObject_02 and check reply..."); 196 197 checkedCommand = new CommandPacket( 198 JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 199 JDWPCommands.ObjectReferenceCommandSet.IsCollectedCommand); 200 checkedCommand.setNextValueAsObjectID(checkedObject_02ID); 201 202 checkedReply = debuggeeWrapper.vmMirror.performCommand(checkedCommand); 203 checkedCommand = null; 204 checkReplyPacket(checkedReply, thisCommandName); 205 206 boolean checkedObject_02_IsCollected = checkedReply 207 .getNextValueAsBoolean(); 208 logWriter.println("=> IsCollected for checkedObject_02 = " 209 + checkedObject_02_IsCollected); 210 211 if (messageFromDebuggee.indexOf("checkedObject_02 is UNLOADed;") != -1) { 212 if (!checkedObject_02_IsCollected) { 213 logWriter 214 .println("## FAILURE: Unexpected result for checkedObject_02 of " 215 + thisCommandName + ":"); 216 logWriter 217 .println("## checkedObject_02 is UNLOADed so IsCollected must be 'true'"); 218 failMessage = failMessage + 219 "Unexpected result for checkedObject_02 of " 220 + thisCommandName + "\n"; 221 } 222 } else { 223 if (checkedObject_02_IsCollected) { 224 logWriter 225 .println("## FAILURE: Unexpected result for checkedObject_02 of " 226 + thisCommandName + ":"); 227 logWriter 228 .println("## checkedObject_02 is NOT UNLOADed so IsCollected must be 'false'"); 229 failMessage = failMessage + 230 "Unexpected result for checkedObject_02 of " 231 + thisCommandName + "\n"; 232 } 233 } 234 235 logWriter.println("=> PASSED for checkedObject_02"); 236 logWriter.println("=> Send to Debuggee signal to funish ..."); 237 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 238 logWriter.println("==> " + thisTestName + " for " + thisCommandName 239 + ": FINISH"); 240 241 if (failMessage.length() > 0) { 242 fail(failMessage); 243 } 244 245 assertAllDataRead(checkedReply); 246 } 247 248 /** 249 * This testcase exercises ObjectReference.IsCollected command. 250 * <BR>The test starts IsCollectedDebuggee class. Then attempts to know 251 * if an invalid objectID is collected and checks INVALID_OBJECT is 252 * returned. 253 */ 254 public void testIsCollected002() { 255 synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 256 257 long invalidObjectID = 0xdead; 258 259 CommandPacket command = new CommandPacket( 260 JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 261 JDWPCommands.ObjectReferenceCommandSet.IsCollectedCommand); 262 command.setNextValueAsObjectID(invalidObjectID); 263 264 ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(command); 265 checkReplyPacket(reply, thisCommandName, JDWPConstants.Error.INVALID_OBJECT); 266 267 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 268 } 269 270 /** 271 * This testcase exercises ObjectReference.IsCollected command. 272 * <BR>The test starts IsCollectedDebuggee class. Then attempts to know 273 * if "null" object (id=0) is collected and checks INVALID_OBJECT is 274 * returned. 275 */ 276 public void testIsCollected003() { 277 synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 278 279 long invalidObjectID = 0xdead; 280 281 CommandPacket command = new CommandPacket( 282 JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 283 JDWPCommands.ObjectReferenceCommandSet.IsCollectedCommand); 284 command.setNextValueAsObjectID(invalidObjectID); 285 286 ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(command); 287 checkReplyPacket(reply, thisCommandName, JDWPConstants.Error.INVALID_OBJECT); 288 289 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 290 } 291} 292