From 0405b0562f988e30c9a8e3aaa598d48065a2954d Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Fri, 21 May 2021 11:35:37 -0400 Subject: [PATCH] GP-0: A second round of Debugger test fixes. --- .../listing/DebuggerListingProviderTest.java | 1 + .../target/DebuggerTargetsProviderTest.java | 21 +++++++----- .../exec/TraceRecorderAsyncPcodeExecTest.java | 34 ++++++++++++------- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProviderTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProviderTest.java index 35c24c2bd1..f5bf3a6c16 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProviderTest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProviderTest.java @@ -111,6 +111,7 @@ public class DebuggerListingProviderTest extends AbstractGhidraHeadedDebuggerGUI waitForPass(() -> { runSwing(() -> listingProvider.goTo(location.getProgram(), location)); ProgramLocation confirm = listingProvider.getLocation(); + assertNotNull(confirm); assertEquals(location.getAddress(), confirm.getAddress()); }); } diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProviderTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProviderTest.java index 57d52b2165..428027ca4c 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProviderTest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProviderTest.java @@ -139,15 +139,20 @@ public class DebuggerTargetsProviderTest extends AbstractGhidraHeadedDebuggerGUI modelService.addModel(secondModel); waitForSwing(); - clickTreeNode(targetsProvider.tree, - targetsProvider.rootNode.findNodeForObject(mb.testModel), MouseEvent.BUTTON1); - waitForSwing(); - assertEquals(mb.testModel, modelService.getCurrentModel()); + // NB. Expansion is run in background task + waitForPass(noExc(() -> { + clickTreeNode(targetsProvider.tree, + targetsProvider.rootNode.findNodeForObject(mb.testModel), MouseEvent.BUTTON1); + waitForSwing(); + assertEquals(mb.testModel, modelService.getCurrentModel()); + })); - clickTreeNode(targetsProvider.tree, - targetsProvider.rootNode.findNodeForObject(secondModel), MouseEvent.BUTTON1); - waitForSwing(); - assertEquals(secondModel, modelService.getCurrentModel()); + waitForPass(noExc(() -> { + clickTreeNode(targetsProvider.tree, + targetsProvider.rootNode.findNodeForObject(secondModel), MouseEvent.BUTTON1); + waitForSwing(); + assertEquals(secondModel, modelService.getCurrentModel()); + })); } @Test diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/pcode/exec/TraceRecorderAsyncPcodeExecTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/pcode/exec/TraceRecorderAsyncPcodeExecTest.java index 89d0fe60e9..ac3ab76533 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/pcode/exec/TraceRecorderAsyncPcodeExecTest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/pcode/exec/TraceRecorderAsyncPcodeExecTest.java @@ -60,19 +60,23 @@ public class TraceRecorderAsyncPcodeExecTest extends AbstractGhidraHeadedDebugge SleighExpression expr = SleighProgramCompiler .compileExpression((SleighLanguage) language, "r0 + r1"); - AsyncPcodeExecutor executor = - new AsyncPcodeExecutor<>(language, AsyncWrappedPcodeArithmetic.forLanguage(language), - new TraceRecorderAsyncPcodeExecutorState(recorder, recorder.getSnap(), thread, 0)); - Register r0 = language.getRegister("r0"); Register r1 = language.getRegister("r1"); waitForPass(() -> { + // TODO: A little brittle: Depends on a specific snap advancement strategy + assertEquals(3, trace.getTimeManager().getSnapshotCount()); DebuggerRegisterMapper rm = recorder.getRegisterMapper(thread); assertNotNull(rm); + assertNotNull(rm.getTargetRegister("r0")); + assertNotNull(rm.getTargetRegister("r1")); assertTrue(rm.getRegistersOnTarget().contains(r0)); assertTrue(rm.getRegistersOnTarget().contains(r1)); }); + AsyncPcodeExecutor executor = + new AsyncPcodeExecutor<>(language, AsyncWrappedPcodeArithmetic.forLanguage(language), + new TraceRecorderAsyncPcodeExecutorState(recorder, recorder.getSnap(), thread, 0)); + byte[] result = waitOn(expr.evaluate(executor)); assertEquals(11, Utils.bytesToLong(result, result.length, language.isBigEndian())); } @@ -99,20 +103,24 @@ public class TraceRecorderAsyncPcodeExecTest extends AbstractGhidraHeadedDebugge PcodeProgram prog = SleighProgramCompiler.compileProgram((SleighLanguage) language, "test", List.of("r2 = r0 + r1;"), SleighUseropLibrary.NIL); + Register r0 = language.getRegister("r0"); + Register r1 = language.getRegister("r1"); + waitForPass(() -> { + // TODO: A little brittle: Depends on a specific snap advancement strategy + assertEquals(3, trace.getTimeManager().getSnapshotCount()); + DebuggerRegisterMapper rm = recorder.getRegisterMapper(thread); + assertNotNull(rm); + assertNotNull(rm.getTargetRegister("r0")); + assertNotNull(rm.getTargetRegister("r1")); + assertTrue(rm.getRegistersOnTarget().contains(r0)); + assertTrue(rm.getRegistersOnTarget().contains(r1)); + }); + TraceRecorderAsyncPcodeExecutorState asyncState = new TraceRecorderAsyncPcodeExecutorState(recorder, recorder.getSnap(), thread, 0); AsyncPcodeExecutor executor = new AsyncPcodeExecutor<>( language, AsyncWrappedPcodeArithmetic.forLanguage(language), asyncState); - Register r0 = language.getRegister("r0"); - Register r1 = language.getRegister("r1"); - waitForPass(() -> { - DebuggerRegisterMapper rm = recorder.getRegisterMapper(thread); - assertNotNull(rm); - assertTrue(rm.getRegistersOnTarget().contains(r0)); - assertTrue(rm.getRegistersOnTarget().contains(r1)); - }); - waitOn(executor.executeAsync(prog, SleighUseropLibrary.nil())); waitOn(asyncState.getVar(language.getRegister("r2")));