mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-01 21:35:40 +02:00
Don't require gdbserver to be present for local tests to pass
The TraceFileTest.java file has three tests which depend on each other. Inter-dependency between tests is not good. This commit removes it. Change-Id: Id910a5cea741c85959679e4b0a6981f603f19d13
This commit is contained in:
parent
096d2fa9f0
commit
9781f7bfa8
1 changed files with 71 additions and 15 deletions
|
@ -56,19 +56,18 @@ import org.eclipse.debug.core.IBreakpointManager;
|
||||||
import org.eclipse.debug.core.model.IBreakpoint;
|
import org.eclipse.debug.core.model.IBreakpoint;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.FixMethodOrder;
|
import org.junit.Assume;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.MethodSorters;
|
|
||||||
import org.junit.runners.Parameterized;
|
import org.junit.runners.Parameterized;
|
||||||
|
|
||||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
|
||||||
@RunWith(Parameterized.class)
|
@RunWith(Parameterized.class)
|
||||||
public class TraceFileTest extends BaseParametrizedTestCase {
|
public class TraceFileTest extends BaseParametrizedTestCase {
|
||||||
|
|
||||||
private final static String SOURCE_NAME = "TracepointTestApp.cc";
|
private final static String SOURCE_NAME = "TracepointTestApp.cc";
|
||||||
private final static String EXEC_NAME = "TracepointTestApp.exe";
|
private final static String EXEC_NAME = "TracepointTestApp.exe";
|
||||||
private final static String TRACE_NAME = "trace";
|
private final static String TRACE_NAME = "trace";
|
||||||
|
private final static String TRACE_FILE_PATH = EXEC_PATH + TRACE_NAME;
|
||||||
private final static int LINE_NUMBER_1 = 17;
|
private final static int LINE_NUMBER_1 = 17;
|
||||||
private final static int LINE_NUMBER_2 = 24;
|
private final static int LINE_NUMBER_2 = 24;
|
||||||
private final static String END_FUNCTION = "lastCall";
|
private final static String END_FUNCTION = "lastCall";
|
||||||
|
@ -119,7 +118,7 @@ public class TraceFileTest extends BaseParametrizedTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This test implements the following steps.
|
* This method implements the following steps.
|
||||||
* 1. Starts a remote session
|
* 1. Starts a remote session
|
||||||
* 2. Sets two tracepoints in data/launch/src/TracepointTestApp.cc
|
* 2. Sets two tracepoints in data/launch/src/TracepointTestApp.cc
|
||||||
* The first tracepoint's command is "teval a".
|
* The first tracepoint's command is "teval a".
|
||||||
|
@ -130,8 +129,7 @@ public class TraceFileTest extends BaseParametrizedTestCase {
|
||||||
* 6. Stops tracing
|
* 6. Stops tracing
|
||||||
* 7. Saves the trace data into a file (data/launch/bin/trace).
|
* 7. Saves the trace data into a file (data/launch/bin/trace).
|
||||||
*/
|
*/
|
||||||
@Test
|
protected void createTraceFile() throws Throwable {
|
||||||
public void a_createTraceFile() throws Throwable {
|
|
||||||
// Make sure that there are no tracepoint actions and no platform breakpoints in the workspace.
|
// Make sure that there are no tracepoint actions and no platform breakpoints in the workspace.
|
||||||
deleteActionsAndBreakpoints();
|
deleteActionsAndBreakpoints();
|
||||||
deleteOldTraceFile();
|
deleteOldTraceFile();
|
||||||
|
@ -147,13 +145,49 @@ public class TraceFileTest extends BaseParametrizedTestCase {
|
||||||
saveTraceData();
|
saveTraceData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This test verifies that creating a trace file works as expected.
|
||||||
|
* @see #createTraceFile
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testCreateTraceFile() throws Throwable {
|
||||||
|
// This tests forces a remote session by calling startRemoteSession()
|
||||||
|
// The problem is that if gdbserver is not available, the test will fail
|
||||||
|
// If the tests being run are only triggering local tests, then this failure
|
||||||
|
// should not be happening.
|
||||||
|
// Therefore, we only run this tests if we are specifically running remote tests.
|
||||||
|
Assume.assumeTrue("Skipping non-remote", remote);
|
||||||
|
|
||||||
|
createTraceFile();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This test removes all existing tracepoint actions and tracepoints
|
* This test sets up by first creating a trace file
|
||||||
|
* by calling {@link #createTraceFile}
|
||||||
|
*
|
||||||
|
* It then removes all existing tracepoint actions and tracepoints
|
||||||
* and verifies that corresponding platform tracepoints with the proper
|
* and verifies that corresponding platform tracepoints with the proper
|
||||||
* actions are created.
|
* actions are created.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void b_testTraceFile() throws Throwable {
|
public void testTraceFile() throws Throwable {
|
||||||
|
// This test will force a local post-mortem session, so only run it in local mode
|
||||||
|
Assume.assumeTrue("Skipping remote", !remote);
|
||||||
|
|
||||||
|
try {
|
||||||
|
createTraceFile();
|
||||||
|
// Cleanup the interim launch that we just caused
|
||||||
|
doAfterTest();
|
||||||
|
// Setup for the upcoming launch
|
||||||
|
doBeforeTest();
|
||||||
|
} catch (Throwable t) {
|
||||||
|
// If we cannot create the trace file, ignore the test using the
|
||||||
|
// assume check below. The reason for the failure could be a missing
|
||||||
|
// gdbserver, and we don't want to fail a local test due to that
|
||||||
|
}
|
||||||
|
|
||||||
|
Assume.assumeTrue("Cannot find trace file: " + TRACE_FILE_PATH, new File(TRACE_FILE_PATH).exists());
|
||||||
|
|
||||||
// Make sure that there are no tracepoint actions and no platform breakpoints in the workspace.
|
// Make sure that there are no tracepoint actions and no platform breakpoints in the workspace.
|
||||||
deleteActionsAndBreakpoints();
|
deleteActionsAndBreakpoints();
|
||||||
|
|
||||||
|
@ -163,13 +197,35 @@ public class TraceFileTest extends BaseParametrizedTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This test verifies that the tracepoint actions and platform tracepoints
|
* This test sets up by first creating a trace file and importing it back
|
||||||
* created by 'testTraceFile()' are associated with the corresponding target
|
* by calling {@link #testTraceFile} which also calls {@link #createTraceFile}
|
||||||
|
|
||||||
|
* It then verifies that the tracepoint actions and platform tracepoints
|
||||||
|
* created by {@link #testTraceFile()} are associated with the corresponding target
|
||||||
* tracepoints and are not created a second time.
|
* tracepoints and are not created a second time.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void c_testTraceFileWithExistingTracepoints() throws Throwable {
|
public void testTraceFileWithExistingTracepoints() throws Throwable {
|
||||||
// Verify that actions and tracepoints required for this test are in place.
|
// This test will force a local post-mortem session, so only run it in local mode
|
||||||
|
Assume.assumeTrue("Skipping remote", !remote);
|
||||||
|
|
||||||
|
// This test requires the presence of tracepoints created by another test.
|
||||||
|
// To allow our current test to be independent, we explicitly call
|
||||||
|
// the required test ourselves.
|
||||||
|
try {
|
||||||
|
testTraceFile();
|
||||||
|
// Cleanup the interim launch that we just caused
|
||||||
|
doAfterTest();
|
||||||
|
// Setup for the upcoming launch
|
||||||
|
doBeforeTest();
|
||||||
|
} catch (Throwable t) {
|
||||||
|
// If we cannot setup properly, ignore the test using the
|
||||||
|
// assume check below. The reason for the failure could be a missing
|
||||||
|
// gdbserver, and we don't want to fail a local test due to that
|
||||||
|
Assume.assumeTrue("Cannot properly setup test", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that actions and tracepoints required for this test are in place.
|
||||||
checkActionsAndTracepoints();
|
checkActionsAndTracepoints();
|
||||||
startTraceFileSession();
|
startTraceFileSession();
|
||||||
// Verify that no new platform tracepoints or new tracepoint actions are created.
|
// Verify that no new platform tracepoints or new tracepoint actions are created.
|
||||||
|
@ -194,7 +250,7 @@ public class TraceFileTest extends BaseParametrizedTestCase {
|
||||||
setLaunchAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_POST_MORTEM_TYPE,
|
setLaunchAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_POST_MORTEM_TYPE,
|
||||||
IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_TRACE_FILE);
|
IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_TRACE_FILE);
|
||||||
// Set core file path
|
// Set core file path
|
||||||
setLaunchAttribute(ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, EXEC_PATH + TRACE_NAME);
|
setLaunchAttribute(ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, TRACE_FILE_PATH);
|
||||||
|
|
||||||
doLaunch();
|
doLaunch();
|
||||||
|
|
||||||
|
@ -414,7 +470,7 @@ public class TraceFileTest extends BaseParametrizedTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveTraceData() throws Throwable {
|
private void saveTraceData() throws Throwable {
|
||||||
final File traceFile = new Path(EXEC_PATH + TRACE_NAME).toFile();
|
final File traceFile = new Path(TRACE_FILE_PATH).toFile();
|
||||||
final AsyncCompletionWaitor wait = new AsyncCompletionWaitor();
|
final AsyncCompletionWaitor wait = new AsyncCompletionWaitor();
|
||||||
|
|
||||||
fSession.getExecutor().submit(new Runnable() {
|
fSession.getExecutor().submit(new Runnable() {
|
||||||
|
@ -440,7 +496,7 @@ public class TraceFileTest extends BaseParametrizedTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteOldTraceFile() throws Throwable {
|
private void deleteOldTraceFile() throws Throwable {
|
||||||
File traceFile = new Path(EXEC_PATH + TRACE_NAME).toFile();
|
File traceFile = new Path(TRACE_FILE_PATH).toFile();
|
||||||
traceFile.delete();
|
traceFile.delete();
|
||||||
assertFalse(traceFile.exists());
|
assertFalse(traceFile.exists());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue