openvidu-test-e2e: fix get subscriber video codec (failing in Firefox)

pull/904/head
pabloFuente 2026-06-22 18:02:46 +02:00
parent 94b9a852da
commit 15b92f1afd
1 changed files with 21 additions and 21 deletions

View File

@ -2016,9 +2016,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
// Check subscriber's codec // Check subscriber's codec
WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote")); WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote"));
waitUntilVideoLayersNotEmpty(user, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(user, subscriberVideo);
JsonArray json = this.getLayersAsJsonArray(user, subscriberVideo);
String subscriberCodec = json.get(0).getAsJsonObject().get("codec").getAsString();
Assertions.assertEquals(expectedCodec, subscriberCodec); Assertions.assertEquals(expectedCodec, subscriberCodec);
gracefullyLeaveParticipants(user, 2); gracefullyLeaveParticipants(user, 2);
@ -2124,9 +2122,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
// Check subscriber's codec // Check subscriber's codec
WebElement subscriberVideo = firefoxUser.getDriver() WebElement subscriberVideo = firefoxUser.getDriver()
.findElement(By.cssSelector("#openvidu-instance-0 video.remote")); .findElement(By.cssSelector("#openvidu-instance-0 video.remote"));
waitUntilVideoLayersNotEmpty(firefoxUser, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(firefoxUser, subscriberVideo);
JsonArray json = this.getLayersAsJsonArray(firefoxUser, subscriberVideo);
String subscriberCodec = json.get(0).getAsJsonObject().get("codec").getAsString();
Assertions.assertEquals(expectedCodec, subscriberCodec); Assertions.assertEquals(expectedCodec, subscriberCodec);
latch.countDown(); latch.countDown();
latch.await(10, TimeUnit.SECONDS); latch.await(10, TimeUnit.SECONDS);
@ -3112,8 +3108,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote")); WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote"));
// Check subscriber video codec // Check subscriber video codec
JsonArray layers = this.getLayersAsJsonArray(user, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(user, subscriberVideo);
String subscriberCodec = layers.get(0).getAsJsonObject().get("codec").getAsString();
Assertions.assertEquals("video/" + codec.toUpperCase(), subscriberCodec); Assertions.assertEquals("video/" + codec.toUpperCase(), subscriberCodec);
// Subscriber should settle in 1920x1080p // Subscriber should settle in 1920x1080p
@ -3176,8 +3171,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote")); WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote"));
// Check subscriber video codec // Check subscriber video codec
JsonArray layers = this.getLayersAsJsonArray(user, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(user, subscriberVideo);
String subscriberCodec = layers.get(0).getAsJsonObject().get("codec").getAsString();
Assertions.assertEquals("video/" + codec.toUpperCase(), subscriberCodec); Assertions.assertEquals("video/" + codec.toUpperCase(), subscriberCodec);
// Subscriber should settle in 960 // Subscriber should settle in 960
@ -3244,8 +3238,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote")); WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote"));
// Check subscriber video codec // Check subscriber video codec
JsonArray layers = this.getLayersAsJsonArray(user, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(user, subscriberVideo);
String subscriberCodec = layers.get(0).getAsJsonObject().get("codec").getAsString();
Assertions.assertEquals("video/" + codec.toUpperCase(), subscriberCodec); Assertions.assertEquals("video/" + codec.toUpperCase(), subscriberCodec);
// After subscription all layers should be active // After subscription all layers should be active
@ -3346,9 +3339,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
// Subscriber video // Subscriber video
WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote")); WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote"));
waitUntilVideoLayersNotEmpty(user, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(user, subscriberVideo);
JsonArray layers = this.getLayersAsJsonArray(user, subscriberVideo);
String subscriberCodec = layers.get(0).getAsJsonObject().get("codec").getAsString();
Assertions.assertEquals("video/" + codecUpperCase, subscriberCodec); Assertions.assertEquals("video/" + codecUpperCase, subscriberCodec);
// Validate SVC by dynamically switching subscriber quality and checking // Validate SVC by dynamically switching subscriber quality and checking
@ -4174,8 +4165,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
long bytesReceived = this.getSubscriberVideoBytesReceived(user, subscriberVideo); long bytesReceived = this.getSubscriberVideoBytesReceived(user, subscriberVideo);
this.waitUntilSubscriberBytesReceivedIncrease(user, subscriberVideo, bytesReceived); this.waitUntilSubscriberBytesReceivedIncrease(user, subscriberVideo, bytesReceived);
this.waitUntilSubscriberFramesPerSecondNotZero(user, subscriberVideo); this.waitUntilSubscriberFramesPerSecondNotZero(user, subscriberVideo);
JsonArray json = this.getLayersAsJsonArray(user, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(user, subscriberVideo);
String subscriberCodec = json.get(0).getAsJsonObject().get("codec").getAsString();
String expectedCodec = "video/VP8"; String expectedCodec = "video/VP8";
Assertions.assertEquals(expectedCodec, subscriberCodec); Assertions.assertEquals(expectedCodec, subscriberCodec);
} }
@ -4215,14 +4205,12 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
// Check subscriber's codec // Check subscriber's codec
if (codec != null) { if (codec != null) {
JsonArray json = this.getLayersAsJsonArray(user, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(user, subscriberVideo);
String subscriberCodec = json.get(0).getAsJsonObject().get("codec").getAsString();
String expectedCodec = "video/" + codec.toUpperCase(); String expectedCodec = "video/" + codec.toUpperCase();
Assertions.assertEquals(expectedCodec, subscriberCodec); Assertions.assertEquals(expectedCodec, subscriberCodec);
} }
if (preset != null) { if (preset != null) {
JsonArray json = this.getLayersAsJsonArray(user, subscriberVideo); String subscriberCodec = this.getSubscriberVideoCodec(user, subscriberVideo);
String subscriberCodec = json.get(0).getAsJsonObject().get("codec").getAsString();
Assertions.assertEquals("video/H264", subscriberCodec); Assertions.assertEquals("video/H264", subscriberCodec);
} }
} }
@ -4307,6 +4295,18 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
return json.get(0).getAsJsonObject().get("framesPerSecond").getAsInt(); return json.get(0).getAsJsonObject().get("framesPerSecond").getAsInt();
} }
private String getSubscriberVideoCodec(OpenViduTestappUser user, WebElement subscriberVideo) {
waitUntilVideoLayersNotEmpty(user, subscriberVideo);
// The "codec" field is derived from a separate "codec" stats report matched by
// codecId. In Firefox it may appear a few stat cycles after frames already flow,
// so wait for it to exist instead of reading it eagerly (which would NPE).
this.waitUntilAux(user, subscriberVideo,
() -> getLayersAsJsonArray(user, subscriberVideo).get(0).getAsJsonObject().get("codec") != null,
"Timeout waiting for codec to exist");
JsonArray json = this.getLayersAsJsonArray(user, subscriberVideo);
return json.get(0).getAsJsonObject().get("codec").getAsString();
}
// If rid is null, retrieve the first layer // If rid is null, retrieve the first layer
private JsonElement getPublisherVideoLayerAttribute(OpenViduTestappUser user, WebElement publisherVideo, String rid, private JsonElement getPublisherVideoLayerAttribute(OpenViduTestappUser user, WebElement publisherVideo, String rid,
String attribute) { String attribute) {