Mark the speaker detection check as fixme

Chromium's fake microphone never registers as a speaker at the SFU, and Firefox's steady tone does so in about two runs out of three, with or without the browser's audio processing. The test stays, out of the gate, until the dev SFU gets a lower speaker threshold or the harness a louder fake device.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Timo K.
2026-10-08 13:53:57 +02:00
co-authored by Claude Fable 5.1
parent 6bd6e3f953
commit cad00aef08
3 changed files with 17 additions and 18 deletions
+7 -10
View File
@@ -90,16 +90,13 @@ test("muting the microphone and the camera is seen by the peer", async () => {
}); });
}); });
test("the peer's microphone is active while it sends sound, and not while muted", async ({ test("the peer's microphone is active while it sends sound, and not while muted", async () => {
browserName, // Chromium's fake microphone never registers as a speaker at the SFU, and
}) => { // Firefox's steady tone does so in about two runs out of three, with or
// The SFU's speaker detection picks up Firefox's fake microphone, a steady // without the browser's audio processing. The pipeline is proven when it
// tone. Chromium's fake microphone never registers as a speaker there, so // passes; it needs a louder fake device or a lower SFU threshold to be
// the test has nothing to measure on it. // relied on.
test.skip( test.fixme(true, "the fake microphones do not reliably register at the SFU");
browserName === "chromium",
"Chromium's fake microphone is silent to the SFU",
);
const [page] = pages; const [page] = pages;
const audio = remoteTile(1, 0).locator("audio"); const audio = remoteTile(1, 0).locator("audio");
// The SFU only announces a change of speakers, so a tone that has been // The SFU only announces a change of speakers, so a tone that has been
+7 -6
View File
@@ -272,12 +272,13 @@ The fakes come from `sdk/src/utils/test.ts` (`mockRemoteParticipant`) and the
### End-to-end ### End-to-end
`playwright/sdk/media.spec.ts` gains one test: the peer's `audio` element reaches `playwright/sdk/media.spec.ts` gains one test: the peer's `audio` element reaches
`data-active="true"`, then `"false"` after the Microphone button is clicked. The `data-active="true"` after a mute and unmute, and `"false"` while muted. It is
fake capture device Playwright gives Chromium emits a tone, which the SFU's speaker marked `fixme`: Chromium's fake microphone never registers as a speaker at the
detection picks up, so the signal is real end to end. Firefox's fake device also SFU, and Firefox's steady tone does so in about two runs out of three, with or
produces sound; if its level stays under the SFU threshold the test is skipped without the browser's audio processing. It passed four times in six, which proves
there with a comment saying why, not loosened. The existing five tests run as they the pipeline, and it stays out of the gate until the dev SFU gets a lower
are. speaker threshold or the harness a louder fake device. The existing five tests
run as they are.
## Order of work ## Order of work
+3 -2
View File
@@ -665,8 +665,9 @@ members, an `<audio>` from the `"microphone"` track, both picked out of
Every media element carries the track's state as `data-*` attributes (`muted`, Every media element carries the track's state as `data-*` attributes (`muted`,
`encrypted`, `active`, `frameWidth`, `frames`), which is what the tests read to `encrypted`, `active`, `frameWidth`, `frames`), which is what the tests read to
check mute propagation, encryption, speaker detection, adaptive resolution and check mute propagation, encryption, adaptive resolution and paused subscriptions
paused subscriptions. That is more (the speaker detection check is a `fixme`: the fake microphones do not reliably
register at the SFU). That is more
than the smallest consumer needs, and the price of testing the SDK through its than the smallest consumer needs, and the price of testing the SDK through its
public API only. public API only.