teamsiso/src/tests
Zac Gaetano 9cb1cc7b3d
Some checks failed
CI / build-and-test (push) Failing after 29s
fix: review findings on the polish + active-speaker batch
Two real concerns from the code review on ab07297..b266623:

1. ActiveSpeaker removal poisoned the rename-window heuristic. ParticipantTracker.HandleRemoved appends to _recentlyRemoved keyed by MachineName alone; the next Participant Add on the same machine consulted that list with no kind discrimination, so an active-speaker disappearance immediately followed by a participant joining (very common: Teams renames its outputs as participants enter/leave) would cause the new participant to inherit the auto-mix's deterministic v5 GUID. New HandleAutoMixRemoved deliberately skips _recentlyRemoved — the auto-mix row's identity is already stable via the deterministic Id, so re-add restores it without the rename window.

2. IsoPipeline.State writes were not synchronized. Supervisor loop sets State on its own thread; UI thread reads from GetStats. Without volatility, the JIT could cache the field in a register and the UI would stay stuck on Receiving even after Error. Backing field is now an int read/written via Volatile.Read/Volatile.Write, matching the pattern already used for _liveReceiver / _liveSender / _liveProcessor.

Tests: 79/79 (was 78) — added ParticipantTrackerTests.ActiveSpeakerRemove_DoesNotPoisonRenameWindowForLaterParticipant which would have caught (1).
2026-05-09 09:34:16 -04:00
..
TeamsISO.Engine.IntegrationTests test(ndi): end-to-end pipeline round-trip with framerate normalization 2026-05-08 00:39:23 -04:00
TeamsISO.Engine.Tests fix: review findings on the polish + active-speaker batch 2026-05-09 09:34:16 -04:00
.gitkeep chore: add empty TeamsISO solution 2026-05-07 15:07:58 +00:00