# End-to-end tests with the official MongoDB Node.js driver These exercise mongo-light from a real driver over TCP: full CRUD, query operators, aggregation, error codes, concurrent clients, and crash recovery. ## Setup ```sh cd tests/e2e npm init -y >/dev/null npm install mongodb ``` ## Run Start the server, then run the suites against it (defaults to port 27020): ```sh zig build zig-out/bin/mongo-light --port 27020 --db /tmp/ml-e2e.log --ttl-sweep-secs 1 & node tests/e2e/e2e.js # CRUD + operators + aggregate + errors (29 checks) node tests/e2e/e2e2.js concurrent # 8 clients: 4 writers + 4 readers (2 checks) node tests/e2e/e2e2.js crash-a # write 50 docs, then kill -9 the server node tests/e2e/e2e2.js crash-b # restart and verify all 50 survived node tests/e2e/e2e3.js # secondary indexes: unique/sparse/compound (16 checks) node tests/e2e/e2e4.js # TTL indexes: expiry + rejected specs (15 checks) ``` `e2e4.js` needs the server started with `--ttl-sweep-secs 1` (the default is 60 seconds, which is longer than the suite waits); the other suites do not care about the flag. Rebuild with `zig build` after any change under `src/` before restarting the server: `zig build test` compiles the test binary only and leaves `zig-out/bin/mongo-light` stale, so the suites keep running against the old rules and report failures that the source no longer explains. `e2e2.js concurrent` is safe to repeat against a running server (it drops its collection first); `crash-a`/`crash-b` are two halves of one scenario.