001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: *
015: * See the License for the specific language governing permissions and
016: * limitations under the License.
017: */
018:
019: /**
020: * @author Vitaly A. Provodin
021: * @version $Revision: 1.6 $
022: */
023:
024: /**
025: * Created on 15.02.2005
026: */package org.apache.harmony.jpda.tests.jdwp.ThreadReference;
027:
028: import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
029: import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
030: import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
031: import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
032: import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
033:
034: /**
035: * JDWP Unit test for ThreadReference.ThreadGroup command.
036: */
037: public class ThreadGroupTest extends JDWPSyncTestCase {
038:
039: protected String getDebuggeeClassName() {
040: return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ThreadGroupDebuggee";
041: }
042:
043: /**
044: * This testcase exercises ThreadReference.ThreadGroup command.
045: * <BR>At first the test starts ThreadGroupDebuggee which creates
046: * 'TESTED_GROUP' ThreadGroup and starts the 'TESTED_THREAD' thread which
047: * belongs to that thread group.
048: * <BR>After the tested thread starts but does not finish, test requests all
049: * debuggee threads by VirtualMachine.AllThreads command and looks for tested thread.
050: * <BR>If the tested thread is not found the test fails.
051: * <BR>If the tested thread is found the test checks that
052: * ThreadReference.ThreadGroup command for tested thread returns 'TESTED_GROUP' thread group.
053: */
054: public void testThreadGroup001() {
055: logWriter.println("wait for SGNL_READY");
056: synchronizer
057: .receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
058:
059: // getting ID of the tested thread
060: CommandPacket packet;
061: logWriter.println("get all threads");
062: ReplyPacket replyThread, reply = debuggeeWrapper.vmMirror
063: .getAllThreadID();
064: int threads = reply.getNextValueAsInt();
065: logWriter.println("exercise threads = " + threads);
066:
067: long threadID, groupID;
068: String groupName, threadName;
069: int count = 0;
070:
071: for (int i = 0; i < threads; i++) {
072: threadID = reply.getNextValueAsThreadID();
073:
074: // getting the thread group ID
075: packet = new CommandPacket(
076: JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
077: JDWPCommands.ThreadReferenceCommandSet.ThreadGroupCommand);
078: packet.setNextValueAsThreadID(threadID);
079:
080: replyThread = debuggeeWrapper.vmMirror
081: .performCommand(packet);
082: checkReplyPacket(replyThread,
083: "ThreadReference::ThreadGroup command");
084:
085: groupID = replyThread.getNextValueAsThreadGroupID();
086:
087: groupName = debuggeeWrapper.vmMirror
088: .getThreadGroupName(groupID);
089: threadName = debuggeeWrapper.vmMirror
090: .getThreadName(threadID);
091:
092: logWriter.println("\tthreadID=" + threadID
093: + "; threadName=" + threadName + "; groupID="
094: + groupID + "; groupName=" + groupName);
095:
096: if (threadName.equals(ThreadGroupDebuggee.TESTED_THREAD)) {
097: if (!groupName.equals(ThreadGroupDebuggee.TESTED_GROUP)) {
098: printErrorAndFail("unexpected group name, it is expected: "
099: + ThreadGroupDebuggee.TESTED_GROUP);
100: }
101: count++;
102: }
103: }
104: if (count == 0) {
105: printErrorAndFail("Tested thread is not found in all_threads list.");
106: }
107:
108: synchronizer
109: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
110: logWriter.println("waiting for finishing thread");
111: synchronizer
112: .receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
113: synchronizer
114: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
115: }
116:
117: public static void main(String[] args) {
118: junit.textui.TestRunner.run(ThreadGroupTest.class);
119: }
120: }
|