mirror of
https://github.com/encounter/ghidra-cli.git
synced 2026-07-10 03:18:56 -07:00
BatchArgs was missing --project and --program fields, so batch commands couldn't specify which project to use. Also fixed argument ordering in all test files to place --project/--program after the subcommand name, matching clap's per-subcommand argument parsing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
113 lines
2.5 KiB
Rust
113 lines
2.5 KiB
Rust
//! Tests for graph operations.
|
|
|
|
use assert_cmd::Command;
|
|
use predicates::prelude::*;
|
|
use serial_test::serial;
|
|
|
|
#[macro_use]
|
|
mod common;
|
|
use common::{ensure_test_project, DaemonTestHarness};
|
|
|
|
const TEST_PROJECT: &str = "graph-test";
|
|
const TEST_PROGRAM: &str = "sample_binary";
|
|
|
|
#[test]
|
|
#[serial]
|
|
fn test_graph_calls() {
|
|
require_ghidra!();
|
|
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
|
|
|
|
let harness =
|
|
DaemonTestHarness::new(TEST_PROJECT, TEST_PROGRAM).expect("Failed to start daemon");
|
|
|
|
Command::cargo_bin("ghidra")
|
|
.unwrap()
|
|
.arg("graph")
|
|
.arg("calls")
|
|
.arg("--project")
|
|
.arg(TEST_PROJECT)
|
|
.arg("--program")
|
|
.arg(TEST_PROGRAM)
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("nodes"))
|
|
.stdout(predicate::str::contains("edges"));
|
|
|
|
drop(harness);
|
|
}
|
|
|
|
#[test]
|
|
#[serial]
|
|
fn test_graph_callers() {
|
|
require_ghidra!();
|
|
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
|
|
|
|
let harness =
|
|
DaemonTestHarness::new(TEST_PROJECT, TEST_PROGRAM).expect("Failed to start daemon");
|
|
|
|
Command::cargo_bin("ghidra")
|
|
.unwrap()
|
|
.arg("graph")
|
|
.arg("callers")
|
|
.arg("main")
|
|
.arg("--project")
|
|
.arg(TEST_PROJECT)
|
|
.arg("--program")
|
|
.arg(TEST_PROGRAM)
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("callers"));
|
|
|
|
drop(harness);
|
|
}
|
|
|
|
#[test]
|
|
#[serial]
|
|
fn test_graph_callees() {
|
|
require_ghidra!();
|
|
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
|
|
|
|
let harness =
|
|
DaemonTestHarness::new(TEST_PROJECT, TEST_PROGRAM).expect("Failed to start daemon");
|
|
|
|
Command::cargo_bin("ghidra")
|
|
.unwrap()
|
|
.arg("graph")
|
|
.arg("callees")
|
|
.arg("main")
|
|
.arg("--project")
|
|
.arg(TEST_PROJECT)
|
|
.arg("--program")
|
|
.arg(TEST_PROGRAM)
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("callees"));
|
|
|
|
drop(harness);
|
|
}
|
|
|
|
#[test]
|
|
#[serial]
|
|
fn test_graph_export_dot() {
|
|
require_ghidra!();
|
|
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
|
|
|
|
let harness =
|
|
DaemonTestHarness::new(TEST_PROJECT, TEST_PROGRAM).expect("Failed to start daemon");
|
|
|
|
Command::cargo_bin("ghidra")
|
|
.unwrap()
|
|
.arg("graph")
|
|
.arg("export")
|
|
.arg("dot")
|
|
.arg("--project")
|
|
.arg(TEST_PROJECT)
|
|
.arg("--program")
|
|
.arg(TEST_PROGRAM)
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("digraph"));
|
|
|
|
drop(harness);
|
|
}
|