Testing & E2E¶
Overview¶
Tagentacle uses a dedicated test package (test-bringup) for end-to-end integration testing across the entire stack.
┌─────────────┐ ┌──────────────────┐ ┌──────────────┐
│ test-bringup│────▶│ tagentacle-py-core│────▶│ Daemon │
│ (pytest) │ │ (Python SDK) │ │ (Rust binary) │
│ │────▶│ tagentacle-py-mcp │ │ │
└─────────────┘ └──────────────────┘ └──────────────┘
Repo Structure¶
| Repository | Tests | What it covers |
|---|---|---|
| tagentacle | cargo test |
Daemon unit tests (Rust) |
| python-sdk-core | pytest |
SDK unit tests (Python) |
| python-sdk-mcp | pytest |
MCP bridge unit tests |
| test-bringup | pytest |
E2E integration tests |
Running E2E Tests Locally¶
Prerequisites¶
- Python ≥ 3.10
- Compiled
tagentacledaemon binary
Quick Start¶
# Build daemon
cd tagentacle && cargo build --release
# Install SDK (editable)
pip install -e python-sdk-core[validation]
pip install -e python-sdk-mcp
# Install test deps
pip install -e test-bringup[dev]
# Run!
TAGENTACLE_BIN=tagentacle/target/release/tagentacle pytest test-bringup -v
Daemon Auto-Discovery¶
The test fixture searches for the daemon binary in this order:
TAGENTACLE_BINenvironment variable../tagentacle/target/release/tagentacle(workspace layout)- System
PATH
E2E Test Coverage¶
| Test File | Scenarios |
|---|---|
test_pubsub.py |
Single subscriber, multi-subscriber fanout, topic isolation, message ordering |
test_service.py |
System services (ping, list_nodes, list_topics), user-defined services |
test_node_events.py |
Node connect event, node disconnect event |
test_schema.py |
Strict mode validation, invalid message rejection, no-schema passthrough |
CI Pipelines¶
Per-Repo CI¶
Each repo runs its own CI on push/PR:
- tagentacle:
cargo check→clippy→test→fmt - python-sdk-core:
ruff→pytest→build - python-sdk-mcp:
ruff→pytest→build
E2E CI (test-bringup)¶
The test-bringup repo has a GitHub Actions workflow that:
- Checks out all dependent repos
- Builds the Rust daemon from source
- Installs Python SDKs
- Runs the full E2E test suite
It can be triggered manually with custom git refs:
Dependency Management Strategy¶
test-bringup uses version constraints in pyproject.toml to pin upstream SDK versions:
Workflow for upstream releases:
- Upstream repo tags a new version (e.g.,
python-sdk-corev0.4.0) - Create a branch in
test-bringup:bump/sdk-core-0.4.0 - Update the version constraint in
pyproject.toml - CI runs E2E tests against the new version
- Green → merge to main
This ensures compatibility is validated before declaring a release stable.