Merge remote-tracking branch 'origin/GP-0_Dan_fixTests-2025-07-24-1' into patch

This commit is contained in:
Ryan Kurtz 2025-07-24 12:13:04 -04:00
commit 62946ffde9
4 changed files with 66 additions and 25 deletions

View file

@ -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) {
serverNode.fireNodeChanged();
provider.contextChanged();
Swing.runIfSwingOrRunLater(() -> {
serverNode.fireNodeChanged();
provider.contextChanged();
});
}
@Override
public void serverStopped() {
serverNode.fireNodeChanged();
provider.contextChanged();
Swing.runIfSwingOrRunLater(() -> {
serverNode.fireNodeChanged();
provider.contextChanged();
});
}
@Override
public void connected(TraceRmiConnection connection, ConnectMode mode,
TraceRmiAcceptor acceptor) {
addConnectionNode(connection);
removeAcceptorNode(acceptor);
provider.contextChanged();
Swing.runIfSwingOrRunLater(() -> {
addConnectionNode(connection);
removeAcceptorNode(acceptor);
provider.contextChanged();
});
}
@Override
public void disconnected(TraceRmiConnection connection) {
removeConnectionNode(connection);
provider.contextChanged();
Swing.runIfSwingOrRunLater(() -> {
removeConnectionNode(connection);
provider.contextChanged();
});
}
@Override
public void waitingAccept(TraceRmiAcceptor acceptor) {
addAcceptorNode(acceptor);
provider.contextChanged();
Swing.runIfSwingOrRunLater(() -> {
addAcceptorNode(acceptor);
provider.contextChanged();
});
}
@Override
public void acceptCancelled(TraceRmiAcceptor acceptor) {
removeAcceptorNode(acceptor);
provider.contextChanged();
Swing.runIfSwingOrRunLater(() -> {
removeAcceptorNode(acceptor);
provider.contextChanged();
});
}
@Override
public void acceptFailed(TraceRmiAcceptor acceptor, Exception e) {
removeAcceptorNode(acceptor);
provider.contextChanged();
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;
}
node.getConnectionNode().targetWithdrawn(target);
provider.contextChanged();
Swing.runIfSwingOrRunLater(() -> {
node.getConnectionNode().targetWithdrawn(target);
provider.contextChanged();
});
}
public void coordinates(DebuggerCoordinates coordinates) {

View file

@ -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)));
waitForPass(() -> Unique.assertOne(traceRmiService.getAllAcceptors()));
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())));

View file

@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -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) {

View file

@ -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();
}