mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 09:49:23 +02:00
Merge remote-tracking branch 'origin/GP-0_Dan_fixTests-2025-07-24-1' into patch
This commit is contained in:
commit
62946ffde9
4 changed files with 66 additions and 25 deletions
|
@ -26,6 +26,7 @@ import ghidra.debug.api.target.TargetPublicationListener;
|
|||
import ghidra.debug.api.tracemgr.DebuggerCoordinates;
|
||||
import ghidra.debug.api.tracermi.*;
|
||||
import ghidra.util.Msg;
|
||||
import ghidra.util.Swing;
|
||||
|
||||
public class TraceRmiServiceNode extends AbstractTraceRmiManagerNode
|
||||
implements TraceRmiServiceListener, TargetPublicationListener {
|
||||
|
@ -107,46 +108,60 @@ public class TraceRmiServiceNode extends AbstractTraceRmiManagerNode
|
|||
|
||||
@Override
|
||||
public void serverStarted(SocketAddress address) {
|
||||
Swing.runIfSwingOrRunLater(() -> {
|
||||
serverNode.fireNodeChanged();
|
||||
provider.contextChanged();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serverStopped() {
|
||||
Swing.runIfSwingOrRunLater(() -> {
|
||||
serverNode.fireNodeChanged();
|
||||
provider.contextChanged();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connected(TraceRmiConnection connection, ConnectMode mode,
|
||||
TraceRmiAcceptor acceptor) {
|
||||
Swing.runIfSwingOrRunLater(() -> {
|
||||
addConnectionNode(connection);
|
||||
removeAcceptorNode(acceptor);
|
||||
provider.contextChanged();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnected(TraceRmiConnection connection) {
|
||||
Swing.runIfSwingOrRunLater(() -> {
|
||||
removeConnectionNode(connection);
|
||||
provider.contextChanged();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void waitingAccept(TraceRmiAcceptor acceptor) {
|
||||
Swing.runIfSwingOrRunLater(() -> {
|
||||
addAcceptorNode(acceptor);
|
||||
provider.contextChanged();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void acceptCancelled(TraceRmiAcceptor acceptor) {
|
||||
Swing.runIfSwingOrRunLater(() -> {
|
||||
removeAcceptorNode(acceptor);
|
||||
provider.contextChanged();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void acceptFailed(TraceRmiAcceptor acceptor, Exception e) {
|
||||
Swing.runIfSwingOrRunLater(() -> {
|
||||
removeAcceptorNode(acceptor);
|
||||
provider.contextChanged();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -167,7 +182,7 @@ public class TraceRmiServiceNode extends AbstractTraceRmiManagerNode
|
|||
synchronized (targetNodes) {
|
||||
targetNodes.put(target, tNode);
|
||||
}
|
||||
provider.contextChanged();
|
||||
Swing.runIfSwingOrRunLater(() -> provider.contextChanged());
|
||||
}
|
||||
|
||||
protected static <K> void fireNodeChanged(Map<K, ? extends AbstractTraceRmiManagerNode> map,
|
||||
|
@ -207,8 +222,10 @@ public class TraceRmiServiceNode extends AbstractTraceRmiManagerNode
|
|||
if (node == null) {
|
||||
return;
|
||||
}
|
||||
Swing.runIfSwingOrRunLater(() -> {
|
||||
node.getConnectionNode().targetWithdrawn(target);
|
||||
provider.contextChanged();
|
||||
});
|
||||
}
|
||||
|
||||
public void coordinates(DebuggerCoordinates coordinates) {
|
||||
|
|
|
@ -45,6 +45,7 @@ import ghidra.debug.api.tracermi.TraceRmiConnection;
|
|||
import ghidra.trace.model.target.schema.SchemaContext;
|
||||
import ghidra.trace.model.target.schema.TraceObjectSchema.SchemaName;
|
||||
import ghidra.trace.model.target.schema.XmlSchemaContext;
|
||||
import ghidra.util.Swing;
|
||||
import ghidra.util.exception.CancelledException;
|
||||
|
||||
public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedDebuggerTest {
|
||||
|
@ -76,7 +77,9 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
helper.dismissWithArguments(Map.ofEntries(
|
||||
helper.entry("address", "localhost"),
|
||||
helper.entry("port", 0)));
|
||||
TraceRmiAcceptor acceptor =
|
||||
waitForPass(() -> Unique.assertOne(traceRmiService.getAllAcceptors()));
|
||||
acceptor.cancel();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -129,6 +132,7 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
public void testActionCloseOnAcceptor() throws Exception {
|
||||
TraceRmiAcceptor acceptor =
|
||||
traceRmiService.acceptOne(new InetSocketAddress("localhost", 0));
|
||||
waitForSwing();
|
||||
TraceRmiAcceptorNode node =
|
||||
TraceRmiConnectionTreeHelper.getAcceptorNodeMap(provider.rootNode).get(acceptor);
|
||||
assertNotNull(node);
|
||||
|
@ -149,6 +153,7 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
@Test
|
||||
public void testActionCloseOnConnection() throws Exception {
|
||||
try (Cx cx = Cx.connect(traceRmiService, "Test client")) {
|
||||
waitForSwing();
|
||||
TraceRmiConnectionNode node =
|
||||
TraceRmiConnectionTreeHelper.getConnectionNodeMap(provider.rootNode)
|
||||
.get(cx.connection);
|
||||
|
@ -169,6 +174,8 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
TraceRmiAcceptor acceptor =
|
||||
traceRmiService.acceptOne(new InetSocketAddress("localhost", 0));
|
||||
try (Cx cx = Cx.connect(traceRmiService, "Test client")) {
|
||||
waitForSwing();
|
||||
|
||||
performEnabledAction(provider, provider.actionCloseAll, true);
|
||||
|
||||
waitForPass(() -> assertFalse(traceRmiService.isServerStarted()));
|
||||
|
@ -209,6 +216,7 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
public void testAcceptHasNode() throws Exception {
|
||||
TraceRmiAcceptor acceptor =
|
||||
traceRmiService.acceptOne(new InetSocketAddress("localhost", 0));
|
||||
waitForSwing();
|
||||
TraceRmiAcceptorNode node =
|
||||
TraceRmiConnectionTreeHelper.getAcceptorNodeMap(provider.rootNode).get(acceptor);
|
||||
assertNotNull(node);
|
||||
|
@ -219,11 +227,13 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
public void testAcceptThenCancelNoNode() throws Exception {
|
||||
TraceRmiAcceptor acceptor =
|
||||
traceRmiService.acceptOne(new InetSocketAddress("localhost", 0));
|
||||
waitForSwing();
|
||||
assertNotNull(
|
||||
TraceRmiConnectionTreeHelper.getAcceptorNodeMap(provider.rootNode).get(acceptor));
|
||||
|
||||
acceptor.cancel();
|
||||
waitForPass(() -> traceRmiService.getAllAcceptors().isEmpty());
|
||||
waitForSwing();
|
||||
assertNull(
|
||||
TraceRmiConnectionTreeHelper.getAcceptorNodeMap(provider.rootNode).get(acceptor));
|
||||
}
|
||||
|
@ -310,6 +320,7 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
public void testAcceptThenSuccessNodes() throws Exception {
|
||||
TraceRmiAcceptor acceptor =
|
||||
traceRmiService.acceptOne(new InetSocketAddress("localhost", 0));
|
||||
waitForSwing();
|
||||
assertNotNull(
|
||||
TraceRmiConnectionTreeHelper.getAcceptorNodeMap(provider.rootNode).get(acceptor));
|
||||
|
||||
|
@ -320,6 +331,7 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
.get(acceptor)));
|
||||
waitForPass(() -> assertEquals(cx.connection,
|
||||
Unique.assertOne(traceRmiService.getAllConnections())));
|
||||
waitForSwing();
|
||||
|
||||
TraceRmiConnectionNode node =
|
||||
TraceRmiConnectionTreeHelper.getConnectionNodeMap(provider.rootNode)
|
||||
|
@ -335,6 +347,7 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
traceRmiService.startServer();
|
||||
try (Cx cx = Cx.toServer(traceRmiService, "Test client")) {
|
||||
waitForPass(() -> traceRmiService.getAllAcceptors().isEmpty());
|
||||
waitForSwing();
|
||||
|
||||
TraceRmiConnectionNode node = waitForValue(
|
||||
() -> TraceRmiConnectionTreeHelper.getConnectionNodeMap(provider.rootNode)
|
||||
|
@ -349,6 +362,7 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
try (Cx cx = Cx.connect(traceRmiService, "Test client")) {
|
||||
waitForPass(() -> assertEquals(cx.connection,
|
||||
Unique.assertOne(traceRmiService.getAllConnections())));
|
||||
waitForSwing();
|
||||
|
||||
TraceRmiConnectionNode node =
|
||||
TraceRmiConnectionTreeHelper.getConnectionNodeMap(provider.rootNode)
|
||||
|
@ -364,6 +378,7 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
TraceRmiAcceptor acceptor =
|
||||
traceRmiService.acceptOne(new InetSocketAddress("localhost", 0));
|
||||
try (Cx cx = Cx.complete(acceptor, "Test client")) {
|
||||
waitForSwing();
|
||||
assertNotNull(TraceRmiConnectionTreeHelper.getConnectionNodeMap(provider.rootNode)
|
||||
.get(cx.connection));
|
||||
|
||||
|
@ -380,6 +395,7 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
TraceRmiAcceptor acceptor =
|
||||
traceRmiService.acceptOne(new InetSocketAddress("localhost", 0));
|
||||
try (Cx cx = Cx.complete(acceptor, "Test client")) {
|
||||
waitForSwing();
|
||||
assertNotNull(TraceRmiConnectionTreeHelper.getConnectionNodeMap(provider.rootNode)
|
||||
.get(cx.connection));
|
||||
|
||||
|
@ -403,12 +419,13 @@ public class TraceRmiConnectionManagerProviderTest extends AbstractGhidraHeadedD
|
|||
}
|
||||
cx.client.activate(1, "");
|
||||
Target target = waitForValue(() -> traceManager.getCurrent().getTarget());
|
||||
waitForSwing();
|
||||
|
||||
TraceRmiTargetNode node =
|
||||
TraceRmiConnectionTreeHelper.getTargetNodeMap(provider.rootNode).get(target);
|
||||
assertEquals("bash (snap=1)", node.getDisplayText());
|
||||
|
||||
provider.tree.setSelectedNode(node);
|
||||
Swing.runNow(() -> provider.tree.setSelectedNode(node));
|
||||
// Tree uses a task queue for selection requests
|
||||
waitForPass(
|
||||
() -> assertEquals(node, Unique.assertOne(provider.tree.getSelectedNodes())));
|
||||
|
|
|
@ -27,8 +27,15 @@ import ghidra.framework.plugintool.util.PluginStatus;
|
|||
import ghidra.trace.model.Trace;
|
||||
import ghidra.util.datastruct.ListenerSet;
|
||||
|
||||
@PluginInfo(shortDescription = "Debugger targets manager service", description = "Maintains a collection of published targets and notifies listeners of changes.", category = PluginCategoryNames.DEBUGGER, packageName = DebuggerPluginPackage.NAME, status = PluginStatus.RELEASED, servicesProvided = {
|
||||
DebuggerTargetService.class, })
|
||||
@PluginInfo(
|
||||
shortDescription = "Debugger targets manager service",
|
||||
description = "Maintains a collection of published targets and notifies listeners of changes.",
|
||||
category = PluginCategoryNames.DEBUGGER,
|
||||
packageName = DebuggerPluginPackage.NAME,
|
||||
status = PluginStatus.RELEASED,
|
||||
servicesProvided = {
|
||||
DebuggerTargetService.class,
|
||||
})
|
||||
public class DebuggerTargetServicePlugin extends Plugin implements DebuggerTargetService {
|
||||
|
||||
public DebuggerTargetServicePlugin(PluginTool tool) {
|
||||
|
|
|
@ -44,7 +44,7 @@ public class InvocationDialogHelper<P, D extends AbstractDebuggerParameterDialog
|
|||
}
|
||||
|
||||
public void dismissWithArguments(Map<String, ValStr<?>> args) {
|
||||
dialog.setMemorizedArguments(args);
|
||||
runSwing(() -> dialog.setMemorizedArguments(args));
|
||||
invoke();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue