yams/tests/meson.build
Trevon a3d065dd8d
feat(search): make topology-assisted retrieval the default (#57)
* fix(release): repair package repo publish

Arch repo metadata and R2 uploads need to be reproducible from CI, with retry hardening for transient Cloudflare failures.

* fix(daemon): stop shutdown log storm

Init waiter must treat ShuttingDown as terminal so daemon shutdown tests do not flood Meson logs while the daemon is stopping.

* refactor(cli): delegate serve to MCP binary

Keep yams serve UX while removing MCP server linkage from yams-cli. The standalone MCP binary owns stdio serving and exits on stdin EOF.

* refactor(cli): move daemon path helpers

Keep CLI path resolution out of YamsDaemon so later link cuts can separate CLI and daemon internals. Full yams_daemon removal still needs a socket-only daemon-client split.

* refactor(daemon): split embedded client

* perf(search): add lean-guided benchmark gates

Add Lean topology/search models, ingestion ablation docs, and focused regression tests for topology and compression threshold behavior.

Extract search observability, keep benchmark-only ablation controls, and make retrieval quality benchmarks default to Simeon while preserving explicit ONNX opt-in.

* refactor(config): move daemon policies

* refactor(daemon): extract plugin runtime

* refactor(daemon): untangle service coordinators

Untangle CLI/MCP from daemon service coordinators and the daemon static lib.

- MetadataRepository uses a daemon-neutral tree-diff callback. The
  GraphComponent wrapper moves to src/daemon/components/metadata_graph_bridge.cpp,
  owned by the daemon library.
- WriteCoordinator moves to a dedicated build-only yams_write_coordinator
  static lib. Drop ResourceGovernor coupling inside the writer loop; batch
  sizing still respects config.maxBatchSize.
- AppContext gains enqueuePostIngest callback. ServiceManager wires it to
  its own enqueuePostIngest; app services no longer call ServiceManager
  directly.
- Embedding repair uses BulkIngestLease/BeginBulkIngestCallback instead of
  concrete VectorIndexCoordinator::BulkScope. Daemon dispatchers provide a
  lease factory backed by the real coordinator.
- CLI daemon_command uses config helpers instead of YamsDaemon::getXDGRuntimeDir.
- Remove explicit dependency('yams_daemon') from src/cli and tools/yams-mcp.
- Declare missing yams_extraction/yams_ingest deps on yams_app_services so
  app services link cleanly without daemon.

Validated:
  meson compile -C build/release -j4 yams-daemon yams-cli yams-mcp-server
  ninja -C build/release -t commands tools/yams-cli/yams-cli tools/yams-mcp/yams-mcp-server | grep -c libyams_daemon.a -> 0
  yams-cli --version, yams-mcp-server init, yams serve --help smoke tests

Size drop on macOS release: yams-cli 41M -> 32M, yams-mcp-server 37M -> 22M.

* fix(cli): keep stdin add local fallback

No embedded daemon now. When yams add - buffers stdin and daemon IPC is missing, store via local app services instead of failing socket_missing.

Validated:
  meson compile -C build/debug -j4 yams-cli catch2_cli_commands
  MESON_BUILD_ROOT=/Users/trevon/work/tools/yams/build/debug build/debug/tests/catch2_cli_commands 'AddCommand - reads from piped stdin and stores content'
  MESON_BUILD_ROOT=/Users/trevon/work/tools/yams/build/debug build/debug/tests/catch2_cli_commands
  meson compile -C build/release -j4 yams-cli yams-mcp-server
  meson compile -C build/asan-api -j2 yams-cli catch2_cli_commands
  MESON_BUILD_ROOT=/Users/trevon/work/tools/yams/build/asan-api ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 build/asan-api/tests/catch2_cli_commands 'AddCommand - reads from piped stdin and stores content'
  ninja -C build/release -t commands tools/yams-cli/yams-cli tools/yams-mcp/yams-mcp-server | grep libyams_daemon.a -> no output

* feat(bench): add xplan multi-arm experiment harness

Unified plan runner, ablation axes, REPORT/ablation docs, and
KPI snapshot so optimization loops stop living in shell matrices.

* feat(formal): expand topology/search Lean contracts

Boundary models for search provenance, construction gates,
and cluster/route objectives so Lean guides correctness while
xplan ranks performance levers.

* feat(search,topology): construction purity + graph expansion path

Raise topology build defaults (min edge 0.25, max component 64) and
split oversized CC pieces so hybrid assist is quality-positive on
scifact. Add GraphNeighbors expansion with medoid-anchor fallback,
structured helpers instead of nested session logic, and BEIR-default
xplan plans. Search engine extraction (fanout/classic pipeline) rides
along as the integration surface for routing.

* feat(topology): add KMeans engine and SGC identity contracts

Register kmeans in the factory with deterministic spherical k-means
over embeddings, and enforce SGC document-identity invariants in
debug builds with matching unit coverage.

* feat(daemon): topology readiness gates and selectable reranker

Drive topologyReady from published epoch/freshness/rebuild/dirty
ingest state (not just KG drain), surface those fields in search
stats, and wire onnx|simeon|auto|none cross-reranker selection.

* chore(search): drop meta_path tuner knobs

Meta-path routing is gone; remove dead TunedParams fields and the
ConfigResolver test for [search.meta_path].

* feat(bench): add topology_purity_validate plan

Repeats=3 validation matrix for construction-purity winners vs
topo_off so MRR deltas can clear run-to-run noise.

* chore: format add_command and config include order

Mechanical clang-format / include reorder only; no behavior change.

* feat(bench): decision-grade xplan loop for search engine

Document search-engine measurement in AGENTS; harden xplan with
repeats=3 plans, quality×latency primaries, mechanism metrics from
debug.jsonl, multi-rep log promotion, and archive superseded topology
plans.

* feat(graph): denser product semantic_neighbor topK

Raise default YAMS_GRAPH_SEMANTIC_TOPK fallback from 4 to 8 so product
graphs leave fewer degree-0 docs for GraphNeighbors expansion.

* feat(search): extract topology assist and cross-rerank seams

Pull topology assist into search_topology_stage (seed merge, skip
reasons, optional vector seed probe default 0). Extract cross_rerank
compute from search_engine. Wire probe via typed config/ConfigResolver.

* feat(bench): product-path search engine ablation plans

Add topology-off component, vector-weight, and tiered-execution xplan
plans (repeats=3) and wire them into the AGENTS measurement loop table.

* fix(ci): repair pre-push fallbacks

* feat(bench): lock-free mid-run builds + multi-corpus gates

xplan skips meson rebuild when the quality binary exists (flock +
YAMS_BENCH_FORCE_BUILD override) to stop multi-arm link races. Add
graph_vector weight and nfcorpus transfer-gate plans; document in AGENTS.

* fix(daemon): keep SearchEngine alive via shared_ptr cache

getCachedEngine previously published a raw pointer that metrics polling
used through rebuild, racing destructor of SearchEngine::Impl (TSAN).
Store and return a shared_ptr snapshot so diagnostic readers pin the
engine for the duration of getConfig/health checks.

Also adds the cautious vectorWeight 0.30→0.20 multi-corpus xplan plan.

* feat(search): route vectors through cached topology

Build and reuse validated topology snapshots, rank routed members by query similarity, and narrow the vector leg to the accepted document set with explicit work diagnostics.

Remove the retired HDBSCAN engine and vendor dependency, preserve typed topology policy through search tuning, and cover the runtime/configuration contracts.

* feat(bench): consolidate search decision plans

Enforce deterministic experiment identity and declared baselines, expose routed/global vector work metrics, and register the focused benchmark contracts.

Promote the compact repeats=3 routing-budget gate, archive superseded topology mechanism screens, and add multi-corpus product calibration plans.

* feat(search): refine topology vector routing

* fix(search): propagate daemon readiness

* feat(bench): measure generalized memory health

* fix(cli): honor in-process fallbacks

* ci: harden smolvm debug builds

* perf(search): route topology through filtered ANN

* feat(bench): measure read-write pressure

* perf(metadata): index symbol lookups on read pool

* fix(daemon): isolate startup reads and maintenance

* feat(bench): replay isolated generalized corpora

* feat(search): add evidence routing pipeline

Replace the blocking smolvm pre-push path with host ASan/TSan validation, harden sanitizer-sensitive smoke tests, and add recovery cleanup for malformed SQLite WAL sidecars.

* refactor(search): unify topology evidence path

Remove classic and sidecar fusion lanes so topology augments the recall-preserving ANN and lexical candidate pool through one product path.

* refactor(bench): prune superseded search lanes

Measure the topology-plus-ANN product path with stable experiment identity and remove obsolete sidecar and tiered controls.

* docs(search): retire stale experiment notes

Keep the benchmark handoff focused on the topology-plus-ANN product lane and its active decision plans.

* refactor(search): prune dead search surfaces

Remove unused fusion, reranker, policy, and router abstractions.
Bound topology materialization and keep document trace payloads opt-in.

* fix(cli): clear build warnings

* fix(xplan): reject stale run identity

* refactor(search)!: remove legacy query stack

Replace the unused AST/ranker/post-processor surface with focused facet aggregation used by product search.

BREAKING CHANGE: removes query parser, result ranker, search filter, and SearchResults container APIs from yams_search.

* refactor(search): type value stage traces

Remove synthetic ComponentResult markers for embedding and concept stages. Preserve failure and timeout states instead of overwriting them with fake successful results.

* refactor(search): isolate benchmark env overlays

Move test-only search environment parsing behind an injectable internal adapter. Keep all existing overlay keys and tuner pin semantics while restoring SearchEngineBuilder to composition.

* refactor(search): unify topology routing options

Snapshot topology policy once at the assist boundary and pass it through routing sessions and diagnostics. Remove repeated scalar copying without changing routing behavior or metric keys.

* fix(search): unify tuner config ownership

Use one complete config-to-params overlay for runtime seeding and no-tuner policy resolution. Reseed attached tuners on setConfig so reported and executed configuration cannot diverge.

* fix(search): snapshot tuner state per query

Read tuned config, params, and state under one lock before routing. Add a TSAN correlation test so adaptive observation cannot produce a torn logical query snapshot.

* fix(search): enforce topology routing contract

Generated configs must preserve hybrid-assist shadow routing, while daemon-backed search must abstain when published topology artifacts are stale. Keep standalone validation and global ANN recall intact.

* fix(daemon): let SQLite reclaim its file

Directly resizing a live database from sampled page counts can truncate pages allocated by concurrent writers. VACUUM must remain the only file-reclamation mechanism.

* fix(metadata): tolerate missing symbol FTS

Readiness lookups can race an unavailable optional FTS migration. Retain the indexed fast path, but retry against the base table when prepare or cached-statement execution proves the capability absent.

* build(fuzz): drop removed query parser target

The optional AFL build still referenced the deleted legacy query parser API and could no longer compile.

* fix(bench): include writes in drain oracle

A zero post-ingest queue is not durable drain while coordinated writes remain queued or in flight.

* fix(daemon): vacuum padded WAL databases safely
2026-07-13 20:26:43 -04:00

3486 lines
130 KiB
Meson
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!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/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'],
env: { 'LD_LIBRARY_PATH': _test_env_ld_library_path },
timeout: 300 # Comprehensive tests including performance metrics
)
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