Browser Streaming E2E Testbook
End-to-end test for the full browser streaming path: user opens hydraheadwebstream, selects an experience and district, and gets a WebRTC stream.
Prerequisites
- Access to the Hydra WireGuard network (hydraguard)
- Browser with WebRTC support
- At least one body available in the target district
Step 1: Health-check all services
Verify all 8 centrally reachable services are healthy:
# Orchestration
curl -sf http://46.225.210.188/health && echo "hydraheadwebstream: OK"
curl -sf https://hydradistrict.experiencenet.com/api/v1/health && echo "hydradistrict: OK"
curl -sf https://hydraexperiencelibrary.experiencenet.com/api/v1/health && echo "hydraexperiencelibrary: OK"
curl -sf https://hydracluster.experiencenet.com/api/v1/health && echo "hydracluster: OK"
# Stream relay
curl -sf https://hydraneckwebrtc.experiencenet.com/health && echo "hydraneckwebrtc: OK"
# Network
curl -sf https://hydraguard.experiencenet.com/api/v1/health && echo "hydraguard: OK"
# Observability
curl -sf https://hydrabodystatus.experiencenet.com/api/v1/health && echo "hydrabodystatus: OK"
curl -sf https://hydranps.experiencenet.com/api/v1/health && echo "hydranps: OK"
Expected: All return HTTP 200.
Step 2: List districts
curl -s https://hydradistrict.experiencenet.com/api/v1/districts | jq '.[]|.name'
Expected: At least one district returned. Note the district name for step 4.
Step 3: List experiences
curl -s https://hydraexperiencelibrary.experiencenet.com/api/v1/experiences | jq '.[]|.name'
Expected: At least one experience returned. Note the experience name for step 4.
Step 4: Open hydraheadwebstream and start a session
- Open browser to http://46.225.210.188
- Select an experience from the dropdown
- Select a district from the dropdown
- Click "Start" / "Connect"
Expected: UI shows connecting state.
Step 5: Verify session on hydraneckwebrtc
curl -s https://hydraneckwebrtc.experiencenet.com/api/v1/sessions | jq '.'
Expected: A session object appears with:
- Status: active/connecting
- Body IP assigned
- Moonlight process spawned
Step 6: Verify Sunshine app on body
If you have access to the body's Sunshine API:
# Replace BODY_IP with the assigned body's IP
curl -sk https://BODY_IP:47990/api/apps
Expected: The UE application is listed as a registered app.
Step 7: Verify WebRTC stream connects
In the browser, open developer console (F12):
Expected: Console shows "Connection Complete" or equivalent WebRTC connection success message. Video frames should be rendering in the browser.
Step 8: Verify hydrabodystatus shows active session
curl -s -H "Authorization: Bearer TOKEN" \
https://hydrabodystatus.experiencenet.com/api/v1/bodies | jq '.[] | select(.stream_status == "streaming")'
Expected: The assigned body shows:
stream_status: "streaming"stream_sessions: >= 1gpu_utilization: > 0
Step 9: Close browser and verify cleanup
- Close the browser tab
- Wait 30 seconds (grace period)
- Check session is cleaned up:
curl -s https://hydraneckwebrtc.experiencenet.com/api/v1/sessions | jq '.'
Expected: Session no longer listed (or marked as ended). The moonlight-web-stream process should be terminated.
Troubleshooting
| Symptom | Check | |---------|-------| | No districts in dropdown | hydradistrict health, API response | | No experiences in dropdown | hydraexperiencelibrary health, API response | | "No bodies available" | hydracluster health, check node availability | | Stream never connects | hydraneckwebrtc logs, WireGuard connectivity | | Black screen | Sunshine app registration, GPU driver on body | | No audio | hydravoice process on body, VB-Cable device |