Files
Egor Rachkovskii 30a4f0195d test(e2e): make RC08 actually check causal ordering
As ported, the test proved nothing about causal order. It waits for each
message to land before sending the next, so B seeing [m1, m3] follows from
the test's own sequencing and would hold with causal history switched off
entirely.

It now checks the claim against the wire. When A sends m3 its SDS history
holds m1 (sent) and m2 (received), so m3's envelope must reference m1's
message id. The envelope is reachable: channel encryption is a noop, so the
messaging-layer message_received event carries it verbatim — the same path
`wire_payload` and RC10 already use. Ids are 64-char hex the minprotobuf
embeds as-is, and the only other id-bearing field, the bloom filter, stores
hashed bits. Mutating the expected id reddens the new assertion; the observed
history is [m1, m2] as predicted.

Renamed accordingly, and the settle constant no longer claims to be about
causal history. RC13 carried the same overclaim twice over: a stray "causal
order" in a failure message, and a docstring attributing its result to a
restored SDS history that its assertions cannot distinguish from a fresh one.

The overclaim came over verbatim from the interop suite, where it has been
since the test was written.
2026-08-17 20:40:25 +01:00
..

tests-e2e — logos-delivery API/e2e tests (Python)

End-to-end tests for liblogosdelivery, driven through the Python bindings (C-FFI). Migrated from logos-delivery-interop-tests (the wrapper / send-API suite).

Layout

  • src/ — test framework (node wrappers, steps, helpers)
  • tests/wrappers_tests/ — the API/e2e scenario tests (test_s02…s31)
  • vendor/logos-delivery-python-bindings/waku/wrapper.py — CFFI binding (NodeWrapper); it dlopens ../lib/liblogosdelivery.so

Run locally

# 1. Build the shared library and place it where the binding looks for it
./tests-e2e/scripts/prepare_lib.sh

# 2. Python env + deps
python -m venv .venv && source .venv/bin/activate
pip install -r tests-e2e/requirements.txt

# 3. Run (from tests-e2e/)
cd tests-e2e
pytest tests/wrappers_tests -m "not docker_required and not slow"   # 60 pure-binding tests, the CI selection
pytest tests/wrappers_tests -m docker_required                      # 5 tests that also need a Docker nwaku peer (S11/S19/S20/S25/S31)
pytest tests/wrappers_tests -m slow                                 # 1 SDS-R repair test, minutes long

CI

.github/workflows/e2e-api-tests.yml (called from ci.yml, needs: build) downloads the liblogosdelivery artifact produced by the build job and runs the non-docker subset on every PR — so a protocol change and its e2e test land in the same PR.

The slow test is deselected there and there is no scheduled e2e job, so nothing runs it automatically; run it by hand when touching SDS-R.