Translate HTTP capabilities, download, networking, and login tests exactly #17

Closed
opened 2026-08-08 08:13:46 +00:00 by hugo · 2 comments
Owner

Objective

Translate tests for caps HTTP clients, rate limiting, event queues, downloads, network/simulator behavior, GridClient, login, and lifecycle operations.

Deliverables

  • Port fake handlers/servers and request recordings into deterministic Rust fixtures.
  • Preserve method, URL, headers, content type, body, retry, redirect, timeout, cancellation, progress, deduplication, and event ordering assertions.
  • Keep live-server categories ignored by default rather than deleting them.

Validation

  • Offline tests compile without opening real network connections during setup.
  • Failures occur at unimplemented public calls.
  • Live tests document required environment and remain opt-in.

Prerequisite

Milestone 02 must provide the complete callable public API shim. Keep all production behavior standardized as unimplemented.

Project constraints

  • Translate the original test semantics exactly; do not weaken assertions, tolerances, inputs, errors, ordering, or interaction expectations.
  • Tests must exercise the mapped Rust API and must never call LibreMetaverse/.NET as their implementation.
  • Expected C# exceptions map to specific Rust error variants; an unimplemented panic must remain a failure.
  • Do not implement production behavior during this milestone. Update parity metadata and handover status with the change.
## Objective Translate tests for caps HTTP clients, rate limiting, event queues, downloads, network/simulator behavior, GridClient, login, and lifecycle operations. ## Deliverables - Port fake handlers/servers and request recordings into deterministic Rust fixtures. - Preserve method, URL, headers, content type, body, retry, redirect, timeout, cancellation, progress, deduplication, and event ordering assertions. - Keep live-server categories ignored by default rather than deleting them. ## Validation - Offline tests compile without opening real network connections during setup. - Failures occur at unimplemented public calls. - Live tests document required environment and remain opt-in. ## Prerequisite Milestone 02 must provide the complete callable public API shim. Keep all production behavior standardized as unimplemented. ## Project constraints - Translate the original test semantics exactly; do not weaken assertions, tolerances, inputs, errors, ordering, or interaction expectations. - Tests must exercise the mapped Rust API and must never call LibreMetaverse/.NET as their implementation. - Expected C# exceptions map to specific Rust error variants; an unimplemented panic must remain a failure. - Do not implement production behavior during this milestone. Update parity metadata and handover status with the change.
hugo added this to the 03 - Full semantic test translation milestone 2026-08-08 08:13:46 +00:00
hugo added the enhancement label 2026-08-08 08:13:46 +00:00
Author
Owner

Implemented in 069e636 (Translate network lifecycle parity tests).

Implementation:

  • reviewed and translated all seven issue-owned cases from the pinned upstream: four deterministic HTTP/download cases and three live GridClient/network cases
  • added a cross-platform stdlib request/response recording handler so method, URL, content type, body, headers, status, response bytes, delay, and send counts remain observable without binding a socket
  • preserved retry=1, five-second timeout, canceled-token typed-error assertion, same-URI in-flight deduplication, non-HTTP Location/Content-Location regression data, login lifecycle, ObjectUpdate ordering, and event-queue timeout behavior
  • kept all three RequiresLiveServer cases ignored by default and documented LMVTestAgentUsername/LMVTestAgentPassword; they remain explicitly runnable with --ignored
  • added a typed Cancelled error and observable cancellation token/source contract while every mapped production HTTP/download/network body remains Error::NotImplemented
  • updated parity/handover metadata to 149 translated, 3 ignored-live, 4 benchmark-reviewed, 1,133 pending, 0 drift

The pinned upstream contains no standalone rate-limiter NUnit case; rate-limiter exposure is only part of GridClient lifecycle, so no synthetic case was invented.

Verification (all green):

  • cargo fmt --all -- --check
  • mapping, shim, API coverage, surface, and parity generator checks
  • Python generator unit tests
  • cargo test -p libremetaverse-types
  • cargo check --workspace --all-targets
  • locked API compile check
  • cargo test --workspace --no-run
  • cargo clippy --workspace --all-targets --all-features -- -D warnings
  • cargo doc --workspace --no-deps

Isolation runs: the default network_semantics run executed four offline cases and ignored three live cases; every offline failure was at its first exact public failure-only shim and no socket was opened. The explicit --ignored run executed all three live cases and stopped at GridClient construction before credentials or network access in the current failure-only build.

Implemented in 069e636 (Translate network lifecycle parity tests). Implementation: - reviewed and translated all seven issue-owned cases from the pinned upstream: four deterministic HTTP/download cases and three live GridClient/network cases - added a cross-platform stdlib request/response recording handler so method, URL, content type, body, headers, status, response bytes, delay, and send counts remain observable without binding a socket - preserved retry=1, five-second timeout, canceled-token typed-error assertion, same-URI in-flight deduplication, non-HTTP Location/Content-Location regression data, login lifecycle, ObjectUpdate ordering, and event-queue timeout behavior - kept all three RequiresLiveServer cases ignored by default and documented LMVTestAgentUsername/LMVTestAgentPassword; they remain explicitly runnable with --ignored - added a typed Cancelled error and observable cancellation token/source contract while every mapped production HTTP/download/network body remains Error::NotImplemented - updated parity/handover metadata to 149 translated, 3 ignored-live, 4 benchmark-reviewed, 1,133 pending, 0 drift The pinned upstream contains no standalone rate-limiter NUnit case; rate-limiter exposure is only part of GridClient lifecycle, so no synthetic case was invented. Verification (all green): - cargo fmt --all -- --check - mapping, shim, API coverage, surface, and parity generator checks - Python generator unit tests - cargo test -p libremetaverse-types - cargo check --workspace --all-targets - locked API compile check - cargo test --workspace --no-run - cargo clippy --workspace --all-targets --all-features -- -D warnings - cargo doc --workspace --no-deps Isolation runs: the default network_semantics run executed four offline cases and ignored three live cases; every offline failure was at its first exact public failure-only shim and no socket was opened. The explicit --ignored run executed all three live cases and stopped at GridClient construction before credentials or network access in the current failure-only build.
hugo closed this issue 2026-08-08 13:04:28 +00:00
hugo reopened this issue 2026-08-08 14:24:29 +00:00
Author
Owner

Implemented and pushed in commit 6d4d9ad.

  • Replaced all 7 owned NUnit invocations with explicit Rust tests that call mapped public APIs: 3 DownloadManager cases, the non-HTTP Location HttpCapsClient regression, GetGridRegion, DetectObjects, and CapsQueue.
  • Added async deterministic HTTP handlers with exact request/response recording, content headers/body/status, 200 ms in-flight dedup timing, 5 second download bounds, typed cancellation, and subscription/event ordering. Offline setup opens no sockets.
  • Preserved the live fixture setup, login variants, 30/45 second timeouts, movement setting, ObjectUpdate callback, event queue wait, region checks, logout, and disposal. GRID_USER, GRID_PASSWORD, and GRID_LOGIN_URL are loaded from the environment or ignored workspace .env without exposing values. Live tests are conditionally ignored only when any credential is absent; with credentials present they run automatically. .env.example documents the shape.
  • Corrected mutable nested API mappings for GridClient.Self, GridClient.Settings, and Settings.Timing; production APIs remain standardized unimplemented failures.
  • Audited earlier translated tests: no previous reviewed RequiresLiveServer/ignored live-grid cases existed; the only earlier login reference is compile-only and cannot perform network work.
  • Parity is now pending=1133, translated=149, ignored-live=3, benchmark=4, drifted=0.

Local verification (no Actions): formatting; mapping/shim/surface regeneration checks; API coverage; parity audit; generator unit tests; workspace/all-target check; locked downstream API compile; workspace test no-run; clippy with warnings denied; rustdoc with warnings denied. The issue test target selected all 7 cases with the present .env and produced 0 passes / 7 expected failures at GridClient or HttpCapsClient NotImplemented members. A copied checkout without credentials reported the live case ignored with the documented reason.

Implemented and pushed in commit 6d4d9ad. - Replaced all 7 owned NUnit invocations with explicit Rust tests that call mapped public APIs: 3 DownloadManager cases, the non-HTTP Location HttpCapsClient regression, GetGridRegion, DetectObjects, and CapsQueue. - Added async deterministic HTTP handlers with exact request/response recording, content headers/body/status, 200 ms in-flight dedup timing, 5 second download bounds, typed cancellation, and subscription/event ordering. Offline setup opens no sockets. - Preserved the live fixture setup, login variants, 30/45 second timeouts, movement setting, ObjectUpdate callback, event queue wait, region checks, logout, and disposal. GRID_USER, GRID_PASSWORD, and GRID_LOGIN_URL are loaded from the environment or ignored workspace .env without exposing values. Live tests are conditionally ignored only when any credential is absent; with credentials present they run automatically. .env.example documents the shape. - Corrected mutable nested API mappings for GridClient.Self, GridClient.Settings, and Settings.Timing; production APIs remain standardized unimplemented failures. - Audited earlier translated tests: no previous reviewed RequiresLiveServer/ignored live-grid cases existed; the only earlier login reference is compile-only and cannot perform network work. - Parity is now pending=1133, translated=149, ignored-live=3, benchmark=4, drifted=0. Local verification (no Actions): formatting; mapping/shim/surface regeneration checks; API coverage; parity audit; generator unit tests; workspace/all-target check; locked downstream API compile; workspace test no-run; clippy with warnings denied; rustdoc with warnings denied. The issue test target selected all 7 cases with the present .env and produced 0 passes / 7 expected failures at GridClient or HttpCapsClient NotImplemented members. A copied checkout without credentials reported the live case ignored with the documented reason.
hugo closed this issue 2026-08-08 16:31:31 +00:00
Sign in to join this conversation.