From 92f14b8c0b9c7b8b1a47859a4773cef16fab24d4 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Tue, 3 Jul 2018 15:59:15 +0200 Subject: [PATCH] openvidu-test-e2e: tests extended for StreamPropertyChangedEvent --- .../test/e2e/OpenViduTestAppE2eTest.java | 81 ++++++++++++++++++- .../test/e2e/browser/ChromeAndroidUser.java | 68 ++++++++++++++++ .../openvidu/test/e2e/browser/ChromeUser.java | 2 +- 3 files changed, 148 insertions(+), 3 deletions(-) create mode 100644 openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeAndroidUser.java 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 959be298..276f6cf5 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 @@ -36,6 +36,7 @@ import org.junit.platform.runner.JUnitPlatform; import org.junit.Assert; import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; import org.openqa.selenium.Keys; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; @@ -48,6 +49,7 @@ import io.github.bonigarcia.wdm.ChromeDriverManager; import io.github.bonigarcia.wdm.FirefoxDriverManager; import io.openvidu.test.e2e.browser.BrowserUser; +import io.openvidu.test.e2e.browser.ChromeAndroidUser; import io.openvidu.test.e2e.browser.ChromeUser; import io.openvidu.test.e2e.browser.FirefoxUser; @@ -106,6 +108,9 @@ public class OpenViduTestAppE2eTest { case "firefox": this.user = new FirefoxUser("TestUser", 50); break; + case "chromeAndroid": + this.user = new ChromeAndroidUser("TestUser", 50); + break; default: this.user = new ChromeUser("TestUser", 50); } @@ -304,7 +309,7 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("connectionCreated", 1); user.getEventManager().waitUntilEventReaches("accessAllowed", 1); - + Thread.sleep(3000); try { @@ -722,6 +727,76 @@ public class OpenViduTestAppE2eTest { } + @Test + @DisplayName("Stream property changed event") + void streamPropertyChangedEvent() throws Exception { + + Queue threadAssertions = new ConcurrentLinkedQueue(); + + setupBrowser("chrome"); + + 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(); + + 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); + + // Unpublish video + user.getEventManager().on("streamPropertyChanged", (event) -> { + threadAssertions.add(((String) event.get("eventContent")).contains("videoActive [false]")); + }); + user.getDriver().findElements(By.className("pub-video-btn")).get(0).click(); + user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 2); + user.getEventManager().off("streamPropertyChanged"); + for (Iterator iter = threadAssertions.iterator(); iter.hasNext();) { + Assert.assertTrue(iter.next()); + iter.remove(); + } + + // Unpublish audio + user.getEventManager().on("streamPropertyChanged", (event) -> { + threadAssertions.add(((String) event.get("eventContent")).contains("audioActive [false]")); + }); + user.getDriver().findElements(By.className("pub-audio-btn")).get(0).click(); + user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 4); + user.getEventManager().off("streamPropertyChanged"); + for (Iterator iter = threadAssertions.iterator(); iter.hasNext();) { + Assert.assertTrue(iter.next()); + iter.remove(); + } + + // Resize captured window + int newWidth = 1280; + int newHeight = 720; + user.getEventManager().on("streamPropertyChanged", (event) -> { + threadAssertions.add(((String) event.get("eventContent")) + .contains("videoDimensions videoDimensions [{\\\"width\\\":" + newWidth + ",\\\"height\\\":" + newHeight + "}]")); + }); + user.getDriver().manage().window().setSize(new Dimension(newWidth, newHeight)); + user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 6); + user.getEventManager().off("streamPropertyChanged"); + for (Iterator iter = threadAssertions.iterator(); iter.hasNext();) { + Assert.assertTrue(iter.next()); + iter.remove(); + } + + gracefullyLeaveParticipants(2); + + } + @Test @DisplayName("Local record") void localRecordTest() throws Exception { @@ -791,7 +866,7 @@ public class OpenViduTestAppE2eTest { user.getDriver().findElement(By.id("start-recording-btn")).click(); user.getWaiter() .until(ExpectedConditions.attributeToBe(By.id("api-response-text-area"), "value", "Error [404]")); - + listEmptyRecordings(); // Try to stop a non-existing recording @@ -904,6 +979,8 @@ public class OpenViduTestAppE2eTest { Assert.assertFalse(file3.exists()); user.getDriver().findElement(By.id("close-dialog-btn")).click(); + + gracefullyLeaveParticipants(1); } diff --git a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeAndroidUser.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeAndroidUser.java new file mode 100644 index 00000000..4f46fc3f --- /dev/null +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeAndroidUser.java @@ -0,0 +1,68 @@ +/* + * (C) Copyright 2017-2018 OpenVidu (https://openvidu.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package io.openvidu.test.e2e.browser; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.remote.DesiredCapabilities; +import org.openqa.selenium.remote.RemoteWebDriver; + +public class ChromeAndroidUser extends BrowserUser { + + public ChromeAndroidUser(String userName, int timeOfWaitInSeconds) { + super(userName, timeOfWaitInSeconds); + + Map mobileEmulation = new HashMap<>(); + mobileEmulation.put("deviceName", "Nexus 5"); + + ChromeOptions options = new ChromeOptions(); + options.setExperimentalOption("mobileEmulation", mobileEmulation); + + DesiredCapabilities capabilities = DesiredCapabilities.chrome(); + capabilities.setAcceptInsecureCerts(true); + + // This flag avoids to grant the user media + options.addArguments("--use-fake-ui-for-media-stream"); + // This flag fakes user media with synthetic video + options.addArguments("--use-fake-device-for-media-stream"); + capabilities.setCapability(ChromeOptions.CAPABILITY, options); + + String REMOTE_URL = System.getProperty("REMOTE_URL_CHROME"); + if (REMOTE_URL != null) { + log.info("Using URL {} to connect to remote web driver", REMOTE_URL); + try { + this.driver = new RemoteWebDriver(new URL(REMOTE_URL), capabilities); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } else { + log.info("Using local web driver"); + this.driver = new ChromeDriver(capabilities); + } + + this.driver.manage().timeouts().setScriptTimeout(this.timeOfWaitInSeconds, TimeUnit.SECONDS); + this.configureDriver(); + } + +} \ No newline at end of file diff --git a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeUser.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeUser.java index 543c452d..40a7fa95 100644 --- a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeUser.java +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeUser.java @@ -41,7 +41,7 @@ public class ChromeUser extends BrowserUser { // This flag fakes user media with synthetic video options.addArguments("--use-fake-device-for-media-stream"); // This flag selects the entire screen as video source when screen sharing - options.addArguments("--auto-select-desktop-capture-source=Entire screen"); + options.addArguments("--auto-select-desktop-capture-source=OpenVidu TestApp - Google Chrome"); try { // Add Screen Sharing extension