From e2e32b18cd0753a79bd769ad2b6db0723f150239 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Tue, 10 Oct 2017 15:51:33 +0200 Subject: [PATCH] openvidu-test-e2e extended to 7 scenarios. Active MediaTracks checked --- .../test/e2e/OpenViduTestAppE2eTest.java | 162 ---------- .../test/e2e/browser/BrowserUser.java | 54 ---- .../test/e2e/OpenViduEventManager.java | 68 +++- .../test/e2e/OpenViduTestAppE2eTest.java | 295 ++++++++++++++++++ .../test/e2e/browser/BrowserUser.java | 72 +++++ .../openvidu/test/e2e/browser/ChromeUser.java | 23 +- .../test/e2e/browser/FirefoxUser.java | 21 +- .../io/openvidu/test/e2e/tes/AppTest.java | 38 --- .../openvidu-instance.component.html | 14 +- openvidu-testapp/src/index.html | 2 +- pom.xml | 9 +- 11 files changed, 484 insertions(+), 274 deletions(-) delete mode 100644 openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java delete mode 100644 openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/BrowserUser.java rename openvidu-test-e2e/src/{main => test}/java/io/openvidu/test/e2e/OpenViduEventManager.java (64%) create mode 100644 openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java create mode 100644 openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/BrowserUser.java rename openvidu-test-e2e/src/{main => test}/java/io/openvidu/test/e2e/browser/ChromeUser.java (56%) rename openvidu-test-e2e/src/{main => test}/java/io/openvidu/test/e2e/browser/FirefoxUser.java (55%) delete mode 100644 openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/tes/AppTest.java diff --git a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java b/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java deleted file mode 100644 index 8e056057..00000000 --- a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java +++ /dev/null @@ -1,162 +0,0 @@ -package io.openvidu.test.e2e; -/* - * (C) Copyright 2017-2019 OpenVideo (http://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. - * - */ - -import static java.lang.invoke.MethodHandles.lookup; -import static org.slf4j.LoggerFactory.getLogger; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.runner.RunWith; -import org.junit.platform.runner.JUnitPlatform; -import org.openqa.selenium.By; -import org.slf4j.Logger; - -import io.github.bonigarcia.SeleniumExtension; -import io.openvidu.test.e2e.browser.ChromeUser; -import io.openvidu.test.e2e.browser.FirefoxUser; - - -/** - * E2E test for openvidu-testapp. - * - * @author Pablo Fuente (pablo.fuente@urjc.es) - * @since 1.1.1 - */ -@Tag("e2e") -@DisplayName("E2E tests for OpenVidu TestApp") -@ExtendWith(SeleniumExtension.class) -@RunWith(JUnitPlatform.class) -public class OpenViduTestAppE2eTest { - - final Logger log = getLogger(lookup().lookupClass()); - - final String DEFAULT_SESSION_NAME = "TestSession"; - - String testAppUrl = "http://localhost:4200/"; // default value (local) - - @BeforeEach - void setup() { - - } - - @Test - @DisplayName("One2One [Video + Audio] session") - void oneToOneVideoAudioSession() throws InterruptedException { - - FirefoxUser user = new FirefoxUser("TestUser", 10); - user.getEventManager().startPolling(); - - log.debug("Navigate to openvidu-testapp and click on 1:1 scenario"); - - user.getDriver().get(testAppUrl); - user.getDriver().findElement(By.id("auto-join-checkbox")).click(); - user.getDriver().findElement(By.id("one2one-btn")).click(); - - user.getEventManager().waitUntilNumberOfEvent("videoPlaying", 4); - - user.getDriver().findElement(By.id("remove-user-btn")).click(); - - user.getEventManager().waitUntilNumberOfEvent("streamDestroyed", 1); - user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 1); - - user.getDriver().findElement(By.id("remove-user-btn")).click(); - - user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 2); - - user.dispose(); - } - - @Test - @DisplayName("One2Many [Video + Audio] session") - void oneToManyVideoAudioSession() throws InterruptedException { - - ChromeUser user = new ChromeUser("TestUser", 10); - user.getEventManager().startPolling(); - - log.debug("Navigate to openvidu-testapp and click on 1:N scenario"); - - user.getDriver().get(testAppUrl); - user.getDriver().findElement(By.id("auto-join-checkbox")).click(); - user.getDriver().findElement(By.id("one2many-btn")).click(); - - user.getEventManager().waitUntilNumberOfEvent("videoPlaying", 4); - - user.getDriver().findElements(By.className(("leave-btn"))).get(0).click(); - - user.getEventManager().waitUntilNumberOfEvent("streamDestroyed", 3); - - user.dispose(); - } - - @Test - @DisplayName("Unique user remote subscription [Video + Audio]") - void oneRemoteSubscription() throws InterruptedException { - - ChromeUser user = new ChromeUser("TestUser", 10); - user.getEventManager().startPolling(); - - log.debug("Navigate to openvidu-testapp and join one user with remote subscription"); - - user.getDriver().get(testAppUrl); - user.getDriver().findElement(By.id("add-user-btn")).click(); - user.getDriver().findElement(By.className("subscribe-remote-check")).click(); - user.getDriver().findElement(By.id("join-btn")).click(); - - user.getEventManager().waitUntilNumberOfEvent("connectionCreated", 1); - user.getEventManager().waitUntilNumberOfEvent("accessAllowed", 1); - user.getEventManager().waitUntilNumberOfEvent("videoElementCreated", 1); - user.getEventManager().waitUntilNumberOfEvent("remoteVideoPlaying", 1); - - user.getDriver().findElement(By.className(("leave-btn"))).click(); - - user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 1); - - user.dispose(); - } - - @Test - @DisplayName("Unique user remote subscription [ScreenShare + Audio]") - void oneRemoteSubscriptionScreen() throws InterruptedException { - - ChromeUser user = new ChromeUser("TestUser", 10); - user.getEventManager().startPolling(); - - log.debug("Navigate to openvidu-testapp and join one user with remote subscription"); - - user.getDriver().get(testAppUrl); - user.getDriver().findElement(By.id("add-user-btn")).click(); - user.getDriver().findElement(By.className("screen-radio")).click(); - user.getDriver().findElement(By.className("subscribe-remote-check")).click(); - user.getDriver().findElement(By.id("join-btn")).click(); - - user.getEventManager().waitUntilNumberOfEvent("connectionCreated", 1); - user.getEventManager().waitUntilNumberOfEvent("accessAllowed", 1); - user.getEventManager().waitUntilNumberOfEvent("videoElementCreated", 1); - user.getEventManager().waitUntilNumberOfEvent("remoteVideoPlaying", 1); - - user.getDriver().findElement(By.className(("leave-btn"))).click(); - - user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 1); - - user.dispose(); - } - -} diff --git a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/BrowserUser.java b/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/BrowserUser.java deleted file mode 100644 index 8c7a63eb..00000000 --- a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/BrowserUser.java +++ /dev/null @@ -1,54 +0,0 @@ -package io.openvidu.test.e2e.browser; - -import java.util.concurrent.TimeUnit; - -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.support.ui.WebDriverWait; - -import io.openvidu.test.e2e.OpenViduEventManager; - -public class BrowserUser { - - protected WebDriver driver; - protected WebDriverWait waiter; - protected String clientData; - protected int timeOfWait; - protected OpenViduEventManager eventManager; - - public BrowserUser(String clientData, int timeOfWait) { - this.clientData = clientData; - this.timeOfWait = timeOfWait; - } - - public WebDriver getDriver() { - return this.driver; - } - - public WebDriverWait getWaiter() { - return this.waiter; - } - - public OpenViduEventManager getEventManager() { - return this.eventManager; - } - - public String getClientData() { - return this.clientData; - } - - protected void newWaiter(int timeOfWait) { - this.waiter = new WebDriverWait(this.driver, timeOfWait); - } - - protected void configureDriver() { - this.waiter = new WebDriverWait(this.driver, this.timeOfWait); - this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); - this.eventManager = new OpenViduEventManager(this.driver, this.waiter); - } - - public void dispose() { - this.eventManager.stopPolling(); - this.driver.quit(); - } - -} \ No newline at end of file diff --git a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduEventManager.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduEventManager.java similarity index 64% rename from openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduEventManager.java rename to openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduEventManager.java index 216e0569..85bcc577 100644 --- a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduEventManager.java +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduEventManager.java @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017 OpenVidu (http://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; import java.util.Map; @@ -16,12 +33,22 @@ import java.util.function.Consumer; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; +import org.junit.Assert; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.WebDriverWait; -public class OpenViduEventManager { +/** + * Manager event class for BrowserUser. Collects, cleans and stores + * events from openvidu-testapp + * + * @author Pablo Fuente (pablo.fuente@urjc.es) + * @since 1.1.1 + */ +public class OpenViduEventManager { + private static class RunnableCallback implements Runnable { private final Consumer callback; @@ -43,32 +70,40 @@ public class OpenViduEventManager { private Thread pollingThread; private ExecutorService execService = Executors.newCachedThreadPool(); - private final int LATCH_TIMEOUT = 10000; private WebDriver driver; - private WebDriverWait waiter; private Queue eventQueue; private Map eventCallbacks; private Map eventNumbers; private Map eventCountdowns; private AtomicBoolean isInterrupted = new AtomicBoolean(false); + private int timeOfWaitInSeconds; - public OpenViduEventManager(WebDriver driver, WebDriverWait waiter) { + public OpenViduEventManager(WebDriver driver, WebDriverWait waiter, int timeOfWaitInSeconds) { this.driver = driver; - this.waiter = waiter; this.eventQueue = new ConcurrentLinkedQueue(); this.eventCallbacks = new ConcurrentHashMap<>(); this.eventNumbers = new ConcurrentHashMap<>(); this.eventCountdowns = new ConcurrentHashMap<>(); + this.timeOfWaitInSeconds = timeOfWaitInSeconds; } public void startPolling() { + Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() { + public void uncaughtException(Thread th, Throwable ex) { + if (ex.getClass().getSimpleName().equals("NoSuchSessionException")) { + System.err.println("Disposing driver when running 'executeScript'"); + } + } + }; + this.pollingThread = new Thread(() -> { while (!this.isInterrupted.get()) { this.getEventsFromBrowser(); this.emitEvents(); } }); + this.pollingThread.setUncaughtExceptionHandler(h); this.pollingThread.start(); } @@ -88,7 +123,7 @@ public class OpenViduEventManager { CountDownLatch eventSignal = new CountDownLatch(eventNumber); this.setCountDown(eventName, eventSignal); try { - if (!eventSignal.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)) { + if (!eventSignal.await(this.timeOfWaitInSeconds*1000, TimeUnit.MILLISECONDS)) { throw(new TimeoutException()); } } catch (InterruptedException | TimeoutException e) { @@ -152,5 +187,26 @@ public class OpenViduEventManager { .executeScript("var e = window.myEvents; window.myEvents = ''; return e;"); return events; } + + public boolean assertMediaTracks(Iterable videoElements, boolean audioTransmission, boolean videoTransmission) { + boolean success = true; + for (WebElement video : videoElements) { + success = success && (audioTransmission == this.hasAudioTracks(video)) && (videoTransmission == this.hasVideoTracks(video)); + if (!success) break; + } + return success; + } + + public boolean hasAudioTracks(WebElement videoElement) { + long numberAudioTracks = (long) ((JavascriptExecutor) driver) + .executeScript("return $('#" + videoElement.getAttribute("id") + "').prop('srcObject').getAudioTracks().length;"); + return (numberAudioTracks > 0); + } + + public boolean hasVideoTracks(WebElement videoElement) { + long numberAudioTracks = (long) ((JavascriptExecutor) driver) + .executeScript("return $('#" + videoElement.getAttribute("id") + "').prop('srcObject').getVideoTracks().length;"); + return (numberAudioTracks > 0); + } } 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 new file mode 100644 index 00000000..db7e9622 --- /dev/null +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java @@ -0,0 +1,295 @@ +/* + * (C) Copyright 2017 OpenVidu (http://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; + +import static java.lang.invoke.MethodHandles.lookup; +import static org.slf4j.LoggerFactory.getLogger; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.runner.RunWith; +import org.junit.platform.runner.JUnitPlatform; +import org.junit.Assert; +import org.openqa.selenium.By; +import org.openqa.selenium.Keys; +import org.openqa.selenium.WebElement; +import org.slf4j.Logger; + +import io.github.bonigarcia.SeleniumExtension; +import io.openvidu.test.e2e.browser.BrowserUser; +import io.openvidu.test.e2e.browser.ChromeUser; +import io.openvidu.test.e2e.browser.FirefoxUser; + +/** + * E2E tests for openvidu-testapp. + * + * @author Pablo Fuente (pablo.fuente@urjc.es) + * @since 1.1.1 + */ +@Tag("e2e") +@DisplayName("E2E tests for OpenVidu TestApp") +@ExtendWith(SeleniumExtension.class) +@RunWith(JUnitPlatform.class) +public class OpenViduTestAppE2eTest { + + final Logger log = getLogger(lookup().lookupClass()); + + final String DEFAULT_SESSION_NAME = "TestSession"; + + String testAppUrl = "http://localhost:4200/"; // default value (local) + + BrowserUser user; + + @BeforeEach + void setup() { + this.user = new FirefoxUser("TestUser", 30); + } + + @Test + @DisplayName("One2One [Video + Audio]") + void oneToOneVideoAudioSession() throws InterruptedException { + + user.getEventManager().startPolling(); + + log.debug("Navigate to openvidu-testapp and click on 1:1 scenario"); + + user.getDriver().get(testAppUrl); + user.getDriver().findElement(By.id("auto-join-checkbox")).click(); + user.getDriver().findElement(By.id("one2one-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("videoPlaying", 4); + + Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); + + user.getDriver().findElement(By.id("remove-user-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("streamDestroyed", 1); + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 1); + + user.getDriver().findElement(By.id("remove-user-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 2); + + user.dispose(); + } + + @Test + @DisplayName("One2One [Audio]") + void oneToOneAudioSession() throws InterruptedException { + + user.getEventManager().startPolling(); + + user.getDriver().get(testAppUrl); + user.getDriver().findElement(By.id("one2one-btn")).click(); + + List l1 = user.getDriver().findElements(By.className("send-video-checkbox")); + for (WebElement el : l1) { + el.click(); + } + + List l2 = user.getDriver().findElements(By.className("join-btn")); + for (WebElement el : l2) { + el.click(); + } + + user.getEventManager().waitUntilNumberOfEvent("connectionCreated", 4); + user.getEventManager().waitUntilNumberOfEvent("accessAllowed", 2); + user.getEventManager().waitUntilNumberOfEvent("videoElementCreated", 4); + user.getEventManager().waitUntilNumberOfEvent("streamCreated", 1); + user.getEventManager().waitUntilNumberOfEvent("videoPlaying", 4); + + Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, false)); + + user.getDriver().findElement(By.id("remove-user-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("streamDestroyed", 1); + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 1); + + user.getDriver().findElement(By.id("remove-user-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 2); + + user.dispose(); + } + + @Test + @DisplayName("One2One [Video]") + void oneToOneVideoSession() throws InterruptedException { + + user.getEventManager().startPolling(); + + user.getDriver().get(testAppUrl); + user.getDriver().findElement(By.id("one2one-btn")).click(); + + List l1 = user.getDriver().findElements(By.className("send-audio-checkbox")); + for (WebElement el : l1) { + el.click(); + } + + List l2 = user.getDriver().findElements(By.className("join-btn")); + for (WebElement el : l2) { + el.click(); + } + + user.getEventManager().waitUntilNumberOfEvent("connectionCreated", 4); + user.getEventManager().waitUntilNumberOfEvent("accessAllowed", 2); + user.getEventManager().waitUntilNumberOfEvent("videoElementCreated", 4); + user.getEventManager().waitUntilNumberOfEvent("streamCreated", 1); + user.getEventManager().waitUntilNumberOfEvent("videoPlaying", 4); + + Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), false, true)); + + user.getDriver().findElement(By.id("remove-user-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("streamDestroyed", 1); + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 1); + + user.getDriver().findElement(By.id("remove-user-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 2); + + user.dispose(); + } + + @Test + @DisplayName("One2Many [Video + Audio]") + void oneToManyVideoAudioSession() throws InterruptedException { + + user.getEventManager().startPolling(); + + log.debug("Navigate to openvidu-testapp and click on 1:N scenario"); + + user.getDriver().get(testAppUrl); + user.getDriver().findElement(By.id("auto-join-checkbox")).click(); + user.getDriver().findElement(By.id("one2many-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("videoPlaying", 4); + + user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true); + + user.getDriver().findElements(By.className(("leave-btn"))).get(0).click(); + + user.getEventManager().waitUntilNumberOfEvent("streamDestroyed", 3); + + user.dispose(); + } + + @Test + @DisplayName("Unique user remote subscription [Video + Audio]") + void oneRemoteSubscription() throws InterruptedException { + + user.getEventManager().startPolling(); + + log.debug("Navigate to openvidu-testapp and join one user with remote subscription"); + + user.getDriver().get(testAppUrl); + user.getDriver().findElement(By.id("add-user-btn")).click(); + user.getDriver().findElement(By.className("subscribe-remote-check")).click(); + user.getDriver().findElement(By.className("join-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("connectionCreated", 1); + user.getEventManager().waitUntilNumberOfEvent("accessAllowed", 1); + user.getEventManager().waitUntilNumberOfEvent("videoElementCreated", 1); + user.getEventManager().waitUntilNumberOfEvent("remoteVideoPlaying", 1); + + Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); + + user.getDriver().findElement(By.className(("leave-btn"))).click(); + + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 1); + + user.dispose(); + } + + @Test + @DisplayName("Unique user remote subscription [ScreenShare + Audio]") + void oneRemoteSubscriptionScreen() throws InterruptedException { + + user.getEventManager().startPolling(); + + log.debug("Navigate to openvidu-testapp and join one user with remote subscription"); + + user.getDriver().get(testAppUrl); + user.getDriver().findElement(By.id("add-user-btn")).click(); + user.getDriver().findElement(By.className("screen-radio")).click(); + user.getDriver().findElement(By.className("subscribe-remote-check")).click(); + user.getDriver().findElement(By.className("join-btn")).click(); + + user.getEventManager().waitUntilNumberOfEvent("connectionCreated", 1); + user.getEventManager().waitUntilNumberOfEvent("accessAllowed", 1); + user.getEventManager().waitUntilNumberOfEvent("videoElementCreated", 1); + user.getEventManager().waitUntilNumberOfEvent("remoteVideoPlaying", 1); + + Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); + + user.getDriver().findElement(By.className(("leave-btn"))).click(); + + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 1); + + user.dispose(); + } + + @Test + @DisplayName("Many2Many [Video + Audio]") + void manyToManyVideoAudioSession() throws InterruptedException { + + user.getEventManager().startPolling(); + + user.getDriver().get(testAppUrl); + user.getDriver().findElement(By.id("add-user-btn")).click(); + user.getDriver().findElement(By.id("add-user-btn")).click(); + user.getDriver().findElement(By.id("add-user-btn")).click(); + user.getDriver().findElement(By.id("add-user-btn")).click(); + + List l = user.getDriver().findElements(By.className("join-btn")); + for (WebElement el : l) { + el.sendKeys(Keys.ENTER); + } + + user.getEventManager().waitUntilNumberOfEvent("connectionCreated", 16); + user.getEventManager().waitUntilNumberOfEvent("accessAllowed", 4); + user.getEventManager().waitUntilNumberOfEvent("videoElementCreated", 16); + user.getEventManager().waitUntilNumberOfEvent("streamCreated", 6); + user.getEventManager().waitUntilNumberOfEvent("videoPlaying", 16); + + Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); + + user.getDriver().findElement(By.id(("remove-user-btn"))).sendKeys(Keys.ENTER); + user.getEventManager().waitUntilNumberOfEvent("streamDestroyed", 3); + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 1); + + user.getDriver().findElement(By.id(("remove-user-btn"))).sendKeys(Keys.ENTER); + user.getEventManager().waitUntilNumberOfEvent("streamDestroyed", 4); + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 2); + + user.getDriver().findElement(By.id(("remove-user-btn"))).sendKeys(Keys.ENTER); + user.getEventManager().waitUntilNumberOfEvent("streamDestroyed", 5); + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 3); + + user.getDriver().findElement(By.id(("remove-user-btn"))).sendKeys(Keys.ENTER); + user.getEventManager().waitUntilNumberOfEvent("sessionDisconnected", 4); + + user.dispose(); + } + +} diff --git a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/BrowserUser.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/BrowserUser.java new file mode 100644 index 00000000..e584f310 --- /dev/null +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/BrowserUser.java @@ -0,0 +1,72 @@ +/* + * (C) Copyright 2017 OpenVidu (http://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 org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.ui.WebDriverWait; + +import io.openvidu.test.e2e.OpenViduEventManager; + +public class BrowserUser { + + protected WebDriver driver; + protected WebDriverWait waiter; + protected String clientData; + protected int timeOfWaitInSeconds; + protected OpenViduEventManager eventManager; + + public BrowserUser(String clientData, int timeOfWaitInSeconds) { + this.clientData = clientData; + this.timeOfWaitInSeconds = timeOfWaitInSeconds; + } + + public WebDriver getDriver() { + return this.driver; + } + + public WebDriverWait getWaiter() { + return this.waiter; + } + + public OpenViduEventManager getEventManager() { + return this.eventManager; + } + + public String getClientData() { + return this.clientData; + } + + public int getTimeOfWait() { + return this.timeOfWaitInSeconds; + } + + protected void newWaiter(int timeOfWait) { + this.waiter = new WebDriverWait(this.driver, timeOfWait); + } + + protected void configureDriver() { + this.waiter = new WebDriverWait(this.driver, this.timeOfWaitInSeconds); + this.eventManager = new OpenViduEventManager(this.driver, this.waiter, this.timeOfWaitInSeconds); + } + + public void dispose() { + this.eventManager.stopPolling(); + this.driver.quit(); + } + +} \ No newline at end of file diff --git a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/ChromeUser.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeUser.java similarity index 56% rename from openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/ChromeUser.java rename to openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeUser.java index e9434ead..7bf27f8c 100644 --- a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/ChromeUser.java +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/ChromeUser.java @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017 OpenVidu (http://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.io.IOException; @@ -8,8 +25,8 @@ import org.springframework.core.io.ClassPathResource; public class ChromeUser extends BrowserUser { - public ChromeUser(String userName, int timeOfWait) { - super(userName, timeOfWait); + public ChromeUser(String userName, int timeOfWaitInSeconds) { + super(userName, timeOfWaitInSeconds); System.setProperty("webdriver.chrome.driver", "/home/chromedriver"); @@ -29,7 +46,7 @@ public class ChromeUser extends BrowserUser { } this.driver = new ChromeDriver(options); - this.driver.manage().timeouts().setScriptTimeout(5, TimeUnit.SECONDS); + this.driver.manage().timeouts().setScriptTimeout(this.timeOfWaitInSeconds, TimeUnit.SECONDS); this.configureDriver(); } diff --git a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/FirefoxUser.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/FirefoxUser.java similarity index 55% rename from openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/FirefoxUser.java rename to openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/FirefoxUser.java index 0f2a6a0e..1cb1f8c6 100644 --- a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/browser/FirefoxUser.java +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/browser/FirefoxUser.java @@ -1,3 +1,20 @@ +/* + * (C) Copyright 2017 OpenVidu (http://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 org.openqa.selenium.firefox.FirefoxDriver; @@ -6,8 +23,8 @@ import org.openqa.selenium.remote.DesiredCapabilities; public class FirefoxUser extends BrowserUser { - public FirefoxUser(String userName, int timeOfWait) { - super(userName, timeOfWait); + public FirefoxUser(String userName, int timeOfWaitInSeconds) { + super(userName, timeOfWaitInSeconds); System.setProperty("webdriver.gecko.driver", "/home/geckodriver"); diff --git a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/tes/AppTest.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/tes/AppTest.java deleted file mode 100644 index 64aaa69a..00000000 --- a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/tes/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.openvidu.test.e2e.tes; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.html b/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.html index 92eb5308..e21e4bdd 100644 --- a/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.html +++ b/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.html @@ -17,9 +17,9 @@
- - Subscribe - Publish + + + Publish
@@ -28,15 +28,15 @@

Send

- Audio - Video + Audio + Video

Enter active

- Audio - Video + Audio + Video
diff --git a/openvidu-testapp/src/index.html b/openvidu-testapp/src/index.html index 9a60cd50..27abaf4d 100644 --- a/openvidu-testapp/src/index.html +++ b/openvidu-testapp/src/index.html @@ -14,7 +14,7 @@ - diff --git a/pom.xml b/pom.xml index cc46e6e6..cb821e7c 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ https://github.com/OpenVidu/openvidu git@github.com:OpenVidu/openvidu.git - + ossrh @@ -80,6 +80,7 @@ openvidu-server openvidu-client openvidu-test + openvidu-test-e2e openvidu-java-client @@ -89,6 +90,7 @@ openvidu-server openvidu-client openvidu-test + openvidu-test-e2e @@ -201,6 +203,11 @@ openvidu-test ${version.openvidu} + + io.openvidu + openvidu-test-e2e + ${version.openvidu} + io.openvidu openvidu-java-client