You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by lv...@apache.org on 2008/03/21 09:29:04 UTC
svn commit: r639566 - in
/harmony/enhanced/jdktools/branches/java6/modules/jpda: make/
src/main/native/include/ src/main/native/jdwp/common/agent/commands/
src/main/native/jdwp/common/agent/core/
src/main/native/jdwp/common/generic/ src/test/java/org/a...
Author: lvjing
Date: Fri Mar 21 01:28:53 2008
New Revision: 639566
URL: http://svn.apache.org/viewvc?rev=639566&view=rev
Log:
Apply patch for HARMONY-5613 [jdktools][jdwp6]Add new command OwnedMonitorsStackDepthInfo Command for Java6
Added:
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java (with props)
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java (with props)
Modified:
harmony/enhanced/jdktools/branches/java6/modules/jpda/make/exclude.common
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti.h
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti_types.h
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.h
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/CommandDispatcher.cpp
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/generic/jdwp.h
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Capabilities.java
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/JDWPCommands.java
harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/make/exclude.common
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/make/exclude.common?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/make/exclude.common (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/make/exclude.common Fri Mar 21 01:28:53 2008
@@ -15,3 +15,5 @@
org/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsTest.java
#5596
org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsTest.java
+#5613
+org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti.h?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti.h (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti.h Fri Mar 21 01:28:53 2008
@@ -681,7 +681,9 @@
void *reserved152;
- void *reserved153;
+ jvmtiError (JNICALL * GetOwnedMonitorStackDepthInfo)(jvmtiEnv* env,
+ jthread thread, jint* monitor_info_count_ptr,
+ jvmtiMonitorStackDepthInfo** monitor_info_ptr);
jvmtiError (JNICALL * GetObjectSize) (jvmtiEnv * env,
jobject object, jlong * size_ptr);
@@ -1110,6 +1112,12 @@
const jvmtiClassDefinition * class_definitions)
{
return funcs->RedefineClasses (this, class_count, class_definitions);
+ }
+
+ jvmtiError GetOwnedMonitorStackDepthInfo (jthread thread, jint* monitor_info_count_ptr,
+ jvmtiMonitorStackDepthInfo** monitor_info_ptr)
+ {
+ return funcs->GetOwnedMonitorStackDepthInfo(this, thread, monitor_info_count_ptr, monitor_info_ptr);
}
jvmtiError GetObjectSize (jobject object, jlong * size_ptr)
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti_types.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti_types.h?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti_types.h (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/include/jvmti_types.h Fri Mar 21 01:28:53 2008
@@ -873,6 +873,13 @@
jlong reserved2;
} jvmtiTimerInfo;
+ typedef struct
+ {
+ jobject monitor;
+ jint stack_depth;
+ } jvmtiMonitorStackDepthInfo;
+
+
typedef enum
{
JVMTI_PHASE_ONLOAD = 1,
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp Fri Mar 21 01:28:53 2008
@@ -372,3 +372,48 @@
}
//-----------------------------------------------------------------------------
+//OwnedMonitorsStackDepthInfoHandler-------------------------------------------
+void
+ThreadReference::OwnedMonitorsStackDepthInfoHandler::Execute(JNIEnv *jni)
+ throw (AgentException)
+{
+ // Read thread id from OwnedMonitorsStackDepthInfoHandler command
+ jthread thrd = m_cmdParser->command.ReadThreadID(jni);
+ JDWP_TRACE_DATA("OwnedMonitorsStackDepthInfo: received: threadID=" << thrd);
+
+ // If the thread is not suspended, throw exception
+ if (!GetThreadManager().IsSuspended(thrd))
+ throw AgentException(JVMTI_ERROR_THREAD_NOT_SUSPENDED);
+
+ // Invoke jvmti function to attain the expected monitor data
+ jvmtiError err;
+ jint count;
+ jvmtiMonitorStackDepthInfo* pMonitorInfos;
+ JVMTI_TRACE(err, GetJvmtiEnv()->GetOwnedMonitorStackDepthInfo(thrd, &count, &pMonitorInfos));
+ if (err != JVMTI_ERROR_NONE) {
+ // Can be: JVMTI_ERROR_MUST_POSSESS_CAPABILITY, JVMTI_ERROR_INVALID_THREAD
+ // JVMTI_ERROR_THREAD_NOT_ALIVE, JVMTI_ERROR_NULL_POINTER
+ throw AgentException(err);
+ }
+
+ // Must release memeory manually
+ JvmtiAutoFree af(pMonitorInfos);
+
+ // Write monitor count to reply package
+ JDWP_TRACE_DATA("OwnedMonitorsStackDepthInfo: received: monitor count=" << count);
+ m_cmdParser->reply.WriteInt(count);
+
+ // Write each monitor and its stack depth to reply package
+ for (int i =0; i < count; i++){
+ // Attain monitor and its stack depth from returned data.
+ jobject monitor = pMonitorInfos[i].monitor;
+ m_cmdParser->reply.WriteTaggedObjectID(jni, monitor);
+ JDWP_TRACE_DATA("OwnedMonitorsStackDepthInfo: received: monitor object=" << monitor);
+
+ jint stack_depth = pMonitorInfos[i].stack_depth;
+ JDWP_TRACE_DATA("OwnedMonitorsStackDepthInfo: received: monitor stack depth=" << stack_depth);
+ m_cmdParser->reply.WriteInt(stack_depth);
+ }
+}
+
+//-----------------------------------------------------------------------------
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.h?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.h (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.h Fri Mar 21 01:28:53 2008
@@ -245,6 +245,24 @@
};//SuspendCountHandler
+ // New command for Java 6
+ /**
+ * The class implements the <code>OwnedMonitorsStackDepthInfo</code> command from the
+ * ThreadReference command set.
+ */
+ class OwnedMonitorsStackDepthInfoHandler : public SyncCommandHandler {
+ protected:
+
+ /**
+ * Executes the <code>OwnedMonitorsStackDepthInfo</code> JDWP command for the
+ * ThreadReference command set.
+ *
+ * @param jni - the JNI interface pointer
+ */
+ virtual void Execute(JNIEnv *jni) throw(AgentException);
+
+ };//OwnedMonitorsStackDepthInfoHandler
+
}//ThreadReference
}//jdwp
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/CommandDispatcher.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/CommandDispatcher.cpp?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/CommandDispatcher.cpp (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/CommandDispatcher.cpp Fri Mar 21 01:28:53 2008
@@ -358,6 +358,10 @@
case JDWP_COMMAND_TR_SUSPEND_COUNT:
return new ThreadReference::SuspendCountHandler();
+ // New command for Java 6
+ case JDWP_COMMAND_TR_OWNED_MONITORS_STACK_DEPTH:
+ return new ThreadReference::OwnedMonitorsStackDepthInfoHandler();
+
}//JDWP_COMMAND_SET_THREAD_REFERENCE
break;
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/generic/jdwp.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/generic/jdwp.h?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/generic/jdwp.h (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/generic/jdwp.h Fri Mar 21 01:28:53 2008
@@ -151,6 +151,8 @@
JDWP_COMMAND_TR_STOP = 10,
JDWP_COMMAND_TR_INTERRUPT = 11,
JDWP_COMMAND_TR_SUSPEND_COUNT = 12,
+ // New command for Java 6
+ JDWP_COMMAND_TR_OWNED_MONITORS_STACK_DEPTH = 13,
/* Commands ThreadGroupReference */
JDWP_COMMAND_TGR_NAME = 1,
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java Fri Mar 21 01:28:53 2008
@@ -216,7 +216,7 @@
return getProperty("jpda.settings.debuggeeAgentOptions",
"transport=dt_socket,address=" + address + ",server=" + serv
- + ",suspend=" + getDebuggeeSuspend() + agentExtraOptions + ",trace=all");
+ + ",suspend=" + getDebuggeeSuspend() + agentExtraOptions);
}
/**
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Capabilities.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Capabilities.java?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Capabilities.java (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Capabilities.java Fri Mar 21 01:28:53 2008
@@ -65,7 +65,7 @@
public boolean reserved17 = false;
- public boolean reserved18 = false;
+ public boolean canGetMonitorFrameInfo = false;
public boolean reserved19 = false;
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/JDWPCommands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/JDWPCommands.java?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/JDWPCommands.java (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/JDWPCommands.java Fri Mar 21 01:28:53 2008
@@ -253,6 +253,9 @@
public static final byte InterruptCommand = 11;
public static final byte SuspendCountCommand = 12;
+
+ //New command for Java 6
+ public static final byte OwnedMonitorsStackDepthInfoCommand = 13;
}
/**
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java?rev=639566&r1=639565&r2=639566&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java Fri Mar 21 01:28:53 2008
@@ -413,7 +413,7 @@
targetVMCapabilities.canGetInstanceInfo = replyPacket
.getNextValueAsBoolean();
targetVMCapabilities.reserved17 = replyPacket.getNextValueAsBoolean();
- targetVMCapabilities.reserved18 = replyPacket.getNextValueAsBoolean();
+ targetVMCapabilities.canGetMonitorFrameInfo = replyPacket.getNextValueAsBoolean();
targetVMCapabilities.reserved19 = replyPacket.getNextValueAsBoolean();
targetVMCapabilities.canGetConstantPool = replyPacket
.getNextValueAsBoolean();
Added: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java?rev=639566&view=auto
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java (added)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java Fri Mar 21 01:28:53 2008
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ */
+
+package org.apache.harmony.jpda.tests.jdwp.ThreadReference;
+
+import org.apache.harmony.jpda.tests.framework.DebuggeeSynchronizer;
+import org.apache.harmony.jpda.tests.framework.LogWriter;
+import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
+import org.apache.harmony.jpda.tests.share.SyncDebuggee;
+
+
+/**
+ * The class specifies debuggee for <code>org.apache.harmony.jpda.tests.jdwp.ThreadReference.OwnedMonitorsStackDepthInfoTest</code>.
+ * This debuggee starts the tested thread <code>TESTED_THREAD</code> which
+ * synchronized with test via the <code>SGNL_READY</code> and
+ * <code>SGNL_CONTINUE</code> signals.
+ */
+public class OwnedMonitorsStackDepthInfoDebuggee extends SyncDebuggee {
+
+ public static final String TESTED_THREAD = "TestedThread";
+
+ // These two objects are used
+ static Object waitForStart = new Object();
+ static Object waitForFinish = new Object();
+
+ public void run() {
+ DebuggeeThread thrd = new DebuggeeThread(TESTED_THREAD,
+ logWriter, synchronizer);
+
+ synchronized(waitForStart){
+ thrd.start();
+ try {
+ waitForStart.wait();
+ } catch (InterruptedException e) {
+
+ }
+ }
+
+ synchronized(waitForFinish){
+ logWriter.println("thread is finished");
+ }
+ }
+
+ class DebuggeeThread extends Thread {
+
+ LogWriter logWriter;
+ DebuggeeSynchronizer synchronizer;
+
+ public DebuggeeThread(String name, LogWriter logWriter,
+ DebuggeeSynchronizer synchronizer) {
+ super(name);
+ this.logWriter = logWriter;
+ this.synchronizer = synchronizer;
+ }
+
+ public void run() {
+
+ synchronized(OwnedMonitorsStackDepthInfoDebuggee.waitForFinish){
+
+ synchronized(OwnedMonitorsStackDepthInfoDebuggee.waitForStart){
+
+ OwnedMonitorsStackDepthInfoDebuggee.waitForStart.notifyAll();
+
+ logWriter.println(getName() + ": started");
+ synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
+
+ logWriter.println(getName() + ": wait for SGNL_CONTINUE");
+ synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
+ logWriter.println(getName() + ": finished");
+ }
+ }
+ }
+ }
+
+ public static void main(String [] args) {
+ runDebuggee(OwnedMonitorsStackDepthInfoDebuggee.class);
+ }
+}
Propchange: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java?rev=639566&view=auto
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java (added)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java Fri Mar 21 01:28:53 2008
@@ -0,0 +1,190 @@
+/*
+ * 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.
+ */
+
+package org.apache.harmony.jpda.tests.jdwp.ThreadReference;
+
+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.framework.jdwp.TaggedObject;
+import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
+import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
+
+/**
+ * JDWP Unit test for ThreadReference.OwnedMonitorsStackDepthInfo command.
+ */
+public class OwnedMonitorsStackDepthInfoTest extends JDWPSyncTestCase {
+
+ static final String thisCommandName = "ThreadReference.OwnedMonitorsStackDepthInfo command ";
+
+ protected String getDebuggeeClassName() {
+ return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.OwnedMonitorsStackDepthInfoDebuggee";
+ }
+
+ // OwnedMonitorsStackDepthInfo needs canGetMonitorFrameInfo VM capability support
+ private boolean isCapability() {
+ // check capability, relevant for this test
+ logWriter.println("=> Check capability: canGetMonitorFrameInfo");
+ debuggeeWrapper.vmMirror.capabilities();
+ boolean isCapability = debuggeeWrapper.vmMirror.targetVMCapabilities.canGetMonitorFrameInfo;
+ return isCapability;
+ }
+
+ /**
+ * This testcase exercises ThreadReference.OwnedMonitorsStackDepthInfo
+ * command. <BR>
+ * At first the test starts OwnedMonitorsStackDepthInfoDebuggee which runs
+ * the tested thread 'TESTED_THREAD'. <BR>
+ * Then the test performs the ThreadReference.OwnedMonitorsStackDepthInfo
+ * command for the tested thread and gets list of monitor objects.
+ * The returned monitor objects are equal to expected count and their stack depth are
+ * equal to expected depth. This test will perform MonitorInfo to guarrantee that returend
+ * monitors do belong to the test thread.
+ */
+ public void testOwnedMonitorsStackDepthInfo() {
+ String thisTestName = "testOwnedMonitorsStackDepthInfo";
+ logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": START...");
+ synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
+
+ if (!isCapability()) {
+ logWriter.println("##WARNING: this VM dosn't possess capability: canGetInstanceInfo");
+ return;
+ }
+
+ // Getting ID of the tested thread
+ logWriter.println("==> testedThreadName = "
+ + OwnedMonitorsStackDepthInfoDebuggee.TESTED_THREAD);
+ logWriter.println("==> Get testedThreadID...");
+ long testedThreadID = debuggeeWrapper.vmMirror
+ .getThreadID(OwnedMonitorsStackDepthInfoDebuggee.TESTED_THREAD);
+
+ // Compose the OwnedMonitorsStackDepthInfo command
+ CommandPacket stackDepthPacket = new CommandPacket(
+ JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
+ JDWPCommands.ThreadReferenceCommandSet.OwnedMonitorsStackDepthInfoCommand);
+ stackDepthPacket.setNextValueAsThreadID(testedThreadID);
+
+ // Suspend the VM before perform command
+ logWriter.println("==> testedThreadID = " + testedThreadID);
+ logWriter.println("==> suspend testedThread...");
+ debuggeeWrapper.vmMirror.suspendThread(testedThreadID);
+
+ // Perform the command and attain the reply package
+ ReplyPacket stackDepthReply = debuggeeWrapper.vmMirror
+ .performCommand(stackDepthPacket);
+ checkReplyPacket(stackDepthReply,
+ "ThreadReference::OwnedMonitorsStackDepthInfo command");
+
+ // Expected return values, these values is attained from RI behavior
+ int expectedMonitorCount = 3;
+ int[] expectedStackDepth = new int[] { 6, 7, 7 };
+
+ // Analyze the reply package
+ int owned = stackDepthReply.getNextValueAsInt();
+ assertEquals(thisCommandName
+ + "returned number of owned monitors is not equal to expected number.",
+ expectedMonitorCount, owned, null, null);
+ logWriter
+ .println("==> CHECK: PASSED: returned owned monitors have the same counts as expected");
+ logWriter.println("==> Owned monitors: " + owned);
+
+ for (int i = 0; i < owned; i++) {
+ // Attain monitor object ID
+ TaggedObject monitorObject = stackDepthReply
+ .getNextValueAsTaggedObject();
+
+ // Attain monitor stack depth
+ int returnedDepthInfo = stackDepthReply.getNextValueAsInt();
+ assertEquals(thisCommandName
+ + "returned monitor is not owned by test thread",
+ expectedStackDepth[i], returnedDepthInfo, null, null);
+ logWriter.println("==> CHECK: PASSED: returned owned monitor has the expected stack depth");
+ logWriter.println("==> Stack depth: " + returnedDepthInfo);
+
+ /*
+ * Test the returned monitor object does belong to the test thread by MonitorInfo Command
+ */
+ // Compose the MonitorInfo Command
+ CommandPacket monitorInfoPacket = new CommandPacket(
+ JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
+ JDWPCommands.ObjectReferenceCommandSet.MonitorInfoCommand);
+ monitorInfoPacket.setNextValueAsObjectID(monitorObject.objectID);
+
+ // Perform the command and attain the reply package
+ ReplyPacket monitorInfoReply = debuggeeWrapper.vmMirror
+ .performCommand(monitorInfoPacket);
+ checkReplyPacket(monitorInfoReply,
+ "ObjectReference::MonitorInfo command");
+
+ // Attain thread id from monitor info
+ long ownerThreadID = monitorInfoReply.getNextValueAsThreadID();
+ assertEquals(thisCommandName + "returned monitor is not owned by test thread", ownerThreadID, testedThreadID, null, null);
+
+ logWriter.println("==> CHECK: PASSED: returned monitor does belong to the test thread.");
+ logWriter.println("==> Monitor owner thread ID: " + ownerThreadID);
+
+ }
+
+ synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
+ assertAllDataRead(stackDepthReply);
+ }
+
+
+ public void testOwnedMonitorsStackDepthInfo_Unsuspended() {
+ String thisTestName = "testOwnedMonitorsStackDepthInfo";
+ logWriter.println("==> " + thisTestName + " for " + thisCommandName
+ + ": START...");
+ synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
+
+ if (!isCapability()) {
+ logWriter
+ .println("##WARNING: this VM dosn't possess capability: OwnedMonitorsStackDepthInfo");
+ return;
+ }
+
+ // Getting ID of the tested thread
+ logWriter.println("==> testedThreadName = "
+ + OwnedMonitorsStackDepthInfoDebuggee.TESTED_THREAD);
+ logWriter.println("==> Get testedThreadID...");
+ long testedThreadID = debuggeeWrapper.vmMirror
+ .getThreadID(OwnedMonitorsStackDepthInfoDebuggee.TESTED_THREAD);
+
+ // Compose the OwnedMonitorsStackDepthInfo command
+ CommandPacket stackDepthPacket = new CommandPacket(
+ JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
+ JDWPCommands.ThreadReferenceCommandSet.OwnedMonitorsStackDepthInfoCommand);
+ stackDepthPacket.setNextValueAsThreadID(testedThreadID);
+
+ // Perform the command and attain the reply package
+ ReplyPacket checkedReply = debuggeeWrapper.vmMirror
+ .performCommand(stackDepthPacket);
+ short errorCode = checkedReply.getErrorCode();
+ if (errorCode != JDWPConstants.Error.NONE) {
+ if (errorCode == JDWPConstants.Error.THREAD_NOT_SUSPENDED) {
+ logWriter.println("=> CHECK PASSED: Expected error (THREAD_NOT_SUSPENDED) is returned");
+ return;
+ }
+ }
+ printErrorAndFail(thisCommandName + " should throw exception when VM is not suspended.");
+ }
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(OwnedMonitorsStackDepthInfoTest.class);
+ }
+}
Propchange: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java
------------------------------------------------------------------------------
svn:eol-style = native