openvidu-test-e2e: extend firefox tests with multiple codecs and svc

pull/912/head
pabloFuente 2026-09-25 14:49:15 +02:00
parent 794a48f447
commit 6b0716f2aa
1 changed files with 63 additions and 22 deletions

View File

@ -2819,10 +2819,18 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
} }
private void forceCodec(OpenViduTestappUser user, int numberOfUser, String codec) throws InterruptedException { private void forceCodec(OpenViduTestappUser user, int numberOfUser, String codec) throws InterruptedException {
forceCodec(user, numberOfUser, codec, true);
}
private void forceCodec(OpenViduTestappUser user, int numberOfUser, String codec, boolean disableBackupCodec)
throws InterruptedException {
String codecLowerCase = codec.toLowerCase(); String codecLowerCase = codec.toLowerCase();
this.waitAndClick(user, "#room-options-btn-" + numberOfUser); this.waitAndClick(user, "#room-options-btn-" + numberOfUser);
Thread.sleep(300); Thread.sleep(300);
user.getDriver().findElement(By.id("trackPublish-backupCodec")).click(); if (disableBackupCodec) {
// Enabled by default
user.getDriver().findElement(By.id("trackPublish-backupCodec")).click();
}
user.getDriver().findElement(By.id("trackPublish-videoCodec")).click(); user.getDriver().findElement(By.id("trackPublish-videoCodec")).click();
this.waitAndClick(user, "#mat-option-" + codecLowerCase); this.waitAndClick(user, "#mat-option-" + codecLowerCase);
this.waitAndClick(user, "#close-dialog-btn"); this.waitAndClick(user, "#close-dialog-btn");
@ -2836,20 +2844,6 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
firefoxSubscribeToCodecTest("vp8", false); firefoxSubscribeToCodecTest("vp8", false);
} }
@Test
@DisplayName("Firefox subscribe to H264")
void firefoxSubscribeToH264Test() throws Exception {
log.info("Firefox subscribe to H264");
firefoxSubscribeToCodecTest("h264", false);
}
@Test
@DisplayName("Firefox subscribe to VP9")
void firefoxSubscribeToVP9Test() throws Exception {
log.info("Firefox subscribe to VP9");
firefoxSubscribeToCodecTest("vp9", false);
}
@Test @Test
@DisplayName("Firefox subscribe to VP8 simulcast") @DisplayName("Firefox subscribe to VP8 simulcast")
void firefoxSubscribeToVP8SimulcastTest() throws Exception { void firefoxSubscribeToVP8SimulcastTest() throws Exception {
@ -2857,6 +2851,13 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
firefoxSubscribeToCodecTest("vp8", true); firefoxSubscribeToCodecTest("vp8", true);
} }
@Test
@DisplayName("Firefox subscribe to H264")
void firefoxSubscribeToH264Test() throws Exception {
log.info("Firefox subscribe to H264");
firefoxSubscribeToCodecTest("h264", false);
}
@Test @Test
@DisplayName("Firefox subscribe to H264 simulcast") @DisplayName("Firefox subscribe to H264 simulcast")
void firefoxSubscribeToH264SimulcastTest() throws Exception { void firefoxSubscribeToH264SimulcastTest() throws Exception {
@ -2865,13 +2866,51 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
} }
@Test @Test
@DisplayName("Firefox subscribe to VP9 simulcast") @DisplayName("Firefox subscribe to VP9 without SVC")
void firefoxSubscribeToVP9SimulcastTest() throws Exception { void firefoxSubscribeToVP9Test() throws Exception {
log.info("Firefox subscribe to VP9 simulcast"); log.info("Firefox subscribe to VP9 without SVC");
firefoxSubscribeToCodecTest("vp9", true); firefoxSubscribeToCodecTest("vp9", false, "L1T1", false, List.of("video/VP9"));
}
@Test
@DisplayName("Firefox subscribe to VP9 with SVC")
void firefoxSubscribeToVP9SvcTest() throws Exception {
log.info("Firefox subscribe to VP9 with SVC");
firefoxSubscribeToCodecTest("vp9", false, "L3T3_KEY", false, List.of("video/VP9"));
}
@Test
@DisplayName("Firefox subscribe to AV1 without SVC")
void firefoxSubscribeToAV1Test() throws Exception {
log.info("Firefox subscribe to AV1 without SVC");
firefoxSubscribeToCodecTest("av1", false, "L1T1", false, List.of("video/AV1"));
}
@Test
@DisplayName("Firefox subscribe to AV1 with SVC")
void firefoxSubscribeToAV1SvcTest() throws Exception {
log.info("Firefox subscribe to AV1 with SVC");
firefoxSubscribeToCodecTest("av1", false, "L3T3_KEY", false, List.of("video/AV1"));
}
/**
* Firefox negotiates AV1 but cannot decode AV1 SVC (Bugzilla 1571470), which
* is what an AV1 simulcast publication is: it must receive the publisher's
* VP8 backup codec instead, or AV1 once it decodes SVC
*/
@Test
@DisplayName("Firefox subscribe to AV1 SVC with backup codec")
void firefoxSubscribeToAV1SvcWithBackupCodecTest() throws Exception {
log.info("Firefox subscribe to AV1 SVC with backup codec");
firefoxSubscribeToCodecTest("av1", true, "L3T3_KEY", true, List.of("video/VP8", "video/AV1"));
} }
private void firefoxSubscribeToCodecTest(String codec, boolean simulcast) throws Exception { private void firefoxSubscribeToCodecTest(String codec, boolean simulcast) throws Exception {
firefoxSubscribeToCodecTest(codec, simulcast, null, false, List.of("video/" + codec.toUpperCase()));
}
private void firefoxSubscribeToCodecTest(String codec, boolean simulcast, String scalabilityMode,
boolean backupCodec, List<String> expectedSubscriberCodecs) throws Exception {
final String expectedCodec = "video/" + codec.toUpperCase(); final String expectedCodec = "video/" + codec.toUpperCase();
final CountDownLatch latch = new CountDownLatch(2); final CountDownLatch latch = new CountDownLatch(2);
ExecutorService executor = Executors.newFixedThreadPool(2); ExecutorService executor = Executors.newFixedThreadPool(2);
@ -2879,11 +2918,11 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
Future<?> task1 = executor.submit(() -> { Future<?> task1 = executor.submit(() -> {
try { try {
OpenViduTestappUser chromeUser = setupBrowserAndConnectToOpenViduTestapp("chrome"); OpenViduTestappUser chromeUser = setupBrowserAndConnectToOpenViduTestapp("chrome");
this.addOnlyPublisherVideo(chromeUser, simulcast, false, false); this.addPublisher(chromeUser, false, simulcast, false, false, false, true, null, null, scalabilityMode);
WebElement participantNameInput = chromeUser.getDriver().findElement(By.id("participant-name-input-0")); WebElement participantNameInput = chromeUser.getDriver().findElement(By.id("participant-name-input-0"));
participantNameInput.clear(); participantNameInput.clear();
participantNameInput.sendKeys("CHROME_USER"); participantNameInput.sendKeys("CHROME_USER");
this.forceCodec(chromeUser, 0, codec); this.forceCodec(chromeUser, 0, codec, !backupCodec);
chromeUser.getDriver().findElement(By.className("connect-btn")).click(); chromeUser.getDriver().findElement(By.className("connect-btn")).click();
chromeUser.getEventManager().waitUntilEventReaches("localTrackSubscribed", "ParticipantEvent", 1, 120, chromeUser.getEventManager().waitUntilEventReaches("localTrackSubscribed", "ParticipantEvent", 1, 120,
true); true);
@ -2920,7 +2959,9 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
WebElement subscriberVideo = firefoxUser.getDriver() WebElement subscriberVideo = firefoxUser.getDriver()
.findElement(By.cssSelector("#openvidu-instance-0 video.remote")); .findElement(By.cssSelector("#openvidu-instance-0 video.remote"));
String subscriberCodec = this.getSubscriberVideoCodec(firefoxUser, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(firefoxUser, subscriberVideo);
Assertions.assertEquals(expectedCodec, subscriberCodec); Assertions.assertTrue(expectedSubscriberCodecs.contains(subscriberCodec),
"Expected the Firefox subscriber to receive one of " + expectedSubscriberCodecs + ", but got "
+ subscriberCodec);
this.waitUntilSubscriberFramesDecodedIncrease(firefoxUser, subscriberVideo); this.waitUntilSubscriberFramesDecodedIncrease(firefoxUser, subscriberVideo);
latch.countDown(); latch.countDown();
latch.await(10, TimeUnit.SECONDS); latch.await(10, TimeUnit.SECONDS);