============================= test session starts ==============================
platform darwin -- Python 3.12.1, pytest-9.1.1, pluggy-1.6.0 -- /Users/sjkim1127/Reversecore_MCP/.venv/bin/python
cachedir: .pytest_cache
rootdir: /Users/sjkim1127/Reversecore_MCP
configfile: pytest.ini (WARNING: ignoring pytest config in pyproject.toml!)
plugins: anyio-4.14.0, cov-7.1.0, asyncio-1.4.0
asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=session
collecting ... collected 1838 items

tests/integration/test_advanced_analysis_tools.py::TestCapstoneIntegration::test_capstone_import PASSED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestCapstoneIntegration::test_capstone_disassembly PASSED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestCapstoneIntegration::test_capstone_with_binary_file SKIPPED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestAngrIntegration::test_angr_import SKIPPED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestAngrIntegration::test_angr_project_load SKIPPED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestAngrIntegration::test_angr_cfg_generation SKIPPED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestAngrIntegration::test_angr_vex_ir SKIPPED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestDecompilationAccuracy::test_capstone_handles_structs PASSED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestDecompilationAccuracy::test_angr_memory_analysis SKIPPED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestAnalysisToolPerformance::test_capstone_disassembly_speed PASSED [  0%]
tests/integration/test_advanced_analysis_tools.py::TestAnalysisToolPerformance::test_angr_analysis_timeout SKIPPED [  0%]
tests/integration/test_cli_tools.py::TestRunFile::test_run_file_success PASSED [  0%]
tests/integration/test_cli_tools.py::TestRunFile::test_run_file_nonexistent PASSED [  0%]
tests/integration/test_cli_tools.py::TestRunFile::test_run_file_outside_workspace PASSED [  0%]
tests/integration/test_cli_tools.py::TestRunStrings::test_run_strings_success PASSED [  0%]
tests/integration/test_cli_tools.py::TestRunStrings::test_run_strings_min_length PASSED [  0%]
tests/integration/test_cli_tools.py::TestRunStrings::test_run_strings_nonexistent PASSED [  0%]
tests/integration/test_cli_tools.py::TestRunRadare2::test_run_radare2_success SKIPPED [  0%]
tests/integration/test_cli_tools.py::TestRunRadare2::test_run_radare2_invalid_command SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestDiffBinaries::test_diff_binaries_same_file SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestDiffBinaries::test_diff_binaries_with_function SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestDiffBinaries::test_diff_binaries_nonexistent_first_file SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestDiffBinaries::test_diff_binaries_nonexistent_second_file SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestDiffBinaries::test_diff_binaries_outside_workspace SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestDiffBinaries::test_diff_binaries_timeout SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestMatchLibraries::test_match_libraries_success SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestMatchLibraries::test_match_libraries_metadata SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestMatchLibraries::test_match_libraries_nonexistent_file SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestMatchLibraries::test_match_libraries_outside_workspace SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestMatchLibraries::test_match_libraries_with_custom_db SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestMatchLibraries::test_match_libraries_timeout SKIPPED [  1%]
tests/integration/test_diff_and_library_tools.py::TestMatchLibraries::test_match_libraries_validates_parameters SKIPPED [  1%]
tests/integration/test_extended_tools.py::TestOtoolAnalysis::test_otool_available PASSED [  1%]
tests/integration/test_extended_tools.py::TestOtoolAnalysis::test_otool_headers PASSED [  1%]
tests/integration/test_extended_tools.py::TestOtoolAnalysis::test_otool_load_commands PASSED [  1%]
tests/integration/test_extended_tools.py::TestOtoolAnalysis::test_otool_libraries PASSED [  1%]
tests/integration/test_extended_tools.py::TestNmSymbolAnalysis::test_nm_available PASSED [  2%]
tests/integration/test_extended_tools.py::TestNmSymbolAnalysis::test_nm_symbols_with_debug_info PASSED [  2%]
tests/integration/test_extended_tools.py::TestNmSymbolAnalysis::test_nm_symbols_stripped PASSED [  2%]
tests/integration/test_extended_tools.py::TestNmSymbolAnalysis::test_nm_symbol_types PASSED [  2%]
tests/integration/test_extended_tools.py::TestYaraIntegration::test_yara_import PASSED [  2%]
tests/integration/test_extended_tools.py::TestYaraIntegration::test_yara_compile_rule PASSED [  2%]
tests/integration/test_extended_tools.py::TestYaraIntegration::test_yara_match_strings PASSED [  2%]
tests/integration/test_extended_tools.py::TestYaraIntegration::test_yara_binary_matching PASSED [  2%]
tests/integration/test_extended_tools.py::TestBinwalkAnalysis::test_binwalk_import SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestBinwalkAnalysis::test_binwalk_signature_scan SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestBinwalkAnalysis::test_binwalk_on_binary SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestLddDependencyAnalysis::test_ldd_available SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestLddDependencyAnalysis::test_ldd_list_dependencies SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestReadelfAnalysis::test_readelf_available SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestReadelfAnalysis::test_readelf_headers SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestReadelfAnalysis::test_readelf_sections SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestStraceAnalysis::test_strace_available SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestStraceAnalysis::test_strace_trace_execution SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestLtraceAnalysis::test_ltrace_available SKIPPED [  2%]
tests/integration/test_extended_tools.py::TestLtraceAnalysis::test_ltrace_trace_calls SKIPPED [  3%]
tests/integration/test_extended_tools.py::TestExtendedToolComparison::test_multiple_tools_symbol_analysis PASSED [  3%]
tests/integration/test_extended_tools.py::TestExtendedToolComparison::test_multiple_tools_header_analysis PASSED [  3%]
tests/integration/test_extended_tools.py::TestExtendedToolComparison::test_tool_output_consistency PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestLargeBinaryHandling::test_file_command_on_large_binary PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestLargeBinaryHandling::test_strings_command_timeout PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestLargeBinaryHandling::test_objdump_on_large_binary PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestLargeBinaryHandling::test_streaming_analysis PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestMemoryEfficientProcessing::test_capstone_chunked_disassembly PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestMemoryEfficientProcessing::test_binary_reading_patterns PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestMemoryEfficientProcessing::test_binary_header_analysis_only PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestTimeoutHandling::test_tool_with_short_timeout PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestTimeoutHandling::test_analysis_timeout_recovery PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestTimeoutHandling::test_concurrent_binary_analysis PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestPEBinaryProcessing::test_file_recognizes_pe PASSED [  3%]
tests/integration/test_large_binary_processing.py::TestPEBinaryProcessing::test_pe_binary_strings_extraction PASSED [  3%]
tests/integration/test_mcp_real_binary_tools.py::test_run_file_tool PASSED [  3%]
tests/integration/test_mcp_real_binary_tools.py::test_run_strings_tool PASSED [  3%]
tests/integration/test_mcp_real_binary_tools.py::test_parse_binary_with_lief_tool PASSED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_detect_packer_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_run_capa_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_diff_binaries_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_patch_diff_1day_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_emulate_binary_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_verify_path_and_get_args_angr_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_vulnerability_hunter_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_run_radare2_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_r2_decompile_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_r2_recover_structures_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_r2_analyze_function_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_r2_get_call_graph_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_generate_function_graph_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_analyze_xrefs_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_trace_execution_path_tool SKIPPED [  4%]
tests/integration/test_mcp_real_binary_tools.py::test_vulnerability_hunter_with_symbolic_execution SKIPPED [  4%]
tests/integration/test_mcp_tool_calls.py::TestMCPToolListing::test_list_tools_returns_tools PASSED [  4%]
tests/integration/test_mcp_tool_calls.py::TestMCPToolListing::test_list_tools_includes_registered_tools PASSED [  5%]
tests/integration/test_mcp_tool_calls.py::TestMCPToolCall::test_call_list_workspace_success PASSED [  5%]
tests/integration/test_mcp_tool_calls.py::TestMCPToolCall::test_call_run_file_via_mcp PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestBinaryGeneration::test_generate_test_binaries PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestToolsWithRealBinaries::test_file_command_analysis PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestToolsWithRealBinaries::test_strings_command_extraction PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestToolsWithRealBinaries::test_radare2_analysis SKIPPED [  5%]
tests/integration/test_real_binary_analysis.py::TestToolsWithRealBinaries::test_objdump_analysis PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestToolOutputValidation::test_file_output_contains_info PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestToolOutputValidation::test_strings_finds_content PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestToolOutputValidation::test_nm_lists_symbols PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestAnalysisToolAccuracy::test_file_distinguishes_text_and_binary PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestAnalysisToolAccuracy::test_strings_finds_text_in_file PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestCombinedToolAnalysis::test_comprehensive_analysis PASSED [  5%]
tests/integration/test_real_binary_analysis.py::TestCombinedToolAnalysis::test_radare2_decompilation SKIPPED [  5%]
tests/integration/test_tool_installation.py::TestToolInstallation::test_radare2_installed SKIPPED [  5%]
tests/integration/test_tool_installation.py::TestToolInstallation::test_yara_installed SKIPPED [  5%]
tests/integration/test_tool_installation.py::TestToolInstallation::test_strings_installed PASSED [  5%]
tests/integration/test_tool_installation.py::TestToolInstallation::test_file_installed PASSED [  5%]
tests/integration/test_tool_installation.py::TestToolInstallation::test_binwalk_installed PASSED [  6%]
tests/integration/test_tool_installation.py::TestToolInstallation::test_objdump_installed PASSED [  6%]
tests/integration/test_tool_installation.py::TestToolInvocation::test_radare2_file_analysis SKIPPED [  6%]
tests/integration/test_tool_installation.py::TestToolInvocation::test_file_command PASSED [  6%]
tests/integration/test_tool_installation.py::TestToolInvocation::test_strings_command PASSED [  6%]
tests/integration/test_tool_installation.py::TestMCPToolCalls::test_radare2_analysis_tool SKIPPED [  6%]
tests/integration/test_tool_installation.py::TestMCPToolCalls::test_file_identification_tool PASSED [  6%]
tests/integration/test_tool_installation.py::TestMCPToolCalls::test_mcp_tool_execution PASSED [  6%]
tests/integration/test_tool_installation.py::TestToolErrorHandling::test_missing_tool_error_message PASSED [  6%]
tests/integration/test_tool_installation.py::TestToolIntegration::test_all_tools_accessible PASSED [  6%]
tests/integration/test_tool_installation.py::TestToolIntegration::test_basic_file_operations PASSED [  6%]
tests/unit/analysis/test_crash_triage.py::TestParseGDBOutput::test_parse_sigsegv_pc_control PASSED [  6%]
tests/unit/analysis/test_crash_triage.py::TestParseGDBOutput::test_parse_sigabrt PASSED [  6%]
tests/unit/analysis/test_crash_triage.py::TestAssessExploitability::test_assess_pc_control PASSED [  6%]
tests/unit/analysis/test_crash_triage.py::TestAssessExploitability::test_assess_call PASSED [  6%]
tests/unit/analysis/test_crash_triage.py::TestAssessExploitability::test_assess_aborted PASSED [  6%]
tests/unit/analysis/test_crash_triage.py::TestTriageCrash::test_triage_crash_success PASSED [  6%]
tests/unit/analysis/test_crash_triage.py::TestTriageCrash::test_triage_crash_no_crash PASSED [  6%]
tests/unit/core/sast/test_python_ast_scanner.py::test_eval_exec_scanning PASSED [  7%]
tests/unit/core/sast/test_python_ast_scanner.py::test_subprocess_shell_checking PASSED [  7%]
tests/unit/core/sast/test_python_ast_scanner.py::test_yaml_loader_checking PASSED [  7%]
tests/unit/core/sast/test_python_ast_scanner.py::test_syntax_error_graceful_handling PASSED [  7%]
tests/unit/core/sast/test_python_ast_scanner.py::test_python_ast_unresolved_name PASSED [  7%]
tests/unit/core/sast/test_python_ast_scanner.py::test_python_ast_nested_attribute_calls PASSED [  7%]
tests/unit/core/sast/test_regex_scanner.py::test_regex_matching PASSED   [  7%]
tests/unit/core/sast/test_regex_scanner.py::test_comment_skipping PASSED [  7%]
tests/unit/core/sast/test_regex_scanner.py::test_malformed_regex_handling PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_default_rules_load PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_language_normalization PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_custom_rule_override PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_rule_manager_reset PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_custom_rule_file_not_found PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_get_config_exception PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_empty_or_invalid_yaml PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_invalid_rule_skipped PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_load_rules_read_error PASSED [  7%]
tests/unit/core/sast/test_rule_manager.py::test_lazy_loading PASSED      [  7%]
tests/unit/core/test_analysis_cache.py::test_calculate_file_sha256 PASSED [  8%]
tests/unit/core/test_analysis_cache.py::test_serialization_roundtrip PASSED [  8%]
tests/unit/core/test_analysis_cache.py::test_cache_operations_redis_disabled PASSED [  8%]
tests/unit/core/test_analysis_cache.py::test_cache_operations_success PASSED [  8%]
tests/unit/core/test_analysis_cache.py::test_cache_operations_sqlite_success PASSED [  8%]
tests/unit/core/test_audit.py::TestAuditLogger::test_singleton PASSED    [  8%]
tests/unit/core/test_audit.py::TestAuditLogger::test_log_event PASSED    [  8%]
tests/unit/core/test_audit.py::TestAuditLogger::test_log_event_with_string_action PASSED [  8%]
tests/unit/core/test_audit.py::TestAuditLogger::test_log_event_default_details PASSED [  8%]
tests/unit/core/test_audit.py::TestAuditLogger::test_init_fallback_when_file_handler_fails PASSED [  8%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_cache_key_generation PASSED [  8%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_set_and_get_metadata PASSED [  8%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_get_nonexistent_key PASSED [  8%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_cache_invalidation_on_file_modification PASSED [  8%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_cache_with_nonexistent_file PASSED [  8%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_clear_specific_file PASSED [  8%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_clear_all PASSED [  8%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_multiple_keys_per_file PASSED [  8%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_overwrite_existing_key PASSED [  9%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_is_valid_method PASSED [  9%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_global_instance PASSED [  9%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_is_valid_false_when_key_not_in_timestamps PASSED [  9%]
tests/unit/core/test_binary_cache.py::TestBinaryMetadataCache::test_is_valid_file_not_found_invalidates_cache PASSED [  9%]
tests/unit/core/test_caching_optimizations.py::test_calculate_dynamic_timeout_caching PASSED [  9%]
tests/unit/core/test_caching_optimizations.py::test_get_r2_project_name_caching PASSED [  9%]
tests/unit/core/test_caching_optimizations.py::test_extract_library_name_caching PASSED [  9%]
tests/unit/core/test_caching_optimizations.py::test_sanitize_filename_for_rule_caching PASSED [  9%]
tests/unit/core/test_caching_optimizations.py::test_cache_size_limits PASSED [  9%]
tests/unit/core/test_caching_optimizations.py::test_extract_first_json_optimization PASSED [  9%]
tests/unit/core/test_caching_optimizations.py::test_caching_improves_batch_operations PASSED [  9%]
tests/unit/core/test_caching_optimizations.py::test_cache_correctness_across_different_inputs PASSED [  9%]
tests/unit/core/test_command_batching_optimization.py::test_trace_execution_path_get_address_batching SKIPPEDion changed) [  9%]
tests/unit/core/test_command_batching_optimization.py::test_get_address_helper_finds_symbol PASSED [  9%]
tests/unit/core/test_command_batching_optimization.py::test_get_address_helper_finds_function PASSED [  9%]
tests/unit/core/test_command_batching_optimization.py::test_get_address_helper_handles_not_found PASSED [  9%]
tests/unit/core/test_command_batching_optimization.py::test_batching_reduces_subprocess_calls PASSED [  9%]
tests/unit/core/test_command_batching_optimization.py::test_command_batching_already_implemented PASSED [ 10%]
tests/unit/core/test_command_batching_optimization.py::test_get_address_robust_error_handling PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestCommandSpec::test_command_spec_creation PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestCommandSpec::test_command_spec_validate_match PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestCommandSpec::test_command_spec_validate_no_match PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestR2CommandSpecs::test_pdf_command_patterns PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestR2CommandSpecs::test_afl_command_patterns PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestR2CommandSpecs::test_px_command_patterns PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestDangerousPatterns::test_semicolon_chaining PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestDangerousPatterns::test_pipe_detection PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestDangerousPatterns::test_command_substitution PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestDangerousPatterns::test_logical_operators PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestDangerousPatterns::test_write_commands PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestDangerousPatterns::test_system_commands PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_valid_read_commands PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_agfj_graph_command_validation PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_agfj_invalid_patterns PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_esil_emulation_commands PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_esil_commands_invalid_patterns PASSED [ 10%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_empty_command_rejected PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_command_injection_blocked PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_write_commands_blocked_by_default PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_system_commands_blocked PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_unknown_command_rejected PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_command_with_invalid_arguments PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_whitespace_handling PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_case_sensitivity PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestValidateR2Command::test_returns_validated_command_string PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestIsSafeR2Command::test_safe_commands_return_true PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestIsSafeR2Command::test_dangerous_commands_return_false PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestSecurityRegressions::test_pdf_semicolon_bypass_blocked PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestSecurityRegressions::test_pdf_at_symbol_variations PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestSecurityRegressions::test_allowlist_bypass_attempts PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestRadare2InternalFilter::test_afl_with_tilde_filter PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestRadare2InternalFilter::test_various_commands_with_tilde_filter PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestRadare2InternalFilter::test_tilde_filter_does_not_bypass_dangerous_patterns PASSED [ 11%]
tests/unit/core/test_command_spec.py::TestRadare2InternalFilter::test_tilde_filter_with_complex_patterns PASSED [ 11%]
tests/unit/core/test_config.py::TestConfigDefaults::test_default_values PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigDefaults::test_environment_overrides PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigCaching::test_get_config_returns_cached_instance PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigCaching::test_reset_config_reloads_from_env PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_success PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_workspace_missing PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_workspace_not_directory PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_read_dir_missing PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_read_dir_not_directory PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_strict_mode PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_strict_false_workspace_missing PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_workspace_not_dir_strict PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_workspace_not_dir_non_strict PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_read_dir_missing_strict PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_validate_paths_read_dir_not_dir_strict PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_get_settings_returns_underlying_settings PASSED [ 12%]
tests/unit/core/test_config.py::TestConfigValidation::test_config_read_only_dirs_override PASSED [ 12%]
tests/unit/core/test_config.py::TestPydanticSettings::test_settings_direct_instantiation PASSED [ 12%]
tests/unit/core/test_config.py::TestPydanticSettings::test_log_format_enum PASSED [ 13%]
tests/unit/core/test_config.py::TestPydanticSettings::test_transport_mode_enum PASSED [ 13%]
tests/unit/core/test_config.py::TestPydanticSettings::test_r2_pool_settings PASSED [ 13%]
tests/unit/core/test_config.py::TestPydanticSettings::test_get_settings_returns_underlying_settings PASSED [ 13%]
tests/unit/core/test_config.py::TestPydanticSettings::test_invalid_log_level_raises_error PASSED [ 13%]
tests/unit/core/test_config.py::TestPydanticSettings::test_rate_limit_bounds PASSED [ 13%]
tests/unit/core/test_config.py::TestPydanticSettings::test_config_wrapper_compatibility PASSED [ 13%]
tests/unit/core/test_container.py::TestGet::test_get_unregistered_raises_key_error PASSED [ 13%]
tests/unit/core/test_container.py::TestGet::test_get_pre_created_instance PASSED [ 13%]
tests/unit/core/test_container.py::TestGet::test_get_singleton_factory_lazy PASSED [ 13%]
tests/unit/core/test_container.py::TestGet::test_get_factory_creates_new_each_time PASSED [ 13%]
tests/unit/core/test_container.py::TestGet::test_get_override_takes_priority PASSED [ 13%]
tests/unit/core/test_container.py::TestGet::test_get_override_removed_after_reset PASSED [ 13%]
tests/unit/core/test_container.py::TestHasAndReset::test_has_returns_false_when_not_registered PASSED [ 13%]
tests/unit/core/test_container.py::TestHasAndReset::test_has_returns_true_for_singleton_factory PASSED [ 13%]
tests/unit/core/test_container.py::TestHasAndReset::test_has_returns_true_for_override PASSED [ 13%]
tests/unit/core/test_container.py::TestHasAndReset::test_reset_singleton_forces_recreation PASSED [ 13%]
tests/unit/core/test_container.py::TestHasAndReset::test_reset_singleton_noop_if_not_instantiated PASSED [ 13%]
tests/unit/core/test_container.py::TestHasAndReset::test_reset_all_clears_singletons_and_overrides PASSED [ 13%]
tests/unit/core/test_container.py::TestInitializeAsync::test_initialize_async_idempotent PASSED [ 14%]
tests/unit/core/test_container.py::TestInitializeAsync::test_initialize_async_calls_start_on_singleton PASSED [ 14%]
tests/unit/core/test_container.py::TestInitializeAsync::test_initialize_async_handles_start_failure PASSED [ 14%]
tests/unit/core/test_container.py::TestInitializeAsync::test_initialize_async_skips_non_async_start PASSED [ 14%]
tests/unit/core/test_container.py::TestShutdownAsync::test_shutdown_async_calls_stop PASSED [ 14%]
tests/unit/core/test_container.py::TestShutdownAsync::test_shutdown_async_handles_stop_failure PASSED [ 14%]
tests/unit/core/test_container.py::TestShutdownAsync::test_shutdown_async_calls_close_all PASSED [ 14%]
tests/unit/core/test_container.py::TestShutdownAsync::test_shutdown_async_handles_close_all_failure PASSED [ 14%]
tests/unit/core/test_container.py::TestSafeStart::test_safe_start_success PASSED [ 14%]
tests/unit/core/test_container.py::TestSafeStart::test_safe_start_handles_exception PASSED [ 14%]
tests/unit/core/test_container.py::TestLazySingletonAfterInit::test_lazy_singleton_after_init_logs_warning PASSED [ 14%]
tests/unit/core/test_container.py::TestThreadSafety::test_concurrent_singleton_creation_returns_same_instance PASSED [ 14%]
tests/unit/core/test_container.py::TestConvenienceFunctions::test_get_r2_pool_returns_something PASSED [ 14%]
tests/unit/core/test_container.py::TestConvenienceFunctions::test_get_resource_manager_returns_something PASSED [ 14%]
tests/unit/core/test_container.py::TestConvenienceFunctions::test_get_ghidra_service_returns_something PASSED [ 14%]
tests/unit/core/test_container.py::TestConvenienceFunctions::test_get_config_from_container_returns_config PASSED [ 14%]
tests/unit/core/test_decorators.py::TestLogExecution::test_sync_function PASSED [ 14%]
tests/unit/core/test_decorators.py::TestLogExecution::test_sync_with_error PASSED [ 14%]
tests/unit/core/test_decorators.py::TestLogExecution::test_async_function PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_format_error_plain_without_hint PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_format_error_plain_with_hint PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_format_error_structured_json PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_get_validation_hint_defaults PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_get_validation_hint_workspace_error PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_get_validation_hint_directory_error PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_get_validation_hint_invalid_path_error PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_format_error_generic_exception PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_format_error_structured_with_hint PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_format_error_with_tool_name_attribute PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_format_error_with_timeout_attributes PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_format_error_with_size_attributes PASSED [ 15%]
tests/unit/core/test_error_formatting.py::test_format_error_generic_structured PASSED [ 15%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_sync_function_success PASSED [ 15%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_sync_function_tool_not_found PASSED [ 15%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_sync_function_timeout PASSED [ 15%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_sync_function_output_limit PASSED [ 15%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_sync_function_validation_error PASSED [ 15%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_sync_function_generic_exception PASSED [ 16%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_async_function_success PASSED [ 16%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_async_function_tool_not_found PASSED [ 16%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_async_function_timeout PASSED [ 16%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_async_function_output_limit PASSED [ 16%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_async_function_validation_error PASSED [ 16%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_async_function_generic_exception PASSED [ 16%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_sync_retry_then_fail_returns_handle_exception PASSED [ 16%]
tests/unit/core/test_error_handling.py::TestHandleToolErrors::test_async_retry_then_fail_returns_handle_exception PASSED [ 16%]
tests/unit/core/test_evidence.py::TestEvidenceLevel::test_observed_symbol PASSED [ 16%]
tests/unit/core/test_evidence.py::TestEvidenceLevel::test_inferred_symbol PASSED [ 16%]
tests/unit/core/test_evidence.py::TestEvidenceLevel::test_possible_symbol PASSED [ 16%]
tests/unit/core/test_evidence.py::TestEvidenceLevel::test_observed_confidence_score PASSED [ 16%]
tests/unit/core/test_evidence.py::TestEvidenceLevel::test_inferred_confidence_score PASSED [ 16%]
tests/unit/core/test_evidence.py::TestEvidenceLevel::test_possible_confidence_score PASSED [ 16%]
tests/unit/core/test_evidence.py::TestMITREConfidence::test_confidence_values PASSED [ 16%]
tests/unit/core/test_evidence.py::TestEvidence::test_evidence_creation PASSED [ 16%]
tests/unit/core/test_evidence.py::TestEvidence::test_evidence_with_raw_data PASSED [ 16%]
tests/unit/core/test_evidence.py::TestEvidence::test_evidence_to_dict PASSED [ 17%]
tests/unit/core/test_evidence.py::TestFinding::test_finding_creation PASSED [ 17%]
tests/unit/core/test_evidence.py::TestFinding::test_add_evidence PASSED  [ 17%]
tests/unit/core/test_evidence.py::TestFinding::test_finding_confidence PASSED [ 17%]
tests/unit/core/test_evidence.py::TestFinding::test_finding_to_dict PASSED [ 17%]
tests/unit/core/test_evidence.py::TestFinding::test_finding_format_markdown PASSED [ 17%]
tests/unit/core/test_evidence.py::TestFinding::test_finding_format_markdown_with_long_raw_data PASSED [ 17%]
tests/unit/core/test_evidence.py::TestFinding::test_finding_format_markdown_with_mitre_techniques PASSED [ 17%]
tests/unit/core/test_evidence.py::TestMITRETechnique::test_technique_creation PASSED [ 17%]
tests/unit/core/test_evidence.py::TestMITRETechnique::test_technique_to_dict PASSED [ 17%]
tests/unit/core/test_evidence.py::TestMITRETechnique::test_technique_format_markdown_row PASSED [ 17%]
tests/unit/core/test_evidence.py::TestAnalysisMetadata::test_metadata_creation PASSED [ 17%]
tests/unit/core/test_evidence.py::TestAnalysisMetadata::test_duration_seconds PASSED [ 17%]
tests/unit/core/test_evidence.py::TestAnalysisMetadata::test_duration_seconds_ongoing PASSED [ 17%]
tests/unit/core/test_evidence.py::TestAnalysisMetadata::test_duration_formatted PASSED [ 17%]
tests/unit/core/test_evidence.py::TestAnalysisMetadata::test_duration_formatted_seconds_only PASSED [ 17%]
tests/unit/core/test_evidence.py::TestAnalysisMetadata::test_duration_formatted_hours PASSED [ 17%]
tests/unit/core/test_evidence.py::TestAnalysisMetadata::test_metadata_to_dict PASSED [ 17%]
tests/unit/core/test_evidence.py::TestHelperFunctions::test_observed_finding PASSED [ 18%]
tests/unit/core/test_evidence.py::TestHelperFunctions::test_inferred_finding PASSED [ 18%]
tests/unit/core/test_evidence.py::TestHelperFunctions::test_possible_finding PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestExceptions::test_tool_not_found_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestExceptions::test_execution_timeout_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestExceptions::test_output_limit_exceeded_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestExceptions::test_exception_inheritance PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestBinaryAnalysisExceptions::test_binary_analysis_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestBinaryAnalysisExceptions::test_decompilation_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestBinaryAnalysisExceptions::test_disassembly_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestBinaryAnalysisExceptions::test_structure_recovery_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestBinaryAnalysisExceptions::test_signature_generation_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestBinaryAnalysisExceptions::test_emulation_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestBinaryAnalysisExceptions::test_binary_analysis_inheritance PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestToolSpecificExceptions::test_tool_timeout_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestToolSpecificExceptions::test_tool_timeout_error_no_operation PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestToolSpecificExceptions::test_ghidra_connection_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestToolSpecificExceptions::test_radare2_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestSecurityExceptions::test_workspace_error PASSED [ 18%]
tests/unit/core/test_exceptions.py::TestSecurityExceptions::test_security_violation_error PASSED [ 19%]
tests/unit/core/test_exceptions.py::TestSecurityExceptions::test_path_traversal_error PASSED [ 19%]
tests/unit/core/test_exceptions.py::TestSecurityExceptions::test_security_inheritance PASSED [ 19%]
tests/unit/core/test_execution.py::TestExecuteSubprocessAsync::test_success PASSED [ 19%]
tests/unit/core/test_execution.py::TestExecuteSubprocessAsync::test_nonexistent_command PASSED [ 19%]
tests/unit/core/test_execution.py::TestExecuteSubprocessAsync::test_output_truncation PASSED [ 19%]
tests/unit/core/test_execution.py::TestExecuteSubprocessAsync::test_nonzero_exit_code PASSED [ 19%]
tests/unit/core/test_execution.py::TestExecuteSubprocessAsync::test_timeout PASSED [ 19%]
tests/unit/core/test_execution.py::TestExecuteSubprocessStreaming::test_success PASSED [ 19%]
tests/unit/core/test_execution.py::TestExecuteSubprocessStreaming::test_nonexistent_command PASSED [ 19%]
tests/unit/core/test_execution.py::TestBackgroundLoopRunner::test_run_coroutine PASSED [ 19%]
tests/unit/core/test_extension.py::test_r2_extension_point_defaults PASSED [ 19%]
tests/unit/core/test_extension.py::test_ghidra_extension_point_defaults PASSED [ 19%]
tests/unit/core/test_extension.py::test_extension_point_missing_name PASSED [ 19%]
tests/unit/core/test_extension.py::test_r2_extension_hooks PASSED        [ 19%]
tests/unit/core/test_extension.py::test_ghidra_extension_hooks PASSED    [ 19%]
tests/unit/core/test_extension_registry.py::test_registry_singleton PASSED [ 19%]
tests/unit/core/test_extension_registry.py::test_register_and_sort PASSED [ 19%]
tests/unit/core/test_extension_registry.py::test_duplicate_registration PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_r2_hook_chain PASSED    [ 20%]
tests/unit/core/test_extension_registry.py::test_ghidra_hook_chain PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_get_all_extension_tools PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_get_ghidra_startup_scripts PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_discover_from_env_vars PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_r2_pre_hook_exception_does_not_abort_chain PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_r2_post_hook_exception_isolated PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_r2_pre_hooks_empty_passthrough PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_r2_post_hooks_empty_passthrough PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_r2_session_open_hook_exception_isolated PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_r2_session_close_hook_exception_isolated PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_ghidra_decompile_hook_exception_returns_original PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_ghidra_decompile_hooks_empty_passthrough PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_ghidra_function_hooks_exception_returns_original PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_ghidra_function_hooks_empty_passthrough PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_get_all_extension_tools_exception_isolated PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_get_ghidra_startup_scripts_exception_isolated PASSED [ 20%]
tests/unit/core/test_extension_registry.py::test_get_r2_startup_commands_empty PASSED [ 21%]
tests/unit/core/test_extension_registry.py::test_get_r2_startup_commands_returns_commands PASSED [ 21%]
tests/unit/core/test_extension_registry.py::test_get_r2_startup_commands_exception_isolated PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestLoadClass::test_colon_format PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestLoadClass::test_dot_format PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestLoadClass::test_invalid_format_no_separator PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestLoadClass::test_nonexistent_module PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestLoadClass::test_nonexistent_class PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestDiscoverFromPluginDirs::test_missing_dir_is_skipped PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestDiscoverFromPluginDirs::test_empty_env_var_is_noop PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestDiscoverFromPluginDirs::test_valid_plugin_file_registers_extension PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestDiscoverFromPluginDirs::test_broken_plugin_file_is_skipped PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestDiscoverFromEnvVarsEdgeCases::test_non_subclass_r2_extension_skipped PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestDiscoverFromEnvVarsEdgeCases::test_non_subclass_ghidra_extension_skipped PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestDiscoverFromEnvVarsEdgeCases::test_instantiation_failure_is_handled PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestDiscoverFromEnvVarsEdgeCases::test_empty_env_vars_noop PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestExpandR2Allowlist::test_expand_adds_new_commands PASSED [ 21%]
tests/unit/core/test_extension_registry.py::TestExpandR2Allowlist::test_expand_allowlist_import_error_is_silent PASSED [ 21%]
tests/unit/core/test_extension_registry.py::test_discover_all_idempotent PASSED [ 21%]
tests/unit/core/test_extension_registry.py::test_reset_clears_discovered_flag PASSED [ 22%]
tests/unit/core/test_extension_registry.py::test_list_extensions PASSED  [ 22%]
tests/unit/core/test_extension_registry.py::test_ghidra_duplicate_registration_skipped PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_basic_json_extraction PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_nested_json_extraction PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_json_array_extraction PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_json_with_brackets_in_strings PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_json_with_escaped_quotes PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_json_with_nested_brackets_in_strings PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_malformed_json_returns_none PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_no_json_returns_none PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_empty_string_returns_none PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_multiple_json_objects_returns_first PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_json_after_noise PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_radare2_style_output PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_performance_large_text_with_late_json PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_performance_multiple_false_starts PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_performance_deeply_nested_json PASSED [ 22%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_real_world_radare2_aflj_output PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_json_with_unicode_characters PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionPerformance::test_comparative_performance_vs_naive PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionCorrectness::test_unmatched_opening_bracket PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionCorrectness::test_unmatched_closing_bracket PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionCorrectness::test_mixed_bracket_types PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionCorrectness::test_json_with_newlines PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionCorrectness::test_json_true_false_null PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionCorrectness::test_json_with_numbers PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionCorrectness::test_empty_json_object PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionCorrectness::test_empty_json_array PASSED [ 23%]
tests/unit/core/test_json_extraction_performance.py::TestJSONExtractionCorrectness::test_json_with_url_in_string PASSED [ 23%]
tests/unit/core/test_json_parsing_optimization.py::TestExtractFirstJson::test_returns_none_for_empty_string PASSED [ 23%]
tests/unit/core/test_json_parsing_optimization.py::TestExtractFirstJson::test_returns_none_for_no_json PASSED [ 23%]
tests/unit/core/test_json_parsing_optimization.py::TestExtractFirstJson::test_extracts_valid_json_object PASSED [ 23%]
tests/unit/core/test_json_parsing_optimization.py::TestExtractFirstJson::test_extracts_valid_json_array PASSED [ 23%]
tests/unit/core/test_json_parsing_optimization.py::TestExtractFirstJson::test_handles_nested_structures PASSED [ 23%]
tests/unit/core/test_json_parsing_optimization.py::TestExtractFirstJson::test_returns_none_for_mismatched_brackets PASSED [ 23%]
tests/unit/core/test_json_parsing_optimization.py::TestExtractFirstJson::test_returns_none_for_unclosed_json PASSED [ 23%]
tests/unit/core/test_json_parsing_optimization.py::TestExtractFirstJson::test_ignores_unmatched_closing_brackets PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestParseJsonOutput::test_parses_clean_json_object PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestParseJsonOutput::test_parses_clean_json_array PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestParseJsonOutput::test_extracts_json_from_noisy_output PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestParseJsonOutput::test_raises_on_invalid_json PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestParseJsonOutput::test_raises_on_empty_string PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestParseJsonOutput::test_handles_radare2_like_output PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestParseJsonOutput::test_handles_xrefs_output PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestPerformanceImprovement::test_parse_json_output_uses_helper PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestPerformanceImprovement::test_clean_json_parsed_efficiently PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestPerformanceImprovement::test_eliminates_redundant_fallback_pattern PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestPerformanceImprovement::test_error_handling_is_clear PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestEdgeCases::test_multiple_json_objects_extracts_first PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestEdgeCases::test_deeply_nested_json PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestEdgeCases::test_json_with_escaped_characters PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestEdgeCases::test_empty_array PASSED [ 24%]
tests/unit/core/test_json_parsing_optimization.py::TestEdgeCases::test_empty_object PASSED [ 24%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_loads_string PASSED [ 24%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_loads_bytes PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_dumps_simple PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_dumps_with_indent PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_dumps_list PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_loads_complex PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_round_trip PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_is_orjson_available PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_unicode_handling PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_empty_objects PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_performance_note PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_json_decode_error_import PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_invalid_json_raises_error PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_dumps_none PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_dumps_boolean_values PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_dumps_numeric_types PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_large_nested_structure PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_special_characters_in_strings PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_dumps_typeerror_fallback_to_stdlib PASSED [ 25%]
tests/unit/core/test_json_utils.py::TestJSONUtils::test_fallback_when_orjson_unavailable PASSED [ 26%]
tests/unit/core/test_loader.py::TestPluginLoader::test_init_empty_plugins PASSED [ 26%]
tests/unit/core/test_loader.py::TestPluginLoader::test_discover_plugins_skips_init_modules PASSED [ 26%]
tests/unit/core/test_loader.py::TestPluginLoader::test_discover_plugins_handles_import_error PASSED [ 26%]
tests/unit/core/test_loader.py::TestPluginLoader::test_get_plugin_and_get_all_plugins PASSED [ 26%]
tests/unit/core/test_loader.py::TestPluginLoader::test_discover_plugins_instantiation_failure PASSED [ 26%]
tests/unit/core/test_loader.py::TestPluginLoader::test_discover_plugins_success PASSED [ 26%]
tests/unit/core/test_logging_config.py::test_get_logger_returns_logger PASSED [ 26%]
tests/unit/core/test_logging_config.py::test_setup_logging_smoke PASSED  [ 26%]
tests/unit/core/test_logging_config.py::test_setup_logging_json_format PASSED [ 26%]
tests/unit/core/test_logging_config.py::test_setup_logging_different_log_levels PASSED [ 26%]
tests/unit/core/test_logging_config.py::test_setup_logging_permission_error PASSED [ 26%]
tests/unit/core/test_logging_config.py::test_json_formatter_basic PASSED [ 26%]
tests/unit/core/test_logging_config.py::test_json_formatter_with_extra_fields PASSED [ 26%]
tests/unit/core/test_logging_config.py::test_json_formatter_with_exception PASSED [ 26%]
tests/unit/core/test_logging_config.py::test_get_logger_with_different_names PASSED [ 26%]
tests/unit/core/test_memory.py::TestMemoryStoreInitialization::test_initialize_creates_database PASSED [ 26%]
tests/unit/core/test_memory.py::TestMemoryStoreInitialization::test_initialize_creates_parent_dirs PASSED [ 26%]
tests/unit/core/test_memory.py::TestMemoryStoreInitialization::test_double_initialization_is_safe PASSED [ 26%]
tests/unit/core/test_memory.py::TestSessionManagement::test_create_session PASSED [ 27%]
tests/unit/core/test_memory.py::TestSessionManagement::test_get_session PASSED [ 27%]
tests/unit/core/test_memory.py::TestSessionManagement::test_get_nonexistent_session PASSED [ 27%]
tests/unit/core/test_memory.py::TestSessionManagement::test_list_sessions PASSED [ 27%]
tests/unit/core/test_memory.py::TestSessionManagement::test_list_sessions_with_status_filter PASSED [ 27%]
tests/unit/core/test_memory.py::TestSessionManagement::test_update_session_status PASSED [ 27%]
tests/unit/core/test_memory.py::TestSessionManagement::test_update_session_duration PASSED [ 27%]
tests/unit/core/test_memory.py::TestSessionManagement::test_find_latest_session PASSED [ 27%]
tests/unit/core/test_memory.py::TestSessionManagement::test_find_latest_session_by_binary PASSED [ 27%]
tests/unit/core/test_memory.py::TestMemoryOperations::test_save_memory PASSED [ 27%]
tests/unit/core/test_memory.py::TestMemoryOperations::test_save_memory_string_content PASSED [ 27%]
tests/unit/core/test_memory.py::TestMemoryOperations::test_get_session_memories PASSED [ 27%]
tests/unit/core/test_memory.py::TestMemoryOperations::test_get_session_memories_filtered PASSED [ 27%]
tests/unit/core/test_memory.py::TestMemoryOperations::test_recall_memories_fts PASSED [ 27%]
tests/unit/core/test_memory.py::TestMemoryOperations::test_recall_memories_fallback PASSED [ 27%]
tests/unit/core/test_memory.py::TestMemoryOperations::test_importance_ordering PASSED [ 27%]
tests/unit/core/test_memory.py::TestPatternOperations::test_save_pattern PASSED [ 27%]
tests/unit/core/test_memory.py::TestPatternOperations::test_find_similar_patterns PASSED [ 27%]
tests/unit/core/test_memory.py::TestPatternOperations::test_find_similar_excludes_current PASSED [ 28%]
tests/unit/core/test_memory.py::TestContextRetrieval::test_get_session_context PASSED [ 28%]
tests/unit/core/test_memory.py::TestContextRetrieval::test_get_session_context_empty PASSED [ 28%]
tests/unit/core/test_memory.py::TestContextRetrieval::test_get_relevant_context PASSED [ 28%]
tests/unit/core/test_metrics.py::TestMetricsCollector::test_evict_oldest_tool_metrics PASSED [ 28%]
tests/unit/core/test_metrics.py::TestMetricsCollector::test_evict_oldest_cache_metrics PASSED [ 28%]
tests/unit/core/test_metrics.py::TestMetricsCollector::test_record_tool_execution_failure PASSED [ 28%]
tests/unit/core/test_metrics.py::TestMetricsCollector::test_evict_oldest_circuit_breaker_states PASSED [ 28%]
tests/unit/core/test_metrics.py::TestMetricsCollector::test_record_cache_hit_eviction PASSED [ 28%]
tests/unit/core/test_metrics.py::TestMetricsCollector::test_reset PASSED [ 28%]
tests/unit/core/test_metrics.py::TestDetermineSuccess::test_tool_error_returns_false PASSED [ 28%]
tests/unit/core/test_metrics.py::TestDetermineSuccess::test_object_with_status_success PASSED [ 28%]
tests/unit/core/test_metrics.py::TestDetermineSuccess::test_object_with_status_error PASSED [ 28%]
tests/unit/core/test_metrics.py::TestDetermineSuccess::test_dict_status_success PASSED [ 28%]
tests/unit/core/test_metrics.py::TestDetermineSuccess::test_dict_status_error PASSED [ 28%]
tests/unit/core/test_metrics.py::TestDetermineSuccess::test_fallback_returns_true PASSED [ 28%]
tests/unit/core/test_metrics.py::TestTrackMetrics::test_sync_success PASSED [ 28%]
tests/unit/core/test_metrics.py::TestTrackMetrics::test_sync_error PASSED [ 28%]
tests/unit/core/test_metrics.py::TestTrackMetrics::test_exception PASSED [ 28%]
tests/unit/core/test_metrics.py::TestTrackMetrics::test_async_success PASSED [ 29%]
tests/unit/core/test_metrics.py::TestTrackMetrics::test_sync_records_metrics PASSED [ 29%]
tests/unit/core/test_metrics.py::TestTrackMetrics::test_async_records_metrics PASSED [ 29%]
tests/unit/core/test_metrics.py::TestTrackMetrics::test_async_exception PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMappingRule::test_rule_creation PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMappingRule::test_rule_with_custom_settings PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_mapper_creation_default_rules PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_mapper_creation_custom_rules PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_map_indicators_with_imports PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_map_indicators_with_strings PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_map_indicators_with_behaviors PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_map_indicators_empty PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_map_indicators_confidence_levels PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_generate_mitre_report_empty PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_generate_mitre_report_with_techniques PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestMITREMapper::test_map_indicators_medium_and_low_confidence PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestHelperFunctions::test_get_mitre_mapper_singleton PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestHelperFunctions::test_map_to_mitre_helper PASSED [ 29%]
tests/unit/core/test_mitre_mapper.py::TestHelperFunctions::test_map_to_mitre_with_behaviors PASSED [ 30%]
tests/unit/core/test_mitre_mapper.py::TestDefaultMappingRules::test_execution_techniques PASSED [ 30%]
tests/unit/core/test_mitre_mapper.py::TestDefaultMappingRules::test_persistence_techniques PASSED [ 30%]
tests/unit/core/test_mitre_mapper.py::TestDefaultMappingRules::test_defense_evasion_techniques PASSED [ 30%]
tests/unit/core/test_mitre_mapper.py::TestDefaultMappingRules::test_credential_access_techniques PASSED [ 30%]
tests/unit/core/test_mitre_mapper.py::TestDefaultMappingRules::test_c2_techniques PASSED [ 30%]
tests/unit/core/test_new_optimizations.py::test_binary_cache_ttl_boundary_optimization PASSED [ 30%]
tests/unit/core/test_new_optimizations.py::test_r2_pool_is_analyzed_optimization PASSED [ 30%]
tests/unit/core/test_new_optimizations.py::test_resource_manager_cleanup_uses_chain PASSED [ 30%]
tests/unit/core/test_new_optimizations.py::test_json_utils_exposes_jsondecodeerror PASSED [ 30%]
tests/unit/core/test_new_optimizations.py::test_json_utils_decode_error_with_orjson PASSED [ 30%]
tests/unit/core/test_new_optimizations.py::test_json_utils_loads_and_dumps_work_correctly PASSED [ 30%]
tests/unit/core/test_new_optimizations.py::test_chain_optimization_correctness PASSED [ 30%]
tests/unit/core/test_plugin.py::TestTool::test_tool_creation PASSED      [ 30%]
tests/unit/core/test_plugin.py::TestTool::test_tool_with_parameters PASSED [ 30%]
tests/unit/core/test_plugin.py::TestPlugin::test_concrete_plugin_name PASSED [ 30%]
tests/unit/core/test_plugin.py::TestPlugin::test_concrete_plugin_description PASSED [ 30%]
tests/unit/core/test_plugin.py::TestPlugin::test_concrete_plugin_register PASSED [ 30%]
tests/unit/core/test_plugin.py::TestPlugin::test_default_plugin_description PASSED [ 31%]
tests/unit/core/test_plugin.py::TestPlugin::test_abstract_base_methods PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolInit::test_default_init PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolInit::test_custom_init PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolInit::test_stats_initialized PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolConfig::test_load_config_from_env PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolConfig::test_load_config_fallback PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolConfig::test_load_config_idempotent PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolConfig::test_max_connections_property PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolConfig::test_acquisition_timeout_property PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolSemaphores::test_get_connection_semaphore PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolSemaphores::test_get_async_semaphore PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolSemaphores::test_get_async_lock PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolHealthCheck::test_is_connection_healthy PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolHealthCheck::test_is_connection_unhealthy PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolHealthCheck::test_maybe_health_check_recent PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolHealthCheck::test_maybe_health_check_stale PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolEviction::test_evict_oldest_connection PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolEviction::test_evict_oldest_quit_error PASSED [ 31%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolEviction::test_remove_connection_unsafe PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolEviction::test_cleanup_connection_state PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolGetConnection::test_r2pipe_not_installed PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolGetConnection::test_cache_hit PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolGetConnection::test_cache_miss_creates_new PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolGetConnection::test_eviction_when_full PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolGetConnection::test_stale_connection_reconnect PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolExecute::test_execute_success PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolExecute::test_execute_retry_on_failure PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolExecute::test_execute_retry_fails PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolAsync::test_execute_async PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolAsync::test_async_session PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolAsync::test_async_session_error_invalidates PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolSyncSession::test_sync_session PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolSyncSession::test_sync_session_error PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolLifecycle::test_close_all PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolLifecycle::test_close_all_quit_error PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolAnalyzed::test_is_analyzed_false PASSED [ 32%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolAnalyzed::test_is_analyzed_true PASSED [ 33%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolAnalyzed::test_mark_analyzed_no_pool PASSED [ 33%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolStats::test_get_stats PASSED [ 33%]
tests/unit/core/test_r2_pool.py::TestR2ConnectionPoolStats::test_get_stats_thread_safe PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_add_finding PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_add_mitre PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_add_ioc PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_set_family PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_finalize PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_observed_inferred_possible_count PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_overall_confidence_empty PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_overall_confidence_with_findings PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_minimal PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_family_confidence_bands PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_with_family_evidence PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_with_executive_summary PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_with_findings PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_with_mitre PASSED [ 33%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_with_iocs PASSED [ 34%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_with_yara_rule PASSED [ 34%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_with_recommendations PASSED [ 34%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_generate_markdown_footer_with_end_time PASSED [ 34%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_to_dict PASSED [ 34%]
tests/unit/core/test_report_generator.py::TestEvidenceBasedReport::test_to_json PASSED [ 34%]
tests/unit/core/test_report_generator.py::TestCreateReport::test_create_report_default_analyst PASSED [ 34%]
tests/unit/core/test_report_generator.py::TestCreateReport::test_create_report_custom_analyst PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_init PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_allow_request_when_closed PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_record_failure_increases_count PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_circuit_opens_on_threshold PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_allow_request_when_open PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_half_open_after_recovery_timeout PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_record_success_in_half_open_closes_circuit PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_record_failure_in_half_open_reopens_circuit PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_record_success_in_closed_resets_failures PASSED [ 34%]
tests/unit/core/test_resilience.py::TestCircuitBreaker::test_allow_request_in_half_open PASSED [ 34%]
tests/unit/core/test_resilience.py::TestGetCircuitBreaker::test_creates_new_breaker PASSED [ 34%]
tests/unit/core/test_resilience.py::TestGetCircuitBreaker::test_returns_existing_breaker PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_decorator_allows_request_when_closed PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_decorator_records_success PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_decorator_records_failure PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_decorator_blocks_when_open PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_decorator_recovers_after_success PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_decorator_preserves_function_metadata PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_sync_decorator PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_async_decorator PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_sync_decorator_failure_and_blocked PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_async_decorator_failure_and_blocked PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_general_decorator_with_sync_function PASSED [ 35%]
tests/unit/core/test_resilience.py::TestCircuitBreakerDecorator::test_allow_request_invalid_state_fallback PASSED [ 35%]
tests/unit/core/test_resilience_extended.py::TestBinaryMetadataCacheDirect::test_cache_get_nonexistent PASSED [ 35%]
tests/unit/core/test_resilience_extended.py::TestBinaryMetadataCacheDirect::test_cache_set_and_get PASSED [ 35%]
tests/unit/core/test_resilience_extended.py::TestBinaryMetadataCacheDirect::test_cache_clear PASSED [ 35%]
tests/unit/core/test_resilience_extended.py::TestBinaryMetadataCacheDirect::test_cache_clear_all PASSED [ 35%]
tests/unit/core/test_resilience_extended.py::TestResourceManagerDirect::test_resource_manager_creation PASSED [ 35%]
tests/unit/core/test_resilience_extended.py::TestResilienceDirect::test_circuit_breaker_decorator_exists PASSED [ 36%]
tests/unit/core/test_resilience_extended.py::TestResilienceDirect::test_get_circuit_breaker PASSED [ 36%]
tests/unit/core/test_resilience_extended.py::TestIOCToolsPatterns::test_extract_iocs_mixed_content PASSED [ 36%]
tests/unit/core/test_resilience_extended.py::TestDiffToolsHelpers::test_extract_library_name_various PASSED [ 36%]
tests/unit/core/test_resilience_extended.py::TestR2AnalysisHelpers::test_parse_json_output_array PASSED [ 36%]
tests/unit/core/test_resilience_extended.py::TestR2AnalysisHelpers::test_parse_json_output_object PASSED [ 36%]
tests/unit/core/test_resilience_extended.py::TestStaticAnalysisVariations::test_run_strings_options PASSED [ 36%]
tests/unit/core/test_resilience_extended.py::TestValidatorsMore::test_validate_tool_parameters_empty PASSED [ 36%]
tests/unit/core/test_resilience_extended.py::TestValidatorsMore::test_validate_address_format_symbol PASSED [ 36%]
tests/unit/core/test_resilience_extended.py::TestYaraToolsVariations::test_format_yara_match_with_meta PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_init PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_start PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_start_idempotent PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_stop PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_cleanup_removes_old_tmp_files PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_cleanup_preserves_recent_files PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_cleanup_handles_errors_gracefully PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_cleanup_loop_runs_periodically PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_reap_zombies_child_process_error PASSED [ 36%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_reap_zombies_generic_exception PASSED [ 37%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_cleanup_loop_stops_on_cancel PASSED [ 37%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_cleanup_patterns PASSED [ 37%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_global_instance PASSED [ 37%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_cleanup_loop_handles_exception PASSED [ 37%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_reap_zombies_successful_reap PASSED [ 37%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_reap_zombies_empty_tracked PASSED [ 37%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_pid_check_loop_handles_exception PASSED [ 37%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_cleanup_handles_unlink_exception PASSED [ 37%]
tests/unit/core/test_resource_manager.py::TestResourceManager::test_cleanup_handles_general_exception PASSED [ 37%]
tests/unit/core/test_resources.py::TestStaticResources::test_register_resources_called PASSED [ 37%]
tests/unit/core/test_resources.py::TestStaticResources::test_get_guide_exists PASSED [ 37%]
tests/unit/core/test_resources.py::TestStaticResources::test_get_guide_not_found PASSED [ 37%]
tests/unit/core/test_resources.py::TestStaticResources::test_get_structure_guide PASSED [ 37%]
tests/unit/core/test_resources.py::TestStaticResources::test_get_logs_exists PASSED [ 37%]
tests/unit/core/test_resources.py::TestStaticResources::test_get_logs_not_found PASSED [ 37%]
tests/unit/core/test_resources.py::TestStaticResources::test_get_logs_error_handling PASSED [ 37%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_file_strings_success PASSED [ 37%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_file_strings_error PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_file_iocs_success PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_decompiled_code_success PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_disassembly_success PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_function_cfg_success PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_function_list_success PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_dormant_detector_report_success PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_dormant_detector_report_failure PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_file_strings_exception PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_file_iocs_strings_failure PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_decompiled_code_error PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_disassembly_error PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_function_cfg_error PASSED [ 38%]
tests/unit/core/test_resources.py::TestDynamicResources::test_get_function_list_error PASSED [ 38%]
tests/unit/core/test_result.py::TestToolSuccess::test_success_creation PASSED [ 38%]
tests/unit/core/test_result.py::TestToolSuccess::test_success_with_metadata PASSED [ 38%]
tests/unit/core/test_result.py::TestToolSuccess::test_success_dump PASSED [ 38%]
tests/unit/core/test_result.py::TestToolError::test_error_creation PASSED [ 38%]
tests/unit/core/test_result.py::TestToolError::test_error_with_hint_and_details PASSED [ 39%]
tests/unit/core/test_result.py::TestHelperFactories::test_success_helper_adds_metadata PASSED [ 39%]
tests/unit/core/test_result.py::TestHelperFactories::test_success_helper_omits_empty_metadata PASSED [ 39%]
tests/unit/core/test_result.py::TestHelperFactories::test_failure_helper_full PASSED [ 39%]
tests/unit/core/test_result.py::TestHelperFactories::test_failure_helper_minimal PASSED [ 39%]
tests/unit/core/test_result.py::TestToolResultUnion::test_tool_result_accepts_success_or_error PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestContainerDetection::test_dockerenv_exists PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestContainerDetection::test_cgroup_contains_docker PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestContainerDetection::test_cgroup_contains_kubepods PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestContainerDetection::test_cgroup_other_content PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestContainerDetection::test_os_error_handling PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestSandboxExecutorWrapCmd::test_sandbox_disabled PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestSandboxExecutorWrapCmd::test_sandbox_mode_disabled PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestSandboxExecutorWrapCmd::test_host_mode_docker_not_available PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestSandboxExecutorWrapCmd::test_host_mode_success PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestSandboxExecutorWrapCmd::test_container_mode_capsh_available PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestSandboxExecutorWrapCmd::test_container_mode_capsh_not_available PASSED [ 39%]
tests/unit/core/test_sandbox.py::TestExecuteSubprocessAsyncSandbox::test_sandbox_enabled_container_mode_capsh_missing_user_kwargs PASSED [ 39%]
tests/unit/core/test_security.py::TestValidateFilePath::test_valid_file_in_workspace PASSED [ 39%]
tests/unit/core/test_security.py::TestValidateFilePath::test_file_outside_workspace PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_nonexistent_file PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_directory_instead_of_file PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_symlink_outside_workspace PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_path_traversal_attack PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_read_only_directory_access PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_workspace_attack_edge_case PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_reset_workspace_config PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_host_absolute_path_extracts_filename PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_relative_path_resolves_in_workspace PASSED [ 40%]
tests/unit/core/test_security.py::TestValidateFilePath::test_read_only_error_includes_allowed_dirs PASSED [ 40%]
tests/unit/core/test_server_endpoints.py::test_metrics_collector_tracks_tools PASSED [ 40%]
tests/unit/core/test_server_endpoints.py::test_track_metrics_decorator PASSED [ 40%]
tests/unit/core/test_server_main.py::test_server_main_stdio PASSED       [ 40%]
tests/unit/core/test_server_main.py::test_server_main_http PASSED        [ 40%]
tests/unit/core/test_task_queue.py::test_run_task_or_fallback_redis_disabled PASSED [ 40%]
tests/unit/core/test_task_queue.py::test_run_task_or_fallback_enqueue_and_await PASSED [ 40%]
tests/unit/core/test_task_queue.py::test_get_job_result_tool PASSED      [ 40%]
tests/unit/core/test_task_queue.py::test_worker_proxy_handlers PASSED    [ 41%]
tests/unit/core/test_thread_safety.py::test_metrics_collector_thread_safety PASSED [ 41%]
tests/unit/core/test_thread_safety.py::test_metrics_collector_concurrent_reset PASSED [ 41%]
tests/unit/core/test_thread_safety.py::test_track_metrics_sync_function PASSED [ 41%]
tests/unit/core/test_thread_safety.py::test_track_metrics_async_function PASSED [ 41%]
tests/unit/core/test_thread_safety.py::test_track_metrics_error_handling PASSED [ 41%]
tests/unit/core/test_thread_safety.py::test_track_metrics_async_error PASSED [ 41%]
tests/unit/core/test_thread_safety.py::test_metrics_concurrent_get_metrics PASSED [ 41%]
tests/unit/core/test_thread_safety.py::test_metrics_timing_accuracy PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateToolParameters::test_validate_tool_parameters_unknown_tool PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateToolParameters::test_validate_tool_parameters_dispatches_correctly PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateStringsParams::test_valid_params PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateStringsParams::test_invalid_min_length_type PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateStringsParams::test_invalid_min_length_value PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateStringsParams::test_invalid_max_output_size_type PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateStringsParams::test_invalid_max_output_size_value PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateRadare2Params::test_valid_params PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateRadare2Params::test_missing_r2_command PASSED [ 41%]
tests/unit/core/test_validators.py::TestValidateRadare2Params::test_invalid_r2_command_type PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateCapstoneParams::test_valid_params PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateCapstoneParams::test_invalid_offset_type PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateCapstoneParams::test_invalid_offset_value PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateCapstoneParams::test_invalid_size_type PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateCapstoneParams::test_invalid_size_value PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateYaraParams::test_valid_params PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateYaraParams::test_missing_rule_file PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateYaraParams::test_invalid_timeout_type PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateYaraParams::test_invalid_timeout_value PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateCfgParams::test_valid_params PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateCfgParams::test_invalid_function_address_type PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateCfgParams::test_invalid_format PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateEmulationParams::test_valid_params PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateEmulationParams::test_invalid_start_address_type PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateEmulationParams::test_invalid_instructions_type PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateEmulationParams::test_invalid_instructions_too_low PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidateEmulationParams::test_invalid_instructions_too_high PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidatePseudoCodeParams::test_valid_params PASSED [ 42%]
tests/unit/core/test_validators.py::TestValidatePseudoCodeParams::test_invalid_address_type PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidatePseudoCodeParams::test_invalid_timeout_type PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidatePseudoCodeParams::test_invalid_timeout_value PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateSignatureParams::test_valid_params PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateSignatureParams::test_missing_address PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateSignatureParams::test_invalid_address_type PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateSignatureParams::test_invalid_length_type PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateSignatureParams::test_invalid_length_value_too_low PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateSignatureParams::test_invalid_length_value_too_high PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateSignatureParams::test_invalid_timeout_type PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateSignatureParams::test_invalid_timeout_value PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateRttiParams::test_valid_params PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateRttiParams::test_invalid_timeout_type PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateRttiParams::test_invalid_timeout_value PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateDiffBinariesParams::test_valid_params PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateDiffBinariesParams::test_invalid_function_name_type PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateDiffBinariesParams::test_invalid_max_output_size PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateDiffBinariesParams::test_invalid_timeout PASSED [ 43%]
tests/unit/core/test_validators.py::TestValidateMatchLibrariesParams::test_valid_params PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateMatchLibrariesParams::test_invalid_max_output_size PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateMatchLibrariesParams::test_invalid_timeout PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateAddressFormat::test_valid_hex_address PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateAddressFormat::test_valid_symbol_name PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateAddressFormat::test_invalid_characters PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateDecompileParams::test_valid_params PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateDecompileParams::test_invalid_function_address_type PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateYaraGenerationParams::test_valid_params PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateYaraGenerationParams::test_invalid_function_address_type PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateYaraGenerationParams::test_invalid_byte_length_type PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateYaraGenerationParams::test_invalid_byte_length_zero PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateYaraGenerationParams::test_invalid_byte_length_too_large PASSED [ 44%]
tests/unit/core/test_validators.py::TestValidateYaraGenerationParams::test_invalid_rule_name_type PASSED [ 44%]
tests/unit/core/test_validators_extended.py::TestFileOperationsFinalPush::test_copy_to_workspace_basic PASSED [ 44%]
tests/unit/core/test_validators_extended.py::TestIOCToolsFinalPush::test_extract_iocs_emails PASSED [ 44%]
tests/unit/core/test_validators_extended.py::TestJsonUtilsFinalPush::test_dumps_complex PASSED [ 44%]
tests/unit/core/test_validators_extended.py::TestR2AnalysisFinalPush::test_extract_first_json_nested PASSED [ 44%]
tests/unit/core/test_validators_extended.py::TestDecompilationFinalPush::test_smart_decompile_detailed PASSED [ 44%]
tests/unit/core/test_validators_extended.py::TestSignatureToolsFinalPush::test_validate_address_or_fail_decimal PASSED [ 45%]
tests/unit/core/test_validators_extended.py::TestSignatureToolsFinalPush::test_format_hex_bytes_short PASSED [ 45%]
tests/unit/core/test_validators_extended.py::TestStaticAnalysisFinalPush::test_run_strings_detailed PASSED [ 45%]
tests/unit/core/test_validators_extended.py::TestValidatorsFinalPush::test_validate_address_format_hex_with_prefix PASSED [ 45%]
tests/unit/core/test_validators_extended.py::TestValidatorsFinalPush::test_validate_tool_parameters_radare2 PASSED [ 45%]
tests/unit/core/test_validators_extended.py::TestErrorFormattingFinalPush::test_format_error_with_timeout_error PASSED [ 45%]
tests/unit/core/test_validators_extended.py::TestErrorFormattingFinalPush::test_format_error_with_output_limit_error PASSED [ 45%]
tests/unit/test_dashboard.py::TestCSRFToken::test_generate_and_verify PASSED [ 45%]
tests/unit/test_dashboard.py::TestCSRFToken::test_verify_invalid PASSED  [ 45%]
tests/unit/test_dashboard.py::TestSanitizeForDisplay::test_clean_text PASSED [ 45%]
tests/unit/test_dashboard.py::TestSanitizeForDisplay::test_html_escape PASSED [ 45%]
tests/unit/test_dashboard.py::TestSanitizeForDisplay::test_max_length PASSED [ 45%]
tests/unit/test_dashboard.py::TestGetRouter::test_returns_router PASSED  [ 45%]
tests/unit/test_dashboard.py::TestGetStaticFiles::test_returns_static_files PASSED [ 45%]
tests/unit/test_dashboard.py::TestDashboardRoutes::test_dashboard_index PASSED [ 45%]
tests/unit/test_dashboard.py::TestDashboardRoutes::test_dashboard_analysis PASSED [ 45%]
tests/unit/tools/analysis/test_capa_tools.py::TestCapaAvailability::test_is_capa_available_returns_bool PASSED [ 45%]
tests/unit/tools/analysis/test_capa_tools.py::TestCapaAvailability::test_is_capa_available_true PASSED [ 45%]
tests/unit/tools/analysis/test_capa_tools.py::TestCapaAvailability::test_is_capa_available_false PASSED [ 46%]
tests/unit/tools/analysis/test_capa_tools.py::TestRunCapa::test_run_capa_not_installed PASSED [ 46%]
tests/unit/tools/analysis/test_capa_tools.py::TestRunCapa::test_run_capa_success PASSED [ 46%]
tests/unit/tools/analysis/test_capa_tools.py::TestRunCapa::test_run_capa_rules_load_failed PASSED [ 46%]
tests/unit/tools/analysis/test_capa_tools.py::TestRunCapa::test_run_capa_file_load_failed PASSED [ 46%]
tests/unit/tools/analysis/test_capa_tools.py::TestRunCapa::test_run_capa_general_exception PASSED [ 46%]
tests/unit/tools/analysis/test_capa_tools.py::TestRunCapaQuick::test_run_capa_quick_filters_high_risk PASSED [ 46%]
tests/unit/tools/analysis/test_capa_tools.py::TestRunCapaQuick::test_run_capa_quick_propagates_error PASSED [ 46%]
tests/unit/tools/analysis/test_capa_tools.py::TestHighRiskNamespaces::test_anti_analysis_is_high_risk PASSED [ 46%]
tests/unit/tools/analysis/test_capa_tools.py::TestHighRiskNamespaces::test_persistence_is_high_risk PASSED [ 46%]
tests/unit/tools/analysis/test_die_tools.py::TestAnalyzeBinaryWithLief::test_analyze_pe_amd64 PASSED [ 46%]
tests/unit/tools/analysis/test_die_tools.py::TestAnalyzeBinaryWithLief::test_analyze_elf_x64 PASSED [ 46%]
tests/unit/tools/analysis/test_die_tools.py::TestAnalyzeBinaryWithLief::test_analyze_macho_arm64 PASSED [ 46%]
tests/unit/tools/analysis/test_die_tools.py::TestAnalyzeBinaryWithLief::test_analyze_parse_none PASSED [ 46%]
tests/unit/tools/analysis/test_die_tools.py::TestAnalyzeBinaryWithLief::test_analyze_exception PASSED [ 46%]
tests/unit/tools/analysis/test_die_tools.py::TestDetectPacker::test_detect_packer_read_error PASSED [ 46%]
tests/unit/tools/analysis/test_die_tools.py::TestDetectPacker::test_detect_packer_success_packed PASSED [ 46%]
tests/unit/tools/analysis/test_die_tools.py::TestDetectPacker::test_detect_packer_success_non_packed PASSED [ 46%]
tests/unit/tools/analysis/test_die_tools.py::TestDetectPackerDeep::test_detect_packer_deep_success PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestExtractLibraryName::test_unknown_name PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestExtractLibraryName::test_import_prefix PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestExtractLibraryName::test_empty PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestExtractLibraryNameMore::test_kernel32 PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestExtractLibraryNameMore::test_libc PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestExtractLibraryNameMore::test_libstdcpp PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestDiffBinaries::test_success PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestDiffBinaries::test_with_function_filter PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestDiffBinaries::test_with_changes PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestAnalyzeVariantChanges::test_success PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestAnalyzeVariantChanges::test_top_n_filter PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestMatchLibraries::test_success PASSED [ 47%]
tests/unit/tools/analysis/test_diff_tools.py::TestMatchLibraries::test_with_signature_db PASSED [ 47%]
tests/unit/tools/analysis/test_emulation_tools.py::TestDetectBinaryType::test_detect_elf_x86_64 PASSED [ 47%]
tests/unit/tools/analysis/test_emulation_tools.py::TestDetectBinaryType::test_detect_pe_x86 PASSED [ 47%]
tests/unit/tools/analysis/test_emulation_tools.py::TestDetectBinaryType::test_detect_fallback_pe PASSED [ 47%]
tests/unit/tools/analysis/test_emulation_tools.py::TestEmulateBinary::test_emulate_binary_invalid_address PASSED [ 47%]
tests/unit/tools/analysis/test_emulation_tools.py::TestEmulateBinary::test_emulate_binary_qiling_not_installed PASSED [ 47%]
tests/unit/tools/analysis/test_emulation_tools.py::TestEmulateBinary::test_emulate_binary_success PASSED [ 48%]
tests/unit/tools/analysis/test_fuzz_tools.py::test_generate_fuzzing_harness_success PASSED [ 48%]
tests/unit/tools/analysis/test_fuzz_tools.py::test_generate_fuzzing_harness_unsupported_fuzzer PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractSections::test_no_sections PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractSections::test_with_sections PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_elf_all_mitigations PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_elf_partial_relro_flags_variant_b PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_elf_partial_relro_flags_variant_c PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_elf_no_mitigations PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_pe_all_mitigations PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_pe_no_mitigations PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_pe_exception_handling PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_general_exception_handled PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_elf_partial_relro_only PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractMitigations::test_extract_mitigations_elf_flags_exception PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractSymbols::test_no_imports_exports PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractSymbols::test_with_imports PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestExtractSymbols::test_pe_imports_exports PASSED [ 48%]
tests/unit/tools/analysis/test_lief_tools.py::TestFormatLiefOutput::test_json_format PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestFormatLiefOutput::test_text_format PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestFormatLiefOutput::test_format_lief_output_all_sections_and_limits PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_success PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_text_format PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_file_size_exceeds_max_allowed PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_file_size_exceeds_lief_limit PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_file_size_warning_truncated PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_concurrent_futures_timeout PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_concurrent_futures_broken_pool PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_concurrent_futures_general_exception PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_executor_setup_failure PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_timeout_terminates_processes PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_shutdown_on_success PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_shutdown_on_broken_pool PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestParseBinaryWithLief::test_shutdown_on_other_exceptions PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestRunLiefInProcess::test_run_lief_in_process_success_elf PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestRunLiefInProcess::test_run_lief_in_process_lief_parse_exception PASSED [ 49%]
tests/unit/tools/analysis/test_lief_tools.py::TestRunLiefInProcess::test_run_lief_in_process_unsupported_format PASSED [ 50%]
tests/unit/tools/analysis/test_patch_diff.py::test_patch_diff_1day_identical PASSED [ 50%]
tests/unit/tools/analysis/test_patch_diff.py::test_patch_diff_1day_different PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestValidateAddressOrFail::test_valid_hex PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestValidateAddressOrFail::test_invalid_address PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestFormatHexBytes::test_even_length PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestFormatHexBytes::test_odd_length PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestSanitizeFilenameForRule::test_simple_name PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestSanitizeFilenameForRule::test_with_dots PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateSignature::test_success FAILED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateSignature::test_all_zeros_fallback PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateSignature::test_invalid_address FAILED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateSignature::test_invalid_hex_bytes PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateYaraRule::test_success PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateYaraRule::test_invalid_rule_name PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateYaraRule::test_smart_offset_search_failure FAILED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateYaraRule::test_smart_offset_search_corrupt_json PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateEnhancedYaraRule::test_success_pe PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateEnhancedYaraRule::test_success_elf PASSED [ 50%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateEnhancedYaraRule::test_invalid_rule_name PASSED [ 51%]
tests/unit/tools/analysis/test_signature_tools.py::TestGenerateEnhancedYaraRule::test_empty_strings PASSED [ 51%]
tests/unit/tools/analysis/test_source_auditor.py::test_audit_source_code_c PASSED [ 51%]
tests/unit/tools/analysis/test_source_auditor.py::test_audit_source_code_python PASSED [ 51%]
tests/unit/tools/analysis/test_source_auditor.py::test_audit_source_code_python_syntax_error_fallback PASSED [ 51%]
tests/unit/tools/analysis/test_source_auditor.py::test_audit_source_code_file_too_large PASSED [ 51%]
tests/unit/tools/analysis/test_source_auditor.py::test_audit_source_code_size_check_os_error PASSED [ 51%]
tests/unit/tools/analysis/test_source_auditor.py::test_audit_source_code_read_exception PASSED [ 51%]
tests/unit/tools/analysis/test_source_auditor.py::test_audit_source_code_truncation PASSED [ 51%]
tests/unit/tools/analysis/test_source_auditor.py::test_source_auditor_plugin_register PASSED [ 51%]
tests/unit/tools/analysis/test_static_analysis.py::TestRunStrings::test_success PASSED [ 51%]
tests/unit/tools/analysis/test_static_analysis.py::TestRunStrings::test_not_found PASSED [ 51%]
tests/unit/tools/analysis/test_static_analysis.py::TestRunBinwalk::test_success PASSED [ 51%]
tests/unit/tools/analysis/test_static_analysis.py::TestScanForVersions::test_success PASSED [ 51%]
tests/unit/tools/analysis/test_static_analysis.py::TestExtractRttiInfo::test_success PASSED [ 51%]
tests/unit/tools/analysis/test_static_analysis.py::TestFormatSize::test_bytes PASSED [ 51%]
tests/unit/tools/analysis/test_static_analysis.py::TestFormatSize::test_kilobytes PASSED [ 51%]
tests/unit/tools/analysis/test_static_analysis.py::TestFormatSize::test_megabytes PASSED [ 51%]
tests/unit/tools/analysis/test_static_analysis.py::TestFormatSize::test_gigabytes PASSED [ 52%]
tests/unit/tools/analysis/test_static_analysis.py::TestRunStringsTruncated::test_truncated_output PASSED [ 52%]
tests/unit/tools/analysis/test_static_analysis.py::TestRunBinwalkExtract::test_success PASSED [ 52%]
tests/unit/tools/analysis/test_static_analysis.py::TestRunBinwalkExtract::test_binwalk_not_found PASSED [ 52%]
tests/unit/tools/analysis/test_static_analysis.py::TestScanForVersionsError::test_not_found PASSED [ 52%]
tests/unit/tools/analysis/test_static_analysis.py::TestExtractRttiInfoError::test_not_found PASSED [ 52%]
tests/unit/tools/analysis/test_symbolic_analysis.py::test_verify_path_satisfiable PASSED [ 52%]
tests/unit/tools/analysis/test_symbolic_analysis.py::test_verify_path_unsatisfiable PASSED [ 52%]
tests/unit/tools/analysis/test_symbolic_analysis.py::test_verify_path_with_start_addr PASSED [ 52%]
tests/unit/tools/analysis/test_symbolic_analysis.py::test_verify_path_json_error PASSED [ 52%]
tests/unit/tools/analysis/test_symbolic_analysis.py::test_verify_path_execution_error PASSED [ 52%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_valid PASSED [ 52%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_invalid PASSED [ 52%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_valid PASSED [ 52%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_unsupported PASSED [ 52%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_success_x86_64 PASSED [ 52%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_success_x86_32 PASSED [ 52%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_invalid_assembly PASSED [ 52%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_invalid_params PASSED [ 52%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_keystone_unavailable PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_module_imports_keystone_unavailable PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_module_imports_capstone_unavailable PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_capstone_v6_attribute_fallbacks PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[x86-16-KS_ARCH_X86-KS_MODE_16] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[x86-32-KS_ARCH_X86-KS_MODE_32] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[x86-64-KS_ARCH_X86-KS_MODE_64] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[arm-arm-KS_ARCH_ARM-KS_MODE_ARM] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[arm-thumb-KS_ARCH_ARM-KS_MODE_THUMB] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[arm-v8-KS_ARCH_ARM-KS_MODE_ARM + KS_MODE_V8] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[arm64-64-KS_ARCH_ARM64-KS_MODE_LITTLE_ENDIAN] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[arm64-big-KS_ARCH_ARM64-KS_MODE_BIG_ENDIAN] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[mips-32-KS_ARCH_MIPS-KS_MODE_MIPS32 + KS_MODE_LITTLE_ENDIAN] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[mips-64-KS_ARCH_MIPS-KS_MODE_MIPS64 + KS_MODE_LITTLE_ENDIAN] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[mips-32 big-KS_ARCH_MIPS-KS_MODE_MIPS32 + KS_MODE_BIG_ENDIAN] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[mips-64 be-KS_ARCH_MIPS-KS_MODE_MIPS64 + KS_MODE_BIG_ENDIAN] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[sparc-32-KS_ARCH_SPARC-KS_MODE_32] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[sparc-64-KS_ARCH_SPARC-KS_MODE_64] PASSED [ 53%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[sparc-32 big-KS_ARCH_SPARC-KS_MODE_32 + KS_MODE_BIG_ENDIAN] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[sparc-64 be-KS_ARCH_SPARC-KS_MODE_64 + KS_MODE_BIG_ENDIAN] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[ppc-64-KS_ARCH_PPC-KS_MODE_64] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[ppc-32-KS_ARCH_PPC-KS_MODE_32] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[ppc-64 big-KS_ARCH_PPC-KS_MODE_64 + KS_MODE_BIG_ENDIAN] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[ppc-32 be-KS_ARCH_PPC-KS_MODE_32 + KS_MODE_BIG_ENDIAN] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_keystone_params_all_architectures[systemz-32-KS_ARCH_SYSTEMZ-KS_MODE_32] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[x86-16-CS_ARCH_X86-CS_MODE_16] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[x86-32-CS_ARCH_X86-CS_MODE_32] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[x86-64-CS_ARCH_X86-CS_MODE_64] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[arm-thumb-CS_ARCH_ARM-CS_MODE_THUMB] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[arm-arm-CS_ARCH_ARM-CS_MODE_ARM] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[arm64-64-CS_ARCH_ARM64-CS_MODE_ARM] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[arm64-big-CS_ARCH_ARM64-CS_MODE_BIG_ENDIAN] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[mips-32-CS_ARCH_MIPS-CS_MODE_MIPS32 + CS_MODE_LITTLE_ENDIAN] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[mips-64-CS_ARCH_MIPS-CS_MODE_MIPS64 + CS_MODE_LITTLE_ENDIAN] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[mips-32 big-CS_ARCH_MIPS-CS_MODE_MIPS32 + CS_MODE_BIG_ENDIAN] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[sparc-32-CS_ARCH_SPARC-CS_MODE_32] PASSED [ 54%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[sparc-64-CS_ARCH_SPARC-CS_MODE_64] PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[sparc-32 big-CS_ARCH_SPARC-CS_MODE_32 + CS_MODE_BIG_ENDIAN] PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[ppc-64-CS_ARCH_PPC-CS_MODE_64] PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[ppc-32-CS_ARCH_PPC-CS_MODE_32] PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[ppc-64 big-CS_ARCH_PPC-CS_MODE_64 + CS_MODE_BIG_ENDIAN] PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_get_capstone_params_all_architectures[systemz-32-CS_ARCH_SYSZ-CS_MODE_32] PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_keystone_init_kserror PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_empty_encoding_new PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_generic_exception_new PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_decimal_base_address PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_capstone_missing PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_capstone_unsupported_mode PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_capstone_no_instructions_new PASSED [ 55%]
tests/unit/tools/common/test_assembler.py::test_assemble_instructions_capstone_cserror_new PASSED [ 55%]
tests/unit/tools/common/test_cli_tools_additional.py::test_run_file_success PASSED [ 55%]
tests/unit/tools/common/test_cli_tools_additional.py::test_run_file_tool_not_found PASSED [ 55%]
tests/unit/tools/common/test_cli_tools_additional.py::test_run_strings_timeout PASSED [ 55%]
tests/unit/tools/common/test_cli_tools_additional.py::test_run_strings_called_process_error PASSED [ 55%]
tests/unit/tools/common/test_cli_tools_additional.py::test_run_binwalk_success PASSED [ 55%]
tests/unit/tools/common/test_cli_tools_additional.py::test_run_binwalk_called_process_error PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_additional.py::test_run_radare2_success PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_additional.py::test_run_radare2_tool_not_found PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_generate_signature_success PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_generate_signature_invalid_length PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_generate_signature_invalid_address PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_generate_signature_extraction_failed PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_extract_rtti_info_success PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_extract_rtti_info_no_results PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_analyze_xrefs_success PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_analyze_xrefs_invalid_type PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_diff_binaries_success PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_match_libraries_success PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_mocked.py::TestCliToolsMocked::test_match_libraries_parse_error PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_more.py::test_run_radare2_invalid_command_sanitization PASSED [ 56%]
tests/unit/tools/common/test_cli_tools_more.py::test_run_strings_validation_error PASSED [ 56%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestCopyToWorkspace::test_copy_to_workspace_success PASSED [ 56%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestCopyToWorkspace::test_copy_to_workspace_custom_name PASSED [ 56%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestCopyToWorkspace::test_copy_to_workspace_nonexistent_file PASSED [ 57%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestCopyToWorkspace::test_copy_to_workspace_directory PASSED [ 57%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestCopyToWorkspace::test_copy_to_workspace_file_exists PASSED [ 57%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestCopyToWorkspace::test_copy_to_workspace_dangerous_destination_name PASSED [ 57%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestCopyToWorkspace::test_copy_to_workspace_large_file PASSED [ 57%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestCopyToWorkspace::test_copy_to_workspace_expanduser PASSED [ 57%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestListWorkspace::test_list_workspace_empty PASSED [ 57%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestListWorkspace::test_list_workspace_with_files PASSED [ 57%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestListWorkspace::test_list_workspace_ignores_directories PASSED [ 57%]
tests/unit/tools/common/test_copy_workspace_tools.py::TestListWorkspace::test_list_workspace_with_subdirectory_files PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestRunFile::test_success PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestRunFile::test_executable_detection PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestCopyToWorkspace::test_success PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestCopyToWorkspace::test_destination_name PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestCopyToWorkspace::test_nonexistent_source PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestCopyToWorkspace::test_source_is_directory PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestCopyToWorkspace::test_file_exists_error PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestListWorkspace::test_empty_workspace PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestListWorkspace::test_with_files PASSED [ 57%]
tests/unit/tools/common/test_file_operations.py::TestScanWorkspace::test_empty PASSED [ 58%]
tests/unit/tools/common/test_file_operations.py::TestScanWorkspace::test_with_files PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestGhostTraceMain::test_ghost_trace_basic_flow SKIPPED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestGhostTraceMain::test_ghost_trace_with_hooks SKIPPED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestGhostTraceMain::test_validate_r2_identifier_valid SKIPPED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestGhostTraceMain::test_validate_r2_identifier_with_special SKIPPED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestGhostTraceMain::test_get_file_cache_key SKIPPED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestFileOperationsMain::test_run_file_command PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestFileOperationsMain::test_list_workspace PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestFileOperationsMain::test_scan_workspace PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestStaticAnalysisMain::test_run_strings_basic PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestStaticAnalysisMain::test_run_binwalk_basic PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestStaticAnalysisMain::test_scan_for_versions PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestStaticAnalysisMain::test_extract_rtti_info PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestDiffToolsMain::test_diff_binaries PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestDiffToolsMain::test_analyze_variant_changes PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestDiffToolsMain::test_match_libraries PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestIocToolsMain::test_extract_iocs PASSED [ 58%]
tests/unit/tools/common/test_file_operations_extended.py::TestTrinityDefenseMain::test_trinity_defense SKIPPED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestAdaptiveVaccineMain::test_adaptive_vaccine PASSED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestYaraToolsMain::test_run_yara PASSED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestYaraToolsMain::test_generate_yara_rule PASSED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestSignatureToolsMain::test_generate_signature PASSED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestR2PoolMain::test_pool_initialization PASSED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestR2PoolMain::test_pool_multiple_instances PASSED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestR2AnalysisMain::test_run_radare2_basic PASSED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestR2AnalysisMain::test_trace_execution_path PASSED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestDecompilationMain::test_get_pseudo_code PASSED [ 59%]
tests/unit/tools/common/test_file_operations_extended.py::TestDecompilationMain::test_smart_decompile PASSED [ 59%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_create_memory_session PASSED [ 59%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_save_memory_item PASSED [ 59%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_recall_memory_item PASSED [ 59%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_create_memory_session_with_binary PASSED [ 59%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_list_memory_sessions PASSED [ 59%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_get_memory_session_detail PASSED [ 59%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_get_memory_session_detail_not_found PASSED [ 59%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_resume_memory_session_by_id PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_resume_memory_session_by_binary PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_resume_memory_session_not_found PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_complete_memory_session PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_complete_memory_session_not_found PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_save_pattern PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_find_similar_patterns PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_find_similar_patterns_none PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_get_relevant_context PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_get_relevant_context_none PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_update_memory_session_time PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_update_memory_session_time_error PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_create_memory_session_with_binary_hash_failure PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_db_initialization_failure PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_resume_memory_session_missing_id_key PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_resume_memory_session_missing_name_key PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_resume_memory_session_missing_context_memories PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_get_memory_session_detail_missing_context_keys PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_create_memory_session_name_none PASSED [ 60%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_create_memory_session_with_directory_path PASSED [ 61%]
tests/unit/tools/common/test_memory_tools.py::TestMemoryToolsPlugin::test_save_memory_item_invalid_importance PASSED [ 61%]
tests/unit/tools/common/test_memory_tools.py::TestRegisterMemoryTools::test_registration PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateExplanation::test_identical_code PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateExplanation::test_different_code PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateExplanation::test_security_check_added PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateExplanation::test_api_replacement_strcpy PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateExplanation::test_api_replacement_sprintf PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateExplanation::test_api_replacement_gets PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateExplanation::test_api_replacement_memcpy PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateExplanation::test_integer_overflow_check PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateExplanation::test_logic_removal PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateDiffSnippet::test_identical PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateDiffSnippet::test_different PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestGenerateDiffSnippet::test_context_lines PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestExplainPatch::test_success_with_heuristics_and_ctx PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestExplainPatch::test_explain_patch_specific_function PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestExplainPatch::test_diff_fails PASSED [ 61%]
tests/unit/tools/common/test_patch_explainer.py::TestExplainPatch::test_no_changes_deserialized PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestExplainPatch::test_no_changes_none PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestExplainPatch::test_no_functions_found PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestExplainPatch::test_decompilation_failure PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_extreme_length_decompilation PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_empty_or_whitespace_decompilation PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_malformed_lines_and_weird_formatting PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_explain_patch_malformed_diff_data_types PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_explain_patch_malformed_changes_elements PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_explain_patch_unhashable_address PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_explain_patch_non_string_pseudo_c PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_explain_patch_whitespace_and_invalid_function_name PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_explain_patch_empty_or_whitespace_diff_data PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_explain_patch_invalid_json_diff PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_explain_patch_validation_error PASSED [ 62%]
tests/unit/tools/common/test_patch_explainer.py::TestPatchExplainerStress::test_explain_patch_null_changes PASSED [ 62%]
tests/unit/tools/common/test_server_tools.py::TestFormatUptime::test_seconds PASSED [ 62%]
tests/unit/tools/common/test_server_tools.py::TestFormatUptime::test_minutes PASSED [ 62%]
tests/unit/tools/common/test_server_tools.py::TestFormatUptime::test_hours PASSED [ 63%]
tests/unit/tools/common/test_server_tools.py::TestFormatUptime::test_days PASSED [ 63%]
tests/unit/tools/common/test_server_tools.py::TestServerToolsPlugin::test_plugin_metadata PASSED [ 63%]
tests/unit/tools/common/test_server_tools.py::TestServerToolsPlugin::test_registration PASSED [ 63%]
tests/unit/tools/common/test_server_tools.py::TestServerToolsPlugin::test_get_server_status PASSED [ 63%]
tests/unit/tools/common/test_server_tools.py::TestServerToolsPlugin::test_get_tool_metrics PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestR2PoolFinal::test_r2_pool_get_async_lock PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestIOCToolsFinal::test_extract_iocs_with_hashes PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestAdaptiveVaccineFinal::test_adaptive_vaccine_helpers PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestStaticAnalysisFinal::test_run_binwalk_basic PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestJsonUtilsFinal::test_json_dumps_bytes PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestR2AnalysisFinal::test_trace_execution_path PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestDiffToolsFinal::test_extract_library_name_complex PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestDormantDetectorFinal::test_dormant_detector_basic PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestYaraToolsFinal::test_format_match_with_empty_strings PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestVulnerabilityHunterFinal::test_vulnerability_hunter_basic PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestDecompilationFinal::test_smart_decompile_basic PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestSignatureToolsFinal::test_generate_signature_basic PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestCoreFinal::test_get_validation_hint PASSED [ 63%]
tests/unit/tools/common/test_tools_edge_cases.py::TestCoreFinal::test_timeout_error_properties PASSED [ 64%]
tests/unit/tools/common/test_tools_edge_cases.py::TestCoreFinal::test_output_limit_error_properties PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestAdaptiveVaccineHelpers::test_register_adaptive_vaccine PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestAdaptiveVaccineMain::test_adaptive_vaccine_basic PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestDiffToolsExtractLibraryName::test_extract_library_name_basic PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestDiffToolsExtractLibraryName::test_extract_library_name_no_prefix PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestDiffToolsDiffBinaries::test_diff_binaries_same_file PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestDormantDetectorRegister::test_register_dormant_detector PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestDormantDetectorMain::test_dormant_detector_basic PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestIOCToolsExtract::test_extract_iocs_basic PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestR2ConnectionPoolBasics::test_r2_connection_pool_initialization PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestJsonUtilsLoads::test_loads_valid_json PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestJsonUtilsLoads::test_loads_array PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestJsonUtilsDumps::test_dumps_dict PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestJsonUtilsDumps::test_dumps_list PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestStaticAnalysisBinwalkExtract::test_run_binwalk_extract_basic PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestYaraToolsFormatMatch::test_format_yara_match_basic PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestYaraToolsRunYara::test_run_yara_basic PASSED [ 64%]
tests/unit/tools/common/test_tools_integration.py::TestSignatureToolsMain::test_generate_signature PASSED [ 65%]
tests/unit/tools/common/test_tools_integration.py::TestDecompilationMain::test_smart_decompile PASSED [ 65%]
tests/unit/tools/common/test_tools_integration.py::TestFileOperationsMain::test_run_file PASSED [ 65%]
tests/unit/tools/common/test_tools_integration.py::TestR2AnalysisMain::test_run_radare2 PASSED [ 65%]
tests/unit/tools/common/test_tools_integration.py::TestLiefToolsMain::test_parse_binary_with_lief PASSED [ 65%]
tests/unit/tools/common/test_tools_integration.py::TestResourcesMain::test_resources_import PASSED [ 65%]
tests/unit/tools/common/test_tools_integration.py::TestAdditionalEdgeCases::test_multiple_tool_registrations PASSED [ 65%]
tests/unit/tools/common/test_tools_integration.py::TestAdditionalEdgeCases::test_result_types PASSED [ 65%]
tests/unit/tools/common/test_tools_integration.py::TestAdditionalEdgeCases::test_exception_types PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_collect_success PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_collect_empty_input PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_collect_invalid_type PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_collect_all_types PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_collect_non_dict_skipped PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_correlate_ioc_success PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_correlate_ioc_empty PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_correlate_ioc_no_flags PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_generate_yara_success PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_generate_yara_saves_file PASSED [ 65%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_generate_yara_empty PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_generate_yara_insufficient_patterns PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_timeline_asc PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_timeline_desc PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_timeline_empty PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_timeline_invalid_order PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_timeline_pivot_points PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_timeline_no_timestamps PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_report_success PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_report_saves_file PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_report_empty PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_report_severity_levels PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_correlate_ioc_error PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_correlate_domain_and_hash PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_generate_yara_uncovered_paths PASSED [ 66%]
tests/unit/tools/forensics/test_artifact_tools.py::test_artifact_report_include_yara_uncovered PASSED [ 66%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_list_partition_success PASSED [ 66%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_list_partition_no_tsk PASSED [ 66%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_list_partition_invalid_image PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_list_partition_tsk_error PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_list_files_success PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_list_files_no_tsk PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_list_files_tsk_error PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_list_files_empty PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_recover_deleted_success PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_recover_deleted_no_tsk PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_recover_deleted_icat_fails PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_recover_deleted_empty_inode PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_analyze_mft_success PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_analyze_mft_no_tsk PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_analyze_mft_non_ntfs PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_hash_verify_match PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_hash_verify_mismatch PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_hash_verify_no_expected PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_hash_verify_invalid_algorithm PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_hash_verify_md5 PASSED [ 67%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_check_tsk_available_real PASSED [ 68%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_run_tsk_real PASSED [ 68%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_run_tsk_uncovered PASSED [ 68%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_recover_deleted_icat_missing PASSED [ 68%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_list_files_options PASSED [ 68%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_recover_deleted_offset PASSED [ 68%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_analyze_mft_offset PASSED [ 68%]
tests/unit/tools/forensics/test_disk_tools.py::test_disk_extract_file_success PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_list_symbols_success PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_list_symbols_no_vol PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_list_symbols_invalid_path PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_analyze_help PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_analyze_pslist_success PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_analyze_invalid_plugin PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_analyze_vol_not_found PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_analyze_timeout PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_list_processes_success PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_list_processes_no_hidden PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_list_processes_vol_missing PASSED [ 68%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_detect_injections_clean PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_detect_injections_found PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_detect_injections_vol_error PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_extract_strings_success PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_extract_strings_large_file PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_extract_strings_no_strings PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_dump_module_process_not_found PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_dump_module_success PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_vol3_errors PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_analyze_task_queue_fallback PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_analyze_args_and_runtime_error PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_list_processes_errors PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_detect_injections_task_queue_fallback_and_dependency_missing PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_extract_strings_no_binary PASSED [ 69%]
tests/unit/tools/forensics/test_memory_tools.py::test_memory_dump_module_module_name_and_exceptions PASSED [ 69%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_analyze_success PASSED [ 69%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_analyze_no_scapy PASSED [ 69%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_analyze_empty_pcap PASSED [ 69%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_analyze_invalid_file PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_analyze_nonexistent_path PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_list_connections_success PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_list_connections_no_scapy PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_dns_no_dns_packets PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_dns_empty_pcap PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_dns_no_scapy PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_c2_no_beacons PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_c2_empty_pcap PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_c2_suspicious_port PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_reconstruct_stream_no_match PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_reconstruct_stream_no_scapy PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_import_scapy_error PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_analyze_various_protocols PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_rdpcap_parse_errors PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_list_connections_uncovered_paths PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_dns_uncovered_paths PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_c2_beacon_detected PASSED [ 70%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_reconstruct_stream_success PASSED [ 71%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_import_scapy_success PASSED [ 71%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_dns_parse_errors PASSED [ 71%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_c2_no_scapy PASSED [ 71%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_extract_c2_empty_intervals PASSED [ 71%]
tests/unit/tools/forensics/test_network_tools.py::test_pcap_reconstruct_stream_truncation PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestEscapeYaraMeta::test_escapes_backslash PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestEscapeYaraMeta::test_escapes_quote PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestEscapeYaraMeta::test_escapes_both PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestValidateThreatReport::test_valid_dict PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestValidateThreatReport::test_invalid_type PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestValidateThreatReport::test_default_values PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestValidateThreatReport::test_sanitizes_function_name PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestValidateThreatReport::test_invalid_address_fallback PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestValidateThreatReport::test_long_instruction_truncated PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestValidateThreatReport::test_non_string_values PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestSanitizeYaraString::test_removes_control_chars PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestSanitizeYaraString::test_escapes_quotes PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestSanitizeYaraString::test_truncates_long_string PASSED [ 71%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestSanitizeYaraString::test_empty_string PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestHexToYaraBytes::test_simple_hex PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestHexToYaraBytes::test_pads_odd_length PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestHexToYaraBytes::test_big_endian_arch PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestHexToYaraBytes::test_invalid_hex_fallback PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestHexToYaraBytes::test_little_endian_x86 PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestHexToYaraBytes::test_little_endian_arm PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestGenerateYaraRule::test_basic_rule PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestGenerateYaraRule::test_numeric_function_name PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestGenerateYaraRule::test_no_hex_patterns PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestGenerateYaraRule::test_string_literals PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestGenerateYaraRule::test_long_hex_pattern_truncated PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitecture::test_pe_i386 PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitecture::test_pe_amd64 PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitecture::test_elf_x86_64 PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitecture::test_parse_failure PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitecture::test_none_binary PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestAdaptiveVaccineMain::test_yara_action PASSED [ 72%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestAdaptiveVaccineMain::test_invalid_action PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestAdaptiveVaccineMain::test_invalid_threat_report_type PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestAdaptiveVaccineMain::test_patch_action_no_file_path PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestAdaptiveVaccineMain::test_both_action PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestAdaptiveVaccineMain::test_arch_detection_failure_uses_default PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestAdaptiveVaccineMain::test_patch_action_dry_run_with_ctx PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestAdaptiveVaccineMain::test_patch_action_apply_with_ctx PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestAdaptiveVaccineMain::test_patch_action_failure PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestRegisterAdaptiveVaccine::test_register PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestCreateBinaryPatch::test_create_patch_dry_run_success PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestCreateBinaryPatch::test_create_patch_actual_success PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestCreateBinaryPatch::test_create_patch_invalid_address PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestCreateBinaryPatch::test_create_patch_va_to_offset_fail PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestCreateBinaryPatch::test_create_patch_read_file_fail PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestCreateBinaryPatch::test_create_patch_capstone_unavailable PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestCreateBinaryPatch::test_create_patch_disassembly_empty PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestCreateBinaryPatch::test_create_patch_disassembly_error PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestCreateBinaryPatch::test_create_patch_rollback_logic PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestVaToFileOffset::test_va_to_file_offset_pe_mocked PASSED [ 73%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestVaToFileOffset::test_va_to_file_offset_elf_mocked PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestVaToFileOffset::test_va_to_file_offset_unmocked_pe PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestVaToFileOffset::test_va_to_file_offset_unmocked_elf PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestVaToFileOffset::test_va_to_file_offset_unmocked_failures PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitectureExtra::test_detect_arch_pe_machine_types_header PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitectureExtra::test_detect_arch_elf_string_matches PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitectureExtra::test_detect_arch_elf_arch_attributes PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitectureExtra::test_detect_arch_unmocked_pe PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitectureExtra::test_detect_arch_unmocked_elf PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestDetectArchitectureExtra::test_detect_arch_unmocked_process_failure PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestLiefVaccineWorkerAndMockChecking::test_run_lief_vaccine_worker_pe PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestLiefVaccineWorkerAndMockChecking::test_run_lief_vaccine_worker_elf PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestLiefVaccineWorkerAndMockChecking::test_run_lief_vaccine_worker_none_or_exception PASSED [ 74%]
tests/unit/tools/malware/test_adaptive_vaccine.py::TestLiefVaccineWorkerAndMockChecking::test_is_lief_mocked_variants PASSED [ 74%]
tests/unit/tools/malware/test_dormant_detector.py::TestExtractJsonSafely::test_empty_string PASSED [ 74%]
tests/unit/tools/malware/test_dormant_detector.py::TestExtractJsonSafely::test_none_input PASSED [ 74%]
tests/unit/tools/malware/test_dormant_detector.py::TestExtractJsonSafely::test_valid_json PASSED [ 74%]
tests/unit/tools/malware/test_dormant_detector.py::TestExtractJsonSafely::test_invalid_json PASSED [ 74%]
tests/unit/tools/malware/test_dormant_detector.py::TestExtractJsonSafely::test_json_with_whitespace PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestValidateR2Identifier::test_valid_hex_address PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestValidateR2Identifier::test_valid_symbol PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestValidateR2Identifier::test_valid_function_name PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestValidateR2Identifier::test_invalid_injection_attempt PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestValidateR2Identifier::test_invalid_backtick PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestValidateR2Identifier::test_invalid_dollar PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestValidateR2Identifier::test_invalid_pipe PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestValidateR2Identifier::test_empty_string PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFileCacheKey::test_generates_key PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFileCacheKey::test_different_files_different_keys PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFileCacheKey::test_nonexistent_file PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFunctionsToTuple::test_empty_list PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFunctionsToTuple::test_single_function PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFunctionsToTuple::test_multiple_functions PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFunctionsToTuple::test_missing_fields PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFindOrphanFunctions::test_finds_orphan PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFindOrphanFunctions::test_skips_imports PASSED [ 75%]
tests/unit/tools/malware/test_dormant_detector.py::TestFindOrphanFunctions::test_skips_main_and_entry PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestFindOrphanFunctions::test_small_functions_skipped PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestDormantDetectorEntryPoint::test_register_dormant_detector PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestCheckGameContext::test_no_lief_returns_default PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestCheckGameContext::test_lief_detects_game_lib PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestCheckGameContext::test_lief_parse_failure PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestDormantDetectorMain::test_discovery_phase PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestDormantDetectorMain::test_emulation_phase PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestDormantDetectorMain::test_json_parse_failure PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestDormantDetectorMain::test_game_context_adjusts_confidence PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestIdentifyConditionalPaths::test_empty_functions PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestIdentifyConditionalPaths::test_with_function PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestIdentifyConditionalPaths::test_identify_conditional_paths_simple_values_filtering PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestIdentifyConditionalPaths::test_identify_conditional_paths_heuristics PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestVerifyHypothesisWithEmulation::test_emulation_success PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestVerifyHypothesisWithEmulation::test_emulation_validation_errors PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestVerifyHypothesisWithEmulation::test_emulation_parse_failure PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestDormantDetectorGameContextFallback::test_check_game_context_with_lief_mocked PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestDormantDetectorCoverageAdditions::test_run_r2_cmd_direct_uncached PASSED [ 76%]
tests/unit/tools/malware/test_dormant_detector.py::TestDormantDetectorCoverageAdditions::test_dormant_detector_fallback_parse PASSED [ 77%]
tests/unit/tools/malware/test_dormant_detector.py::TestDormantDetectorCoverageAdditions::test_dormant_detector_context_reporting_and_suppression PASSED [ 77%]
tests/unit/tools/malware/test_dormant_detector_standalone.py::TestGhostTraceStandalone::test_discovery PASSED [ 77%]
tests/unit/tools/malware/test_dormant_detector_standalone.py::TestGhostTraceStandalone::test_emulation PASSED [ 77%]
tests/unit/tools/malware/test_extract_iocs.py::test_extract_iocs_basic PASSED [ 77%]
tests/unit/tools/malware/test_extract_iocs.py::test_extract_iocs_empty PASSED [ 77%]
tests/unit/tools/malware/test_extract_iocs.py::test_extract_iocs_file PASSED [ 77%]
tests/unit/tools/malware/test_extract_iocs.py::test_extract_iocs_options PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocs::test_extract_ips PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocs::test_extract_urls PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocs::test_extract_hashes PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocs::test_no_iocs PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocs::test_from_file PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocs::test_path_traversal PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_no_input_returns_missing_input_error PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_default_args_returns_missing_input PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_file_path_too_large PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_file_path_read_error PASSED [ 77%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_json_input_with_data_string PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_json_input_with_data_dict PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_json_input_with_content_list PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_json_input_with_content_string PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_invalid_json_treated_as_raw_text PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_text_as_file_path_legacy PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_large_text_single_huge_line_truncated PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_large_text_multiline_filtering PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_selective_extraction_ips_only PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_limit_caps_results PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_extract_cves PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_extract_mac_addresses PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_extract_sha256 PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_extract_emails PASSED [ 78%]
tests/unit/tools/malware/test_ioc_tools.py::TestExtractIocsEdgeCases::test_ioc_count_reported PASSED [ 78%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestDangerousAPIDatabase::test_critical_apis_defined PASSED [ 78%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestDangerousAPIDatabase::test_api_has_required_fields PASSED [ 78%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestDangerousAPIDatabase::test_severity_values_valid PASSED [ 78%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestUserInputSources::test_network_sources_included PASSED [ 78%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestUserInputSources::test_file_sources_included PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestUserInputSources::test_environment_sources_included PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestRecommendations::test_get_recommendation_buffer_overflow PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestRecommendations::test_get_recommendation_command_injection PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestRecommendations::test_get_recommendation_unknown PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestRecommendations::test_generate_recommendations_limits_to_10 PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestYaraGeneration::test_generate_yara_strings PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestYaraGeneration::test_generate_yara_strings_limits PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestVulnerabilityHunterEntryPoint::test_vulnerability_hunter_invalid_path PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestGenerateVulnerabilityYaraRules::test_generates_rules_with_api_strings PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestGenerateVulnerabilityYaraRules::test_limits_to_5_rules PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestGenerateVulnerabilityYaraRules::test_ignores_non_matching_categories PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestDataStructures::test_dangerous_apis_all_have_required_fields PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestDataStructures::test_user_input_sources_completeness PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestVulnerabilityHunterMain::test_json_parse_failure PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestVulnerabilityHunterMain::test_empty_functions_returns_error PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestVulnerabilityHunterMain::test_success_with_no_vulns PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestVulnerabilityHunterMain::test_auto_dynamic_verify_integration PASSED [ 79%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestMalwareToolsPlugin::test_plugin_name PASSED [ 80%]
tests/unit/tools/malware/test_vulnerability_hunter.py::TestMalwareToolsPlugin::test_plugin_description PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestFormatYaraMatch::test_basic_match PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestFormatYaraMatch::test_match_with_modern_api PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestFormatYaraMatch::test_match_with_matched_data_string PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestFormatYaraMatch::test_match_with_none_matched_data PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestFormatYaraMatch::test_match_with_none_offset PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestFormatYaraMatch::test_match_legacy_tuple_api PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestFormatYaraMatch::test_match_no_strings_attribute PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_yara_not_installed_returns_dependency_missing PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_no_matches_returns_empty PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_successful_match PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_cached_rules_used_on_second_call PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_cache_eviction_at_100_entries PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_compile_fallback_to_source PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_compile_and_source_fallback_both_fail PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_scan_timeout_returns_timeout_error PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_scan_error_triggers_memory_fallback PASSED [ 80%]
tests/unit/tools/malware/test_yara_tools.py::TestRunYara::test_large_file_skips_memory_fallback PASSED [ 81%]
tests/unit/tools/radare2/test_cfg_tools.py::test_radare2_json_to_mermaid_basic PASSED [ 81%]
tests/unit/tools/radare2/test_cfg_tools.py::test_radare2_json_to_mermaid_empty PASSED [ 81%]
tests/unit/tools/radare2/test_cfg_tools.py::test_radare2_json_to_mermaid_invalid_json PASSED [ 81%]
tests/unit/tools/radare2/test_cfg_tools.py::test_radare2_json_to_mermaid_long_block PASSED [ 81%]
tests/unit/tools/radare2/test_cfg_tools.py::test_generate_function_graph_validation_error PASSED [ 81%]
tests/unit/tools/radare2/test_cfg_tools.py::test_generate_function_graph_json_format PASSED [ 81%]
tests/unit/tools/radare2/test_cfg_tools.py::test_generate_function_graph_mermaid_format PASSED [ 81%]
tests/unit/tools/radare2/test_cfg_tools.py::test_generate_function_graph_invalid_address PASSED [ 81%]
tests/unit/tools/radare2/test_cfg_tools.py::test_generate_function_graph_dot_format PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_parse_register_state_basic PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_parse_register_state_empty PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_parse_register_state_malformed PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_parse_register_state_with_spaces PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_emulate_machine_code_validation_error PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_emulate_machine_code_invalid_address PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_emulate_machine_code_success PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_emulate_machine_code_empty_registers PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_emulate_machine_code_default_instructions PASSED [ 81%]
tests/unit/tools/radare2/test_emulation_tools.py::test_emulate_machine_code_hex_address PASSED [ 82%]
tests/unit/tools/radare2/test_emulation_tools.py::test_emulate_machine_code_symbol_address PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestCleanSymbolName::test_empty PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestCleanSymbolName::test_remove_prefixes PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestCleanSymbolName::test_lowercase PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestFuzzyMatchSymbol::test_exact_match PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestFuzzyMatchSymbol::test_no_match PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestFindBestSymbolMatch::test_exact_match PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestFindBestSymbolMatch::test_no_match PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestRadare2JsonToMermaid::test_empty PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestRadare2JsonToMermaid::test_with_nodes PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestRunRadare2::test_success PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestTraceExecutionPath::test_success PASSED [ 82%]
tests/unit/tools/radare2/test_r2_analysis.py::TestAnalyzeXrefs::test_success PASSED [ 82%]
tests/unit/tools/radare2/test_r2_db.py::TestR2ListStructures::test_empty_db_returns_empty_list PASSED [ 82%]
tests/unit/tools/radare2/test_r2_db.py::TestR2ListStructures::test_returns_created_structure PASSED [ 82%]
tests/unit/tools/radare2/test_r2_db.py::TestR2GetStructure::test_not_found_returns_error PASSED [ 82%]
tests/unit/tools/radare2/test_r2_db.py::TestR2GetStructure::test_returns_correct_struct PASSED [ 82%]
tests/unit/tools/radare2/test_r2_db.py::TestR2CreateStructure::test_creates_structure_successfully PASSED [ 83%]
tests/unit/tools/radare2/test_r2_db.py::TestR2CreateStructure::test_invalid_name_returns_error PASSED [ 83%]
tests/unit/tools/radare2/test_r2_db.py::TestR2CreateStructure::test_upsert_replaces_existing PASSED [ 83%]
tests/unit/tools/radare2/test_r2_db.py::TestR2Bookmarks::test_empty_db_returns_no_bookmarks PASSED [ 83%]
tests/unit/tools/radare2/test_r2_db.py::TestR2Bookmarks::test_add_and_list_bookmark PASSED [ 83%]
tests/unit/tools/radare2/test_r2_db.py::TestR2Bookmarks::test_filter_by_category PASSED [ 83%]
tests/unit/tools/radare2/test_r2_db.py::TestR2Bookmarks::test_empty_comment_returns_error PASSED [ 83%]
tests/unit/tools/radare2/test_r2_db.py::TestR2ReadMemory::test_success_returns_bytes PASSED [ 83%]
tests/unit/tools/radare2/test_r2_db.py::TestR2ReadMemory::test_size_too_large_returns_error PASSED [ 83%]
tests/unit/tools/radare2/test_r2_db.py::TestR2ReadMemory::test_size_zero_returns_error PASSED [ 83%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateIdentifier::test_valid_hex_address PASSED [ 83%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateIdentifier::test_valid_symbol PASSED [ 83%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateIdentifier::test_valid_function_name PASSED [ 83%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateIdentifier::test_invalid_semicolon PASSED [ 83%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateIdentifier::test_invalid_backtick PASSED [ 83%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateIdentifier::test_invalid_dollar PASSED [ 83%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateIdentifier::test_empty_identifier PASSED [ 83%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateExpression::test_valid_math PASSED [ 83%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateExpression::test_valid_hex PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateExpression::test_invalid_forbidden_chars PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateExpression::test_invalid_backtick PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateExpression::test_empty_expression PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateExpression::test_shell_escape PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateR2Command::test_valid_pdf PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateR2Command::test_valid_afl PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateR2Command::test_invalid_backtick PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateR2Command::test_invalid_semicolon PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateR2Command::test_invalid_pipe PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateR2Command::test_empty_command PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestValidateR2Command::test_blocked_command PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestSanitizeForR2Cmd::test_allows_safe_chars PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestSanitizeForR2Cmd::test_strips_dangerous_chars PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestSanitizeForR2Cmd::test_strips_backticks PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestSanitizeForR2Cmd::test_strips_dollar PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestSanitizeForR2Cmd::test_empty_string PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_init PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_init_with_file_path PASSED [ 84%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_is_open_false_initially PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_close_no_r2 PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_close_with_r2 PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_close_quit_error PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_cmd_no_r2 PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_cmd_success PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_cmd_error PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_cmdj_no_r2 PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_cmdj_success PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_cmdj_error PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_safe_cmd PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_safe_cmdj PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_analyze_level_0 PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_analyze_already_done PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_analyze_deep_override PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_open_no_r2pipe PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_open_file_not_found PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_open_success PASSED [ 85%]
tests/unit/tools/radare2/test_r2_session.py::TestR2Session::test_open_none_return PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestCompileRegexCached::test_valid_pattern PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestCompileRegexCached::test_invalid_pattern PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestCompileRegexCached::test_caching PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestFilterLinesByRegex::test_matching_lines PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestFilterLinesByRegex::test_empty_pattern PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestFilterLinesByRegex::test_empty_text PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestFilterLinesByRegex::test_no_matches PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestFilterLinesByRegex::test_invalid_pattern PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestFilterLinesByRegex::test_pattern_too_long PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestFilterNamedFunctions::test_filters_numeric_suffix PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestFilterNamedFunctions::test_empty_text PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestFilterNamedFunctions::test_all_numeric PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestPaginateText::test_first_page PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestPaginateText::test_last_page PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestPaginateText::test_empty_text PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestPaginateText::test_invalid_cursor PASSED [ 86%]
tests/unit/tools/radare2/test_r2_session.py::TestPaginateText::test_negative_cursor PASSED [ 86%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2Decompile::test_success_returns_pseudo_c PASSED [ 86%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2Decompile::test_empty_output_returns_error PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2Decompile::test_error_prefix_returns_failure PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2Decompile::test_invalid_address_returns_error PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2Decompile::test_decompilation_caching PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2RecoverStructures::test_parses_afvfj_json PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2RecoverStructures::test_empty_output_returns_empty_structures PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2RecoverStructures::test_recover_structures_caching PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2AnalyzeFunction::test_success_returns_metadata PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2AnalyzeFunction::test_empty_afij_returns_error PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2GetCallGraph::test_returns_nodes_and_edges PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2GetCallGraph::test_invalid_depth_returns_error PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2SimulatePatch::test_invalid_hex_returns_error PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2SimulatePatch::test_odd_length_hex_returns_error PASSED [ 87%]
tests/unit/tools/radare2/test_r2ghidra_tools.py::TestR2SimulatePatch::test_success_with_nop_patch PASSED [ 87%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_validate_identifier_valid PASSED [ 87%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_validate_identifier_injection_attempt PASSED [ 87%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_validate_identifier_empty PASSED [ 87%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_validate_expression_valid PASSED [ 87%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_validate_expression_injection_attempt PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_validate_r2_command_safe_commands PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_validate_r2_command_blocked_shell PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_validate_r2_command_blocked_write PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_validate_r2_command_blocked_metacharacters PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestSecurityValidators::test_sanitize_removes_dangerous_chars PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestHelperFunctions::test_filter_lines_by_regex_basic PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestHelperFunctions::test_filter_lines_by_regex_empty_pattern PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestHelperFunctions::test_filter_lines_by_regex_invalid PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestHelperFunctions::test_filter_lines_by_regex_too_long PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestHelperFunctions::test_filter_named_functions PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestHelperFunctions::test_paginate_text_first_page PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestHelperFunctions::test_paginate_text_with_cursor PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestHelperFunctions::test_paginate_text_empty PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestR2Session::test_session_initial_state PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestR2Session::test_session_cmd_when_closed PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestRadare2ToolsPlugin::test_plugin_metadata PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestRadare2ToolsPlugin::test_plugin_session_management PASSED [ 88%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestDiagnoseError::test_diagnose_missing_file PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestDiagnoseError::test_diagnose_directory_instead_of_file PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestDiagnoseError::test_diagnose_empty_file PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestDiagnoseError::test_diagnose_r2_not_available PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestGetOrCreateSession::test_creates_new_session PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestGetOrCreateSession::test_returns_existing_open_session PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestGetOrCreateSession::test_removes_stale_session PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestGetOrCreateSession::test_validation_error_returns_dummy_session PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_open_file_success PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_open_file_failure PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_open_file_invalid_path PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_close_file_existing PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_close_file_not_open PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_analyze_success PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_analyze_invalid_level PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_analyze_session_closed PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_run_command_success PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_run_command_blocked PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_calculate_success PASSED [ 89%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_calculate_invalid_expression PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_functions_success PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_functions_with_filter PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_functions_tree_success PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_disassemble_invalid_address PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_disassemble_large_num PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_decompile_function_invalid_address PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_xrefs_to_invalid_address PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_rename_function_invalid_address PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_show_headers_success PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_sections_success PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_imports_success PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_get_current_address_success PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_show_function_details_with_address PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_show_function_details_invalid_address PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_get_function_prototype_success PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_set_function_prototype_success PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_set_function_prototype_empty PASSED [ 90%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_symbols_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_entrypoints_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_libraries_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_strings_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_classes_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_disassemble_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_xrefs_to_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_rename_function_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_set_comment_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_set_comment_invalid_address PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_disassemble_function_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_disassemble_function_invalid_address PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_decompile_function_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_all_strings_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_methods_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_list_decompilers_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_use_decompiler_success PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_use_decompiler_not_available PASSED [ 91%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_Radare2_rename_flag_success PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_analyze PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_run_command PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_calculate PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_functions PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_functions_tree PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_show_function_details PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_get_current_address PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_get_function_prototype PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_set_function_prototype PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_show_headers PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_sections PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_imports PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_symbols PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_entrypoints PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_libraries PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_strings PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_all_strings PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_classes PASSED [ 92%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_methods PASSED [ 93%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_disassemble PASSED [ 93%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_disassemble_function PASSED [ 93%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_decompile_function PASSED [ 93%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_list_decompilers PASSED [ 93%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_use_decompiler PASSED [ 93%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_xrefs_to PASSED [ 93%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_rename_function PASSED [ 93%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_rename_flag PASSED [ 93%]
tests/unit/tools/radare2/test_radare2_mcp_tools.py::TestMcpToolsMocked::test_session_not_open_set_comment PASSED [ 93%]
tests/unit/tools/radare2/test_xrefs_and_structures.py::TestAnalyzeXrefs::test_analyze_xrefs_all_success PASSED [ 93%]
tests/unit/tools/radare2/test_xrefs_and_structures.py::TestAnalyzeXrefs::test_analyze_xrefs_to_only PASSED [ 93%]
tests/unit/tools/radare2/test_xrefs_and_structures.py::TestAnalyzeXrefs::test_analyze_xrefs_from_only PASSED [ 93%]
tests/unit/tools/radare2/test_xrefs_and_structures.py::TestAnalyzeXrefs::test_analyze_xrefs_no_refs_found PASSED [ 93%]
tests/unit/tools/radare2/test_xrefs_and_structures.py::TestAnalyzeXrefs::test_analyze_xrefs_invalid_type PASSED [ 93%]
tests/unit/tools/radare2/test_xrefs_and_structures.py::TestAnalyzeXrefs::test_analyze_xrefs_invalid_address PASSED [ 93%]
tests/unit/tools/radare2/test_xrefs_and_structures.py::TestAnalyzeXrefs::test_analyze_xrefs_malformed_json PASSED [ 93%]
tests/unit/tools/radare2/test_xrefs_and_structures.py::TestXrefsAndStructuresIntegration::test_xrefs_with_real_binary SKIPPED [ 93%]
tests/unit/tools/report/test_email.py::TestEmailConfig::test_from_env_not_configured PASSED [ 94%]
tests/unit/tools/report/test_email.py::TestEmailConfig::test_from_env_configured PASSED [ 94%]
tests/unit/tools/report/test_email.py::TestEmailConfig::test_is_configured_username_no_password PASSED [ 94%]
tests/unit/tools/report/test_email.py::TestLoadQuickContacts::test_empty PASSED [ 94%]
tests/unit/tools/report/test_email.py::TestLoadQuickContacts::test_with_contacts PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportConverter::test_markdown_to_html PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportConverter::test_html_to_pdf PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportConverter::test_markdown_to_json PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportConverter::test_convert_report PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportDashboardRoutes::test_dashboard_reports PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportDashboardRoutes::test_dashboard_report_view_success PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportDashboardRoutes::test_dashboard_report_view_not_found PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportDashboardRoutes::test_dashboard_report_download PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportDashboardRoutes::test_dashboard_report_create PASSED [ 94%]
tests/unit/tools/report/test_report_dashboard.py::TestReportDashboardRoutes::test_dashboard_report_delete PASSED [ 94%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_get_system_time PASSED [ 94%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_set_timezone PASSED [ 94%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_get_timezone_info PASSED [ 94%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_start_report_session PASSED [ 94%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_end_report_session PASSED [ 95%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_get_report_session_status PASSED [ 95%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_list_report_sessions PASSED [ 95%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_add_ioc PASSED [ 95%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_add_analysis_note PASSED [ 95%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_add_mitre_technique PASSED [ 95%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_set_severity PASSED [ 95%]
tests/unit/tools/report/test_report_mcp_tools.py::TestReportMcpTools::test_create_analysis_report PASSED [ 95%]
tests/unit/tools/report/test_report_mcp_tools.py::TestRegisterReportTools::test_register PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestReportToolsInit::test_init_creates_directories PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestReportToolsInit::test_init_default_timezone PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestReportToolsInit::test_init_custom_timezone PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestTimezoneManagement::test_set_timezone_valid PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestTimezoneManagement::test_set_timezone_invalid PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestTimezoneManagement::test_get_timezone_info PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestTimestampGeneration::test_get_timestamp_data PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestTimestampGeneration::test_get_timestamp_data_with_tz PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestTimestampGeneration::test_get_current_time PASSED [ 95%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_start_session PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_start_session_without_sample PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_start_session_with_tags_and_sample PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_end_session PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_end_session_not_found PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_get_session_info PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_get_session_info_after_end PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_add_session_ioc PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_add_session_note PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_add_session_mitre PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_add_session_tag PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_set_session_severity PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_set_session_severity_invalid PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_add_session_tag_no_session PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_set_session_severity_no_session PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_add_session_ioc_no_session PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_add_session_ioc_invalid_type PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_add_session_note_no_session PASSED [ 96%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_add_session_mitre_no_session PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestSessionManagement::test_list_sessions PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestReportGeneration::test_create_report_no_session PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestReportGeneration::test_create_report_full PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestReportGeneration::test_create_report_with_custom_fields PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestReportGeneration::test_list_templates PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestReportGeneration::test_get_report PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestReportGeneration::test_get_report_not_found PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestReportGeneration::test_list_reports PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestEmailAndContacts::test_get_email_status PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestEmailAndContacts::test_configure_email PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestEmailAndContacts::test_add_quick_contact PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestEmailAndContacts::test_list_quick_contacts PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestEmailAndContacts::test_send_report_not_found PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_identify_file_type_elf PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_identify_file_type_pe PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_identify_file_type_too_small PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_human_readable_size PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_get_severity_emoji PASSED [ 97%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_format_iocs_yaml_empty PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_format_iocs_yaml_with_data PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_format_iocs_markdown_empty PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_identify_file_type_pdf PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_identify_file_type_zip PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_identify_file_type_text PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_identify_file_type_unknown PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_human_readable_size_tb PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_get_local_time PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_format_time_no_tz PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_format_mitre_table_with_data PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_format_notes_empty PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_format_notes_with_data PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_send_report_email_not_configured PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_send_report_success PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_send_report_with_quick_contact PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_send_report_exception PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_create_report_with_sample_path PASSED [ 98%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_list_templates_with_desc PASSED [ 99%]
tests/unit/tools/report/test_report_tools.py::TestHelperMethods::test_extract_sample_info PASSED [ 99%]
tests/unit/tools/report/test_report_tools.py::TestGetReportTools::test_singleton PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestTimezonePreset::test_utc PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestTimezonePreset::test_kst PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestTimezonePreset::test_est PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestGetTimezone::test_valid PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestGetTimezone::test_invalid PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_creation PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_get_duration_not_started PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_get_duration_str_not_started PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_get_duration_str_with_hours PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_add_ioc_invalid_type PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_to_dict_with_end PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_add_ioc_success PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_add_note PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_add_mitre PASSED [ 99%]
tests/unit/tools/report/test_session.py::TestAnalysisSession::test_add_tag PASSED [ 99%]
tests/unit/tools/report/test_session.py::test_fallback_zoneinfo PASSED   [100%]

=================================== FAILURES ===================================
______________________ TestGenerateSignature.test_success ______________________
tests/unit/tools/analysis/test_signature_tools.py:74: in test_success
    assert result.data == "48 83 ec 20"
E   assert 'rule suspicious_test_x401000 {\n    meta:\n        description = "Auto-generated signature for test"\n        address = "0x401000"\n        length = 4\n        author = "Reversecore_MCP"\n        date = "auto-generated"\n\n    strings:\n        $code = { 48 83 ec 20 }\n\n    condition:\n        $code\n}' == '48 83 ec 20'
E
E     - 48 83 ec 20
E     + rule suspicious_test_x401000 {
E     +     meta:
E     +         description = "Auto-generated signature for test"
E     +         address = "0x401000"
E     +         length = 4
E     +         author = "Reversecore_MCP"
E     +         date = "auto-generated"
E     +
E     +     strings:
E     +         $code = { 48 83 ec 20 }
E     +
E     +     condition:
E     +         $code
E     + }
----------------------------- Captured stderr call -----------------------------
2026-06-27 17:18:24 - reversecore_mcp.reversecore_mcp.core.decorators - INFO - Starting generate_signature
2026-06-27 17:18:24 - reversecore_mcp.reversecore_mcp.core.decorators - INFO - generate_signature completed successfully
------------------------------ Captured log call -------------------------------
INFO     reversecore_mcp.reversecore_mcp.core.decorators:decorators.py:72 Starting generate_signature
INFO     reversecore_mcp.reversecore_mcp.core.decorators:decorators.py:85 generate_signature completed successfully
__________________ TestGenerateSignature.test_invalid_address __________________
tests/unit/tools/analysis/test_signature_tools.py:112: in test_invalid_address
    assert "address" in result.message
E   assert 'address' in "Tool 'r2' not found. Please install it."
E    +  where "Tool 'r2' not found. Please install it." = ToolError(status='error', error_code='TOOL_NOT_FOUND', message="Tool 'r2' not found. Please install it.", hint='Install with: apt-get install r2', details=None).message
----------------------------- Captured stderr call -----------------------------
2026-06-27 17:18:24 - reversecore_mcp.reversecore_mcp.core.decorators - INFO - Starting generate_signature
2026-06-27 17:18:24 - reversecore_mcp.reversecore_mcp.core.decorators - INFO - generate_signature completed successfully
------------------------------ Captured log call -------------------------------
INFO     reversecore_mcp.reversecore_mcp.core.decorators:decorators.py:72 Starting generate_signature
INFO     reversecore_mcp.reversecore_mcp.core.decorators:decorators.py:85 generate_signature completed successfully
____________ TestGenerateYaraRule.test_smart_offset_search_failure _____________
tests/unit/tools/analysis/test_signature_tools.py:193: in test_smart_offset_search_failure
    assert "Suggested alternative" in result.message
E   AssertionError: assert 'Suggested alternative' in 'Address 0x401000 contains invalid bytes (all 0x00 or 0xFF). Try using a different address.'
E    +  where 'Address 0x401000 contains invalid bytes (all 0x00 or 0xFF). Try using a different address.' = ToolError(status='error', error_code='YARA_GENERATION_ERROR', message='Address 0x401000 contains invalid bytes (all 0x00 or 0xFF). Try using a different address.', hint='Suggested alternative: sym.main at 0x401000', details=None).message
----------------------------- Captured stderr call -----------------------------
2026-06-27 17:18:24 - reversecore_mcp.reversecore_mcp.core.decorators - INFO - Starting generate_yara_rule
2026-06-27 17:18:24 - reversecore_mcp.reversecore_mcp.tools.analysis.signature_tools - INFO - Invalid bytes at 0x401000, attempting smart offset search...
2026-06-27 17:18:24 - reversecore_mcp.reversecore_mcp.core.decorators - INFO - generate_yara_rule completed successfully
------------------------------ Captured log call -------------------------------
INFO     reversecore_mcp.reversecore_mcp.core.decorators:decorators.py:72 Starting generate_yara_rule
INFO     reversecore_mcp.reversecore_mcp.tools.analysis.signature_tools:signature_tools.py:341 Invalid bytes at 0x401000, attempting smart offset search...
INFO     reversecore_mcp.reversecore_mcp.core.decorators:decorators.py:85 generate_yara_rule completed successfully
================================ tests coverage ================================
_______________ coverage: platform darwin, python 3.12.1-final-0 _______________

Name                                                    Stmts   Miss  Cover   Missing
-------------------------------------------------------------------------------------
reversecore_mcp/__init__.py                                 1      0   100%
reversecore_mcp/core/__init__.py                           11      0   100%
reversecore_mcp/core/analysis_cache.py                    164     34    79%   60-61, 82-83, 109-110, 124, 137-140, 148-155, 171-173, 212-214, 252, 255-256, 274-275, 298, 321-322, 333-334
reversecore_mcp/core/audit.py                              41      0   100%
reversecore_mcp/core/binary_cache.py                       71      0   100%
reversecore_mcp/core/command_spec.py                       35      1    97%   326
reversecore_mcp/core/config.py                            259     20    92%   293, 309-310, 317, 398, 400, 402, 404, 406, 408, 410, 415, 468, 472, 492, 546, 559, 564, 595-596
reversecore_mcp/core/container.py                         114      0   100%
reversecore_mcp/core/decorators.py                         84      5    94%   87-97
reversecore_mcp/core/error_formatting.py                   44      0   100%
reversecore_mcp/core/error_handling.py                     73      6    92%   139-141, 164-166
reversecore_mcp/core/evidence.py                          101      0   100%
reversecore_mcp/core/exceptions.py                        135      0   100%
reversecore_mcp/core/execution.py                         163     14    91%   55-58, 100, 233, 279-282, 304, 315, 320, 372
reversecore_mcp/core/extension.py                          54      6    89%   169, 184, 261, 279, 294, 323
reversecore_mcp/core/extension_registry.py                256     40    84%   100, 141-147, 151-162, 166-177, 200, 214-221, 241-244, 266-267, 452-453
reversecore_mcp/core/json_utils.py                         32      0   100%
reversecore_mcp/core/loader.py                             37      0   100%
reversecore_mcp/core/logging_config.py                     77      9    88%   70, 97-101, 209-212
reversecore_mcp/core/memory.py                            194     35    82%   81, 184, 311-312, 446, 454, 459-460, 462-463, 472-475, 485-508, 614-615, 710-712, 725-727
reversecore_mcp/core/metrics.py                           102      0   100%
reversecore_mcp/core/mitre_mapper.py                       54      0   100%
reversecore_mcp/core/plugin.py                             20      0   100%
reversecore_mcp/core/r2_helpers.py                        155     30    81%   109-110, 134-135, 141-154, 194-201, 299, 315-317, 320-322, 334, 379-380, 395
reversecore_mcp/core/r2_pool.py                           231     14    94%   213-215, 239-240, 286, 294, 302-303, 313, 319-322
reversecore_mcp/core/report_generator.py                  167      0   100%
reversecore_mcp/core/resilience.py                        128      0   100%
reversecore_mcp/core/resource_manager.py                   95      0   100%
reversecore_mcp/core/result.py                             65      0   100%
reversecore_mcp/core/sast/__init__.py                       2      0   100%
reversecore_mcp/core/sast/python_ast_scanner.py            63      0   100%
reversecore_mcp/core/sast/regex_scanner.py                 27      0   100%
reversecore_mcp/core/sast/rule_manager.py                  67      0   100%
reversecore_mcp/core/security.py                           79      0   100%
reversecore_mcp/core/task_queue.py                        123     43    65%   31-47, 53-60, 94, 128-140, 233, 238, 270, 286-300, 310-312
reversecore_mcp/core/validators.py                        117      0   100%
reversecore_mcp/dashboard/__init__.py                     202     50    75%   57, 124-125, 152, 165-166, 182-217, 280, 324-326, 330-333, 367, 384-385, 420, 422, 424-430, 454-455, 473, 487-494
reversecore_mcp/prompts/__init__.py                        21      0   100%
reversecore_mcp/prompts/common.py                           2      0   100%
reversecore_mcp/prompts/game.py                             3      1    67%   8
reversecore_mcp/prompts/malware.py                         19      9    53%   8, 465, 519, 558, 640, 718, 822, 942, 1090
reversecore_mcp/prompts/report.py                           3      1    67%   8
reversecore_mcp/prompts/security.py                        11      5    55%   8, 58, 83, 112, 143
reversecore_mcp/resources.py                              179     27    85%   53, 58, 71-74, 103, 108-111, 181-183, 194, 204-205, 225-226, 244-245, 278-279, 282-283, 331-332
reversecore_mcp/tools/__init__.py                           7      0   100%
reversecore_mcp/tools/analysis/__init__.py                 42      1    98%   23
reversecore_mcp/tools/analysis/capa_tools.py               69      0   100%
reversecore_mcp/tools/analysis/crash_triage.py            135     25    81%   53-56, 72, 103, 176-178, 193, 225-248
reversecore_mcp/tools/analysis/die_tools.py               117     12    90%   109-114, 121-122, 179, 204, 232-233
reversecore_mcp/tools/analysis/diff_tools.py              219     52    76%   202, 221-222, 330-334, 344-366, 376-379, 498-502, 514-515, 527-528, 551, 561-566, 594, 618, 666-667, 672, 686-687, 692, 711-712
reversecore_mcp/tools/analysis/emulation_tools.py         148     34    77%   38-39, 49-56, 68-77, 169-170, 214-218, 225-226, 273-276, 290-291
reversecore_mcp/tools/analysis/fuzz_tools.py               23      3    87%   112-116
reversecore_mcp/tools/analysis/lief_tools.py              219      4    98%   72-73, 351-352
reversecore_mcp/tools/analysis/signature_tools.py         170      5    97%   213, 303, 326, 473-474
reversecore_mcp/tools/analysis/source_auditor.py           68      0   100%
reversecore_mcp/tools/analysis/static_analysis.py         176     41    77%   86, 90, 152-155, 252-267, 301-327, 344-349, 375, 424-427, 429, 487
reversecore_mcp/tools/analysis/symbolic_analysis.py        33      7    79%   46-47, 62-63, 80-83
reversecore_mcp/tools/common/__init__.py                   29      1    97%   23
reversecore_mcp/tools/common/assembler.py                 197      0   100%
reversecore_mcp/tools/common/file_operations.py           149     17    89%   42, 86-87, 188-194, 218, 306-307, 331-334, 346, 365-366
reversecore_mcp/tools/common/memory_tools.py              115      0   100%
reversecore_mcp/tools/common/patch_explainer.py            90      0   100%
reversecore_mcp/tools/common/server_tools.py               49      4    92%   72, 104-106
reversecore_mcp/tools/forensics/__init__.py                41      1    98%   29
reversecore_mcp/tools/forensics/artifact.py               187      0   100%
reversecore_mcp/tools/forensics/disk.py                   139      1    99%   260
reversecore_mcp/tools/forensics/memory.py                 186      0   100%
reversecore_mcp/tools/forensics/network.py                238      0   100%
reversecore_mcp/tools/malware/__init__.py                  28      0   100%
reversecore_mcp/tools/malware/adaptive_vaccine.py         400     38    90%   27-28, 133, 236, 321-322, 350, 353, 356-357, 367, 376-380, 404-407, 409, 412-413, 417, 419, 422-425, 427, 430-431, 434-436, 550, 618, 723
reversecore_mcp/tools/malware/dormant_detector.py         366     84    77%   20-21, 81, 89-97, 102-123, 149-152, 155-167, 207-210, 214-216, 252-257, 280-281, 327, 373-376, 591, 604-608, 615, 648-653, 660, 672, 702, 712, 731-732, 734-735, 767-772
reversecore_mcp/tools/malware/ioc_tools.py                159     34    79%   32, 36, 42-43, 60-83, 163, 201, 246, 254, 262, 271, 277, 283, 293, 299, 305
reversecore_mcp/tools/malware/vulnerability_hunter.py     254     53    79%   347, 430, 434-435, 452-453, 474-478, 492, 496-497, 504, 602, 607, 627-628, 648, 652, 657, 682-687, 693-708, 729-733, 739-740, 749-753, 757-758, 775, 779, 784-785
reversecore_mcp/tools/malware/yara_tools.py               111      9    92%   182, 188, 207-208, 214-221, 225
reversecore_mcp/tools/patch_explainer.py                    3      0   100%
reversecore_mcp/tools/radare2/__init__.py                   4      0   100%
reversecore_mcp/tools/radare2/r2_analysis.py              351    103    71%   101-102, 107, 143, 323, 331-333, 337-339, 343, 347, 351, 355, 377, 448-457, 475-476, 482-513, 527, 534, 539-589, 640, 769, 801-846, 859, 957-958, 970-972, 983, 1047-1048
reversecore_mcp/tools/radare2/r2_db.py                    163     28    83%   196, 212-219, 239-265, 346-347, 385-386, 412-415
reversecore_mcp/tools/radare2/r2_session.py               175      2    99%   117, 368
reversecore_mcp/tools/radare2/r2ghidra_tools.py           163     22    87%   171, 193, 208-209, 253, 273-277, 335, 354, 358, 361, 378-379, 428, 461, 480-483
reversecore_mcp/tools/radare2/radare2_mcp_tools.py        479     44    91%   125, 134, 144, 148-153, 254-255, 396, 451-452, 455, 503-504, 533-534, 628, 654, 722, 727, 764, 769, 806, 828-829, 870, 919-922, 925, 972, 1034, 1089-1090, 1170-1171, 1179, 1208, 1380-1381, 1395-1396
reversecore_mcp/tools/report/__init__.py                    2      0   100%
reversecore_mcp/tools/report/converter.py                 108     16    85%   170-171, 173-175, 222, 227, 253-267, 320, 353, 366
reversecore_mcp/tools/report/email.py                      45      0   100%
reversecore_mcp/tools/report/report_mcp_tools.py           92      1    99%   34
reversecore_mcp/tools/report/report_tools.py              350      1    99%   317
reversecore_mcp/tools/report/session.py                    94      0   100%
reversecore_mcp/tools/report_tools.py                       3      0   100%
-------------------------------------------------------------------------------------
TOTAL                                                   10077    993    90%
Coverage HTML written to dir htmlcov
Required test coverage of 80% reached. Total coverage: 90.15%
=========================== short test summary info ============================
FAILED tests/unit/tools/analysis/test_signature_tools.py::TestGenerateSignature::test_success - assert 'rule suspicious_test_x401000 {\n    meta:\n        description = "Auto-generated signature for test"\n        address = "0x401000"\n        length = 4\n        author = "Reversecore_MCP"\n        date = "auto-generated"\n\n    strings:\n        $code = { 48 83 ec 20 }\n\n    condition:\n        $code\n}' == '48 83 ec 20'

  - 48 83 ec 20
  + rule suspicious_test_x401000 {
  +     meta:
  +         description = "Auto-generated signature for test"
  +         address = "0x401000"
  +         length = 4
  +         author = "Reversecore_MCP"
  +         date = "auto-generated"
  +
  +     strings:
  +         $code = { 48 83 ec 20 }
  +
  +     condition:
  +         $code
  + }
FAILED tests/unit/tools/analysis/test_signature_tools.py::TestGenerateSignature::test_invalid_address - assert 'address' in "Tool 'r2' not found. Please install it."
 +  where "Tool 'r2' not found. Please install it." = ToolError(status='error', error_code='TOOL_NOT_FOUND', message="Tool 'r2' not found. Please install it.", hint='Install with: apt-get install r2', details=None).message
FAILED tests/unit/tools/analysis/test_signature_tools.py::TestGenerateYaraRule::test_smart_offset_search_failure - AssertionError: assert 'Suggested alternative' in 'Address 0x401000 contains invalid bytes (all 0x00 or 0xFF). Try using a different address.'
 +  where 'Address 0x401000 contains invalid bytes (all 0x00 or 0xFF). Try using a different address.' = ToolError(status='error', error_code='YARA_GENERATION_ERROR', message='Address 0x401000 contains invalid bytes (all 0x00 or 0xFF). Try using a different address.', hint='Suggested alternative: sym.main at 0x401000', details=None).message
============ 3 failed, 1771 passed, 64 skipped in 79.36s (0:01:19) =============
