test(acceptance): implement IO-3, IO-4, and IO-7..IO-11 onboarding tests
Some checks are pending
CI Benchmark - Fusion Loop Timing / Fusion Loop Timing Benchmark (push) Waiting to run

Adds comprehensive installation and onboarding test coverage:

IO-3: Single node end-to-end onboarding
- Fresh install -> token provisioning -> spaxel-sim --nodes 1
- Verifies discovered->online transition within 10s
- Tests label/position persistence across restart

IO-4: Multi-node fleet bring-up
- Validates 6 nodes all reach online simultaneously
- Checks non-overlapping TX slot assignment
- Verifies GDOP/coverage computation and telemetry flow

IO-7: Provisioning timeout handling
- Node goes silent after connecting
- Verifies stale/offline marking within heartbeat window
- Confirms no mothership crash

IO-8: Bad/expired token rejection
- Tests clear error response for invalid tokens
- Ensures no zombie rows created

IO-9: Duplicate MAC handling
- Two nodes with same MAC scenario
- Verifies deduplication or rejection

IO-10: Mid-onboarding interruption
- Simulator killed during onboarding
- Confirms node can reconnect without stale locks

IO-11: Firmware version skew
- Old firmware version flagged for OTA
- Onboarding completes without losing node

Closes: bf-2hi0h
This commit is contained in:
jedarden 2026-05-24 10:55:13 -04:00
parent 792064a2ae
commit be1e6f4e39
2 changed files with 1276 additions and 0 deletions

View file

@ -47,6 +47,14 @@ func TestMain(m *testing.M) {
{"IO1_FreshInstall_FirstBoot", IO1_FreshInstall_FirstBoot},
{"IO2_IdempotentRestart", IO2_IdempotentRestart},
{"IO2_UpgradeInPlace", IO2_UpgradeInPlace},
{"IO3_SingleNodeOnboarding", IO3_SingleNodeOnboarding},
{"IO4_MultiNodeFleetBringUp", IO4_MultiNodeFleetBringUp},
{"IO6_FullNewUserE2E", IO6_FullNewUserE2E},
{"IO7_ProvisioningTimeout", IO7_ProvisioningTimeout},
{"IO8_BadExpiredToken", IO8_BadExpiredToken},
{"IO9_DuplicateMAC", IO9_DuplicateMAC},
{"IO10_DropMidOnboard", IO10_DropMidOnboard},
{"IO11_FirmwareVersionSkew", IO11_FirmwareVersionSkew},
{"AS1_FirstTimeSetup", AS1_FirstTimeSetupIntegration},
{"AS2_WalkingDetection", AS2_WalkingDetectionIntegration},
{"AS3_FallDetection", AS3_FallDetectionIntegration},

File diff suppressed because it is too large Load diff