From 5b595ab58a4980f35e0339bea7ea3e60c92787f9 Mon Sep 17 00:00:00 2001 From: Alexander Kiselev Date: Thu, 5 Feb 2026 12:44:11 -0800 Subject: [PATCH] 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 --- tests/batch_tests.rs | 5 +++++ tests/comment_tests.rs | 3 +++ tests/diff_tests.rs | 2 ++ tests/disasm_tests.rs | 8 ++++++++ tests/find_tests.rs | 8 ++++++++ tests/graph_tests.rs | 4 ++++ tests/patch_tests.rs | 9 +++++++++ tests/program_tests.rs | 4 ++++ tests/query_tests.rs | 13 +++++++++++++ tests/script_tests.rs | 4 ++++ tests/stats_tests.rs | 3 +++ tests/symbol_tests.rs | 4 ++++ tests/type_tests.rs | 5 +++++ 13 files changed, 72 insertions(+) diff --git a/tests/batch_tests.rs b/tests/batch_tests.rs index 4afe6ed..e43af7f 100644 --- a/tests/batch_tests.rs +++ b/tests/batch_tests.rs @@ -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 = diff --git a/tests/comment_tests.rs b/tests/comment_tests.rs index fb0947e..97a0b9c 100644 --- a/tests/comment_tests.rs +++ b/tests/comment_tests.rs @@ -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 = diff --git a/tests/diff_tests.rs b/tests/diff_tests.rs index 78d0f72..a3d8b5a 100644 --- a/tests/diff_tests.rs +++ b/tests/diff_tests.rs @@ -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 = diff --git a/tests/disasm_tests.rs b/tests/disasm_tests.rs index f3574a2..f9e09fb 100644 --- a/tests/disasm_tests.rs +++ b/tests/disasm_tests.rs @@ -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 = diff --git a/tests/find_tests.rs b/tests/find_tests.rs index 0641a65..3584eba 100644 --- a/tests/find_tests.rs +++ b/tests/find_tests.rs @@ -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 = diff --git a/tests/graph_tests.rs b/tests/graph_tests.rs index 7962364..a878809 100644 --- a/tests/graph_tests.rs +++ b/tests/graph_tests.rs @@ -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 = diff --git a/tests/patch_tests.rs b/tests/patch_tests.rs index 3fb056a..f9d7d0c 100644 --- a/tests/patch_tests.rs +++ b/tests/patch_tests.rs @@ -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 = diff --git a/tests/program_tests.rs b/tests/program_tests.rs index 4829b07..e19708a 100644 --- a/tests/program_tests.rs +++ b/tests/program_tests.rs @@ -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 = diff --git a/tests/query_tests.rs b/tests/query_tests.rs index ce1cb8a..e0004d6 100644 --- a/tests/query_tests.rs +++ b/tests/query_tests.rs @@ -33,6 +33,7 @@ static HARNESS: Lazy = 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) diff --git a/tests/script_tests.rs b/tests/script_tests.rs index 64dfa5a..54e3e28 100644 --- a/tests/script_tests.rs +++ b/tests/script_tests.rs @@ -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 = diff --git a/tests/stats_tests.rs b/tests/stats_tests.rs index a95c5fa..875347c 100644 --- a/tests/stats_tests.rs +++ b/tests/stats_tests.rs @@ -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 = diff --git a/tests/symbol_tests.rs b/tests/symbol_tests.rs index 5bc5f93..ffc6249 100644 --- a/tests/symbol_tests.rs +++ b/tests/symbol_tests.rs @@ -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 = diff --git a/tests/type_tests.rs b/tests/type_tests.rs index 6e10809..ccfd73b 100644 --- a/tests/type_tests.rs +++ b/tests/type_tests.rs @@ -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 =