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