Files
RustProxy/docs/TEST_REPORT.md
T
2026-10-05 12:22:41 +02:00

6.7 KiB

Verification report - RustProxy 0.25.7

Scope

RustProxy 0.25.7 is a patch release focused on vhost operations and backend observability. Vhost cards now expose a direct revision-protected enable/disable action, the main Backends diagnostics table supports account-scoped persisted sort/column visibility preferences plus transient search, and the vhost editor gives the Enabled setting a distinct state treatment. Dashboard scrollbars follow the active theme. Prometheus now exports backend retry attempt/success counters and upstream-client generation, generation-request, generation-age and rotation metrics for both ordinary and Docker-discovered backends; the bundled Grafana dashboard adds matching lifecycle/retry panels. SQLite remains schema 8 and no saved-configuration migration is introduced.

Backend-table visible columns and sort order are presentation-only fields in the existing account-scoped admin_preferences document; search text is not persisted and none of these view settings alter RustProxy configuration. The quick vhost action changes only the selected vhost enabled flag through the same saveSection("vhosts", ...) revision/CSRF path as other vhost edits. Existing backend client recycling defaults remain unchanged.

Implemented automated coverage

Rust unit tests in src/web_server/tests.rs cover GET/HEAD/index/slash redirect, MIME/length, validators, valid/invalid range handling, If-Range, escaped/repeated directory listings, per-directory index-before-listing fallback, generic 403/HEAD behavior, MIME overrides/default MIME, cache rules, source headers, try_files, rewrite redirect/internal behavior, .htaccess WordPress-style front-controller routing, nested DirectoryIndex/MIME/Header/Expires behavior, strict-mode rejection and PHP-source protection, hardening probe/method blocking and fingerprint-header stripping, precompressed representations/ranges, download headers, PHP FastCGI fixture execution/failure-source-disclosure behavior, request-body 413 enforcement, custom FastCGI/PHP_VALUE validation and reserved-parameter rejection, direct traversal rejection and Unix/Linux symlink policy. Upstream tests cover request-budget client generation recycling and disabled recycling; balancing tests cover the new keepalive defaults and validation bounds. src/traffic/tests.rs includes bounded-table, effective-client-IP view and fixed Prometheus User-Agent/method family coverage. Configuration tests cover pure static vhosts without a pool, mixed Web Server/Reverse Proxy routing, reuse of one Web Service by multiple vhosts, unknown service references and backward-compatible default source behavior. Vhost tests cover method-policy normalization/allow/block behavior, database tests cover retained configuration revision documents, actor metadata and previous-revision lookup, and admin tests cover account-scoped/CSRF-protected view preferences including legacy preference defaults, backend-table columns/sort persistence and invalid-column rejection, plus restoring revision 1 as revision 3 while preserving the previous document and emitting config.restore. ACL tests include encoded traversal/separator/malformed-encoding cases.

Rust-independent release checks additionally validate UI/JSON/language/source contracts and reproducible packaging.

During the prior 0.25.4 compiler gate, an external build exposed one module-privacy error in the history split (CONFIG_HISTORY_CAPACITY was private to db::history) and one unused country_resolved assignment in the location GeoIP branch. Both were corrected before the 0.25.5 baseline: the capacity is exposed to its parent module with pub(super), referenced through history::CONFIG_HISTORY_CAPACITY, and the dead assignment is removed. This workspace still has no Rust/Cargo toolchain, so compiler confirmation of the 0.25.7 tree remains a release-host gate.

Modular source-tree verification

  • src/admin/documentation.rs was split so the embedded Reader document catalog lives in src/admin/documentation/documents.rs; both files now stay below the 500-line Rust module limit without changing Reader behavior.
  • The Rust module contract now recognizes the existing *_tests.rs naming convention, and the documentation contract validates embedded documents independently of include_str! line wrapping.
  • python3 scripts/rust_module_contracts.py: PASS.
  • python3 scripts/source_module_contracts.py: PASS. Dashboard JavaScript, Docker Agent Go implementation and operational Python modules remain within their source-size contracts.
  • python3 scripts/docs_check.py: PASS. The documentation index, authenticated Reader/API split and local Markdown links are consistent.
  • Cargo parsing/type checking remains a release-host requirement because this workspace has no Rust/Cargo toolchain.

Verification status in this workspace

Check Status
python3 scripts/langs_check.py PASS
node --check src/admin/web/vhosts/render.js PASS
node --check src/admin/web/vhosts/editor.js PASS
0.25.7 vhost/dashboard source contracts PASS: quick enable/disable, backend search/sort/column controls, account-scoped backend table preferences, themed scrollbars and distinct Enabled editor control are present
0.25.7 Prometheus/Grafana source contracts PASS: retry/client-lifecycle families exist for ordinary and Docker backends and matching dashboard queries are present
python3 scripts/memory_contracts.py PASS
python3 scripts/web_server_contracts.py PASS
python3 scripts/security_contracts.py PASS
python3 scripts/security_dependency_contracts.py PASS
python3 scripts/source_module_contracts.py PASS
python3 scripts/rust_module_contracts.py PASS
python3 scripts/docs_check.py PASS
node scripts/web_service_ui_test.mjs PASS
OpenAPI/language/Grafana JSON parse PASS
go test ./... in docker-agent PASS
python3 scripts/check_source.py PASS; explicitly reports Rust parsing/types/runtime not verified
python3 scripts/release_smoke.py PASS, including SQLite/backup/upgrade, Debian/Grafana and reproducible source-archive contracts
./dev.sh test Static/security/UI/smoke gates PASS; exits 127 when it reaches Rust because Cargo is unavailable
./dev.sh check BLOCKED: Rust/Cargo toolchain unavailable in this workspace
cargo fmt --all, cargo check --locked --all-targets, cargo test --locked --all-targets BLOCKED: Rust/Cargo toolchain unavailable in this workspace

All Rust-independent release gates available in this workspace pass. Compiler formatting, parsing, type checking, linking and Rust unit/integration tests still require a Rust-enabled release host before treating the archive as compiler-verified production output.