mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2026-03-15 06:52:44 +03:00
6.6 KiB
6.6 KiB
Hardware Test Matrix
Date: 2026-02-12
Scope: Platform-specific stability and release validation for squeezelite-esp32.
Purpose
Define a practical hardware-focused test strategy that complements host/unit tests and acknowledges embedded uncertainty under real-world load.
This matrix is designed to:
- maximize platform stability
- prioritize high-impact failures first
- provide clear release gates per hardware profile
Use together with:
documentation/TESTING_CHARTER.mddocumentation/CONTRACT_TEST_TEMPLATE.md
Platforms
Mapped to build profiles used in this repo:
i2s->build-scripts/I2S-4MFlash-sdkconfig.defaultsmuse->build-scripts/Muse-sdkconfig.defaultssqueezeamp->build-scripts/SqueezeAmp-sdkconfig.defaults
Priority Levels
P0: release blocking, must passP1: strong confidence tests, expected to pass before releaseP2: extended coverage/soak, required for nightly and milestone validation
Execution Tiers
- PR smoke: fast subset (
P0only, selectedP1) - Nightly: full
P0 + P1and selectedP2 - Pre-release: full matrix, all
P0/P1, mandatoryP2soak and fault-injection
Core Hardware Matrix
| ID | Area | Test Path | Priority | Platforms | Pass Criteria |
|---|---|---|---|---|---|
| HW-BOOT-001 | Boot | Cold boot to operational state | P0 | all | boots successfully within target time budget; no panic/reset loop |
| HW-BOOT-002 | Boot | Warm reboot (esp_restart) loop x50 |
P0 | all | no stuck boot, no boot partition confusion, stable counters |
| HW-BOOT-003 | Boot identity | Platform profile and key GPIO map sanity | P0 | all | expected FW_PLATFORM_NAME, expected peripheral init paths |
| HW-STOR-001 | Storage/NVS | NVS read/write/reset cycle | P0 | all | persisted values survive reboot, reset restores defaults |
| HW-STOR-002 | Storage/NVS | Corrupt/partial NVS handling | P1 | all | graceful recovery path, no crash, defaults restored or fallback used |
| HW-STOR-003 | SPIFFS | SPIFFS mount + defaults file read | P0 | all | mount succeeds, required files loaded, clear error if missing |
| HW-NET-001 | Wi-Fi | AP connect + DHCP + DNS | P0 | all | connected state reached, IP assigned, DNS query success |
| HW-NET-002 | Wi-Fi resilience | AP loss/recovery reconnect | P0 | all | reconnect within SLA, no task deadlock or watchdog |
| HW-NET-003 | Service discovery | mDNS announce/discover | P1 | all | service visible on LAN; no crash if mDNS unavailable |
| HW-NET-004 | Ethernet | Link up/down + DHCP + traffic | P1 | ethernet-capable | state transitions handled cleanly; no memory growth trend |
| HW-AUD-001 | Audio output | Start/stop playback, no signal path errors | P0 | all | successful init and playback lifecycle, no panic |
| HW-AUD-002 | Audio behavior | Format/rate transitions during playback | P1 | all | transitions without hard fault; bounded glitch behavior |
| HW-AUD-003 | Audio resilience | Underrun/rebuffer recovery | P1 | all | playback recovers, no runaway CPU or deadlock |
| HW-AUD-004 | Controls | Volume/mute/jack/speaker path checks | P1 | platform-specific | control actions reflected correctly in output state |
| HW-UI-001 | Inputs | Button/rotary/IR event mapping | P1 | platform-specific | expected commands dispatched; no ghost/repeat storm |
| HW-UI-002 | Display | Display init + update loop | P1 | display-capable | stable render/update path, no crash under repeated updates |
| HW-PWR-001 | Battery/charger | Battery telemetry and status logic | P1 | battery-capable | values in expected range; no invalid-state loop |
| HW-BT-001 | Bluetooth | Pair/connect/disconnect cycles | P1 | bt-enabled | stable lifecycle across repeated cycles |
| HW-BT-002 | Bluetooth resilience | BT stack restart/recovery | P2 | bt-enabled | stack recovers without reboot or hard fault |
| HW-OTA-001 | OTA | Happy-path OTA update | P0 | all | new image boots and reports expected version |
| HW-OTA-002 | OTA failure | Interrupted OTA (network/power cut) | P0 | all | safe fallback/rollback path works; device recoverable |
| HW-OTA-003 | Recovery partition | Recovery boot and exit path | P0 | all | recovery mode entry/exit consistent and deterministic |
| HW-PWRF-001 | Power fault | Brownout/power-cut during write/OTA | P0 | all | no bricking; deterministic recovery behavior |
| HW-SOAK-001 | Soak | 12h playback + periodic reconnect | P2 | all | no crash/reset; memory trend within threshold |
| HW-SOAK-002 | Soak | 24h mixed load (stream/control/network churn) | P2 | all | no regressions in responsiveness and stability |
Platform-Specific Focus
i2s (generic baseline)
- Emphasize:
- audio path stability under varied sample rates
- generic GPIO/peripheral defaults
- OTA + recovery baseline behavior
- Required:
- all
P0 HW-AUD-002,HW-AUD-003,HW-SOAK-001
- all
muse (portable/battery-centric)
- Emphasize:
- battery telemetry, charger events, low-power edge conditions
- UI/display responsiveness under battery/network churn
- Wi-Fi reconnect after sleep-like or low-power transitions
- Required:
- all
P0 HW-PWR-001,HW-UI-001,HW-UI-002,HW-SOAK-001
- all
squeezeamp (amp/control-centric)
- Emphasize:
- amplifier-related controls, output routing, jack/speaker transitions
- thermal/long-play stability proxies (extended playback)
- network resilience during active playback
- Required:
- all
P0 HW-AUD-004,HW-NET-002,HW-SOAK-001,HW-SOAK-002
- all
Release Gates
A release is eligible only if:
- every target platform passes all
P0tests - no unresolved regression in previously passing
P1tests - at least one
P2soak run per platform completed within release window - OTA/recovery tests (
HW-OTA-001/002/003) pass on all platforms
Observability Requirements During Tests
Collect at minimum:
- reset reason, panic reason, boot count, recovery boot count
- heap free/minimum and largest block trend
- task stack high-water marks for critical tasks
- network reconnect counters and durations
- OTA stage/result events
A test can be marked "pass with warning" only for non-P0 tests and only with a filed follow-up issue and owner.
Failure Triage Rules
P0fail: immediate release block- repeated
P1fail on same platform: treat as release risk, escalate to block unless waived - any soak fail with crash/reset: open defect with logs and reproduction steps before next release candidate
Suggested First Implementation Wave
- Automate all
P0checks for each platform profile. - Add nightly
P1network/audio/UI subset. - Add 12h soak (
HW-SOAK-001) with telemetry capture and trend thresholds. - Expand to full pre-release matrix once stable signal quality is established.