aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_trace_rpc.py (follow)
Commit message (Collapse)AuthorAgeFilesLines
* tests: one front doorblasty46 hours1-0/+4
| | | | | | | | | | | | | | | | Fourteen test files, each its own __main__, and no way to run them but from memory -- so in practice you ran the one you were working on and hoped. Worse, nothing said which files need a licensed IDA and a real worker (minutes) and which are pure stdlib (milliseconds), so the cheap ones nobody ran either. tests/run.py runs the lot and prints one table. --fast selects only the suites that need nothing, which is 257 checks in half a second under any python3 -- that's the one you run between edits. The classification lives in the test files, not in a table here that would rot the first time someone adds a test: each declares NEEDS_IDA at module scope and run.py reads it with ast (it can't import them -- they run their suite at import). A file without the marker is a hard error rather than a silent guess.
* pane: drive panes under zellij as well as tmuxblasty2 days1-4/+4
| | | | | | | | | The multiplexer is auto-detected ($ZELLIJ then $TMUX) and every pane command works the same under both. Pane ids are self-identifying, so a mixed set of tmux and zellij panes can be tracked at once. zellij has no -l, so --size is ignored there, it always focuses a new pane (--detached is emulated), and it leaves an EXITED husk behind that stop/reap now clear. The pane tests skip on neither multiplexer rather than on no TMUX.
* tests: trace integration over the RPC socket (45 checks)user7 days1-0/+369
The existing trace suites (test_trace.py, test_trace_ui.py, test_trace_vs_tenet.py) cover the model layer, the UI via the Textual pilot, and differential correctness against Tenet's reference. None of them exercise the path an agent actually takes: the trace RPC verb driven over the unix socket through rpcclient. This one spawns a real tmux pane with --trace, records a trace with the QEMU tracer (falling back to /tmp/echotrace.0.log if the tracer isn't built), and drives every trace operation through the RPC socket, validating the JSON responses: seek (absolute, percentage, string, edge-clamping) step (forward, backward, multi-step, clamp at bounds) step over (finds a call via SP drop, verifies it lands after the return) goto (by name, by hex address, error on unexecuted) changed registers in the response cursor tracking (ea follows the trace pc) response shape (trace key is a superset of snapshot) interaction with non-trace verbs (pseudocode, state, view, goto) trace position independence from navigation All 45 checks pass against the echo binary with a 226-instruction trace.