Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Interoperability testing

Rust integration tests in crates/server/tests/ exercise the router, database, delivery queue, signatures, and serialization using pinned ActivityPub fixtures. The Python suite in e2e/ tests HTTPS exchanges with running peer servers.

The Python E2E suite is currently tied to one developer’s machine and an ad hoc local setup. It is not portable or expected to be usable elsewhere as provided; it is included for transparency and as examples. For release builds, the suite is omitted by default (./dev release --skip-e2e makes that explicit); the portable application tests and packaged-image restore drill still run.

Developer’s live-suite workflow

The existing machine-specific workflow runs from the source checkout:

./dev provision-peers
./dev up
./dev e2e-full

Provisioning uses the Compose fixtures and upstream revisions in e2e/peers/. It prepares local TLS and starts the required peer fleet. Generated checkouts, credentials, certificates, and persistent state are ignored. To use an existing fleet, configure the peer paths and URLs in .env.example.

Keep the generated matrix with release evidence. It records outcomes, skips, expected failures, checkout differences, and running image IDs. A passing test establishes the exchange it asserts for that peer configuration. Skipped cases remain unverified. The source checkout’s e2e/README.md lists the release policy and report format.

Identity proofs with Mitra

./dev e2e tests/test_identity_proofs_mitra.py -v checks FEP-c390 Ed25519 proofs through both servers’ client APIs. It covers initial discovery at Mitra, verified actor Updates and removal in both directions, and preservation of Mitra’s original signed statement. Update checks read cached accounts.

Exchanges between Plamenu servers

e2e/tests/test_plamenu2_*.py uses a second instance at https://plamenu2.local. The test session creates it from the working tree with its own database, media directory, and port, then tears it down. e2e/plamenu_e2e/ephemeral.py manages this instance and the self-destruct peer.

These tests cover receiving Plamenu’s own quotes, reactions, group moderation, events, articles, collections, and follower migration. They check that the two ends agree; foreign-peer tests are still needed to check interoperability.

Check content presentation

For articles, events, media, and other structured posts, inspect both the received ActivityPub object and the remote client’s presentation. Successful delivery does not establish that the title, body, attachments, or controls are usable. Protocol details describes the wire format.

Report a federation problem

Include both software versions, the affected actor/object URLs where safe, delivery direction, redacted request/response headers and ActivityPub JSON, and whether authorized fetch is enabled. State whether the object arrived through an inbox or was fetched by URL. Remove tokens, cookies, private content, and signing keys before sharing evidence.