//! Tests for program 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 = "program-test"; const TEST_PROGRAM: &str = "sample_binary"; #[test] #[serial] fn test_program_info() { 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("--project") .arg(TEST_PROJECT) .arg("program") .arg("info") .arg("--program") .arg(TEST_PROGRAM) .assert() .success() .stdout(predicate::str::contains("name")) .stdout(predicate::str::contains("format")); drop(harness); } #[test] #[serial] fn test_program_export_json() { 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("--project") .arg(TEST_PROJECT) .arg("program") .arg("export") .arg("json") .arg("--program") .arg(TEST_PROGRAM) .assert() .success() .stdout(predicate::str::contains("functions")); drop(harness); } #[test] #[serial] fn test_program_close() { 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("--project") .arg(TEST_PROJECT) .arg("program") .arg("close") .arg("--program") .arg(TEST_PROGRAM) .assert() .success(); drop(harness); } #[test] #[serial] fn test_program_info_no_program() { 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("--project") .arg(TEST_PROJECT) .arg("program") .arg("info") .assert() .failure(); drop(harness); }