Test
All Python suites require the virtualenv. Locally it's ./venv (create once
with python3 -m venv venv && pip install -r tests/requirements.txt); inside
the devcontainer/CI it lives at /data/venv. The activation lines below fall
back between the two so they work in either environment. The module must be
built first (cargo build, see the build skill) for anything that loads
libfalkordb.{so,dylib}.
Rust unit tests (default choice for Rust-only changes)
cargo test -p graph
Python e2e / function / MVCC / concurrency tests
source venv/bin/activate 2>/dev/null || source /data/venv/bin/activate
pytest tests/test_e2e.py tests/test_functions.py -vv # e2e + function tests
pytest tests/test_mvcc.py tests/test_concurrency.py -vv # MVCC + concurrency tests
Run a single file/suite by narrowing the pytest args, e.g.
pytest tests/test_mvcc.py -vv.
TCK tests (openCypher language-compliance suite)
source venv/bin/activate 2>/dev/null || source /data/venv/bin/activate
TCK_DONE=tck_done.txt pytest tests/tck/test_tck.py -s # all currently-passing scenarios
TCK_INCLUDE=<path> pytest tests/tck/test_tck.py -s # only scenarios under <path>
tck_done.txtis the checked-in allow-list of scenarios expected to pass; a scenario newly failing there is a regression, one newly passing should be added to the file.- Common
TCK_INCLUDEpaths:tests/tck/features/expressions/list,tests/tck/features/expressions/map,tests/tck/features/clauses/match,tests/tck/features/clauses/return.
Flow tests (query flows against a running module instance)
cargo build # debug build required first (flow.sh defaults to target/debug)
./flow.sh
flow.sh supports env vars for narrowing/debugging a run:
TEST="tests/flow/test_function_calls" ./flow.sh— one fileTEST="tests/flow/test_function_calls:testFunctionCallsFlow.test89_JOIN" ./flow.sh— one testFAIL_FAST=1— stop on first failure, run serially (--parallelism 1)RELEASE=1— run againsttarget/releaseinstead oftarget/debug- Progress is tracked in
flow_tests_done.txt/flow_tests_todo.txt; logs land intests/flow/logs.
Notes
- CI (
rust-pr.yml) runs all of the above per PR/push, plus fuzzing and coverage — see thefuzz,profile, andcoverageskills for those. - Some flow tests against the replica (
-svc) are known-flaky under ASAN/coverage instrumentation due to a pre-existing concurrency race (atomic_refcell"already mutably borrowed"); if only those fail under those configurations, re-run before treating it as a regression.
If tests fail, analyze the output and help the user understand what went wrong.