fix: add require_ghidra!() guard to all integration tests

Tests that use DaemonTestHarness or ensure_test_project were missing the
require_ghidra!() macro, causing them to attempt bridge startup in CI
where Ghidra is not installed, resulting in 120s timeouts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Alexander Kiselev
2026-02-05 12:44:11 -08:00
co-authored by Claude Opus 4.6
parent e26634c03c
commit 5b595ab58a
13 changed files with 72 additions and 0 deletions
+5
View File
@@ -23,6 +23,7 @@ fn create_batch_file(content: &str) -> PathBuf {
#[test]
#[serial]
fn test_batch_multiple_queries() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -54,6 +55,7 @@ query --function main
#[test]
#[serial]
fn test_batch_empty_file() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -85,6 +87,7 @@ fn test_batch_empty_file() {
#[test]
#[serial]
fn test_batch_with_comments() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -118,6 +121,7 @@ query --address 0x100000
#[test]
#[serial]
fn test_batch_invalid_file() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -139,6 +143,7 @@ fn test_batch_invalid_file() {
#[test]
#[serial]
fn test_batch_with_invalid_command() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+3
View File
@@ -14,6 +14,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_comment_set_and_get() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -54,6 +55,7 @@ fn test_comment_set_and_get() {
#[test]
#[serial]
fn test_comment_list() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -90,6 +92,7 @@ fn test_comment_list() {
#[test]
#[serial]
fn test_comment_delete() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+2
View File
@@ -14,6 +14,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_diff_programs() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -37,6 +38,7 @@ fn test_diff_programs() {
#[test]
#[serial]
fn test_diff_functions() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+8
View File
@@ -27,6 +27,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_disasm_at_main() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -74,6 +75,7 @@ fn test_disasm_at_main() {
#[test]
#[serial]
fn test_disasm_with_instruction_limit() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -122,6 +124,7 @@ fn test_disasm_with_instruction_limit() {
#[test]
#[serial]
fn test_disasm_small_count() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -160,6 +163,7 @@ fn test_disasm_small_count() {
#[test]
#[serial]
fn test_disasm_instruction_fields() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -221,6 +225,7 @@ fn test_disasm_instruction_fields() {
#[test]
#[serial]
fn test_disasm_invalid_address() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -255,6 +260,7 @@ fn test_disasm_invalid_address() {
#[test]
#[serial]
fn test_disasm_missing_program() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -274,6 +280,7 @@ fn test_disasm_missing_program() {
#[test]
#[serial]
fn test_disasm_zero_instructions() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -310,6 +317,7 @@ fn test_disasm_zero_instructions() {
#[test]
#[serial]
fn test_disasm_output_format_snapshot() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+8
View File
@@ -14,6 +14,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_find_string() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -38,6 +39,7 @@ fn test_find_string() {
#[test]
#[serial]
fn test_find_bytes() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -62,6 +64,7 @@ fn test_find_bytes() {
#[test]
#[serial]
fn test_find_function() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -86,6 +89,7 @@ fn test_find_function() {
#[test]
#[serial]
fn test_find_function_glob() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -110,6 +114,7 @@ fn test_find_function_glob() {
#[test]
#[serial]
fn test_find_calls() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -133,6 +138,7 @@ fn test_find_calls() {
#[test]
#[serial]
fn test_find_crypto() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -156,6 +162,7 @@ fn test_find_crypto() {
#[test]
#[serial]
fn test_find_interesting() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -179,6 +186,7 @@ fn test_find_interesting() {
#[test]
#[serial]
fn test_find_string_no_matches() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+4
View File
@@ -14,6 +14,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_graph_calls() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -38,6 +39,7 @@ fn test_graph_calls() {
#[test]
#[serial]
fn test_graph_callers() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -62,6 +64,7 @@ fn test_graph_callers() {
#[test]
#[serial]
fn test_graph_callees() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -86,6 +89,7 @@ fn test_graph_callees() {
#[test]
#[serial]
fn test_graph_export_dot() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+9
View File
@@ -26,6 +26,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_patch_bytes_success() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -66,6 +67,7 @@ fn test_patch_bytes_success() {
#[test]
#[serial]
fn test_patch_nop_success() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -98,6 +100,7 @@ fn test_patch_nop_success() {
#[test]
#[serial]
fn test_patch_export() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -136,6 +139,7 @@ fn test_patch_export() {
#[test]
#[serial]
fn test_patch_at_function_boundary() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -162,6 +166,7 @@ fn test_patch_at_function_boundary() {
#[test]
#[serial]
fn test_patch_invalid_address_fails() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -196,6 +201,7 @@ fn test_patch_invalid_address_fails() {
#[test]
#[serial]
fn test_patch_invalid_hex_fails() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -220,6 +226,7 @@ fn test_patch_invalid_hex_fails() {
#[test]
#[serial]
fn test_patch_odd_hex_length() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -249,6 +256,7 @@ fn test_patch_odd_hex_length() {
#[test]
#[serial]
fn test_patch_missing_program_arg() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -277,6 +285,7 @@ fn test_patch_missing_program_arg() {
#[test]
#[serial]
fn test_patch_output_format_snapshot() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+4
View File
@@ -14,6 +14,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_program_info() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -38,6 +39,7 @@ fn test_program_info() {
#[test]
#[serial]
fn test_program_export_json() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -62,6 +64,7 @@ fn test_program_export_json() {
#[test]
#[serial]
fn test_program_close() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -84,6 +87,7 @@ fn test_program_close() {
#[test]
#[serial]
fn test_program_info_no_program() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+13
View File
@@ -33,6 +33,7 @@ static HARNESS: Lazy<DaemonTestHarness> = Lazy::new(|| {
#[test]
#[serial]
fn test_function_list_schema_validation() {
require_ghidra!();
let harness = &*HARNESS;
let result = ghidra(harness)
@@ -65,6 +66,7 @@ fn test_function_list_schema_validation() {
#[test]
#[serial]
fn test_function_list_contains_expected_functions() {
require_ghidra!();
let harness = &*HARNESS;
let result = ghidra(harness)
@@ -99,6 +101,7 @@ fn test_function_list_contains_expected_functions() {
#[test]
#[serial]
fn test_function_list_limit() {
require_ghidra!();
let harness = &*HARNESS;
let limit = 3;
@@ -129,6 +132,7 @@ fn test_function_list_limit() {
#[test]
#[serial]
fn test_function_list_filter() {
require_ghidra!();
let harness = &*HARNESS;
let result = ghidra(harness)
@@ -169,6 +173,7 @@ fn test_function_list_filter() {
#[test]
#[serial]
fn test_strings_list_schema_validation() {
require_ghidra!();
let harness = &*HARNESS;
let result = ghidra(harness)
@@ -199,6 +204,7 @@ fn test_strings_list_schema_validation() {
#[test]
#[serial]
fn test_memory_map_schema_validation() {
require_ghidra!();
let harness = &*HARNESS;
let result = ghidra(harness)
@@ -242,6 +248,7 @@ fn test_memory_map_schema_validation() {
#[test]
#[serial]
fn test_summary_contains_expected_fields() {
require_ghidra!();
let harness = &*HARNESS;
let result = ghidra(harness)
@@ -263,6 +270,7 @@ fn test_summary_contains_expected_fields() {
#[test]
#[serial]
fn test_decompile_by_name() {
require_ghidra!();
let harness = &*HARNESS;
let result = ghidra(harness)
@@ -288,6 +296,7 @@ fn test_decompile_by_name() {
#[test]
#[serial]
fn test_decompile_by_address() {
require_ghidra!();
let harness = &*HARNESS;
// Get main's address dynamically
@@ -312,6 +321,7 @@ fn test_decompile_by_address() {
#[test]
#[serial]
fn test_decompile_nonexistent_function() {
require_ghidra!();
let harness = &*HARNESS;
let result = ghidra(harness)
@@ -341,6 +351,7 @@ fn test_decompile_nonexistent_function() {
#[test]
#[serial]
fn test_xref_to() {
require_ghidra!();
let harness = &*HARNESS;
let main_addr = get_function_address(harness, TEST_PROJECT, TEST_PROGRAM, "main");
@@ -361,6 +372,7 @@ fn test_xref_to() {
#[test]
#[serial]
fn test_xref_from() {
require_ghidra!();
let harness = &*HARNESS;
let main_addr = get_function_address(harness, TEST_PROJECT, TEST_PROGRAM, "main");
@@ -384,6 +396,7 @@ fn test_xref_from() {
#[test]
#[serial]
fn test_function_list_snapshot() {
require_ghidra!();
let harness = &*HARNESS;
let result = ghidra(harness)
+4
View File
@@ -39,6 +39,7 @@ print("Test script executed")
#[test]
#[serial]
fn test_script_list() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -62,6 +63,7 @@ fn test_script_list() {
#[test]
#[serial]
fn test_script_run() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let script_path = create_test_script();
@@ -90,6 +92,7 @@ fn test_script_run() {
#[test]
#[serial]
fn test_script_python_inline() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -114,6 +117,7 @@ fn test_script_python_inline() {
#[test]
#[serial]
fn test_script_run_nonexistent() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+3
View File
@@ -14,6 +14,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_stats_normal() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -38,6 +39,7 @@ fn test_stats_normal() {
#[test]
#[serial]
fn test_stats_has_all_fields() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -67,6 +69,7 @@ fn test_stats_has_all_fields() {
#[test]
#[serial]
fn test_stats_json_format() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+4
View File
@@ -14,6 +14,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_symbol_list() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -37,6 +38,7 @@ fn test_symbol_list() {
#[test]
#[serial]
fn test_symbol_create_and_get() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -74,6 +76,7 @@ fn test_symbol_create_and_get() {
#[test]
#[serial]
fn test_symbol_rename() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -111,6 +114,7 @@ fn test_symbol_rename() {
#[test]
#[serial]
fn test_symbol_get_nonexistent() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
+5
View File
@@ -14,6 +14,7 @@ const TEST_PROGRAM: &str = "sample_binary";
#[test]
#[serial]
fn test_type_list() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -37,6 +38,7 @@ fn test_type_list() {
#[test]
#[serial]
fn test_type_get_primitive() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -61,6 +63,7 @@ fn test_type_get_primitive() {
#[test]
#[serial]
fn test_type_create() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -84,6 +87,7 @@ fn test_type_create() {
#[test]
#[serial]
fn test_type_apply() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =
@@ -108,6 +112,7 @@ fn test_type_apply() {
#[test]
#[serial]
fn test_type_get_nonexistent() {
require_ghidra!();
ensure_test_project(TEST_PROJECT, TEST_PROGRAM);
let harness =