From 53e4ce5c30a75b45eafeabc7e4082a4b8ccd7df0 Mon Sep 17 00:00:00 2001
From: Dan <46821332+nsadeveloper789@users.noreply.github.com>
Date: Fri, 5 Apr 2024 10:15:12 -0400
Subject: [PATCH] GP-0: Fix tests
---
.../services/DebuggerTraceManagerService.java | 12 ++++++++++++
.../api/tracemgr/DebuggerCoordinates.java | 2 +-
.../debug/gui/model/DebuggerModelProvider.java | 18 ++++++++++++++++--
.../DebuggerTraceManagerServicePlugin.java | 18 ++++++++++++------
.../gui/model/DebuggerModelProviderTest.java | 18 +++++++++++-------
.../thread/DebuggerThreadsProviderTest.java | 1 +
...ctDebuggerLogicalBreakpointServiceTest.java | 2 +-
.../debug/flatapi/FlatDebuggerRmiAPITest.java | 5 +++++
8 files changed, 59 insertions(+), 17 deletions(-)
diff --git a/Ghidra/Debug/Debugger-api/src/main/java/ghidra/app/services/DebuggerTraceManagerService.java b/Ghidra/Debug/Debugger-api/src/main/java/ghidra/app/services/DebuggerTraceManagerService.java
index 3576761dda..a00938e210 100644
--- a/Ghidra/Debug/Debugger-api/src/main/java/ghidra/app/services/DebuggerTraceManagerService.java
+++ b/Ghidra/Debug/Debugger-api/src/main/java/ghidra/app/services/DebuggerTraceManagerService.java
@@ -250,6 +250,18 @@ public interface DebuggerTraceManagerService {
*/
void closeTrace(Trace trace);
+ /**
+ * Close the given trace without confirmation
+ *
+ *
+ * Ordinarily, {@link #closeTrace(Trace)} will prompt the user to confirm termination of live
+ * targets associated with traces to be closed. Such prompts can cause issues during automated
+ * tests.
+ *
+ * @param trace the trace to close
+ */
+ void closeTraceNoConfirm(Trace trace);
+
/**
* Close all traces
*/
diff --git a/Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java b/Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java
index d8c5be7192..afb0ce07a5 100644
--- a/Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java
+++ b/Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java
@@ -546,7 +546,7 @@ public class DebuggerCoordinates {
if (object != null) {
return path(object.getCanonicalPath());
}
- throw new IllegalArgumentException("No such object at path" + path);
+ throw new IllegalArgumentException("No such object at path " + newPath);
}
protected static TraceThread resolveThread(Target target, TraceObjectKeyPath objectPath) {
diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProvider.java
index d57c997c50..b5ac9ef349 100644
--- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProvider.java
+++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProvider.java
@@ -551,7 +551,14 @@ public class DebuggerModelProvider extends ComponentProvider implements Saveable
if (performElementCellDefaultAction(table)) {
return;
}
- performValueRowDefaultAction(elementsTablePanel.getSelectedItem());
+ ValueRow sel = elementsTablePanel.getSelectedItem();
+ if (performValueRowDefaultAction(sel)) {
+ return;
+ }
+ if (sel == null) {
+ return;
+ }
+ setPath(sel.currentObject().getCanonicalPath(), table, EventOrigin.USER_GENERATED);
}
@Override
@@ -610,7 +617,14 @@ public class DebuggerModelProvider extends ComponentProvider implements Saveable
implements Adapters.FocusListener, CellActivationListener {
@Override
public void cellActivated(JTable table) {
- performPathRowDefaultAction(attributesTablePanel.getSelectedItem());
+ PathRow sel = attributesTablePanel.getSelectedItem();
+ if (performPathRowDefaultAction(sel)) {
+ return;
+ }
+ if (sel == null || !(sel.getValue() instanceof TraceObject obj)) {
+ return;
+ }
+ setPath(obj.getCanonicalPath(), table, EventOrigin.USER_GENERATED);
}
@Override
diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java
index 653d736710..762771d1ed 100644
--- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java
+++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java
@@ -449,12 +449,12 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
@Override
public void closeAllTraces() {
- checkCloseTraces(getOpenTraces());
+ checkCloseTraces(getOpenTraces(), false);
}
@Override
public void closeOtherTraces(Trace keep) {
- checkCloseTraces(getOpenTraces().stream().filter(t -> t != keep).toList());
+ checkCloseTraces(getOpenTraces().stream().filter(t -> t != keep).toList(), false);
}
@Override
@@ -463,7 +463,8 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
? getOpenTraces()
: getOpenTraces().stream()
.filter(t -> targetService.getTarget(t) == null)
- .toList());
+ .toList(),
+ false);
}
@AutoServiceConsumed
@@ -1026,7 +1027,7 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
.collect(Collectors.joining("\n"));
}
- protected void checkCloseTraces(Collection traces) {
+ protected void checkCloseTraces(Collection traces, boolean noConfirm) {
List live =
traces.stream()
.map(t -> targetService.getTarget(t))
@@ -1037,7 +1038,7 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
* same thread to avoid a ClosedException.
*/
Swing.runIfSwingOrRunLater(() -> {
- if (live.isEmpty()) {
+ if (live.isEmpty() || noConfirm) {
doCloseTraces(traces, live);
return;
}
@@ -1052,7 +1053,12 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
@Override
public void closeTrace(Trace trace) {
- checkCloseTraces(List.of(trace));
+ checkCloseTraces(List.of(trace), false);
+ }
+
+ @Override
+ public void closeTraceNoConfirm(Trace trace) {
+ checkCloseTraces(List.of(trace), true);
}
@Override
diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProviderTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProviderTest.java
index 4740f54337..7edafafa1d 100644
--- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProviderTest.java
+++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProviderTest.java
@@ -67,6 +67,8 @@ public class DebuggerModelProviderTest extends AbstractGhidraHeadedDebuggerTest
+
+
@@ -76,6 +78,7 @@ public class DebuggerModelProviderTest extends AbstractGhidraHeadedDebuggerTest
+
@@ -87,6 +90,7 @@ public class DebuggerModelProviderTest extends AbstractGhidraHeadedDebuggerTest
+
@@ -409,26 +413,26 @@ public class DebuggerModelProviderTest extends AbstractGhidraHeadedDebuggerTest
TraceObjectManager objects = tb.trace.getObjectManager();
TraceObject root = objects.getRootObject();
- TraceObjectKeyPath processesPath = TraceObjectKeyPath.parse("Processes");
- TraceObject processes = objects.getObjectByCanonicalPath(processesPath);
+ TraceObjectKeyPath process0Path = TraceObjectKeyPath.parse("Processes[0]");
+ TraceObject process0 = objects.getObjectByCanonicalPath(process0Path);
traceManager.activateObject(root);
waitForTasks();
- modelProvider.setTreeSelection(processesPath, EventOrigin.USER_GENERATED);
+ modelProvider.setTreeSelection(process0Path, EventOrigin.USER_GENERATED);
waitForSwing();
GTree tree = modelProvider.objectsTreePanel.tree;
GTreeNode node = waitForPass(() -> {
GTreeNode n = Unique.assertOne(tree.getSelectedNodes());
assertEquals(
- "Processes@%d".formatted(System.identityHashCode(processes.getCanonicalParent(0))),
+ "[0]@%d".formatted(System.identityHashCode(process0.getCanonicalParent(0))),
n.getName());
return n;
});
clickTreeNode(tree, node, MouseEvent.BUTTON1);
clickTreeNode(tree, node, MouseEvent.BUTTON1);
waitForSwing();
- waitForPass(() -> assertEquals(processes, traceManager.getCurrentObject()));
+ waitForPass(() -> assertEquals(process0, traceManager.getCurrentObject()));
}
@Test
@@ -569,8 +573,8 @@ public class DebuggerModelProviderTest extends AbstractGhidraHeadedDebuggerTest
});
clickTableCell(modelProvider.attributesTablePanel.table, rowIndex, 0, 2);
- assertEquals(TraceObjectKeyPath.parse("Processes[0].Threads"),
- traceManager.getCurrentObject().getCanonicalPath());
+ // ThreadContainer is not activatable, so only changes provider's path
+ assertEquals(TraceObjectKeyPath.parse("Processes[0].Threads"), modelProvider.getPath());
}
@Test
diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsProviderTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsProviderTest.java
index c02ef6692e..5b4651a083 100644
--- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsProviderTest.java
+++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsProviderTest.java
@@ -88,6 +88,7 @@ public class DebuggerThreadsProviderTest extends AbstractGhidraHeadedDebuggerTes
+
""");
diff --git a/Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/service/breakpoint/AbstractDebuggerLogicalBreakpointServiceTest.java b/Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/service/breakpoint/AbstractDebuggerLogicalBreakpointServiceTest.java
index bd2fbcf1ac..9a54aec1ed 100644
--- a/Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/service/breakpoint/AbstractDebuggerLogicalBreakpointServiceTest.java
+++ b/Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/service/breakpoint/AbstractDebuggerLogicalBreakpointServiceTest.java
@@ -1330,7 +1330,7 @@ public abstract class AbstractDebuggerLogicalBreakpointServiceTest
});
// NOTE: Still recording in the background
- traceManager.closeTrace(trace);
+ traceManager.closeTraceNoConfirm(trace);
waitForSwing();
assertEquals(0, breakpointService.getAllBreakpoints().size());
diff --git a/Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/debug/flatapi/FlatDebuggerRmiAPITest.java b/Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/debug/flatapi/FlatDebuggerRmiAPITest.java
index 4d61f52f0f..ec30950d01 100644
--- a/Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/debug/flatapi/FlatDebuggerRmiAPITest.java
+++ b/Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/debug/flatapi/FlatDebuggerRmiAPITest.java
@@ -26,6 +26,7 @@ import org.junit.Test;
import db.Transaction;
import generic.Unique;
+import ghidra.app.plugin.core.debug.gui.listing.DebuggerListingProvider;
import ghidra.app.plugin.core.debug.gui.tracermi.launcher.TestTraceRmiLaunchOpinion.TestTraceRmiLaunchOffer;
import ghidra.app.plugin.core.debug.gui.tracermi.launcher.TraceRmiLauncherServicePlugin;
import ghidra.app.plugin.core.debug.service.tracermi.TestTraceRmiConnection.TestRemoteMethod;
@@ -48,6 +49,10 @@ public class FlatDebuggerRmiAPITest extends AbstractLiveFlatDebuggerAPITest