From baa753ac213b3b333b822ed06d40d7eeda1bf13c Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 6 Nov 2024 11:31:34 +0100 Subject: [PATCH] openvidu-test-e2e: add simulcastDisabledDynacastEnabled test --- .../test/e2e/OpenViduTestAppE2eTest.java | 66 +++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java index 202b7d4a..dc9b490a 100644 --- a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java @@ -20,7 +20,6 @@ package io.openvidu.test.e2e; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Optional; import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -1048,6 +1047,50 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { gracefullyLeaveParticipants(user, 2); } + @Test + @DisplayName("Simulcast disabled dynacast enabled") + void simulcastDisabledDynacastEnabledTest() throws Exception { + OpenViduTestappUser user = setupBrowserAndConnectToOpenViduTestapp("chrome"); + + log.info("Simulcast disabled dynacast enabled"); + + // Only video publisher with simulcast without dynacast + this.addOnlyPublisherVideo(user, false, true, false); + // Only subscriber without adaptive stream + this.addSubscriber(user, true); + + user.getDriver().findElements(By.className("connect-btn")).forEach(el -> el.sendKeys(Keys.ENTER)); + + user.getEventManager().waitUntilEventReaches("localTrackSubscribed", "RoomEvent", 1); + user.getEventManager().waitUntilEventReaches("trackSubscribed", "RoomEvent", 1); + user.getEventManager().clearAllCurrentEvents(); + + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assertions.assertEquals(2, numberOfVideos, "Wrong number of videos"); + final int numberOfAudios = user.getDriver().findElements(By.tagName("audio")).size(); + Assertions.assertEquals(0, numberOfAudios, "Wrong number of audios"); + + Assertions.assertTrue(user.getBrowserUser().assertAllElementsHaveTracks("video", false, true), + "HTMLVideoElements were expected to have only one audio track"); + + WebElement publisherVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 video.local")); + Assertions.assertEquals(1, countNumberOfPublishedLayers(user, publisherVideo), + "Wrong number of published layers"); + + WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video.remote")); + + long bytesReceived = this.getSubscriberVideoBytesReceived(user, subscriberVideo); + long bytesSent = this.getPublisherVideoLayerAttribute(user, publisherVideo, null, "bytesSent").getAsLong(); + + Thread.sleep(3000); + + this.waitUntilSubscriberBytesReceivedIncrease(user, subscriberVideo, bytesReceived); + this.waitUntilPublisherLayerActive(user, publisherVideo, null, true); + this.waitUntilPublisherBytesSentIncrease(user, publisherVideo, null, bytesSent); + + gracefullyLeaveParticipants(user, 2); + } + private int countNumberOfPublishedLayers(OpenViduTestappUser user, WebElement publisherVideo) { JsonArray json = this.getLayersAsJsonArray(user, publisherVideo); return json.size(); @@ -1063,12 +1106,19 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { return json.get(0).getAsJsonObject().get("bytesReceived").getAsLong(); } + // If rid is null, retrieve the first layer private JsonElement getPublisherVideoLayerAttribute(OpenViduTestappUser user, WebElement publisherVideo, String rid, String attribute) { JsonArray json = this.getLayersAsJsonArray(user, publisherVideo); - Optional result = json.asList().stream().parallel() - .filter(jsonElement -> rid.equals(jsonElement.getAsJsonObject().get("rid").getAsString())).findAny(); - return result.get().getAsJsonObject().get(attribute); + JsonElement result; + if (rid != null) { + result = json.asList().stream().parallel() + .filter(jsonElement -> rid.equals(jsonElement.getAsJsonObject().get("rid").getAsString())).findAny() + .get(); + } else { + result = json.get(0); + } + return result.getAsJsonObject().get(attribute); } private JsonArray getLayersAsJsonArray(OpenViduTestappUser user, WebElement video) { @@ -1110,6 +1160,14 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { }, "Timeout waiting for subscriber track to increase its bytesReceived from " + previousBytesReceived); } + private void waitUntilPublisherBytesSentIncrease(OpenViduTestappUser user, WebElement videoElement, String rid, + final long previousBytesSent) { + this.waitUntilAux(user, videoElement, () -> { + return this.getPublisherVideoLayerAttribute(user, videoElement, rid, "bytesSent") + .getAsLong() > previousBytesSent; + }, "Timeout waiting for publisher track to increase its bytesSent from " + previousBytesSent); + } + private void waitUntilPublisherLayerActive(OpenViduTestappUser user, final WebElement publisherVideo, final String rid, final boolean active) { this.waitUntilAux(user, publisherVideo, () -> {