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