Implement remaining TestClient service commands (#94)
This commit is contained in:
@@ -3,8 +3,26 @@
|
||||
The `test-client` binary is a native Rust multi-client shell. It does not load
|
||||
the former C# executable or start a CLR process. The command registry owns the
|
||||
implemented system, communication, inventory, appearance, asset, movement,
|
||||
object, parcel, estate, and grid commands, and reports the remaining upstream
|
||||
targets through `pending_test_client_commands()`.
|
||||
object, parcel, estate, grid, agent, friends, groups, directory, and statistics
|
||||
commands. `pending_test_client_commands()` now reports only the two explicitly
|
||||
owned voice-native adapters (`ParcelVoiceInfo` and `VoiceAcountCommand`).
|
||||
|
||||
## Social, directory, and statistics behavior
|
||||
|
||||
Directory searches use native correlated, paged result streams and retain the
|
||||
upstream 20-second response bound. Group cache, member, and role requests are
|
||||
correlated with their native events and preserve the upstream timeouts. Friend
|
||||
mapping, UUID/name resolution, event details, and group operations propagate
|
||||
shell cancellation.
|
||||
|
||||
`who` maintains a live coarse-location roster and resolves display names;
|
||||
`bots` also tracks source UUIDs from decoded viewer-effect packets. Profile
|
||||
cloning combines the AgentProfile capability with the matching legacy interests
|
||||
reply to replace profile text, images, URL, interests, and picks before joining
|
||||
and activating the target's public groups. `play list` exposes all 135 built-in
|
||||
animations from the pinned source catalog and also accepts arbitrary animation
|
||||
asset UUIDs. Statistics come from each simulator's thread-safe native counters.
|
||||
Directory and collection results are bounded at 65,535 entries.
|
||||
|
||||
## World command behavior
|
||||
|
||||
@@ -39,6 +57,13 @@ terrain download/upload additionally require `--allow-estate-actions`.
|
||||
Consequently the default invocation cannot move an avatar, alter or create an
|
||||
object, upload an asset, or invoke an estate-owner action.
|
||||
|
||||
Profile cloning, generic messages, animation starts, touches, group activation,
|
||||
invitations, joins, and leaves use the same two-part mutation gate. Read-only
|
||||
friend, group, directory, region, uptime, dilation, and statistics commands do
|
||||
not require a gate. Profile cloning and direct group joins additionally require
|
||||
`--allow-spending`, because an open group can charge an enrollment fee and the
|
||||
client cannot safely infer that fee before every UUID-based join.
|
||||
|
||||
Output paths reject parent-directory traversal. Timeouts, cancellation, file
|
||||
limits, result limits, and linkset limits apply equally to live and fake-grid
|
||||
runs. Passwords and login secrets continue to pass through the shell's common
|
||||
@@ -52,13 +77,22 @@ Fake scripts can seed the same command layer with `!world-region`,
|
||||
`!world-agent-location`, `!world-estate`, `!world-asset`, and `!world-syntax`
|
||||
tab-separated directives. These fixtures never open a network connection.
|
||||
|
||||
The service layer additionally accepts `!service-avatar`, `!service-friend`,
|
||||
`!service-group`, `!service-group-result`, `!service-group-member`,
|
||||
`!service-group-role`, `!service-person`, `!service-classified`,
|
||||
`!service-event`, `!service-event-info`, `!service-land`, `!service-place`,
|
||||
`!service-sim`, `!service-animation`, and `!service-utilization[-row]` fixtures.
|
||||
|
||||
Run the issue-focused compatibility gate with:
|
||||
|
||||
```text
|
||||
cargo test -p libremetaverse-programs --test test_client_world_cli
|
||||
cargo test -p libremetaverse-programs --test test_client_services_cli
|
||||
```
|
||||
|
||||
The gate drives every command owned by the movement/object/land/grid issue,
|
||||
checks the exact fake backend calls, verifies destructive-operation guards,
|
||||
round-trips an exported linkset through import, compares two exports byte for
|
||||
byte, and validates generated terrain, texture, and TGA files.
|
||||
The world gate drives every command owned by the movement/object/land/grid
|
||||
issue, checks the exact fake backend calls, round-trips a linkset through
|
||||
import, and validates generated assets. The services gate drives every one of
|
||||
the 28 remaining non-voice commands in a single offline session, verifies the
|
||||
destructive-operation guards, and proves the pending inventory contains only
|
||||
the two explicitly owned voice adapters.
|
||||
|
||||
Reference in New Issue
Block a user