#!Meson configure - time test discovery without fs.glob / subdir_glob # GTest/GMock migration complete (PBI-068): all tests now use Catch2. #Catch2 dependency for modern test framework(PBI - 050) #Prefer system installs, but fall back to Meson wrap subproject when available. catch2_dep = dependency('catch2', required: false, fallback: ['catch2', 'catch2_dep']) #Get Catch2 partial dependency with includes for test builds catch2_compile_dep = [] if catch2_dep.found() catch2_compile_dep = [catch2_dep.partial_dependency(compile_args: true, includes: true)] endif #Trailing link deps for Catch2 tests - ensure spdlog / fmt symbols are available #after Catch2 libs(static link order matters : users before providers) catch2_trailing_link_deps = [ dependency('spdlog'), dependency('fmt', required: false), ] catch2_incs = [] #TSAN suppressions file for tests(if TSAN is enabled) #Must be defined early before subdirs are included _tsan_suppressions_file = meson.project_source_root() / 'tsan.suppressions' _test_tsan_options = 'suppressions=' + _tsan_suppressions_file _test_thread_sanitizer = get_option('enable-tsan') or get_option('b_sanitize') == 'thread' _test_address_sanitizer = get_option('enable-asan') or get_option('b_sanitize').contains('address') _test_debug_integrations = get_option('buildtype') == 'debug' and not _test_address_sanitizer _test_timeout_scale = _test_thread_sanitizer ? 10 : get_option('test-timeout-scale') _test_timeout_cpp_arg = '-DYAMS_TEST_TIMEOUT_SCALE=' + _test_timeout_scale.to_string() fs = import('fs') cli11_dep = cli11_resolved_dep if not cli11_dep.found() cli11_dep = declare_dependency() endif #Common dependencies for tests; mirror CLI breadth to cover includes test_deps = [ dependency('spdlog'), dependency('nlohmann_json'), dependency('sqlite3'), dependency('OpenSSL'), cli11_dep, boost_dep, dependency('libcurl', required: false), dependency('zlib'), dependency('fmt', required: false), dependency('yams_core'), dependency('yams_config'), dependency('yams_crypto'), dependency('yams_chunking'), dependency('yams_compression'), dependency('yams_storage_engine'), dependency('yams_reference_counter'), dependency('yams_manifest'), dependency('yams_integrity'), dependency('yams_metadata'), dependency('yams_topology'), dependency('yams_extraction'), dependency('yams_detection'), dependency('yams_content'), dependency('yams_downloader'), dependency('yams_vector'), dependency('yams_search'), dependency('yams_api'), dependency('yams_repair'), dependency('yams_app_services'), dependency('yams_daemon_client'), dependency('yams_daemon'), ] yams_plugins_mgmt_dep = dependency('yams_plugins_mgmt', required: false) if yams_plugins_mgmt_dep.found() test_deps += yams_plugins_mgmt_dep endif yams_mcp_dep = dependency('yams_mcp', required: false) if yams_mcp_dep.found() test_deps += yams_mcp_dep endif onnxruntime_dep_opt = onnxruntime_resolved_dep if onnxruntime_dep_opt.found() test_deps += onnxruntime_dep_opt endif #Windows : stage runtime DLLs next to every test executable(mirrors Windows install). #Placing DLLs alongside the test binaries prevents the loader from falling back to #older System32 copies(e.g., onnxruntime.dll API 17) and keeps tests aligned with #the Conan - shipped runtime used for installation. if host_machine.system() == 'windows' and windows_runtime_dlls.length() > 0 py_mod = import('python') python = py_mod.find_installation('python3', required: false) if not python.found() python = py_mod.find_installation('python', required: false) endif if python.found() #All test binary directories(relative to builddir / tests) test_runtime_dirs = [ '.', 'integration', 'integration/smoke', 'integration/daemon', 'integration/cli', 'integration/search', 'integration/services', ] foreach dll_info : windows_runtime_dlls dll_name = dll_info[0] dll_src = dll_info[1] foreach dest_rel : test_runtime_dirs dest_path = join_paths(meson.current_build_dir(), dest_rel, dll_name) stamp = 'dllcopy_@0@_@1@.stamp'.format(dll_name, dest_rel.replace('/', '_')) custom_target(stamp, input: dll_src, output: stamp, command: [python, '-c', 'import pathlib, shutil, sys; src=sys.argv[1]; dest=pathlib.Path(sys.argv[2]); stamp=pathlib.Path(sys.argv[3]); dest.parent.mkdir(parents=True, exist_ok=True); shutil.copy2(src, dest); stamp.parent.mkdir(parents=True, exist_ok=True); stamp.write_text("ok")', dll_src, dest_path, '@OUTPUT@'], build_by_default: true, ) endforeach endforeach else message('Python not found (python3/python); skipping Windows test runtime DLL staging') endif endif tests_has_cli = false tests_has_cli11 = cli11_dep.found() if get_option('build-cli') yams_cli_dep = dependency('yams_cli', required: false) if yams_cli_dep.found() test_deps += yams_cli_dep tests_has_cli = true else message('build-cli enabled but yams_cli dependency not found; skipping CLI-dependent tests.') endif else #If build - cli is disabled, still try to find yams_cli but don't error if missing yams_cli_dep = dependency('yams_cli', required: false) if yams_cli_dep.found() test_deps += yams_cli_dep tests_has_cli = true endif endif incs = [ include_directories('..'), # project root include_directories('.'), # tests/ include_directories('common'), # shared helpers include_directories('../include'), # headers include_directories('../tools/yams-tools/include'), generated_inc, # builddir/version_generated.h ] + catch2_incs #Keep project strict, but don’t fail unit tests on common test - only warnings. #We downgrade selective warnings to non - errors for test targets only. cxx = meson.get_compiler('cpp') test_cpp_noerror_args = cxx.get_supported_arguments([ '-Wno-error=sign-compare', '-Wno-error=unused-variable', '-Wno-error=unused-but-set-variable', '-Wno-error=unused-result', '-Wno-error=unused-lambda-capture', '-Wno-error=missing-field-initializers', ]) catch2_main_dep = disabler() if catch2_dep.found() catch2_yams_main_lib = static_library('catch2_yams_main', files('support/catch2_main.cpp'), dependencies: [catch2_dep], cpp_args: test_cpp_noerror_args, install: false, ) catch2_main_dep = declare_dependency( link_with: catch2_yams_main_lib, dependencies: [catch2_dep], ) endif # Meson-native test registration via structured subdirs (no shell globs). # Unit tests are now individual Catch2 executables; tests/unit keeps only a # compatibility stub for older yams_unit_objs references. subdir('unit') if get_option('build-plugins') and catch2_dep.found() subdir('plugins') endif if get_option('enable-integration-tests') or _test_debug_integrations subdir('integration/smoke') subdir('integration/daemon') subdir('integration/cli') subdir('integration/search') endif if get_option('enable-mobile-tests') subdir('mobile') endif stress_srcs = files( 'stress/storage/concurrent_catch2_test.cpp', 'stress/mcp_socket_stress_catch2_test.cpp', ) #Prefer Conan CMake config before falling back to system discovery onnx_dep = onnxruntime_resolved_dep tbb_dep = tbb_resolved_dep #Add TBB to test_deps if found(needed by yams_vector via ONNX runtime) if tbb_dep.found() test_deps += tbb_dep endif #Collect library directories for test runtime. # #Docker note : our Linux Docker build uses a BuildKit cache mount for / root /.conan2, #which is not committed into the image layers.We therefore rely on Conan's #runtime_deploy output in the build directory for running tests in later stages. #Always include the build root in RPATH / LD_LIBRARY_PATH so tests can find #deployed runtime libraries(e.g.ONNX, TBB) even when the Conan cache is absent. _test_rpaths = [meson.project_build_root()] _test_ld_library_path = [meson.project_build_root()] if host_machine.system() == 'linux' # Docker test stages install Conan-provided runtimes under /opt/yams/usr/local/lib # before invoking meson test, so include that path in the test environment. _test_ld_library_path += ['/opt/yams/usr/local/lib'] endif foreach d : [onnx_dep, tbb_dep] if d.found() libdir = d.get_variable(pkgconfig: 'libdir', default_value: '') if libdir != '' _test_rpaths += libdir _test_ld_library_path += libdir endif endif endforeach #Prepare LD_LIBRARY_PATH for test environment(needed for transitive TBB dependencies) _test_env_ld_library_path = ':'.join(_test_ld_library_path) # Bench timeout is referenced by standalone Catch2 benchmark targets below. bench_timeout = get_option('bench-timeout') ## integration_smoke now defined in subdir('integration/smoke') #Next integration group : Services(daemon ingestion / retrieval) #Compile this group separately to avoid duplicate plugin symbols and to allow isolated serial runs. #Prefer Meson - native subdirs over shell discovery for services integration tests. # #IMPORTANT : services integration includes both GTest - and Catch2 - based suites. #Do not gate the entire subdir on GTest. if get_option('enable-integration-tests') or get_option('enable-integration-services') or _test_debug_integrations subdir('integration/services') endif #Benchmarks(standalone executables).Register bench test target only when enabled. if get_option('build-benchmarks') subdir('benchmarks') #Standalone, minimal daemon warm - latency bench(does not depend on unit object lib) daemon_warm_bench = executable('yams_bench_daemon_warm', files('benchmarks/daemon_warm_latency_main.cpp'), include_directories: incs, dependencies: [test_deps], install: false, ) if get_option('enable-bench-tests') test('bench_daemon_warm_latency', daemon_warm_bench, suite: ['bench', 'perf'], env: { 'YAMS_TEST_SAFE_SINGLE_INSTANCE': '1', 'LD_LIBRARY_PATH': _test_env_ld_library_path, }, timeout: bench_timeout, ) endif endif #Stress tests can be heavy; register but mark as long - running via suite name if catch2_dep.found() and get_option('enable-stress-tests') and stress_srcs.length() > 0 stress_exe = executable('yams_stress_tests', stress_srcs, include_directories: incs, dependencies: [catch2_dep, catch2_main_dep, test_deps], cpp_args: ['-DYAMS_TESTING=1'], install: false, ) test('stress', stress_exe, suite: 'stress', args: ['[mcpsocketstresstest]'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, 'YAMS_TEST_SAFE_SINGLE_INSTANCE': '1', }, timeout: 300) elif get_option('enable-stress-tests') message('Catch2 not found; skipping stress test registration.') endif # ============================================================================ #Catch2 Test Executables(PBI - 068 : Separated for isolation) #Each test suite gets its own executable to prevent resource conflicts #and enable parallel execution.This resolves SIGABRT crashes from shared #filesystem state and temp directory conflicts. # ============================================================================ if catch2_dep.found() #Daemon Test Suites(6 consolidated executables) #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_daemon_fsm_exe = executable('catch2_daemon_fsm', files('unit/daemon/daemon_fsm_suite_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_daemon_metrics_status_exe = executable('catch2_daemon_metrics_status', files('unit/daemon/daemon_metrics_status_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_daemon_metrics_core_exe = executable('catch2_daemon_metrics_core', files('unit/daemon/daemon_metrics_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_daemon_components_exe = executable('catch2_daemon_components', files('unit/daemon/daemon_components_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_admission_policy_exe = executable('catch2_admission_policy', files('unit/daemon/admission_policy_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_search_admission_controller_exe = executable('catch2_search_admission_controller', files('unit/daemon/search_admission_controller_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_ingest_metrics_publisher_exe = executable('catch2_ingest_metrics_publisher', files('unit/daemon/ingest_metrics_publisher_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_topology_manager_exe = executable('catch2_topology_manager', files('unit/daemon/topology_manager_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_embedding_lifecycle_exe = executable('catch2_embedding_lifecycle', files('unit/daemon/embedding_lifecycle_manager_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_daemon_protocol_exe = executable('catch2_daemon_protocol', files( 'unit/daemon/daemon_protocol_test.cpp', 'unit/daemon/frame_reader_catch2_test.cpp', 'unit/daemon/dispatch_response_mapper_catch2_test.cpp', 'unit/daemon/request_handler_admission_reuse_catch2_test.cpp', 'unit/daemon/request_handler_repair_cancel_catch2_test.cpp', 'unit/daemon/request_handler_status_unary_catch2_test.cpp', 'unit/daemon/proto_serializer_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_daemon_background_exe = executable('catch2_daemon_background', files('unit/daemon/daemon_background_processing_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_daemon_graph_component_exe = executable('catch2_daemon_graph_component', files('unit/daemon/graph_component_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_graph_services_exe = executable('catch2_graph_services', files( 'unit/app/services/graph_query_service_catch2_test.cpp', 'unit/app/services/graph_context_service_catch2_test.cpp', 'unit/metadata/delete_cascade_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Daemon component submodule tests(CheckpointManager, ConfigResolver, etc.) #Migrated from GTest as part of yams - 3s4 / yams - zns catch2_daemon_component_submodule_exe = executable('catch2_daemon_component_submodule', files( 'unit/daemon/components/checkpoint_manager_test.cpp', 'unit/daemon/components/config_resolver_test.cpp', 'unit/daemon/components/database_manager_test.cpp', 'unit/daemon/components/plugin_manager_test.cpp', 'unit/daemon/plugin_manager_config_test.cpp', 'unit/daemon/components/topology_tuner_catch2_test.cpp', 'unit/daemon/components/vector_system_manager_test.cpp', 'unit/search/topological_quality_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Gradient limiter tests(Netflix Gradient2 adaptive concurrency) catch2_gradient_limiter_exe = executable('catch2_gradient_limiter', files('unit/daemon/components/gradient_limiter_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #WorkCoordinator tests(async work coordination) catch2_work_coordinator_exe = executable('catch2_work_coordinator', files('unit/daemon/work_coordinator_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #PostIngestQueue unit tests(LruCache template + stage constants) catch2_post_ingest_queue_unit_exe = executable('catch2_post_ingest_queue_unit', files('unit/daemon/components/post_ingest_queue_unit_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #PressureLimitedPoller shutdown unit tests (capability-sleep / stop paths) catch2_pressure_limited_poller_exe = executable('catch2_pressure_limited_poller', files('unit/daemon/components/pressure_limited_poller_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Assertion validation tests (fork-based death tests for YAMS_ASSERT / YAMS_PRECONDITION) catch2_assert_val_exe = executable('catch2_assert_val', files('unit/core/assert_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Metrics consistency tests(migrated from GTest) catch2_metrics_consistency_exe = executable('catch2_metrics_consistency', files('unit/daemon/metrics_consistency_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #SearchService integration tests(migrated from GTest) catch2_search_service_exe = executable('catch2_search_service', files( 'unit/app/services/search_service_catch2_test.cpp', 'unit/app/services/search_hash_edge_cases_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #FTS5 performance / stress tests(migrated from GTest, opt - in via YAMS_RUN_STRESS_TESTS = 1) catch2_fts5_stress_exe = executable('catch2_fts5_stress', files('unit/metadata/fts5_performance_stress_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Add plugin path for plugin harness tests plugin_test_cpp_args = test_cpp_noerror_args + ['-DYAMS_TESTING=1'] if get_option('plugin-onnx') #Pass the expected plugin location to the test onnx_plugin_name = 'libyams_onnx_plugin.so' if host_machine.system() == 'darwin' onnx_plugin_name = 'libyams_onnx_plugin.dylib' elif host_machine.system() == 'windows' onnx_plugin_name = 'yams_onnx_plugin.dll' endif onnx_plugin_path = join_paths(meson.project_build_root(), 'plugins', 'onnx', onnx_plugin_name) plugin_test_cpp_args += ['-Dyams_onnx_plugin_BUILT="' + onnx_plugin_path + '"'] endif catch2_daemon_plugin_exe = executable('catch2_daemon_plugin', files('unit/daemon/onnx_plugin_harness_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: plugin_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) if onnx_dep.found() onnx_provider_test_deps = [catch2_dep, catch2_main_dep] + test_deps + onnx_dep catch2_daemon_onnx_provider_exe = executable('catch2_daemon_onnx_provider', files( 'unit/daemon/onnx_model_provider_config_test.cpp', '../plugins/onnx/model_provider.cpp', '../plugins/onnx/onnx_text_processing.cpp', '../plugins/onnx/ort_runtime_loader.cpp', '../plugins/onnx/onnx_model_pool.cpp', '../plugins/onnx/onnx_colbert_session.cpp', '../src/vector/tokenizer.cpp', ), include_directories: incs, dependencies: onnx_provider_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_gpu_provider_exe = executable('catch2_gpu_provider', files( 'unit/daemon/onnx_gpu_provider_catch2_test.cpp', '../plugins/onnx/ort_runtime_loader.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps + [onnx_dep], cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_onnx_embedding_diag_exe = executable('catch2_onnx_embedding_diag', files( 'unit/daemon/onnx_embedding_diagnostic_test.cpp', '../plugins/onnx/model_provider.cpp', '../plugins/onnx/onnx_text_processing.cpp', '../plugins/onnx/ort_runtime_loader.cpp', '../plugins/onnx/onnx_model_pool.cpp', '../plugins/onnx/onnx_colbert_session.cpp', '../src/vector/tokenizer.cpp', ), include_directories: incs, dependencies: onnx_provider_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) test('onnx_embedding_diagnostic', catch2_onnx_embedding_diag_exe, suite: ['catch2', 'unit', 'daemon', 'onnx', 'diagnostic'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, args: ['--allow-running-no-tests'], timeout: 120, ) endif catch2_plugin_infrastructure_exe = executable('catch2_plugin_infrastructure', files('unit/daemon/plugin_infrastructure_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: plugin_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_external_plugin_host_exe = executable('catch2_external_plugin_host', files('unit/daemon/external_plugin_host_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: plugin_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_extractor_adapter_exe = executable('catch2_extractor_adapter', files('unit/daemon/plugin_content_extractor_adapter_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_repair_scheduling_exe = executable('catch2_repair_scheduling', files('unit/daemon/repair_scheduling_adapter_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_repair_service_exe = executable('catch2_repair_service', files('unit/daemon/repair_service_post_ingest_channel_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_write_coordinator_exe = executable('catch2_write_coordinator', files('unit/daemon/write_coordinator_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_service_manager_exe = executable('catch2_service_manager', files('unit/daemon/service_manager_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_db_recovery_exe = executable('catch2_db_recovery', files('unit/daemon/db_recovery_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_db_salvage_exe = executable('catch2_db_salvage', files('unit/daemon/db_salvage_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_db_recovery_vacuum_exe = executable('catch2_db_recovery_vacuum', files('unit/daemon/db_recovery_vacuum_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_storage_preflight_exe = executable('catch2_storage_preflight', files('unit/daemon/storage_preflight_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_tune_advisor_snapshot_exe = executable('catch2_tune_advisor_snapshot', files('unit/daemon/tune_advisor_snapshot_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_repair_hold_hints_exe = executable('catch2_repair_hold_hints', files('unit/daemon/repair_hold_hints_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_physical_walk_ttl_exe = executable('catch2_physical_walk_ttl', files('unit/daemon/physical_walk_ttl_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_streaming_processor_exe = executable('catch2_streaming_processor', files('unit/daemon/streaming_processor_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_in_process_transport_exe = executable('catch2_in_process_transport', files('unit/daemon/in_process_transport_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep, dependency('yams_daemon_client_embedded')] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_sandbox_detection_exe = executable('catch2_sandbox_detection', files('unit/daemon/sandbox_detection_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_multiplex_client_exe = executable('catch2_multiplex_client', files('unit/daemon/multiplex_client_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_entity_graph_service_exe = executable('catch2_entity_graph_service', files('unit/daemon/entity_graph_service_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_service_manager_shutdown_exe = executable('catch2_service_manager_shutdown', files('unit/daemon/service_manager_shutdown_ownership_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_service_manager_degraded_exe = executable('catch2_service_manager_degraded', files('unit/daemon/service_manager_provider_degraded_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_repair_binary_filter_exe = executable('catch2_repair_binary_filter', files('unit/daemon/repair_binary_filter_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_abi_model_provider_dim_exe = executable('catch2_abi_model_provider_dim', files('unit/daemon/abi_model_provider_dimension_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_status_readiness_vector_usable_exe = executable('catch2_status_readiness_vector_usable', files('unit/daemon/status_readiness_vector_usable_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_model_provider_registry_exe = executable('catch2_model_provider_registry', files('unit/daemon/model_provider_registry_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_simeon_model_provider_exe = executable('catch2_simeon_model_provider', files('unit/daemon/simeon_model_provider_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_embedding_recovery_exe = executable('catch2_embedding_recovery', files('unit/daemon/embedding_provider_recovery_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_request_io_edge_exe = executable('catch2_request_io_edge', files('unit/daemon/request_handler_io_edge_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_daemon_warm_bench_exe = executable('catch2_daemon_warm_bench', files('unit/daemon/daemon_warm_bench_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_daemon_idle_control_bench_exe = executable('catch2_daemon_idle_control_bench', files('unit/daemon/daemon_idle_control_bench_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_request_lifetime_exe = executable('catch2_request_lifetime', files('unit/daemon/request_handler_lifetime_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_writer_drain_cleanup_exe = executable('catch2_writer_drain_cleanup', files('unit/daemon/request_handler_writer_drain_cleanup_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_asio_connection_pool_exe = executable('catch2_asio_connection_pool', files('unit/daemon/asio_connection_pool_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_asio_transport_exhaustion_exe = executable('catch2_asio_transport_exhaustion', files('unit/daemon/asio_transport_exhaustion_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_asio_transport_inflight_close_ipc_prefix_exe = executable('catch2_asio_transport_inflight_close_ipc_prefix', files('unit/daemon/asio_transport_inflight_close_ipc_prefix_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_daemon_exe = executable('catch2_daemon', files('unit/daemon/daemon_catch2_test.cpp'), files('unit/daemon/streaming_handlers_catch2_test.cpp'), files('unit/daemon/daemon_client_list_status_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_tune_advisor_threshold_exe = executable('catch2_tune_advisor_threshold', files('unit/daemon/tune_advisor_threshold_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_tuning_allocation_exe = executable('catch2_tuning_allocation', files('unit/daemon/tuning_allocation_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_tuning_reconciliation_exe = executable('catch2_tuning_reconciliation', files('unit/daemon/tuning_reconciliation_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_post_ingest_dynamic_cap_recovery_exe = executable('catch2_post_ingest_dynamic_cap_recovery', files('unit/daemon/post_ingest_dynamic_cap_recovery_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_resource_governance_exe = executable('catch2_resource_governance', files('unit/daemon/resource_governance_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_timing_audit_exe = executable('catch2_timing_audit', files('unit/daemon/timing_audit_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_dynamic_cap_sentinel_exe = executable('catch2_dynamic_cap_sentinel', files('unit/daemon/dynamic_cap_sentinel_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_idle_zero_concurrency_exe = executable('catch2_idle_zero_concurrency', files('unit/daemon/idle_zero_concurrency_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_health_check_isolation_exe = executable('catch2_health_check_isolation', files('unit/daemon/health_check_isolation_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_vector_index_coordinator_bulk_scope_exe = executable( 'catch2_vector_index_coordinator_bulk_scope', files('unit/daemon/vector_index_coordinator_bulk_scope_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_vector_index_coordinator_coalesce_exe = executable( 'catch2_vector_index_coordinator_coalesce', files('unit/daemon/vector_index_coordinator_coalesce_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_vector_index_coordinator_telemetry_exe = executable( 'catch2_vector_index_coordinator_telemetry', files('unit/daemon/vector_index_coordinator_telemetry_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_tuning_loop_wakeup_exe = executable('catch2_tuning_loop_wakeup', files('unit/daemon/tuning_loop_wakeup_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) if onnx_dep.found() catch2_onnx_model_pool_exe = executable('catch2_onnx_model_pool', files( 'unit/daemon/onnx_model_pool_catch2_test.cpp', '../plugins/onnx/model_provider.cpp', '../plugins/onnx/onnx_text_processing.cpp', '../plugins/onnx/ort_runtime_loader.cpp', '../plugins/onnx/onnx_model_pool.cpp', '../plugins/onnx/onnx_colbert_session.cpp', '../src/vector/tokenizer.cpp', ), include_directories: incs, dependencies: onnx_provider_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) endif #CLI Test Suites(Catch2) #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_cli_init_command_exe = executable('catch2_cli_init_command', files('unit/cli/init_command_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Storage Test Suites(Catch2) #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_storage_backend_exe = executable('catch2_storage_backend', files('unit/storage/storage_backend_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Storage submodule tests(StorageEngine, CompressedStorageEngine, ReferenceCounter, etc.) #Migrated from GTest as part of yams - 3s4 / yams - 8b9 catch2_storage_submodule_exe = executable('catch2_storage_submodule', files( 'unit/storage/compressed_storage_engine_catch2_test.cpp', 'unit/storage/compressed_storage_stats_catch2_test.cpp', 'unit/storage/storage_backend_engine_adapter_catch2_test.cpp', 'unit/storage/object_storage_adapter_catch2_test.cpp', 'unit/storage/reference_counter_catch2_test.cpp', 'unit/storage/reference_counter_stress_catch2_test.cpp', 'unit/storage/garbage_collector_catch2_test.cpp', 'unit/storage/sqlite_retry_catch2_test.cpp', 'unit/storage/s3_signer_catch2_test.cpp', 'unit/storage/storage_backend_factory_catch2_test.cpp', 'unit/storage/storage_runtime_resolver_catch2_test.cpp', 'unit/storage/storage_engine_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #WAL Entry tests - serialization, checksums, encode / decode round - trips catch2_wal_entry_exe = executable('catch2_wal_entry', files('unit/wal/wal_entry_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_wal_submodule_exe = executable('catch2_wal_submodule', files( 'unit/wal/wal_file_catch2_test.cpp', 'unit/wal/wal_manager_catch2_test.cpp', 'unit/wal/wal_recovery_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Search submodule tests #Migrated from GTest as part of yams - 3s4 / yams - 1yq catch2_search_submodule_exe = executable('catch2_search_submodule', files( 'unit/search/chunk_coverage_catch2_test.cpp', 'unit/search/graph_expansion_catch2_test.cpp', 'unit/search/hotzone_manager_catch2_test.cpp', 'unit/search/kg_scorer_simple_catch2_test.cpp', 'unit/search/lexical_scoring_catch2_test.cpp', 'unit/search/simeon_lexical_backend_catch2_test.cpp', 'unit/search/search_engine_simeon_lexical_catch2_test.cpp', 'unit/search/search_engine_topology_catch2_test.cpp', 'unit/search/simeon_bandit_catch2_test.cpp', 'unit/search/simeon_bandit_backend_catch2_test.cpp', 'unit/search/query_helpers_catch2_test.cpp', 'unit/search/query_router_catch2_test.cpp', 'unit/search/query_concept_extractor_catch2_test.cpp', 'unit/search/query_qualifiers_catch2_test.cpp', 'unit/search/search_engine_config_catch2_test.cpp', 'unit/search/search_config_environment_catch2_test.cpp', 'unit/search/search_tracing_catch2_test.cpp', 'unit/search/component_fanout_catch2_test.cpp', 'unit/search/concept_boost_catch2_test.cpp', 'unit/search/cross_rerank_catch2_test.cpp', 'unit/search/search_vector_pipeline_catch2_test.cpp', 'unit/search/search_facets_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_evidence_search_pipeline_exe = executable('catch2_evidence_search_pipeline', files('unit/search/evidence_search_pipeline_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #TuningSlot tests(provenance - tracking primitives for restructured tuning pipeline) catch2_tuning_slot_exe = executable('catch2_tuning_slot', files('unit/search/tuning_slot_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #R3 Tuning features + reward(featurize / bucketize / combineReward) catch2_tuning_features_exe = executable('catch2_tuning_features', files('unit/search/tuning_features_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #SearchTuner tests(Phase 2 of Epic yams - 7ez4 : Adaptive Search Engine Tuning via Corpus-Aware FSM) #Tests FSM state transitions, TunedParams matrix, and SearchEngineConfig generation catch2_search_tuner_exe = executable('catch2_search_tuner', files('unit/search/search_tuner_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #InternalBenchmark tests(Phase 3 of Epic yams - 7ez4 : Internal Benchmark Suite) #Tests LatencyStats, BenchmarkResults, BenchmarkComparison, query generation configs catch2_internal_benchmark_exe = executable('catch2_internal_benchmark', files('unit/search/internal_benchmark_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_benchmark_history_store_exe = executable('catch2_benchmark_history_store', files('unit/search/benchmark_history_store_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_retrieval_benchmark_support_exe = executable('catch2_retrieval_benchmark_support', files( 'unit/search/retrieval_benchmark_support_catch2_test.cpp', 'benchmarks/search/retrieval_benchmark_support.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_search_bandit_bench_exe = executable('catch2_search_bandit_bench', files('benchmarks/search_bandit_bench.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_relevance_label_store_exe = executable('catch2_relevance_label_store', files('unit/search/relevance_label_store_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Compression submodule tests(CompressionPolicy, CompressionMonitor, Zstandard, LZMA, ErrorHandler, etc.) #Migrated from GTest as part of yams - 3s4 / yams - pmf catch2_compression_submodule_exe = executable('catch2_compression_submodule', files( #basic_error_handler_catch2_test.cpp removed : fully covered by error_handler_catch2_test.cpp #basic_integrity_validator_catch2_test.cpp removed : fully covered by integrity_validator_catch2_test.cpp 'unit/compression/compression_comprehensive_catch2_test.cpp', 'unit/compression/compression_monitor_catch2_test.cpp', 'unit/compression/compression_policy_catch2_test.cpp', 'unit/compression/error_handler_catch2_test.cpp', #TODO(yams - 3s4) : Fix API mismatch - uses non - existent IntegrityValidator methods #'unit/compression/integrity_validator_catch2_test.cpp', 'unit/compression/lzma_compressor_catch2_test.cpp', 'unit/compression/recovery_manager_catch2_test.cpp', 'unit/compression/transaction_manager_catch2_test.cpp', 'unit/compression/zstandard_compressor_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #MCP submodule tests(MCPServer, Transport, JSON - RPC, Tools Schema, etc.) #Migrated from GTest as part of yams - 3s4 / yams - 84g catch2_mcp_submodule_exe = executable('catch2_mcp_submodule', files( 'unit/mcp/initialize_response_catch2_test.cpp', 'unit/mcp/mcp_add_disconnect_catch2_test.cpp', 'unit/mcp/mcp_apps/capability_negotiation_test.cpp', 'unit/mcp/mcp_apps/tool_metadata_test.cpp', 'unit/mcp/mcp_apps/ui_resource_handling_test.cpp', 'unit/mcp/mcp_daemon_dto_parsing_catch2_test.cpp', 'unit/mcp/mcp_daemon_dto_parsing_more_catch2_test.cpp', 'unit/mcp/mcp_error_handling_catch2_test.cpp', 'unit/mcp/mcp_context_suggestion_catch2_test.cpp', 'unit/mcp/mcp_semantic_dedupe_catch2_test.cpp', 'unit/mcp/mcp_disconnect_uniform_errors_catch2_test.cpp', 'unit/mcp/mcp_doctor_flags_catch2_test.cpp', 'unit/mcp/mcp_jsonrpc_roundtrip_catch2_test.cpp', 'unit/mcp/mcp_protocol_version_features_test.cpp', 'unit/mcp/mcp_prompts_catch2_test.cpp', 'unit/mcp/mcp_resource_read_catch2_test.cpp', 'unit/mcp/mcp_request_routing_catch2_test.cpp', 'unit/mcp/mcp_search_dto_catch2_test.cpp', 'unit/mcp/mcp_tool_registry_dto_roundtrip_catch2_test.cpp', 'unit/mcp/mcp_server_catch2_test.cpp', 'unit/mcp/mcp_server_exec_catch2_test.cpp', 'unit/mcp/mcp_socket_resolution_catch2_test.cpp', 'unit/mcp/mcp_timeout_catch2_test.cpp', 'unit/mcp/mcp_code_mode_catch2_test.cpp', 'unit/mcp/mcp_composite_dispatch_catch2_test.cpp', 'unit/mcp/mcp_mode_router_catch2_test.cpp', 'unit/mcp/mcp_tool_registry_wrappers_catch2_test.cpp', 'unit/mcp/mcp_tools_schema_and_smoke_catch2_test.cpp', 'unit/mcp/stdio_transport_catch2_test.cpp', 'unit/mcp/websocket_transport_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #CLI submodule tests split by behavior cluster to improve Meson parallelism #and keep failures localized without dropping coverage. #Migrated from GTest as part of yams - 3s4 / yams - cli cli_test_deps = [version_generated_dep, catch2_dep, catch2_main_dep] + test_deps cli_test_cpp_args = test_cpp_noerror_args + ['-DYAMS_TESTING=1'] catch2_cli_common_exe = executable('catch2_cli_common', version_header, files( 'unit/common/format_catch2_test.cpp', 'unit/common/pattern_utils_catch2_test.cpp', 'unit/common/test_utils_catch2_test.cpp', 'unit/common/time_utils_catch2_test.cpp', 'unit/common/utf8_utils_catch2_test.cpp', 'unit/cli/cli_test_cleanup_listener.cpp', 'unit/cli/error_hints_catch2_test.cpp', 'unit/cli/homebrew_service_formula_catch2_test.cpp', 'unit/cli/pipeline_stage_render_catch2_test.cpp', 'unit/cli/prompt_util_catch2_test.cpp', 'unit/cli/recommendation_util_catch2_test.cpp', 'unit/cli/status_metrics_catch2_test.cpp', 'unit/cli/stream_heuristics_catch2_test.cpp', 'unit/cli/time_parser_catch2_test.cpp', 'unit/cli/version_generated_header_catch2_test.cpp', ), include_directories: incs, dependencies: cli_test_deps, cpp_args: cli_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_cli_config_exe = executable('catch2_cli_config', version_header, files( 'unit/cli/cli_test_cleanup_listener.cpp', 'unit/cli/cli_option_isolation_catch2_test.cpp', 'unit/cli/cli_utility_coverage_catch2_test.cpp', 'unit/cli/config_command_catch2_test.cpp', 'unit/cli/data_dir_resolution_catch2_test.cpp', ), include_directories: incs, dependencies: cli_test_deps, cpp_args: cli_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_cli_commands_exe = executable('catch2_cli_commands', version_header, files( 'unit/cli/cli_test_cleanup_listener.cpp', 'unit/cli/add_command_stdin_catch2_test.cpp', 'unit/cli/command_registry_catch2_test.cpp', 'unit/cli/completion_command_catch2_test.cpp', 'unit/cli/delete_command_catch2_test.cpp', 'unit/cli/download_command_catch2_test.cpp', 'unit/cli/init_command_catch2_test.cpp', 'unit/cli/list_command_catch2_test.cpp', 'unit/cli/update_command_catch2_test.cpp', ), include_directories: incs, dependencies: cli_test_deps, cpp_args: cli_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_cli_model_plugin_exe = executable('catch2_cli_model_plugin', version_header, files( 'unit/cli/cli_test_cleanup_listener.cpp', 'unit/cli/model_command_catch2_test.cpp', 'unit/cli/plugin_command_catch2_test.cpp', 'unit/cli/repair_command_catch2_test.cpp', 'unit/cli/session_command_catch2_test.cpp', ), include_directories: incs, dependencies: cli_test_deps, cpp_args: cli_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_cli_doctor_exe = executable('catch2_cli_doctor', version_header, files( 'unit/cli/cli_test_cleanup_listener.cpp', 'unit/cli/doctor_command_catch2_test.cpp', 'unit/cli/doctor_repair_renderers_catch2_test.cpp', 'unit/cli/doctor/db_integrity_catch2_test.cpp', 'unit/cli/doctor/dim_consistency_catch2_test.cpp', 'unit/cli/doctor/storage_blob_check_catch2_test.cpp', 'unit/cli/doctor/ref_count_check_catch2_test.cpp', ), include_directories: incs, dependencies: cli_test_deps, cpp_args: cli_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_cli_graph_exe = executable('catch2_cli_graph', version_header, files( 'unit/cli/cli_test_cleanup_listener.cpp', 'unit/cli/graph_explore_presenter_catch2_test.cpp', 'unit/cli/graph_helpers_catch2_test.cpp', 'unit/cli/graph_query_presenter_catch2_test.cpp', 'unit/cli/graph_topology_support_catch2_test.cpp', 'unit/cli/grep_command_path_tree_catch2_test.cpp', 'unit/cli/vector_db_util_catch2_test.cpp', ), include_directories: incs, dependencies: cli_test_deps, cpp_args: cli_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_cli_daemon_exe = executable('catch2_cli_daemon', version_header, files( 'unit/cli/cli_test_cleanup_listener.cpp', 'unit/cli/daemon_helpers_pool_catch2_test.cpp', 'unit/cli/daemon_command_catch2_test.cpp', ), include_directories: incs, dependencies: cli_test_deps, cpp_args: cli_test_cpp_args, build_rpath: ':'.join(_test_rpaths), install: false, ) #Vector Test Suites(Catch2) - requires enable - vector - tests #Migrated from GTest as part of yams - 3s4 / yams - 1d4 #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- if get_option('enable-vector-tests') catch2_vector_submodule_exe = executable('catch2_vector_submodule', files( 'unit/vector/document_chunker_catch2_test.cpp', 'unit/vector/dim_resolver_catch2_test.cpp', 'unit/vector/model_infrastructure_catch2_test.cpp', 'unit/vector/embedding_service_synthetic_catch2_test.cpp', 'unit/vector/sqlite_vec_backend_comprehensive_catch2_test.cpp', 'unit/vector/sqlite_vec_backend_persistence_catch2_test.cpp', 'unit/vector/static_cosine_ann_index_catch2_test.cpp', 'unit/vector/sqlite_vec_c_api_smoke_catch2_test.cpp', 'unit/vector/vector_schema_migration_vec0_catch2_test.cpp', 'unit/vector/vector_dimension_validation_catch2_test.cpp', 'unit/vector/vector_smoke_catch2_test.cpp', 'unit/vector/turboquant_mse_catch2_test.cpp', 'unit/vector/turboquant_math_test.cpp', 'unit/vector/turboquant_asymmetric_score_catch2_test.cpp', 'unit/vector/turboquant_integration_catch2_test.cpp', 'unit/vector/turboquant_storage_catch2_test.cpp', 'unit/vector/simeon_backend_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) endif #Tokenizer Tests(Catch2) - HuggingFaceTokenizer WordPiece, Unigram, special token injection #Always - on : uses synthetic tokenizer.json files, no model downloads or sqlite - vec required. #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_tokenizer_exe = executable('catch2_tokenizer', files( 'unit/vector/tokenizer_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #API Test Suites(Catch2) - content store API tests #Migrated from GTest as part of yams - 3s4 / api #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_api_submodule_exe = executable('catch2_api_submodule', files( 'unit/api/content_store_catch2_test.cpp', 'unit/api/content_store_builder_compression_catch2_test.cpp', 'unit/api/metadata_api_catch2_test.cpp', 'unit/api/semantic_search_api_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Downloader Test Suites(Catch2) - download manager, resume store, CAS helpers #Migrated from GTest as part of yams - 3s4 / downloader #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_downloader_submodule_exe = executable('catch2_downloader_submodule', files( 'unit/downloader/downloader_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Resolve Test Suites(Catch2) - resolver, backend implementations #Migrated from GTest as part of yams - 3s4 / resolve #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_resolve_submodule_exe = executable('catch2_resolve_submodule', files( 'unit/resolve/resolver_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Manifest Test Suites(Catch2) - manifest manager, serialization, reconstruction #Migrated from GTest as part of yams - 3s4 / yams - 1jm #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_manifest_submodule_exe = executable('catch2_manifest_submodule', files( 'unit/manifest/manifest_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Repair Test Suites(Catch2) - embedding repair scan #Migrated from GTest as part of yams - 3s4 / yams - 1jm #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_repair_submodule_exe = executable('catch2_repair_submodule', files( 'unit/repair/embedding_repair_scan_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Versioning Test Suites(Catch2) - versioning utility #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_versioning_submodule_exe = executable('catch2_versioning_submodule', files( 'unit/metadata/versioning_util_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Metadata Test Suites(4 executables) #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_metadata_retrieval_exe = executable('catch2_metadata_retrieval', files('unit/app/services/retrieval_schema_validation_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Removed : catch2_metadata_search(search_metadata_interface_test.cpp) - HybridSearchEngine specific catch2_metadata_symbol_exe = executable('catch2_metadata_symbol', files('unit/metadata/symbol_metadata_schema_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_metadata_migration_exe = executable('catch2_metadata_migration', files('unit/metadata/migration_validation_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Metadata Unit Tests(Catch2) - concepts, database, query_helpers, sql, value_variant #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_metadata_unit_exe = executable('catch2_metadata_unit', files('unit/metadata/metadata_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Connection Pool Tests(Catch2) - pool maintenance, waiting guard #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_connection_pool_exe = executable('catch2_connection_pool', files('unit/metadata/connection_pool_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #KG Store Tests(Catch2) - knowledge graph store operations #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_kg_store_exe = executable('catch2_kg_store', files( 'unit/metadata/kg_store_catch2_test.cpp', 'unit/metadata/kg_relation_summary_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) # KG Write Buffer Tests (Catch2) - in-memory edge/entity coalescing catch2_kg_write_buffer_exe = executable('catch2_kg_write_buffer', files('unit/metadata/kg_write_buffer_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Database Tests(Catch2) - database operations, connection pool, migrations #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_database_exe = executable('catch2_database', files('unit/metadata/database_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Metadata Corruption Tests(Catch2) - corruption injection, detection, recovery #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_metadata_corruption_exe = executable('catch2_metadata_corruption', files( 'unit/metadata/database_corruption_catch2_test.cpp', 'unit/metadata/migration_corruption_catch2_test.cpp', 'unit/metadata/kg_store_corruption_catch2_test.cpp', 'unit/metadata/connection_pool_corruption_catch2_test.cpp', 'unit/metadata/writer_corruption_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #FTS5 Tests(Catch2) - FTS5 support detection and fallback #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_fts5_exe = executable('catch2_fts5', files( 'unit/metadata/fts5_catch2_test.cpp', 'unit/metadata/fts5_query_sanitizer_catch2_test.cpp', 'unit/metadata/search_query_helpers_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Tree Builder Tests(Catch2) - tree node operations and directory tree building #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_tree_builder_exe = executable('catch2_tree_builder', files('unit/metadata/tree_builder_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Tree Differ Tests(Catch2) - tree diffing operations #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_tree_differ_exe = executable('catch2_tree_differ', files('unit/metadata/tree_differ_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Path Tree Delete Tests(Catch2) - path tree removal operations #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_path_tree_delete_exe = executable('catch2_path_tree_delete', files('unit/metadata/path_tree_delete_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Session Isolation Tests(Catch2) - session - isolated memory operations #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_session_isolation_exe = executable('catch2_session_isolation', files('unit/metadata/session_isolation_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Metadata Repository Tests(Catch2) - repository operations #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_metadata_repository_exe = executable('catch2_metadata_repository', files( 'unit/metadata/metadata_repository_catch2_test.cpp', 'unit/metadata/metadata_repository_tag_stats_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Metadata Repository Cache Tests(Catch2) - cache operations #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_metadata_repository_cache_exe = executable('catch2_metadata_repository_cache', files('unit/metadata/metadata_repository_cache_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_topology_baseline_exe = executable('catch2_topology_baseline', files('unit/topology/topology_baseline_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_topology_factory_exe = executable('catch2_topology_factory', files('unit/topology/topology_factory_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) catch2_topology_kmeans_exe = executable('catch2_topology_kmeans', files('unit/topology/kmeans_engine_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Fuzzy Index Prioritization Tests(Catch2) - fuzzy index scoring #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_fuzzy_index_prioritization_exe = executable('catch2_fuzzy_index_prioritization', files('unit/metadata/fuzzy_index_prioritization_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #KG Store Alias and Entities Tests(Catch2) - KG alias and entity operations #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_kg_store_alias_entities_exe = executable('catch2_kg_store_alias_entities', files('unit/metadata/kg_store_alias_and_entities_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #FTS Query Spec Integration Tests(Catch2) - FTS search integration #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_fts_queryspec_integration_exe = executable('catch2_fts_queryspec_integration', files('unit/metadata/fts_queryspec_integration_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Tags Query Spec Integration Tests(Catch2) - tags query integration #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_tags_queryspec_integration_exe = executable('catch2_tags_queryspec_integration', files('unit/metadata/tags_queryspec_integration_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Query Helpers Integration Tests(Catch2) - query helper integration #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_query_helpers_integration_exe = executable('catch2_query_helpers_integration', files('unit/metadata/query_helpers_integration_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Metadata Schema Tests(Catch2) - comprehensive schema, CRUD, FTS, migrations #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_metadata_schema_exe = executable('catch2_metadata_schema', files('unit/metadata/metadata_schema_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #FTS5 Failure Scenarios Tests(Catch2) - FTS5 edge cases and failure modes #Migrated from GTest as part of yams - 3s4 / yams - aqc #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_fts5_failure_scenarios_exe = executable('catch2_fts5_failure_scenarios', files('unit/metadata/fts5_failure_scenarios_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Corpus Stats Tests(Catch2) - corpus statistics for adaptive search tuning #Phase 1 of Epic yams - 7ez4 : Adaptive Search Engine Tuning via Corpus - Aware FSM #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_corpus_stats_exe = executable('catch2_corpus_stats', files('unit/metadata/corpus_stats_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Repository Foundation Tests(Catch2) - entity_traits, result_helpers, crud_ops #Phase 1 of ADR - 0004 : MetadataRepository Refactor with Templates and Metaprogramming #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- catch2_repository_foundation_exe = executable('catch2_repository_foundation', files('unit/metadata/repository_foundation_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Core tests(minimal dependencies - no daemon) core_test_deps = [ dependency('spdlog'), dependency('yams_core'), ] core_cpp23_features_exe = executable('core_cpp23_features', files('unit/core/cpp23_features_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + core_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) core_magic_numbers_exe = executable('core_magic_numbers', files('unit/core/magic_numbers_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + core_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) core_uuid_exe = executable('core_uuid', files('unit/core/uuid_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + core_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) detection_exe = executable('detection', files( 'unit/detection/command_integration_test.cpp', 'unit/detection/detection_test_helpers.h', 'unit/detection/file_type_detector_test.cpp', 'unit/detection/file_type_graceful_fallback_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Plugins tests(Catch2 - migrated from GTest) plugins_catch2_exe = executable('plugins_catch2', files( 'unit/plugins/plugin_installer_test.cpp', 'unit/plugins/plugin_repo_client_test.cpp', 'unit/plugins/onnx_request_test.cpp', 'unit/plugins/symbol_extractor_query_test.cpp', 'unit/plugins/symbol_extractor_validation_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Integrity tests(Catch2 - migrated from GTest) integrity_test_deps = [ dependency('spdlog'), dependency('yams_core'), dependency('yams_crypto'), dependency('yams_integrity'), dependency('yams_storage_engine'), dependency('yams_reference_counter'), dependency('yams_metadata'), dependency('yams_search'), dependency('yams_daemon'), ] integrity_catch2_exe = executable('integrity_catch2', files( 'unit/integrity/chunk_validator_test.cpp', 'unit/integrity/integrity_verifier_simple_test.cpp', 'unit/integrity/integrity_verifier_catch2_test.cpp', 'unit/integrity/repair_manager_test.cpp', 'unit/integrity/verification_monitor_test.cpp', 'unit/integrity/verification_scheduler_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + integrity_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Content tests(depends on content, extraction, detection modules) content_test_deps = [ dependency('spdlog'), dependency('yams_core'), dependency('yams_content'), dependency('yams_extraction'), dependency('yams_detection'), dependency('sqlite3'), ] content_handlers_exe = executable('content_handlers', files('unit/content/content_handlers_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + content_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Archive content handler tests(formatToString, ProcessingStats, helper functions, canHandle) archive_content_handler_exe = executable('archive_content_handler', files('unit/content/archive_content_handler_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + content_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) html_extractor_robust_exe = executable('html_extractor_robust', files('unit/extraction/html_extractor_robust_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + content_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) plain_text_extractor_exe = executable('plain_text_extractor', files('unit/extraction/plain_text_extractor_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + content_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) builtin_content_extractor_exe = executable('builtin_content_extractor', files('unit/extraction/builtin_content_extractor_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + content_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Text extraction to FTS5 pipeline test(detection->extraction->indexing->search) text_extraction_fts5_pipeline_exe = executable('text_extraction_fts5_pipeline', files('unit/extraction/text_extraction_fts5_pipeline_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + content_test_deps + [dependency('yams_metadata')], cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Plugin process tests(external plugin infrastructure) plugin_process_test_deps = [ dependency('spdlog'), dependency('yams_core'), dependency('yams_extraction'), dependency('nlohmann_json'), ] plugin_process_exe = executable('plugin_process', files('unit/extraction/plugin_process_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + plugin_process_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) plugin_process_minimal_exe = executable('plugin_process_minimal', files('unit/extraction/plugin_process_minimal_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + plugin_process_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) plugin_process_launcher_exe = executable('plugin_process_launcher', files('unit/extraction/plugin_process_launcher_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + plugin_process_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) jsonrpc_client_exe = executable('jsonrpc_client', files('unit/extraction/jsonrpc_client_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + plugin_process_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) external_plugin_extractor_exe = executable('external_plugin_extractor', files('unit/extraction/external_plugin_extractor_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + plugin_process_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Chunking tests(depends on chunking module) chunking_test_deps = [ dependency('spdlog'), dependency('yams_core'), dependency('yams_chunking'), dependency('yams_crypto'), ] chunking_exe = executable('chunking', files('unit/chunking/chunking_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + chunking_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Crypto tests(depends on crypto module) crypto_test_deps = [ dependency('spdlog'), dependency('yams_core'), dependency('yams_crypto'), ] crypto_exe = executable('crypto', files('unit/crypto/crypto_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + crypto_test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) grep_service_exe = executable('grep_service', files('unit/app/services/grep_service_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) indexing_service_exe = executable('indexing_service', files('unit/app/services/indexing_service_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) document_service_exe = executable('document_service', files('unit/app/services/document_service_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) document_service_update_metadata_exe = executable('document_service_update_metadata', files('unit/app/services/document_service_update_metadata_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) document_ingestion_batch_exe = executable('document_ingestion_batch', files('unit/app/services/document_ingestion_batch_catch2_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) service_utilities_exe = executable('service_utilities', files( 'unit/app/services/service_utilities_test.cpp', 'unit/app/services/download_metadata_entries_test.cpp', 'unit/app/services/retrieval_service_mapping_catch2_test.cpp', ), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) simd_memmem_exe = executable('simd_memmem', files('unit/app/services/simd_memmem_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) grep_regex_exe = executable('grep_regex', files('unit/app/services/grep_regex_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) literal_extractor_exe = executable('literal_extractor', files('unit/app/services/literal_extractor_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + test_deps, cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) search_test_deps = [ dependency('spdlog'), dependency('yams_core'), dependency('yams_search'), dependency('yams_vector'), dependency('yams_metadata'), dependency('yams_app_services'), dependency('yams_api'), boost_dep, ] #Re - enabled with mock - based tests disabled, placeholder integration test added #TODO PBI - 071 : Implement full integration tests with real components hybrid_search_exe = executable('hybrid_search', files('unit/search/hybrid_search_comprehensive_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + search_test_deps + [ dependency('yams_daemon'), dependency('yams_daemon_client'), ], cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Corpus Stats Search Integration Tests(Catch2) #Phase 1 of Epic yams - 7ez4 : Validates corpus stats collection from real document store #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- if not _test_address_sanitizer corpus_stats_search_integration_exe = executable('corpus_stats_search_integration', files('unit/search/corpus_stats_search_integration_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep] + search_test_deps + [ dependency('yams_daemon'), dependency('yams_daemon_client'), ], cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) #Ghidra plugin integration test(PBI - 075) #Tests plugin spawning and JSON - RPC communication without requiring Ghidra installed if host_machine.system() != 'windows' ghidra_plugin_exe = executable('ghidra_plugin_communication', files('integration/ghidra_plugin_communication_test.cpp'), include_directories: incs, dependencies: [catch2_dep, catch2_main_dep, dependency('nlohmann_json'), dependency('spdlog')], cpp_args: test_cpp_noerror_args + ['-DYAMS_TESTING=1'], build_rpath: ':'.join(_test_rpaths), install: false, ) endif endif #Test Registrations #-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- #Metadata tests test('metadata_retrieval_schema', catch2_metadata_retrieval_exe, suite: ['catch2', 'unit', 'metadata', 'retrieval'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) #Removed : metadata_search test - HybridSearchEngine specific test('metadata_symbol_schema', catch2_metadata_symbol_exe, suite: ['catch2', 'unit', 'metadata', 'symbol'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('metadata_migration_validation', catch2_metadata_migration_exe, suite: ['catch2', 'unit', 'metadata', 'migration'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('metadata_unit', catch2_metadata_unit_exe, suite: ['catch2', 'unit', 'metadata', 'yams-metadata'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('connection_pool', catch2_connection_pool_exe, suite: ['catch2', 'unit', 'metadata', 'connection_pool'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('kg_store', catch2_kg_store_exe, suite: ['catch2', 'unit', 'metadata', 'kg'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('kg_write_buffer', catch2_kg_write_buffer_exe, suite: ['catch2', 'unit', 'metadata', 'kg'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('database', catch2_database_exe, suite: ['catch2', 'unit', 'metadata', 'database'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('metadata_corruption', catch2_metadata_corruption_exe, suite: ['catch2', 'unit', 'metadata', 'corruption'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('fts5', catch2_fts5_exe, suite: ['catch2', 'unit', 'metadata', 'fts5'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('tree_builder', catch2_tree_builder_exe, suite: ['catch2', 'unit', 'metadata', 'tree_builder'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('tree_differ', catch2_tree_differ_exe, suite: ['catch2', 'unit', 'metadata', 'tree_differ'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('path_tree_delete', catch2_path_tree_delete_exe, suite: ['catch2', 'unit', 'metadata', 'path_tree'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('session_isolation', catch2_session_isolation_exe, suite: ['catch2', 'unit', 'metadata', 'session'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('metadata_repository', catch2_metadata_repository_exe, suite: ['catch2', 'unit', 'metadata', 'repository'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) test('metadata_repository_cache', catch2_metadata_repository_cache_exe, suite: ['catch2', 'unit', 'metadata', 'cache'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('topology_baseline', catch2_topology_baseline_exe, suite: ['catch2', 'unit', 'topology'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('topology_factory', catch2_topology_factory_exe, suite: ['catch2', 'unit', 'topology'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('topology_kmeans', catch2_topology_kmeans_exe, suite: ['catch2', 'unit', 'topology'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('fuzzy_index_prioritization', catch2_fuzzy_index_prioritization_exe, suite: ['catch2', 'unit', 'metadata', 'fuzzy'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('kg_store_alias_entities', catch2_kg_store_alias_entities_exe, suite: ['catch2', 'unit', 'metadata', 'kg'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('fts_queryspec_integration', catch2_fts_queryspec_integration_exe, suite: ['catch2', 'unit', 'metadata', 'fts'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('tags_queryspec_integration', catch2_tags_queryspec_integration_exe, suite: ['catch2', 'unit', 'metadata', 'tags'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('query_helpers_integration', catch2_query_helpers_integration_exe, suite: ['catch2', 'unit', 'metadata', 'query_helpers'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('metadata_schema', catch2_metadata_schema_exe, suite: ['catch2', 'unit', 'metadata', 'schema'], args: ['~[slow]', '--allow-running-no-tests'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 300 ) test('metadata_schema_slow', catch2_metadata_schema_exe, suite: ['catch2', 'slow', 'metadata', 'schema'], args: ['[slow]', '--allow-running-no-tests'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 300, is_parallel: false ) test('fts5_failure_scenarios', catch2_fts5_failure_scenarios_exe, suite: ['catch2', 'unit', 'metadata', 'fts5', 'failure'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 # Includes concurrent and large content tests ) test('corpus_stats', catch2_corpus_stats_exe, suite: ['catch2', 'unit', 'metadata', 'corpus_stats'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('repository_foundation', catch2_repository_foundation_exe, suite: ['catch2', 'unit', 'metadata', 'repository', 'foundation'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) #Core tests test('core_cpp23_features', core_cpp23_features_exe, suite: ['catch2', 'unit', 'core', 'cpp23'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('core_magic_numbers', core_magic_numbers_exe, suite: ['catch2', 'unit', 'core', 'magic'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('core_uuid', core_uuid_exe, suite: ['catch2', 'unit', 'core', 'uuid'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('detection', detection_exe, suite: ['catch2', 'unit', 'detection'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('plugins_catch2', plugins_catch2_exe, suite: ['catch2', 'unit', 'plugins'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('integrity_catch2', integrity_catch2_exe, suite: ['catch2', 'unit', 'integrity'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: host_machine.system() == 'windows' ? 600 : 120 ) #Content tests test('content_handlers', content_handlers_exe, suite: ['catch2', 'unit', 'content', 'handlers'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('archive_content_handler', archive_content_handler_exe, suite: ['catch2', 'unit', 'content', 'archive'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('html_extractor_robust', html_extractor_robust_exe, suite: ['catch2', 'unit', 'extraction', 'html'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 # Allow longer timeout for large file tests ) test('plain_text_extractor', plain_text_extractor_exe, suite: ['catch2', 'unit', 'extraction'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('builtin_content_extractor', builtin_content_extractor_exe, suite: ['catch2', 'unit', 'extraction', 'content_extractor'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('text_extraction_fts5_pipeline', text_extraction_fts5_pipeline_exe, suite: ['catch2', 'unit', 'extraction', 'pipeline', 'fts5'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('plugin_process', plugin_process_exe, suite: ['catch2', 'unit', 'extraction', 'plugin'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('plugin_process_minimal', plugin_process_minimal_exe, suite: ['catch2', 'unit', 'extraction', 'plugin', 'debug'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false ) test('plugin_process_launcher', plugin_process_launcher_exe, suite: ['catch2', 'unit', 'extraction', 'plugin', 'launcher'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, 'YAMS_SOURCE_DIR': meson.project_source_root() }, timeout: host_machine.system() == 'windows' ? 180 : 120, #PyInstaller process tests have resource contention when run in parallel is_parallel: false ) test('jsonrpc_client', jsonrpc_client_exe, suite: ['catch2', 'unit', 'extraction', 'jsonrpc'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('external_plugin_extractor', external_plugin_extractor_exe, suite: ['catch2', 'unit', 'extraction', 'plugin'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) #Chunking tests test('chunking', chunking_exe, suite: ['catch2', 'unit', 'chunking'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) #Crypto tests test('crypto', crypto_exe, suite: ['catch2', 'unit', 'crypto'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) #Service tests test('grep_service', grep_service_exe, suite: ['catch2', 'unit', 'services', 'grep'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('indexing_service', indexing_service_exe, suite: ['catch2', 'unit', 'services', 'indexing'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) test('document_service', document_service_exe, suite: ['catch2', 'unit', 'services', 'document'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) test('document_ingestion_batch', document_ingestion_batch_exe, suite: ['catch2', 'unit', 'services', 'ingestion', 'batch'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('service_utilities', service_utilities_exe, suite: ['catch2', 'unit', 'services', 'utilities'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('simd_memmem', simd_memmem_exe, suite: ['catch2', 'unit', 'services', 'simd'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('grep_regex', grep_regex_exe, suite: ['catch2', 'unit', 'services', 'grep'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('literal_extractor', literal_extractor_exe, suite: ['catch2', 'unit', 'services', 'literal'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) #Search tests test('hybrid_search', hybrid_search_exe, suite: ['catch2', 'unit', 'search', 'hybrid'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, 'YAMS_DISABLE_VECTORS': '1', }, timeout: 120 ) if not _test_address_sanitizer test('corpus_stats_search_integration', corpus_stats_search_integration_exe, suite: ['catch2', 'integration', 'search', 'corpus_stats'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, 'YAMS_DISABLE_VECTORS': '1', }, timeout: 180 ) #Plugin integration tests if host_machine.system() != 'windows' test('ghidra_plugin_communication', ghidra_plugin_exe, suite: ['catch2', 'integration', 'plugin', 'ghidra'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, 'YAMS_SOURCE_DIR': meson.project_source_root() }, timeout: 30, is_parallel: false ) endif endif #Daemon tests test('daemon_fsm_suite', catch2_daemon_fsm_exe, suite: ['catch2', 'unit', 'daemon', 'fsm'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) daemon_metrics_timeout = (get_option('enable-tsan') or get_option('enable-asan')) ? 240 : 180 test('daemon_metrics_status', catch2_daemon_metrics_status_exe, suite: ['catch2', 'unit', 'daemon', 'metrics', 'status'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: daemon_metrics_timeout, is_parallel: false ) test('daemon_metrics_core', catch2_daemon_metrics_core_exe, suite: ['catch2', 'unit', 'daemon', 'metrics', 'core'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('daemon_components', catch2_daemon_components_exe, suite: ['catch2', 'unit', 'daemon', 'components'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('admission_policy', catch2_admission_policy_exe, suite: ['catch2', 'unit', 'daemon', 'admission-policy'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('search_admission_controller', catch2_search_admission_controller_exe, suite: ['catch2', 'unit', 'daemon', 'search-admission'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('ingest_metrics_publisher', catch2_ingest_metrics_publisher_exe, suite: ['catch2', 'unit', 'daemon', 'ingest-metrics'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('topology_manager', catch2_topology_manager_exe, suite: ['catch2', 'unit', 'daemon', 'topology-manager'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('embedding_lifecycle', catch2_embedding_lifecycle_exe, suite: ['catch2', 'unit', 'daemon', 'embedding-lifecycle'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('write_coordinator', catch2_write_coordinator_exe, suite: ['catch2', 'unit', 'daemon', 'write-coordinator'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('repair_service', catch2_repair_service_exe, suite: ['catch2', 'unit', 'daemon', 'repair', 'stuck-docs'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, 'YAMS_TEST_SAFE_SINGLE_INSTANCE': '1', 'YAMS_SQLITE_MINIMAL_PRAGMAS': '1', 'YAMS_SQLITE_BUSY_TIMEOUT_MS': '1000', 'YAMS_SQLITE_VEC_SKIP_INIT': '1', 'YAMS_DISABLE_VECTORS': '1', 'YAMS_DISABLE_VECTOR_DB': '1', 'YAMS_SKIP_MODEL_LOADING': '1', 'YAMS_TESTING': '1', }, timeout: 120, is_parallel: false ) test('daemon_protocol', catch2_daemon_protocol_exe, suite: ['catch2', 'unit', 'daemon', 'protocol'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('daemon_background_processing', catch2_daemon_background_exe, suite: ['catch2', 'unit', 'daemon', 'background'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('daemon_graph_component', catch2_daemon_graph_component_exe, suite: ['catch2', 'unit', 'daemon', 'graph', 'pbi-009'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('graph_services', catch2_graph_services_exe, suite: ['catch2', 'unit', 'services', 'graph'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('daemon_component_submodule', catch2_daemon_component_submodule_exe, suite: ['catch2', 'unit', 'daemon', 'components', 'yams-zns'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('gradient_limiter', catch2_gradient_limiter_exe, suite: ['catch2', 'unit', 'daemon', 'gradient'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('work_coordinator', catch2_work_coordinator_exe, suite: ['catch2', 'unit', 'daemon', 'work-coordinator'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('post_ingest_queue_unit', catch2_post_ingest_queue_unit_exe, suite: ['catch2', 'unit', 'daemon', 'post-ingest'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('pressure_limited_poller', catch2_pressure_limited_poller_exe, suite: ['catch2', 'unit', 'daemon', 'poller'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('assert_val', catch2_assert_val_exe, suite: ['catch2', 'unit', 'core', 'assert'], args: ['--allow-running-no-tests'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: host_machine.system() == 'windows' ? 60 : 30, is_parallel: false ) test('metrics_consistency', catch2_metrics_consistency_exe, suite: ['catch2', 'unit', 'daemon', 'metrics'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('search_service', catch2_search_service_exe, suite: ['catch2', 'unit', 'services', 'search'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, 'YAMS_TEST_SAFE_SINGLE_INSTANCE': '1', 'YAMS_SQLITE_MINIMAL_PRAGMAS': '1', 'YAMS_SQLITE_BUSY_TIMEOUT_MS': '1000', 'YAMS_SQLITE_VEC_SKIP_INIT': '1', 'YAMS_DISABLE_VECTORS': '1', 'YAMS_TESTING': '1', }, timeout: 180, is_parallel: false ) test('fts5_stress', catch2_fts5_stress_exe, suite: ['catch2', 'stress', 'metadata', 'fts5'], args: ['--allow-running-no-tests'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 300, is_parallel: false ) test('daemon_plugin_harness', catch2_daemon_plugin_exe, suite: ['catch2', 'unit', 'daemon', 'plugin'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) if onnx_dep.found() test('daemon_onnx_provider_config', catch2_daemon_onnx_provider_exe, suite: ['catch2', 'unit', 'daemon', 'onnx'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, 'YAMS_TEST_MODE': '1', }, timeout: 60, is_parallel: true ) if host_machine.system() == 'darwin' test('gpu_provider_coreml', catch2_gpu_provider_exe, suite: ['catch2', 'unit', 'daemon', 'gpu'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, }, timeout: 30, is_parallel: true ) endif endif test('plugin_infrastructure', catch2_plugin_infrastructure_exe, suite: ['catch2', 'unit', 'daemon', 'plugin', 'infrastructure'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('external_plugin_host', catch2_external_plugin_host_exe, suite: ['catch2', 'unit', 'daemon', 'plugin', 'external'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('extractor_adapter', catch2_extractor_adapter_exe, suite: ['catch2', 'unit', 'daemon', 'extractor'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('repair_scheduling_adapter', catch2_repair_scheduling_exe, suite: ['catch2', 'unit', 'daemon', 'repair', 'yams-3s4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('service_manager', catch2_service_manager_exe, suite: ['catch2', 'unit', 'daemon', 'service_manager', 'yams-3s4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('db_recovery', catch2_db_recovery_exe, suite: ['catch2', 'unit', 'daemon', 'db_recovery'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('db_salvage', catch2_db_salvage_exe, suite: ['catch2', 'unit', 'daemon', 'db_salvage'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('db_recovery_vacuum', catch2_db_recovery_vacuum_exe, suite: ['catch2', 'unit', 'daemon', 'db_recovery'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('storage_preflight', catch2_storage_preflight_exe, suite: ['catch2', 'unit', 'daemon', 'storage_preflight'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('tune_advisor_snapshot', catch2_tune_advisor_snapshot_exe, suite: ['catch2', 'unit', 'daemon', 'tune_advisor'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('repair_hold_hints', catch2_repair_hold_hints_exe, suite: ['catch2', 'unit', 'daemon', 'tuning'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('physical_walk_ttl', catch2_physical_walk_ttl_exe, suite: ['catch2', 'unit', 'daemon', 'tuning'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('streaming_processor', catch2_streaming_processor_exe, suite: ['catch2', 'unit', 'daemon', 'streaming', 'yams-3s4'], args: ['--allow-running-no-tests'], # Skips entirely on Windows env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('in_process_transport', catch2_in_process_transport_exe, suite: ['catch2', 'unit', 'daemon', 'streaming', 'inprocess'], args: ['--allow-running-no-tests'], # Skips entirely on Windows env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('sandbox_detection', catch2_sandbox_detection_exe, suite: ['catch2', 'unit', 'daemon', 'sandbox'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('multiplex_client', catch2_multiplex_client_exe, suite: ['catch2', 'unit', 'daemon', 'multiplex', 'yams-3s4'], args: ['--allow-running-no-tests'], # All tests have [.requires_daemon] tag env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('entity_graph_service', catch2_entity_graph_service_exe, suite: ['catch2', 'unit', 'daemon', 'yams-3s4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) #These tests use ServiceManager / WorkCoordinator which have resource contention #when run in parallel with other daemon tests - run sequentially test('service_manager_shutdown', catch2_service_manager_shutdown_exe, suite: ['catch2', 'unit', 'daemon', 'service_manager', 'yams-3s4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false ) test('service_manager_degraded', catch2_service_manager_degraded_exe, suite: ['catch2', 'unit', 'daemon', 'service_manager', 'yams-3s4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false ) test('repair_binary_filter', catch2_repair_binary_filter_exe, suite: ['catch2', 'unit', 'daemon', 'repair', 'yams-3s4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false ) test('abi_model_provider_dim', catch2_abi_model_provider_dim_exe, suite: ['catch2', 'unit', 'daemon', 'yams-3s4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('status_readiness_vector_usable', catch2_status_readiness_vector_usable_exe, suite: ['catch2', 'unit', 'daemon', 'readiness'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('model_provider_registry', catch2_model_provider_registry_exe, suite: ['catch2', 'unit', 'daemon', 'model_provider'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('simeon_model_provider', catch2_simeon_model_provider_exe, suite: ['catch2', 'unit', 'daemon', 'model_provider', 'simeon'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) test('embedding_recovery', catch2_embedding_recovery_exe, suite: ['catch2', 'unit', 'daemon', 'yams-3s4'], args: ['--allow-running-no-tests'], # Skips entirely on Windows env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false ) test('request_io_edge', catch2_request_io_edge_exe, suite: ['catch2', 'unit', 'daemon', 'yams-3s4'], args: ['--allow-running-no-tests'], # Placeholder tests - all skipped env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false ) test('daemon_warm_bench', catch2_daemon_warm_bench_exe, suite: ['catch2', 'unit', 'daemon', 'bench', 'yams-3s4'], args: ['--allow-running-no-tests'], # Bench only runs when YAMS_BENCH_FAST=1 env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('request_lifetime', catch2_request_lifetime_exe, suite: ['catch2', 'unit', 'daemon', 'yams-3s4'], args: ['--allow-running-no-tests'], # Skips when streaming disabled env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false ) test('writer_drain_cleanup', catch2_writer_drain_cleanup_exe, suite: ['catch2', 'unit', 'daemon', 'ipc', 'mux'], args: ['--allow-running-no-tests'], # Skips entirely on Windows env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60, is_parallel: false ) test('asio_connection_pool', catch2_asio_connection_pool_exe, suite: ['catch2', 'unit', 'daemon', 'connection-pool'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false, #Test skips on Windows(Unix domain sockets not supported) should_fail: host_machine.system() == 'windows' ) test('asio_transport_exhaustion', catch2_asio_transport_exhaustion_exe, suite: ['catch2', 'unit', 'daemon', 'transport', 'max-inflight'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false, #Test skips on Windows(Unix domain sockets not supported) should_fail: host_machine.system() == 'windows' ) test('asio_transport_inflight_close_ipc_prefix', catch2_asio_transport_inflight_close_ipc_prefix_exe, suite: ['catch2', 'unit', 'daemon', 'transport', 'ipc'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false, #Test skips on Windows(Unix domain sockets not supported) should_fail: host_machine.system() == 'windows' ) test('daemon', catch2_daemon_exe, suite: ['catch2', 'unit', 'daemon', 'yams-3s4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path, #Disable ABI plugins to avoid TSAN + ONNX memory pressure causing SIGKILL 'YAMS_DISABLE_ABI_PLUGINS': '1', }, timeout: 120 ) test('tune_advisor_threshold', catch2_tune_advisor_threshold_exe, suite: ['catch2', 'unit', 'daemon', 'tune', 'advisor'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('tuning_allocation', catch2_tuning_allocation_exe, suite: ['catch2', 'unit', 'daemon', 'tune', 'allocation'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('tuning_reconciliation', catch2_tuning_reconciliation_exe, suite: ['catch2', 'unit', 'daemon', 'tune', 'reconciliation'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('post_ingest_dynamic_cap_recovery', catch2_post_ingest_dynamic_cap_recovery_exe, suite: ['catch2', 'unit', 'daemon', 'tune', 'post-ingest'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('resource_governance', catch2_resource_governance_exe, suite: ['catch2', 'unit', 'daemon', 'governance'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('timing_audit', catch2_timing_audit_exe, suite: ['catch2', 'unit', 'daemon', 'timing-audit'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('dynamic_cap_sentinel', catch2_dynamic_cap_sentinel_exe, suite: ['catch2', 'unit', 'daemon', 'tune', 'dynamic-cap'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('idle_zero_concurrency', catch2_idle_zero_concurrency_exe, suite: ['catch2', 'unit', 'daemon', 'tune', 'idle'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('health_check_isolation', catch2_health_check_isolation_exe, suite: ['catch2', 'unit', 'daemon', 'state', 'health-check'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('vector_index_coordinator_bulk_scope', catch2_vector_index_coordinator_bulk_scope_exe, suite: ['catch2', 'unit', 'daemon', 'vector', 'coordinator'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('vector_index_coordinator_coalesce', catch2_vector_index_coordinator_coalesce_exe, suite: ['catch2', 'unit', 'daemon', 'vector', 'coordinator'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('vector_index_coordinator_telemetry', catch2_vector_index_coordinator_telemetry_exe, suite: ['catch2', 'unit', 'daemon', 'vector', 'coordinator'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('tuning_loop_wakeup', catch2_tuning_loop_wakeup_exe, suite: ['catch2', 'unit', 'daemon', 'tune', 'wakeup'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) if onnx_dep.found() test('onnx_model_pool', catch2_onnx_model_pool_exe, suite: ['catch2', 'unit', 'daemon', 'onnx', 'pool'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, ) endif test('cli_init_command', catch2_cli_init_command_exe, suite: ['catch2', 'unit', 'cli', 'init'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120, is_parallel: false ) test('storage_backend', catch2_storage_backend_exe, suite: ['catch2', 'unit', 'storage', 'backend'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('storage_submodule', catch2_storage_submodule_exe, suite: ['catch2', 'unit', 'storage', 'yams-8b9'], args: ['~[slow]', '--allow-running-no-tests'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 300 ) test('storage_submodule_slow', catch2_storage_submodule_exe, suite: ['catch2', 'slow', 'storage', 'yams-8b9'], args: ['[slow]', '--allow-running-no-tests'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 300 ) test('wal_entry', catch2_wal_entry_exe, suite: ['catch2', 'unit', 'wal'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('wal_submodule', catch2_wal_submodule_exe, suite: ['catch2', 'unit', 'wal'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 120 ) test('search_submodule', catch2_search_submodule_exe, suite: ['catch2', 'unit', 'search', 'yams-1yq'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) test('evidence_search_pipeline', catch2_evidence_search_pipeline_exe, suite: ['catch2', 'unit', 'search', 'evidence_pipeline'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) #TuningSlot provenance tests test('tuning_slot', catch2_tuning_slot_exe, suite: ['catch2', 'unit', 'search', 'tuner'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) #R3 tuning features + reward tests test('tuning_features', catch2_tuning_features_exe, suite: ['catch2', 'unit', 'search', 'tuner'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) #SearchTuner FSM tests(Phase 2 of Epic yams - 7ez4) test('search_tuner', catch2_search_tuner_exe, suite: ['catch2', 'unit', 'search', 'tuner', 'yams-7ez4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) #InternalBenchmark tests(Phase 3 of Epic yams - 7ez4) test('internal_benchmark', catch2_internal_benchmark_exe, suite: ['catch2', 'unit', 'search', 'benchmark', 'yams-7ez4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) test('retrieval_benchmark_support', catch2_retrieval_benchmark_support_exe, suite: ['catch2', 'unit', 'search', 'benchmark'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) xplan_python = import('python').find_installation('python3', required: false) if xplan_python.found() test('xplan_contracts', xplan_python, args: [meson.current_source_dir() / 'benchmarks/xplan/test_xplan_contracts.py'], suite: ['unit', 'search', 'benchmark', 'xplan'], timeout: 30 ) endif test('relevance_label_store', catch2_relevance_label_store_exe, suite: ['catch2', 'unit', 'search', 'relevance'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 30 ) heavy_submodule_timeout = (get_option('enable-tsan') or get_option('enable-asan')) ? 600 : 300 test('compression_submodule', catch2_compression_submodule_exe, suite: ['catch2', 'unit', 'compression', 'yams-pmf'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: heavy_submodule_timeout ) test('mcp_submodule', catch2_mcp_submodule_exe, suite: ['catch2', 'unit', 'mcp', 'yams-84g'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) cli_test_env = { 'LD_LIBRARY_PATH': _test_env_ld_library_path, 'TSAN_OPTIONS': _test_tsan_options, 'YAMS_SOURCE_DIR': meson.project_source_root(), 'MESON_BUILD_ROOT': meson.project_build_root(), } test('cli_common', catch2_cli_common_exe, suite: ['catch2', 'unit', 'cli', 'yams-cli', 'common'], env: cli_test_env, depends: [yams_cli_exe, version_header], timeout: 120 ) test('cli_config', catch2_cli_config_exe, suite: ['catch2', 'unit', 'cli', 'yams-cli', 'config'], env: cli_test_env, depends: [yams_cli_exe, version_header], timeout: 180 ) test('cli_commands', catch2_cli_commands_exe, suite: ['catch2', 'unit', 'cli', 'yams-cli', 'commands'], env: cli_test_env, depends: [yams_cli_exe, version_header], timeout: 180 ) test('cli_model_plugin', catch2_cli_model_plugin_exe, suite: ['catch2', 'unit', 'cli', 'yams-cli', 'model-plugin'], env: cli_test_env, depends: [yams_cli_exe, version_header], timeout: 120 ) test('cli_doctor', catch2_cli_doctor_exe, suite: ['catch2', 'unit', 'cli', 'yams-cli', 'doctor'], env: cli_test_env, depends: [yams_cli_exe, version_header], timeout: 180 ) test('cli_graph', catch2_cli_graph_exe, suite: ['catch2', 'unit', 'cli', 'yams-cli', 'graph'], env: cli_test_env, depends: [yams_cli_exe, version_header], timeout: 120 ) test('cli_daemon', catch2_cli_daemon_exe, suite: ['catch2', 'unit', 'cli', 'yams-cli', 'daemon'], env: cli_test_env, depends: [yams_cli_exe, version_header], timeout: 120 ) #Vector test suite(requires enable - vector - tests) #Migrated from GTest as part of yams - 3s4 / yams - 1d4 if get_option('enable-vector-tests') test('vector_submodule', catch2_vector_submodule_exe, suite: ['catch2', 'unit', 'vector', 'yams-1d4'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: heavy_submodule_timeout ) endif #API submodule tests(content store, metadata API) #Migrated from GTest as part of yams - 3s4 / api test('api_submodule', catch2_api_submodule_exe, suite: ['catch2', 'unit', 'api', 'yams-api'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) #Tokenizer tests(WordPiece, Unigram, special token injection) test('tokenizer', catch2_tokenizer_exe, suite: ['catch2', 'unit', 'vector', 'yams-tokenizer'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 60 ) #Downloader submodule tests(download manager, resume, CAS) #Migrated from GTest as part of yams - 3s4 / downloader test('downloader_submodule', catch2_downloader_submodule_exe, suite: ['catch2', 'unit', 'downloader', 'yams-downloader'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) #Resolve submodule tests(resolver, backends) #Migrated from GTest as part of yams - 3s4 / resolve test('resolve_submodule', catch2_resolve_submodule_exe, suite: ['catch2', 'unit', 'resolve', 'yams-resolve'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) #Manifest submodule tests(manifest manager, serialization, reconstruction) #Migrated from GTest as part of yams - 3s4 / yams - 1jm test('manifest_submodule', catch2_manifest_submodule_exe, suite: ['catch2', 'unit', 'manifest', 'yams-manifest'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) #Repair submodule tests(embedding repair scan) #Migrated from GTest as part of yams - 3s4 / yams - 1jm #Note : --allow - running - no - tests needed because tests skip when YAMS_DISABLE_VECTORS = 1 test('repair_submodule', catch2_repair_submodule_exe, suite: ['catch2', 'unit', 'repair', 'yams-repair'], args: ['--allow-running-no-tests'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) #Versioning submodule tests(document versioning, indexer) #Migrated from GTest as part of yams - 3s4 / yams - 1jm test('versioning_submodule', catch2_versioning_submodule_exe, suite: ['catch2', 'unit', 'versioning', 'yams-versioning'], env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path }, timeout: 180 ) endif