blob: 0ac88e926a2e3a45aaa5e4babd93c00841e9a527 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.debug.tests.core;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.ILineBreakpoint;
import org.eclipse.jdi.internal.jdwp.JdwpPacket;
import org.eclipse.jdi.internal.jdwp.JdwpReplyPacket;
import org.eclipse.jdi.internal.jdwp.JdwpString;
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
import org.eclipse.jdt.debug.core.IJavaThread;
import org.eclipse.jdt.debug.tests.AbstractDebugTest;
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
/**
* Tests raw JDWP commands sent to a target.
*
* @since 3.3
*/
public class JDWPTests extends AbstractDebugTest {
/**
* Constructor
* @param name
*/
public JDWPTests(String name) {
super(name);
}
/**
* Sends a request to the VirtualMachine Command Set (byte 1) to ask for
* the VM Capabilities (byte 12)
* @throws Exception
*/
public void testCapabilities() throws Exception {
String typeName = "Breakpoints";
ILineBreakpoint bp = createLineBreakpoint(52, typeName);
IJavaThread thread = null;
try {
thread= launchToLineBreakpoint(typeName, bp);
IDebugTarget target = thread.getDebugTarget();
assertTrue("Wrong target", target instanceof JDIDebugTarget);
IJavaDebugTarget jdiTarget = (IJavaDebugTarget) target;
// VM capabilities
byte[] reply = jdiTarget.sendCommand((byte)1, (byte)12, null);
JdwpReplyPacket packet = (JdwpReplyPacket) JdwpPacket.build(reply);
assertEquals("Unexpected error code in reply packet", 0, packet.errorCode());
DataInputStream replyData = packet.dataInStream();
// should be 7 booleans in reply
for (int i = 0; i < 7; i++) {
replyData.readBoolean();
}
assertEquals("Should be no available bytes", 0, replyData.available());
} finally {
terminateAndRemove(thread);
removeAllBreakpoints();
}
}
/**
* Sends a request to the VirtualMachine Command Set (byte 1) to ask
* for ClassesBySignature (byte 2)
* @throws Exception
*/
public void testClassesBySingature() throws Exception {
String typeName = "Breakpoints";
ILineBreakpoint bp = createLineBreakpoint(52, typeName);
IJavaThread thread = null;
try {
thread= launchToLineBreakpoint(typeName, bp);
IDebugTarget target = thread.getDebugTarget();
assertTrue("Wrong target", target instanceof JDIDebugTarget);
IJavaDebugTarget jdiTarget = (IJavaDebugTarget) target;
// VM capabilities
ByteArrayOutputStream outBytes = new ByteArrayOutputStream();
DataOutputStream outData = new DataOutputStream(outBytes);
JdwpString.write("LBreakpoints;", outData);
byte[] reply = jdiTarget.sendCommand((byte)1, (byte)2, outBytes.toByteArray());
JdwpReplyPacket packet = (JdwpReplyPacket) JdwpPacket.build(reply);
assertEquals("Unexpected error code in reply packet", 0, packet.errorCode());
DataInputStream replyData = packet.dataInStream();
// should be 1 type in reply
assertEquals("Wrong number of types", 1, replyData.readInt());
} finally {
terminateAndRemove(thread);
removeAllBreakpoints();
}
}
}