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 e6e2b61d..b38882dd 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 @@ -818,7 +818,6 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest { } @Test - @OnlyKurento @DisplayName("Stream property changed event") void streamPropertyChangedEventTest() throws Exception { @@ -905,6 +904,82 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest { iter.remove(); } + // Resize captured window + final CountDownLatch latch3 = new CountDownLatch(2); + int newWidth = 1000; + int newHeight = 700; + + final long[] expectedWidthHeight = new long[2]; + + user.getEventManager().on("streamPropertyChanged", (event) -> { + String expectedDimensions = "{\"width\":" + expectedWidthHeight[0] + ",\"height\":" + expectedWidthHeight[1] + + "}"; + System.out.println("Publisher dimensions: " + event.get("newValue").getAsJsonObject().toString()); + System.out.println("Real dimensions of viewport: " + expectedDimensions); + if ("videoDimensions".equals(event.get("changedProperty").getAsString()) + && "screenResized".equals(event.get("reason").getAsString()) + && expectedDimensions.equals(event.get("newValue").getAsJsonObject().toString())) { + latch3.countDown(); + } + }); + + user.getDriver().manage().window().setSize(new Dimension(newWidth, newHeight)); + + String widthAndHeight = user.getEventManager().getDimensionOfViewport(); + JsonObject obj = JsonParser.parseString(widthAndHeight).getAsJsonObject(); + + expectedWidthHeight[0] = obj.get("width").getAsLong(); + expectedWidthHeight[1] = obj.get("height").getAsLong(); + + System.out.println("New viewport dimension: " + obj.toString()); + + user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 6); + + if (!latch3.await(4000, TimeUnit.MILLISECONDS)) { + gracefullyLeaveParticipants(2); + fail(); + return; + } + + user.getEventManager().off("streamPropertyChanged"); + + gracefullyLeaveParticipants(2); + } + + @Test + @OnlyKurento + @DisplayName("Stream property changed filter event") + void streamPropertyChangedFilterEventTest() throws Exception { + + Queue threadAssertions = new ConcurrentLinkedQueue(); + + setupBrowser("chromeAlternateScreenShare"); + + log.info("Stream property changed event"); + + WebElement oneToManyInput = user.getDriver().findElement(By.id("one2many-input")); + oneToManyInput.clear(); + oneToManyInput.sendKeys("1"); + + user.getDriver().findElement(By.id("one2many-btn")).click(); + user.getDriver().findElement(By.className("screen-radio")).click(); + + user.getDriver().findElement(By.id("session-settings-btn-0")).click(); + Thread.sleep(1000); + user.getDriver().findElement(By.id("radio-btn-mod")).click(); + user.getDriver().findElement(By.id("save-btn")).click(); + Thread.sleep(1000); + + List joinButtons = user.getDriver().findElements(By.className("join-btn")); + for (WebElement el : joinButtons) { + el.sendKeys(Keys.ENTER); + } + + user.getEventManager().waitUntilEventReaches("connectionCreated", 4); + user.getEventManager().waitUntilEventReaches("accessAllowed", 1); + user.getEventManager().waitUntilEventReaches("streamCreated", 2); + user.getEventManager().waitUntilEventReaches("streamPlaying", 2); + // Filter final CountDownLatch latch3 = new CountDownLatch(2); user.getEventManager().on("streamPropertyChanged", (event) -> { @@ -923,7 +998,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest { user.getDriver().findElement(By.id("close-dialog-btn")).click(); Thread.sleep(500); - user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 6); + user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 2); if (!latch3.await(4000, TimeUnit.MILLISECONDS)) { gracefullyLeaveParticipants(2); @@ -938,47 +1013,6 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest { iter.remove(); } - // Resize captured window - final CountDownLatch latch4 = new CountDownLatch(2); - int newWidth = 1000; - int newHeight = 700; - - final long[] expectedWidthHeight = new long[2]; - - user.getEventManager().on("streamPropertyChanged", (event) -> { - String expectedDimensions = "{\"width\":" + expectedWidthHeight[0] + ",\"height\":" + expectedWidthHeight[1] - + "}"; - System.out.println("Publisher dimensions: " + event.get("newValue").getAsJsonObject().toString()); - System.out.println("Real dimensions of viewport: " + expectedDimensions); - if ("videoDimensions".equals(event.get("changedProperty").getAsString()) - && "screenResized".equals(event.get("reason").getAsString()) - && expectedDimensions.equals(event.get("newValue").getAsJsonObject().toString())) { - latch4.countDown(); - } - }); - - user.getDriver().manage().window().setSize(new Dimension(newWidth, newHeight)); - - String widthAndHeight = user.getEventManager().getDimensionOfViewport(); - JsonObject obj = JsonParser.parseString(widthAndHeight).getAsJsonObject(); - - expectedWidthHeight[0] = obj.get("width").getAsLong(); - expectedWidthHeight[1] = obj.get("height").getAsLong(); - - System.out.println("New viewport dimension: " + obj.toString()); - - user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 8); - - if (!latch3.await(4000, TimeUnit.MILLISECONDS)) { - gracefullyLeaveParticipants(2); - fail(); - return; - } - - System.out.println(getBase64Screenshot(user)); - - user.getEventManager().off("streamPropertyChanged"); - gracefullyLeaveParticipants(2); } @@ -3387,12 +3421,11 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest { } @Test - @OnlyKurento @DisplayName("Webhook test") void webhookTest() throws Exception { isRecordingTest = true; - setupChromeWithFakeVideo(Paths.get("/opt/openvidu/barcode.y4m")); + setupBrowser("chrome"); log.info("Webhook test"); @@ -3422,11 +3455,6 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest { user.getDriver().findElement(By.id("option-INDIVIDUAL")).click(); Thread.sleep(500); - WebElement allowedFilterInput = user.getDriver().findElement(By.id("allowed-filter-input")); - allowedFilterInput.clear(); - allowedFilterInput.sendKeys("ZBarFilter"); - user.getDriver().findElement(By.id("add-allowed-filter-btn")).click(); - user.getDriver().findElement(By.id("save-btn")).click(); Thread.sleep(1000); @@ -3459,30 +3487,6 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest { Assert.assertEquals("Wrong recording name in webhook event", rareCharsName, event.get("name").getAsString()); - // Filter event webhook - user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 .filter-btn")).click(); - Thread.sleep(500); - WebElement input = user.getDriver().findElement(By.id("filter-type-field")); - input.clear(); - input.sendKeys("ZBarFilter"); - input = user.getDriver().findElement(By.id("filter-options-field")); - input.clear(); - input.sendKeys("{}"); - user.getDriver().findElement(By.id("apply-filter-btn")).click(); - user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 1); - - // Apply listener - input = user.getDriver().findElement(By.id("filter-event-type-field")); - input.clear(); - input.sendKeys("CodeFound"); - user.getDriver().findElement(By.id("sub-filter-event-btn")).click(); - user.getWaiter().until(ExpectedConditions.attributeContains(By.id("filter-response-text-area"), "value", - "Filter event listener added")); - CustomWebhook.waitForEvent("filterEventDispatched", 2); - user.getDriver().findElement(By.id("unsub-filter-event-btn")).click(); - user.getDriver().findElement(By.id("close-dialog-btn")).click(); - Thread.sleep(500); - user.getDriver().findElement(By.id("add-user-btn")).click(); user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 .join-btn")).click(); @@ -3590,6 +3594,81 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest { } } + @Test + @OnlyKurento + @DisplayName("Webhook filter event test") + void webhookFilterEventTest() throws Exception { + isRecordingTest = true; + + setupChromeWithFakeVideo(Paths.get("/opt/openvidu/barcode.y4m")); + + log.info("Webhook test"); + + CountDownLatch initLatch = new CountDownLatch(1); + io.openvidu.test.browsers.utils.webhook.CustomWebhook.main(new String[0], initLatch); + + try { + + if (!initLatch.await(30, TimeUnit.SECONDS)) { + Assert.fail("Timeout waiting for webhook springboot app to start"); + CustomWebhook.shutDown(); + return; + } + + user.getDriver().findElement(By.id("add-user-btn")).click(); + user.getDriver().findElement(By.id("session-settings-btn-0")).click(); + Thread.sleep(1000); + + WebElement allowedFilterInput = user.getDriver().findElement(By.id("allowed-filter-input")); + allowedFilterInput.clear(); + allowedFilterInput.sendKeys("ZBarFilter"); + user.getDriver().findElement(By.id("add-allowed-filter-btn")).click(); + + user.getDriver().findElement(By.id("save-btn")).click(); + Thread.sleep(1000); + + user.getDriver().findElement(By.className("join-btn")).click(); + + JsonObject event = CustomWebhook.waitForEvent("sessionCreated", 2); + Assert.assertEquals("Wrong number of properties in event 'sessionCreated'", 3 + 1, event.keySet().size()); + + event = CustomWebhook.waitForEvent("participantJoined", 2); + Assert.assertEquals("Wrong number of properties in event 'participantJoined'", 10 + 1, + event.keySet().size()); + + event = CustomWebhook.waitForEvent("webrtcConnectionCreated", 2); + Assert.assertEquals("Wrong number of properties in event 'webrtcConnectionCreated'", 12 + 1, + event.keySet().size()); + + // Filter event webhook + user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 .filter-btn")).click(); + Thread.sleep(500); + WebElement input = user.getDriver().findElement(By.id("filter-type-field")); + input.clear(); + input.sendKeys("ZBarFilter"); + input = user.getDriver().findElement(By.id("filter-options-field")); + input.clear(); + input.sendKeys("{}"); + user.getDriver().findElement(By.id("apply-filter-btn")).click(); + user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 1); + + // Apply listener + input = user.getDriver().findElement(By.id("filter-event-type-field")); + input.clear(); + input.sendKeys("CodeFound"); + user.getDriver().findElement(By.id("sub-filter-event-btn")).click(); + user.getWaiter().until(ExpectedConditions.attributeContains(By.id("filter-response-text-area"), "value", + "Filter event listener added")); + CustomWebhook.waitForEvent("filterEventDispatched", 2); + user.getDriver().findElement(By.id("unsub-filter-event-btn")).click(); + user.getDriver().findElement(By.id("close-dialog-btn")).click(); + Thread.sleep(500); + + } finally { + CustomWebhook.shutDown(); + } + } + @Test @OnlyKurento @DisplayName("IP camera test") diff --git a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/annotations/OnlyKurento.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/annotations/OnlyKurento.java index 78089d8a..863d947b 100644 --- a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/annotations/OnlyKurento.java +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/annotations/OnlyKurento.java @@ -1,17 +1,15 @@ package io.openvidu.test.e2e.annotations; -import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable; -import org.junit.jupiter.api.condition.DisabledIfSystemProperty; -import org.springframework.test.context.junit.jupiter.DisabledIf; - import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.test.context.junit.jupiter.DisabledIf; + @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) -@DisabledIf(expression = "#{systemProperties['MEDIA_SERVER_IMAGE'].toLowerCase().contains('openvidu/mediasoup-controller')}") +@DisabledIf(expression = "#{systemProperties['MEDIA_SERVER_IMAGE'] != null && systemProperties['MEDIA_SERVER_IMAGE'].toLowerCase().contains('openvidu/mediasoup-controller')}") public @interface OnlyKurento { }