merge in mnc-release history after reset to mnc-dev
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java
index 67c0aa0..3ffa6df 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java
@@ -218,19 +218,6 @@
* @return requestID id of request
*/
public int setBreakpointAtMethodBegin(long classID, String methodName) {
- return setBreakpointAtMethodBegin(classID, methodName, JDWPConstants.SuspendPolicy.ALL);
- }
-
- /**
- * Sets breakpoint at the beginning of method with name <i>methodName</i>.
- *
- * @param classID
- * id of class with required method
- * @param methodName
- * name of required method
- * @return requestID id of request
- */
- public int setBreakpointAtMethodBegin(long classID, String methodName, byte suspendPolicy) {
long methodID = getMethodID(classID, methodName);
ReplyPacket lineTableReply = getLineTable(classID, methodID);
@@ -258,7 +245,7 @@
Location breakpointLocation = new Location(JDWPConstants.TypeTag.CLASS,
classID, methodID, lineCodeIndex);
- ReplyPacket reply = setBreakpoint(breakpointLocation, suspendPolicy);
+ ReplyPacket reply = setBreakpoint(breakpointLocation);
checkReply(reply);
return reply.getNextValueAsInt();
@@ -746,22 +733,6 @@
}
/**
- * Returns suspend count for specified <code>threadID</code>.
- *
- * @param threadID
- * thread ID
- * @return thread's suspend count
- */
- public int getThreadSuspendCount(long threadID) {
- CommandPacket commandPacket = new CommandPacket(
- JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
- JDWPCommands.ThreadReferenceCommandSet.SuspendCountCommand);
- commandPacket.setNextValueAsThreadID(threadID);
- ReplyPacket replyPacket = checkReply(performCommand(commandPacket));
- return replyPacket.getNextValueAsInt();
- }
-
- /**
* Returns name of thread group for specified <code>groupID</code>
*
* @param groupID
@@ -2378,20 +2349,6 @@
}
/**
- * Returns the value of one static field of the reference type
- *
- * @param refTypeID
- * The reference type ID.
- * @param fieldID
- * ID of field to get
- * @return A Value object representing the field's value
- */
- public final Value getReferenceTypeValue(long refTypeID, long fieldID) {
- Value[] values = getReferenceTypeValues(refTypeID, new long[]{fieldID});
- return values[0];
- }
-
- /**
* Returns the value of the 'this' reference for this frame
*
* @param threadID
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethodWithSuspensionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethodWithSuspensionTest.java
deleted file mode 100644
index d1d7efe..0000000
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethodWithSuspensionTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.ClassType;
-
-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.ReplyPacket;
-import org.apache.harmony.jpda.tests.framework.jdwp.TaggedObject;
-import org.apache.harmony.jpda.tests.framework.jdwp.Value;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPInvokeMethodWithSuspensionTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.debuggee.InvokeMethodWithSuspensionDebuggee;
-
-/**
- * JDWP unit test for ClassType.InvokeCommand command with a thread suspension.
- */
-public class InvokeMethodWithSuspensionTest extends JDWPInvokeMethodWithSuspensionTestCase {
- public void testInvokeWithMultipleEvents001() {
- runInvokeMethodTest(InvokeMethodWithSuspensionDebuggee.STATIC_METHOD_NAME);
- }
-
- @Override
- protected CommandPacket buildInvokeCommand(long threadId, long classID,
- long methodId, int invoke_options) {
- CommandPacket command = new CommandPacket(
- JDWPCommands.ClassTypeCommandSet.CommandSetID,
- JDWPCommands.ClassTypeCommandSet.InvokeMethodCommand);
- command.setNextValueAsClassID(classID);
- command.setNextValueAsThreadID(threadId);
- command.setNextValueAsMethodID(methodId);
- command.setNextValueAsInt(0);
- command.setNextValueAsInt(invoke_options);
- return command;
- }
-
- @Override
- protected String getInvokeCommandName() {
- return "ClassType.InvokeCommand";
- }
-
- @Override
- protected void checkInvokeReply(ReplyPacket reply) {
- // Check result is 'void'
- Value invokeResult = reply.getNextValueAsValue();
- assertNull("Expect null result value for 'void'", invokeResult);
-
- // Check exception is null.
- TaggedObject invokeException = reply.getNextValueAsTaggedObject();
- assertEquals("Invalid exception object id", 0, invokeException.objectID);
- assertAllDataRead(reply);
-
- }
-
-}
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceWithSuspensionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceWithSuspensionTest.java
deleted file mode 100644
index 26509d3..0000000
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceWithSuspensionTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.ClassType;
-
-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.JDWPInvokeMethodWithSuspensionTestCase;
-
-/**
- * JDWP unit test for ClassType.NewInstance command with a thread suspension.
- */
-public class NewInstanceWithSuspensionTest extends JDWPInvokeMethodWithSuspensionTestCase {
- public void testInvokeWithMultipleEvents001() {
- runInvokeMethodTest("<init>");
- }
-
- @Override
- protected CommandPacket buildInvokeCommand(long threadId, long classID,
- long methodId, int invoke_options) {
- CommandPacket command = new CommandPacket(
- JDWPCommands.ClassTypeCommandSet.CommandSetID,
- JDWPCommands.ClassTypeCommandSet.NewInstanceCommand);
- command.setNextValueAsClassID(classID);
- command.setNextValueAsThreadID(threadId);
- command.setNextValueAsMethodID(methodId);
- command.setNextValueAsInt(0);
- command.setNextValueAsInt(invoke_options);
- return command;
- }
-
- @Override
- protected String getInvokeCommandName() {
- return "ClassType.NewInstance";
- }
-
- @Override
- protected void checkInvokeReply(ReplyPacket reply) {
- // Check result is 'void'
- TaggedObject invokeNewObject = reply.getNextValueAsTaggedObject();
- assertEquals(JDWPConstants.Tag.OBJECT_TAG, invokeNewObject.tag);
- assertFalse("Invalid exception object id", invokeNewObject.objectID == 0);
-
- // Check exception is null.
- TaggedObject invokeException = reply.getNextValueAsTaggedObject();
- assertEquals(JDWPConstants.Tag.OBJECT_TAG, invokeException.tag);
- assertEquals("Invalid exception object id", 0, invokeException.objectID);
-
- assertAllDataRead(reply);
-
- }
-
-}
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodWithSuspensionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodWithSuspensionTest.java
deleted file mode 100644
index 578d446..0000000
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodWithSuspensionTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.ObjectReference;
-
-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.ReplyPacket;
-import org.apache.harmony.jpda.tests.framework.jdwp.TaggedObject;
-import org.apache.harmony.jpda.tests.framework.jdwp.Value;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPInvokeMethodWithSuspensionTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.debuggee.InvokeMethodWithSuspensionDebuggee;
-
-/**
- * JDWP unit test for ObjectReference.InvokeCommand command with a thread suspension.
- */
-public class InvokeMethodWithSuspensionTest extends JDWPInvokeMethodWithSuspensionTestCase {
- public void testInvokeWithMultipleEvents001() {
- runInvokeMethodTest(InvokeMethodWithSuspensionDebuggee.INSTANCE_METHOD_NAME);
- }
-
- @Override
- protected CommandPacket buildInvokeCommand(long threadId, long classID,
- long methodId, int invoke_options) {
- // We must first find the 'this' object of the top frame.
- ReplyPacket replyPacket = debuggeeWrapper.vmMirror.getThreadFrames(threadId, 0, 1);
- int framesCount = replyPacket.getNextValueAsInt();
- assertEquals("Invalid frame count:", 1, framesCount);
- long topFrameId = replyPacket.getNextValueAsFrameID();
- replyPacket.getNextValueAsLocation(); // consume 'location'
- assertAllDataRead(replyPacket);
-
- long receiverId = debuggeeWrapper.vmMirror.getThisObject(threadId, topFrameId);
-
- CommandPacket command = new CommandPacket(
- JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
- JDWPCommands.ObjectReferenceCommandSet.InvokeMethodCommand);
- command.setNextValueAsThreadID(receiverId);
- command.setNextValueAsThreadID(threadId);
- command.setNextValueAsClassID(classID);
- command.setNextValueAsMethodID(methodId);
- command.setNextValueAsInt(0);
- command.setNextValueAsInt(invoke_options);
- return command;
- }
-
- @Override
- protected String getInvokeCommandName() {
- return "ObjectReference.InvokeCommand";
- }
-
- @Override
- protected void checkInvokeReply(ReplyPacket reply) {
- // Check result is 'void'
- Value invokeResult = reply.getNextValueAsValue();
- assertNull("Expect null result value for 'void'", invokeResult);
-
- // Check exception is null.
- TaggedObject invokeException = reply.getNextValueAsTaggedObject();
- assertEquals("Invalid exception object id", 0, invokeException.objectID);
- assertAllDataRead(reply);
-
- }
-
-}
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeDebuggee.java
deleted file mode 100644
index 7acc3a5..0000000
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeDebuggee.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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.VirtualMachine;
-
-import org.apache.harmony.jpda.tests.framework.TestErrorException;
-import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
-import org.apache.harmony.jpda.tests.share.SyncDebuggee;
-
-/**
- * Debuggee for {@link DisposeDuringInvokeTest}.
- */
-public class DisposeDuringInvokeDebuggee extends SyncDebuggee {
- public static final String INVOKED_METHOD_NAME = "invokeMethodWithSynchronization";
- public static final String BREAKPOINT_METHOD_NAME = "breakpointMethod";
- public static final String THIS_FIELD_NAME = "thisObject";
-
- // This field holds the receiver to invoke the invokeMethodWithSynchronization method.
- public static DisposeDuringInvokeDebuggee thisObject;
-
- private class DebuggeeThread extends Thread {
- public DebuggeeThread() {
- super("DebuggeeThread");
- }
-
- public void run() {
- breakpointMethod();
- }
- }
-
- /**
- * The method used to suspend the DebuggeeThread on a breakpoint.
- */
- private void breakpointMethod() {
- }
-
- /**
- * The method called by the DebuggeeThread through JDWP.
- */
- private void invokeMethodWithSynchronization() {
- logWriter.println("#START invokeMethodWithSynchronization");
-
- // Tell the test we are invoking the requested method.
- synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
-
- // Wait for the test to send a VirtualMachine.Dispose command and resume us.
- synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
-
- logWriter.println("#END invokeMethodWithSynchronization");
- }
-
- @Override
- public void run() {
- thisObject = this;
-
- DebuggeeThread thrd = new DebuggeeThread();
- synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
-
- synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
-
- logWriter.println("Start DebuggeeThread");
- thrd.start();
-
- logWriter.println("Main thread waits for DebuggeeThread ...");
- try {
- thrd.join();
- } catch (InterruptedException e) {
- throw new TestErrorException(e);
- }
- logWriter.println("DebuggeeThread is finished");
-
- // Tell the test we successfully waited for the end of DebuggeeThread.
- synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
-
- // Wait for the test to resume us.
- synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
- }
-
- public static void main(String [] args) {
- runDebuggee(DisposeDuringInvokeDebuggee.class);
- }
-}
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeTest.java
deleted file mode 100644
index 7046d4e..0000000
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.VirtualMachine;
-
-import org.apache.harmony.jpda.tests.framework.TestErrorException;
-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.Value;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
-
-import java.io.IOException;
-
-/**
- * JDWP Unit test for VirtualMachine.Dispose command while a thread is invoking a method.
- */
-public class DisposeDuringInvokeTest extends JDWPSyncTestCase {
-
- @Override
- protected String getDebuggeeClassName() {
- return DisposeDuringInvokeDebuggee.class.getName();
- }
-
- /**
- * This testcase exercises VirtualMachine.Dispose command when a thread, suspended by an
- * event, is still invoking a method.
- * <BR>At first the test starts DisposeDuringInvokeDebuggee debuggee.
- * <BR>Then the test sets a breakpoint so that the tested thread (DebuggeeThread) gets suspended
- * by an event. Once this thread is suspended, we send it an ObjectReference.InvokeMethod
- * command to initiate a method invocation executing in that thread. The method will synchronize
- * with the test, waiting for a signal to continue its execution.
- * <BR>While the tested thread waits for the signal, we send a VirtualMachine.Dispose command to
- * the debuggee and sends the expected signal so the tested thread completes the method
- * invocation.
- * <BR>Finally, we wait for the debuggee's main thread to signal us when the tested thread has
- * normally terminated after we dispose the JDWP connection.
- */
- public void testDisposeDuringInvoke() {
- synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
-
- // Set breakpoint so the DebuggeeThread suspends itself only.
- long classID = getClassIDBySignature(getDebuggeeClassSignature());
- long invokedMethodId = getMethodID(classID,
- DisposeDuringInvokeDebuggee.INVOKED_METHOD_NAME);
- int breakpointID = debuggeeWrapper.vmMirror.setBreakpointAtMethodBegin(classID,
- DisposeDuringInvokeDebuggee.BREAKPOINT_METHOD_NAME,
- JDWPConstants.SuspendPolicy.EVENT_THREAD);
- long thisObjectId = getReceiverObjectId(classID);
-
- // Continue debuggee.
- synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
-
- // Wait for the DebuggeeThread to suspend on the breakpoint.
- long threadID = debuggeeWrapper.vmMirror.waitForBreakpoint(breakpointID);
-
- // Send ObjectReference.InvokeMethod command.
- CommandPacket command = new CommandPacket(
- JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
- JDWPCommands.ObjectReferenceCommandSet.InvokeMethodCommand);
- command.setNextValueAsThreadID(thisObjectId);
- command.setNextValueAsThreadID(threadID);
- command.setNextValueAsClassID(classID);
- command.setNextValueAsMethodID(invokedMethodId);
- command.setNextValueAsInt(0);
- command.setNextValueAsInt(0);
- try {
- debuggeeWrapper.vmMirror.sendCommand(command);
- } catch (IOException e) {
- throw new TestErrorException("Failed to send ObjectReference.InvokeMethod command", e);
- }
-
- // Wait for the DebuggeeThread to start method invocation.
- synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
-
- // Detach from debuggee with a VirtualMachine.Dispose command.
- debuggeeWrapper.vmMirror.dispose();
-
- // Signal DebuggeeThread to continue so it completes method invocation.
- synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
-
- // Wait for the DebuggeeThread to terminate. The debuggee's main thread waits for it
- // (using Thread.join) before signaling us.
- synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
-
- // The test is a success: resume the debuggee to finish
- synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
- }
-
- /**
- * Returns the object ID of the debuggee object to issue the ObjectReference.InvokeMethod
- * command.
- *
- * @param classID
- * the debuggee class ID.
- * @return the object ID of the debuggee
- */
- private long getReceiverObjectId(long classID) {
- long thisObjectFieldID = checkField(classID, DisposeDuringInvokeDebuggee.THIS_FIELD_NAME);
- Value thisObjectValue =
- debuggeeWrapper.vmMirror.getReferenceTypeValue(classID, thisObjectFieldID);
- assertEquals("Invalid value tag:", JDWPConstants.Tag.OBJECT_TAG, thisObjectValue.getTag());
- return thisObjectValue.getLongValue();
- }
-}
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPInvokeMethodWithSuspensionTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPInvokeMethodWithSuspensionTestCase.java
deleted file mode 100644
index cbb0107..0000000
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPInvokeMethodWithSuspensionTestCase.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * 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.share;
-
-import org.apache.harmony.jpda.tests.framework.TestErrorException;
-import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
-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.debuggee.InvokeMethodWithSuspensionDebuggee;
-import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
-
-import java.io.IOException;
-
-/**
- * Base class for tests checking invoke command with thread suspension.
- */
-public abstract class JDWPInvokeMethodWithSuspensionTestCase extends JDWPSyncTestCase {
-
- @Override
- protected final String getDebuggeeClassName() {
- return InvokeMethodWithSuspensionDebuggee.class.getName();
- }
-
- /**
- * This methods runs the {@link InvokeMethodWithSuspensionDebuggee} then sets up the
- * following breakpoints:
- * - breakpoint #1 to suspend the current thread only when the debuggee starts
- * - breakpoint #2 to suspend all threads from a new thread started by a method called through
- * JDWP.
- * When we receive the event for breakpoint #1, we issue a request to invoke a method (or a
- * constructor) in the event thread (suspended on the breakpoint). The event thread starts
- * another child thread and loops as long as the child is running. However, we do not read the
- * reply of the invoke yet.
- * Next, we wait for the new thread to hit breakpoint #2. We resume all threads in the debuggee
- * and read the reply of the invoke.
- * Finally, we resume the thread that completed the invoke.
- *
- * @param invokedMethodName
- * the name of the method to invoke
- */
- protected void runInvokeMethodTest(String invokedMethodName) {
- // Wait for debuggee to start.
- synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
-
- long classID = getClassIDBySignature(getDebuggeeClassSignature());
- long invokeMethodID = getMethodID(classID, invokedMethodName);
-
- // Set breakpoint with EVENT_THREAD suspend policy so only the event thread is suspended.
- // We will invoke the method in this thread.
- int breakpointEventThread = debuggeeWrapper.vmMirror.setBreakpointAtMethodBegin(classID,
- InvokeMethodWithSuspensionDebuggee.BREAKPOINT_EVENT_THREAD_METHOD_NAME,
- JDWPConstants.SuspendPolicy.EVENT_THREAD);
-
- // Set breakpoint with ALL suspend policy to suspend all threads. The thread started
- // during the invoke will suspend all threads, including the thread executing the invoke.
- int breakpointAllThreads = debuggeeWrapper.vmMirror.setBreakpointAtMethodBegin(classID,
- InvokeMethodWithSuspensionDebuggee.BREAKPOINT_ALL_THREADS_METHOD_NAME,
- JDWPConstants.SuspendPolicy.ALL);
-
- // Tell the debuggee to continue.
- synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
-
- // Wait for breakpoint and get id of suspended thread.
- long eventThreadOne = debuggeeWrapper.vmMirror.waitForBreakpoint(breakpointEventThread);
- int suspendCount = debuggeeWrapper.vmMirror.getThreadSuspendCount(eventThreadOne);
- assertEquals("Invalid suspend count:", 1, suspendCount);
-
- // Send command but does not read reply now. That invoked method starts another thread
- // that is going to hit a breakpoint and suspend all threads, including the thread invoking
- // the method. The invoke can only complete when that new thread terminates, which requires
- // we send a VirtualMachine.Resume command.
- final int invoke_options = 0; // resume/suspend all threads before/after the invoke.
- CommandPacket invokeMethodCommand = buildInvokeCommand(eventThreadOne, classID,
- invokeMethodID, invoke_options);
-
- String commandName = getInvokeCommandName();
- logWriter.println("Send " + commandName);
- int invokeMethodCommandID = -1;
- try {
- invokeMethodCommandID = debuggeeWrapper.vmMirror.sendCommand(invokeMethodCommand);
- } catch (IOException e) {
- logWriter.printError("Failed to send " + commandName, e);
- fail();
- }
-
- // Wait for 2nd breakpoint to hit.
- long eventThreadTwo = debuggeeWrapper.vmMirror.waitForBreakpoint(breakpointAllThreads);
- suspendCount = debuggeeWrapper.vmMirror.getThreadSuspendCount(eventThreadTwo);
- assertEquals("Invalid suspend count:", 1, suspendCount);
-
- // At this point, the event thread #1 must have been suspended by event thread #2. Since
- // the invoke has resumed it too, its suspend count must remain 1.
- suspendCount = debuggeeWrapper.vmMirror.getThreadSuspendCount(eventThreadOne);
- assertEquals("Invalid suspend count:", 1, suspendCount);
-
- // Test that sending another invoke command in the same thread returns an error.
- CommandPacket anotherInvokeMethodCommand = buildInvokeCommand(eventThreadOne, classID,
- invokeMethodID, invoke_options);
- ReplyPacket anotherInvokeMethodReply =
- debuggeeWrapper.vmMirror.performCommand(anotherInvokeMethodCommand);
- // The RI returns INVALID_THREAD error while ART returns ALREADY_INVOKING error which is
- // more accurate. We only test we get an error so we can run the test with both runtimes.
- assertTrue("Expected an error",
- anotherInvokeMethodReply.getErrorCode() != JDWPConstants.Error.NONE);
-
- // Send a VirtualMachine.Resume to resume all threads. This will unblock the event thread
- // with the invoke in-progress.
- logWriter.println("Resume all threads");
- resumeDebuggee();
-
- // Now we can read the invoke reply.
- ReplyPacket invokeMethodReply = null;
- try {
- logWriter.println("Receiving reply for command " + invokeMethodCommandID + " ...");
- invokeMethodReply = debuggeeWrapper.vmMirror.receiveReply(invokeMethodCommandID);
- } catch (Exception e) {
- throw new TestErrorException("Did not receive invoke reply", e);
- }
- checkReplyPacket(invokeMethodReply, commandName + " command");
- logWriter.println("Received reply for command " + invokeMethodCommandID + " OK");
-
- checkInvokeReply(invokeMethodReply);
-
- // The invoke is complete but the thread is still suspended: let's resume it now.
- suspendCount = debuggeeWrapper.vmMirror.getThreadSuspendCount(eventThreadOne);
- assertEquals("Invalid suspend count:", 1, suspendCount);
-
- logWriter.println("Resume event thread #1");
- debuggeeWrapper.vmMirror.resumeThread(eventThreadOne);
- }
-
- /**
- * Builds the packed for the tested JDWP command.
- *
- * @param threadId
- * the id of the thread that will invoke the method
- * @param classID
- * the class ID of the invoked method
- * @param methodId
- * the ID of the invoke method
- * @param invokeOptions
- * options for the invoke
- * @return a command
- */
- protected abstract CommandPacket buildInvokeCommand(long threadId, long classID,
- long methodId, int invokeOptions);
-
- /**
- * Returns the name of the command returned by {@link #buildInvokeCommand} for printing.
- *
- * @return the name of the invoke command sent to the debuggee
- */
- protected abstract String getInvokeCommandName();
-
- /**
- * Checks the reply for the tested JDWP command.
- *
- * @param reply the reply of the invoke
- */
- protected abstract void checkInvokeReply(ReplyPacket reply);
-
-}
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodWithSuspensionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodWithSuspensionDebuggee.java
deleted file mode 100644
index ce7327c..0000000
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodWithSuspensionDebuggee.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * 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.share.debuggee;
-
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPInvokeMethodWithSuspensionTestCase;
-import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
-import org.apache.harmony.jpda.tests.share.SyncDebuggee;
-
-/**
- * Debuggee for subclasses of {@link JDWPInvokeMethodWithSuspensionTestCase}.
- */
-public class InvokeMethodWithSuspensionDebuggee extends SyncDebuggee {
- // Information for the test.
- public static final String STATIC_METHOD_NAME = "invokedStaticMethod";
- public static final String INSTANCE_METHOD_NAME = "invokedInstanceMethod";
- public static final String BREAKPOINT_EVENT_THREAD_METHOD_NAME = "breakpointEventThread";
- public static final String BREAKPOINT_ALL_THREADS_METHOD_NAME = "breakpointAllThreads";
-
- private static volatile boolean testThreadFinished = false;
- private static Thread testThread = null;
- private static boolean enableThreadSuspensionForTesting = false;
-
- private class TestThread extends Thread {
- public TestThread() {
- super("TestThread");
- }
-
- @Override
- public void run() {
- logWriter.println("TestThread starts");
-
- // We're going to suspend all threads in the method below.
- logWriter.println("Breakpoint for event thread #2");
- breakpointAllThreads();
-
- // The test needs to resume us so the invoke in progress in event thread #1 can
- // complete.
- testThreadFinished = true;
-
- logWriter.println("TestThread ends");
- }
- }
-
- // Invoked to suspend main thread (event thread #1) on a breakpoint.
- public void breakpointEventThread() {
- }
-
- // Invoked to suspend test thread (event thread #2) and all others threads on a breakpoint.
- public void breakpointAllThreads() {
- }
-
- // Invoked in event thread #1. This will unblock event thread #2 that will suspend all threads
- // including event thread #1. This helps us check that the debugger is not blocked waiting for
- // this invoke.
- private static void causeEventThreadSuspension() {
- if (enableThreadSuspensionForTesting) {
- // Start event thread #2. It's going to hit a breakpoint and suspend us.
- testThread.start();
-
- // We don't use wait/notify pattern to be sure our loop is active.
- while (!testThreadFinished) {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- // Static method to test ClassType.InvokeMethod.
- public static void invokedStaticMethod() {
- causeEventThreadSuspension();
- }
-
- // Constructor to test ClassType.NewInstance.
- public InvokeMethodWithSuspensionDebuggee() {
- causeEventThreadSuspension();
- }
-
- // Instance method to test ObjectReference.InvokeMethod.
- public void invokedInstanceMethod() {
- causeEventThreadSuspension();
- }
-
- @Override
- public void run() {
- logWriter.println("InvokeMethodWithThreadSuspensionDebuggee starts");
-
- synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
-
- // Create test thread but do not start it now. It will be started by the invoke from
- // the test through JDWP.
- testThread = new TestThread();
-
- synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
-
- enableThreadSuspensionForTesting = true;
-
- // We want to suspend the main thread on a breakpoint.
- logWriter.println("Breakpoint for event thread #1");
- breakpointEventThread();
-
- // Ensure tested thread is finished.
- try {
- testThread.join();
- } catch (InterruptedException e) {
- logWriter.printError("Failed to join tested thread", e);
- }
- testThread = null;
-
- logWriter.println("InvokeMethodWithThreadSuspensionDebuggee ends");
- }
-
- public static void main(String[] args) {
- runDebuggee(InvokeMethodWithSuspensionDebuggee.class);
- }
-}
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/AllTests.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/AllTests.java
index e38b3d0..3936605 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/AllTests.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/AllTests.java
@@ -62,11 +62,9 @@
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassObjectReference.ReflectedTypeTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.InvokeMethod002Test.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.InvokeMethod003Test.class);
- suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.InvokeMethodWithSuspensionTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.InvokeMethodTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.NewInstance002Test.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.NewInstanceTest.class);
- suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.NewInstanceWithSuspensionTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.SetValues002Test.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.SetValuesTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ClassType.SuperClassTest.class);
@@ -127,7 +125,6 @@
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ObjectReference.InvokeMethod002Test.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ObjectReference.InvokeMethod003Test.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ObjectReference.InvokeMethodTest.class);
- suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ObjectReference.InvokeMethodWithSuspensionTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ObjectReference.IsCollectedTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ObjectReference.MonitorInfoTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.ObjectReference.ReferenceTypeTest.class);
@@ -201,7 +198,6 @@
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.VirtualMachine.ClassesBySignatureTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.VirtualMachine.ClassPathsTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.VirtualMachine.CreateStringTest.class);
- suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.VirtualMachine.DisposeDuringInvokeTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.VirtualMachine.DisposeTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.VirtualMachine.DisposeObjectsTest.class);
suite.addTestSuite(org.apache.harmony.jpda.tests.jdwp.VirtualMachine.ExitTest.class);