blob: 22153e13508ee07c3fddbca1bdf63c6cc706b391 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Vitaly A. Provodin
*/
/**
* Created on 25.02.2005
*/
package org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference;
import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
import org.apache.harmony.jpda.tests.jdwp.share.JDWPTestConstants;
import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
/**
* JDWP Unit test for ThreadGroupReference.Children command.
*/
public class ChildrenTest extends JDWPSyncTestCase {
protected String getDebuggeeClassName() {
return "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference.ChildrenDebuggee";
}
/**
* This testcase exercises ThreadGroupReference.Children command.
* <BR>At first the test starts ChildrenDebuggee.
* <BR> Then the test with help of the ThreadGroupReference.Children command checks
* that the group 'PARENT_GROUP' has one child thread - 'TESTED_THREAD'
* and one child group - 'CHILD_GROUP'.
*
*/
public void testChildren001() {
logWriter.println("==> ChildrenTest.testChildren001 START...");
logWriter.println("==> Wait for SGNL_READY...");
synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
// getting ID of the tested thread
logWriter.println("==> Get testedThreadID...");
CommandPacket packet;
long threadID = debuggeeWrapper.vmMirror.getThreadID(NameDebuggee.TESTED_THREAD);
logWriter.println("==> testedThreadID = " + threadID);
long groupID;
String groupName;
// getting the thread group ID
logWriter.println("==> Send ThreadReference.ThreadGroup command for testedThreadID...");
packet = new CommandPacket(
JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
JDWPCommands.ThreadReferenceCommandSet.ThreadGroupCommand);
packet.setNextValueAsThreadID(threadID);
ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet);
checkReplyPacket(reply, "ThreadReference.ThreadGroup command");
groupID = reply.getNextValueAsThreadGroupID();
logWriter.println("==> groupID = " + groupID);
logWriter.println("==> Send ThreadGroupReference.Children command...");
packet = new CommandPacket(
JDWPCommands.ThreadGroupReferenceCommandSet.CommandSetID,
JDWPCommands.ThreadGroupReferenceCommandSet.ChildrenCommand);
packet.setNextValueAsThreadID(groupID);
reply = debuggeeWrapper.vmMirror.performCommand(packet);
checkReplyPacket(reply, "ThreadGroupReference.Children command");
logWriter.println("\n==> Children of the group: \""
+ debuggeeWrapper.vmMirror.getThreadGroupName(groupID)
+ "\": ");
int childThreads = reply.getNextValueAsInt();
if (childThreads != 1) {
logWriter.println("## FAILURE: Unexpected number of child threads = " + childThreads);
logWriter.println("## Expected number of child threads = 1");
assertEquals("Invalid number of child threads,", 1, childThreads);
}
long childThreadID = reply.getNextValueAsThreadID();
String threadName = debuggeeWrapper.vmMirror.getThreadName(childThreadID);
logWriter.println
("==> thread: threadID = " + childThreadID + "; threadName = " + threadName);
if (threadID != childThreadID) {
logWriter.println("## FAILURE: Unexpected ID of child thread = " + childThreadID);
logWriter.println("## Expected ID of child thread = " + threadID);
assertEquals("Invalid ID of child thread,", threadID, childThreadID);
}
if (!threadName.equals(NameDebuggee.TESTED_THREAD)) {
logWriter.println("## FAILURE: unexpected thread name, it is expected: "
+ NameDebuggee.TESTED_THREAD);
assertString("Invalid thread name,", NameDebuggee.TESTED_THREAD, threadName);
}
int childGroups = reply.getNextValueAsInt();
if (childGroups != 1) {
logWriter.println("## FAILURE: Unexpected number of child groups " + childGroups);
logWriter.println("## Expected number = 1");
assertEquals("Invalid number of child groups,", 1, childGroups);
}
groupID = reply.getNextValueAsThreadGroupID();
groupName = debuggeeWrapper.vmMirror.getThreadGroupName(groupID);
logWriter.println("\n==> group: groupID = " + groupID + "; groupName = " + groupName);
assertString("Invalid group name,", NameDebuggee.CHILD_GROUP, groupName);
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
}
/**
* This testcase exercises ThreadGroupReference.Children command.
* <BR>At first the test starts NameDebuggee.
* <BR> Then the test with help of the ThreadGroupReference.Children command
* checks that INVALID_OBJECT error is returned for the null object id.
*
*/
public void testChildren_NullObject() {
logWriter.println("wait for SGNL_READY");
synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
checkCommandError(JDWPTestConstants.NULL_OBJECT_ID,
JDWPConstants.Error.INVALID_OBJECT);
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
}
/**
* This testcase exercises ThreadGroupReference.Children command.
* <BR>At first the test starts NameDebuggee.
* <BR> Then the test with help of the ThreadGroupReference.Children command
* checks that INVALID_OBJECT error is returned for an invalid object id.
*
*/
public void testChildren_InvalidObject() {
logWriter.println("wait for SGNL_READY");
synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
checkCommandError(JDWPTestConstants.INVALID_OBJECT_ID,
JDWPConstants.Error.INVALID_OBJECT);
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
}
/**
* This testcase exercises ThreadGroupReference.Children command.
* <BR>At first the test starts NameDebuggee.
* <BR> Then the test with help of the ThreadGroupReference.Children command
* checks that INVALID_THREAD_GROUP error is returned for an object that is
* not a java.lang.ThreadGroup.
*
*/
public void testChildren_InvalidThreadGroup() {
logWriter.println("wait for SGNL_READY");
synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
long threadID = debuggeeWrapper.vmMirror.getThreadID(NameDebuggee.TESTED_THREAD);
checkCommandError(threadID, JDWPConstants.Error.INVALID_THREAD_GROUP);
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
}
private void checkCommandError(long groupID, int expectedError) {
logWriter.println("Send ThreadGroupReference.Children command with id " + groupID);
CommandPacket packet = new CommandPacket(
JDWPCommands.ThreadGroupReferenceCommandSet.CommandSetID,
JDWPCommands.ThreadGroupReferenceCommandSet.ChildrenCommand);
packet.setNextValueAsThreadGroupID(groupID);
ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet);
checkReplyPacket(reply, "ThreadGroupReference::Name command",
expectedError);
}
}