End-to-End Real Daemon Integration Suite and CLI Tooling
Source:
docs/enhancements/0010-e2e-integration-suite/README.md· Status:implemented· Area:core· Milestone:—| Field | Value | | :--- | :--- | | CEP Number |0010| | Title | End-to-End Real Daemon Integration Suite and CLI Tooling (test/e2e) | | Authors |@cubeplex-arch| | Status |implemented| | Target Version |v0.2.0| | Created |2026-11-10| | Last Updated |2026-11-10|
Summary
Section titled “Summary”This CEP delivers an automated End-to-End (E2E) integration test suite (test/e2e/e2e_test.go) and Python SDK E2E verification (sdks/python/tests/test_e2e_live.py) that boots the real compiled Rust binaries (bin/podd-init and bin/podd), the real Go cubepod-controller + cubepod-gateway stack, and verifies the full lifecycle, persistent sparse ext4 volume formatting/healing, background cursor logs, archive-sync, /panel/{token}/ reverse proxy, and zero-trust cpodref_ mTLS egress secret exchange in one cohesive system test.
Motivation
Section titled “Motivation”Unit tests validate individual packages in isolation. Before cutting v0.2.0 and integrating CubePod into CubePlex, we need a deterministic, automated end-to-end test suite (test/e2e) that exercises the real compiled Rust podd-init and podd binaries together with the Go Control Plane Gateway, Controller, Egress Vault, and Python SDK over real TCP sockets.
- Create
test/e2e/e2e_test.gorunning real multi-process integration tests:TestE2E_PoddInitAndSparseExt4Lifecycle: Executes the real compiledbin/podd-initbinary against a 64MB sparse block image withCUBEPOD_SKIP_PIVOT=1and directensure_ext4verification, confirminginit-state.jsonis written andbin/poddisexecvp’d as child process serving:49983.TestE2E_GatewayToRealPoddDaemon: Starts a realbin/poddRust daemon process on a live TCP port, wirescubepod-gatewayto it, and exercises foreground commands, background commands with?cursor=Nincremental log polling, process groupkill,PUT/GET /files,.tar.gzarchive-sync,pause+ transparent Auto-Resume,reset-rootfspreserving/workspace, CoWfork, and/panel/{token}/proxying to an HTTP server started insidepodd!TestE2E_PythonSDKAgainstLiveGateway: Runs the PythonAsyncCubePodSDK (sdks/python) in a childpython3process talking over real HTTP to the live Gocubepod-gateway+ Rustpoddstack!
- Add
make test-e2etarget toMakefile.
Non-Goals
Section titled “Non-Goals”- Requiring privileged root access or cluster-admin Kubernetes credentials to run
make test-e2ein CI.
Proposal
Section titled “Proposal”Risks and Mitigations
Section titled “Risks and Mitigations”| Risk | Impact | Likelihood | Mitigation |
|---|---|---|---|
| Port collisions during parallel E2E runs | Low | Medium | Bind all test servers (podd, cubepod-gateway, in-sandbox web server) to 127.0.0.1:0 (ephemeral OS-assigned ports). |
Design Details
Section titled “Design Details”E2E Architecture Flow
Section titled “E2E Architecture Flow”[Python SDK (AsyncCubePod)] │ (real HTTP over 127.0.0.1:<gw-port>) ▼[Go cubepod-gateway + cubepod-controller] │ (real HTTP over 127.0.0.1:<podd-port>) ▼[Rust bin/podd + bin/podd-init] │ ├── Spawns background HTTP server on 127.0.0.1:<app-port> (verified via /panel/{token}/) └── Reads/writes persistent /workspace and RootFS filesTest Plan
Section titled “Test Plan”- Run
go test -v -race ./test/e2e/...andmake test.
Graduation Criteria
Section titled “Graduation Criteria”make testruns Rust unit tests, Go unit tests, and the fulltest/e2emulti-language (Python -> Go -> Rust) integration suite with 0 failures.
Upgrade / Downgrade Strategy
Section titled “Upgrade / Downgrade Strategy”- Additive
test/e2epackage.
Production Readiness Review (PRR)
Section titled “Production Readiness Review (PRR)”- Observability: Logs exact round-trip latencies for
podd-initstartup,poddcommand execution, Auto-Resume, and/panel/{token}/proxy requests.
Alternatives Considered
Section titled “Alternatives Considered”- Manual shell script testing only: Rejected because
go test ./test/e2e/...runs automatically as part ofmake testwith race detection enabled.