openvidu-test-e2e: browser events checking system reinforced

pull/88/merge
pabloFuente 2018-07-03 19:15:48 +02:00
parent 15e09b9d5b
commit 20716b8c1a
5 changed files with 73 additions and 26 deletions

View File

@ -17,6 +17,8 @@
package io.openvidu.test.e2e; package io.openvidu.test.e2e;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Queue; import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -69,7 +71,7 @@ public class OpenViduEventManager {
private ExecutorService execService = Executors.newCachedThreadPool(); private ExecutorService execService = Executors.newCachedThreadPool();
private WebDriver driver; private WebDriver driver;
private Queue<JSONObject> eventQueue; private Queue<JSONObject> eventQueue;
private Map<String, RunnableCallback> eventCallbacks; private Map<String, Collection<RunnableCallback>> eventCallbacks;
private Map<String, AtomicInteger> eventNumbers; private Map<String, AtomicInteger> eventNumbers;
private Map<String, CountDownLatch> eventCountdowns; private Map<String, CountDownLatch> eventCountdowns;
private AtomicBoolean isInterrupted = new AtomicBoolean(false); private AtomicBoolean isInterrupted = new AtomicBoolean(false);
@ -113,7 +115,8 @@ public class OpenViduEventManager {
} }
public void on(String eventName, Consumer<JSONObject> callback) { public void on(String eventName, Consumer<JSONObject> callback) {
this.eventCallbacks.put(eventName, new RunnableCallback(callback)); this.eventCallbacks.putIfAbsent(eventName, new HashSet<>());
this.eventCallbacks.get(eventName).add(new RunnableCallback(callback));
} }
public void off(String eventName) { public void off(String eventName) {
@ -164,13 +167,14 @@ public class OpenViduEventManager {
System.out.println(event.get("event") + ": " + event); System.out.println(event.get("event") + ": " + event);
RunnableCallback callback = this.eventCallbacks.get(event.get("event")); if (this.eventCallbacks.containsKey(event.get("event"))) {
if (callback != null) { for (RunnableCallback callback : this.eventCallbacks.get(event.get("event"))) {
callback.setEventResult(event); callback.setEventResult(event);
execService.submit(callback); execService.submit(callback);
} }
} }
} }
}
private void getEventsFromBrowser() { private void getEventsFromBrowser() {
String rawEvents = this.getAndClearEventsInBrowser(); String rawEvents = this.getAndClearEventsInBrowser();

View File

@ -28,6 +28,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Queue; import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CountDownLatch;
import org.junit.jupiter.api.*; import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
@ -661,9 +662,14 @@ public class OpenViduTestAppE2eTest {
user.getDriver().findElement(By.id("auto-join-checkbox")).click(); user.getDriver().findElement(By.id("auto-join-checkbox")).click();
final CountDownLatch latch1 = new CountDownLatch(2);
// First publication (audio + video [CAMERA]) // First publication (audio + video [CAMERA])
user.getEventManager().on("streamPlaying", (event) -> { user.getEventManager().on("streamPlaying", (event) -> {
if (event.get("eventContent") != null) {
threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA")); threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA"));
}
latch1.countDown();
}); });
user.getDriver().findElement(By.id("one2many-btn")).click(); user.getDriver().findElement(By.id("one2many-btn")).click();
@ -673,6 +679,9 @@ public class OpenViduTestAppE2eTest {
user.getEventManager().waitUntilEventReaches("accessAllowed", 1); user.getEventManager().waitUntilEventReaches("accessAllowed", 1);
user.getEventManager().waitUntilEventReaches("streamCreated", 2); user.getEventManager().waitUntilEventReaches("streamCreated", 2);
user.getEventManager().waitUntilEventReaches("streamPlaying", 2); user.getEventManager().waitUntilEventReaches("streamPlaying", 2);
latch1.await();
user.getEventManager().off("streamPlaying"); user.getEventManager().off("streamPlaying");
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) { for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
Assert.assertTrue(iter.next()); Assert.assertTrue(iter.next());
@ -685,15 +694,23 @@ public class OpenViduTestAppE2eTest {
Thread.sleep(2000); Thread.sleep(2000);
final CountDownLatch latch2 = new CountDownLatch(2);
// Second publication (only video (SCREEN)) // Second publication (only video (SCREEN))
user.getEventManager().on("streamPlaying", (event) -> { user.getEventManager().on("streamPlaying", (event) -> {
if (event.get("eventContent") != null) {
threadAssertions.add(((String) event.get("eventContent")).contains("SCREEN")); threadAssertions.add(((String) event.get("eventContent")).contains("SCREEN"));
}
latch2.countDown();
}); });
user.getDriver().findElements(By.className("change-publisher-btn")).get(0).click(); user.getDriver().findElements(By.className("change-publisher-btn")).get(0).click();
user.getEventManager().waitUntilEventReaches("streamDestroyed", 2); user.getEventManager().waitUntilEventReaches("streamDestroyed", 2);
user.getEventManager().waitUntilEventReaches("accessAllowed", 2); user.getEventManager().waitUntilEventReaches("accessAllowed", 2);
user.getEventManager().waitUntilEventReaches("streamCreated", 4); user.getEventManager().waitUntilEventReaches("streamCreated", 4);
user.getEventManager().waitUntilEventReaches("streamPlaying", 4); user.getEventManager().waitUntilEventReaches("streamPlaying", 4);
latch2.await();
user.getEventManager().off("streamPlaying"); user.getEventManager().off("streamPlaying");
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) { for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
Assert.assertTrue(iter.next()); Assert.assertTrue(iter.next());
@ -705,15 +722,23 @@ public class OpenViduTestAppE2eTest {
Thread.sleep(2000); Thread.sleep(2000);
final CountDownLatch latch3 = new CountDownLatch(2);
// Third publication (audio + video [CAMERA]) // Third publication (audio + video [CAMERA])
user.getEventManager().on("streamPlaying", (event) -> { user.getEventManager().on("streamPlaying", (event) -> {
if (event.get("eventContent") != null) {
threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA")); threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA"));
}
latch3.countDown();
}); });
user.getDriver().findElements(By.className("change-publisher-btn")).get(0).click(); user.getDriver().findElements(By.className("change-publisher-btn")).get(0).click();
user.getEventManager().waitUntilEventReaches("streamDestroyed", 4); user.getEventManager().waitUntilEventReaches("streamDestroyed", 4);
user.getEventManager().waitUntilEventReaches("accessAllowed", 3); user.getEventManager().waitUntilEventReaches("accessAllowed", 3);
user.getEventManager().waitUntilEventReaches("streamCreated", 6); user.getEventManager().waitUntilEventReaches("streamCreated", 6);
user.getEventManager().waitUntilEventReaches("streamPlaying", 6); user.getEventManager().waitUntilEventReaches("streamPlaying", 6);
latch3.await();
user.getEventManager().off("streamPlaying"); user.getEventManager().off("streamPlaying");
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) { for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
Assert.assertTrue(iter.next()); Assert.assertTrue(iter.next());
@ -755,11 +780,16 @@ public class OpenViduTestAppE2eTest {
user.getEventManager().waitUntilEventReaches("streamPlaying", 2); user.getEventManager().waitUntilEventReaches("streamPlaying", 2);
// Unpublish video // Unpublish video
final CountDownLatch latch1 = new CountDownLatch(2);
user.getEventManager().on("streamPropertyChanged", (event) -> { user.getEventManager().on("streamPropertyChanged", (event) -> {
threadAssertions.add(((String) event.get("eventContent")).contains("videoActive [false]")); threadAssertions.add(((String) event.get("eventContent")).contains("videoActive [false]"));
latch1.countDown();
}); });
user.getDriver().findElements(By.className("pub-video-btn")).get(0).click(); user.getDriver().findElements(By.className("pub-video-btn")).get(0).click();
user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 2); user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 2);
latch1.await();
user.getEventManager().off("streamPropertyChanged"); user.getEventManager().off("streamPropertyChanged");
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) { for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
Assert.assertTrue(iter.next()); Assert.assertTrue(iter.next());
@ -767,11 +797,16 @@ public class OpenViduTestAppE2eTest {
} }
// Unpublish audio // Unpublish audio
final CountDownLatch latch2 = new CountDownLatch(2);
user.getEventManager().on("streamPropertyChanged", (event) -> { user.getEventManager().on("streamPropertyChanged", (event) -> {
threadAssertions.add(((String) event.get("eventContent")).contains("audioActive [false]")); threadAssertions.add(((String) event.get("eventContent")).contains("audioActive [false]"));
latch2.countDown();
}); });
user.getDriver().findElements(By.className("pub-audio-btn")).get(0).click(); user.getDriver().findElements(By.className("pub-audio-btn")).get(0).click();
user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 4); user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 4);
latch2.await();
user.getEventManager().off("streamPropertyChanged"); user.getEventManager().off("streamPropertyChanged");
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) { for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
Assert.assertTrue(iter.next()); Assert.assertTrue(iter.next());
@ -779,14 +814,19 @@ public class OpenViduTestAppE2eTest {
} }
// Resize captured window // Resize captured window
int newWidth = 1280; final CountDownLatch latch3 = new CountDownLatch(2);
int newHeight = 720; int newWidth = 1500;
int newHeight = 500;
user.getEventManager().on("streamPropertyChanged", (event) -> { user.getEventManager().on("streamPropertyChanged", (event) -> {
threadAssertions.add(((String) event.get("eventContent")) threadAssertions.add(((String) event.get("eventContent"))
.contains("videoDimensions videoDimensions [{\\\"width\\\":" + newWidth + ",\\\"height\\\":" + newHeight + "}]")); .contains("videoDimensions [{\"width\":" + (newWidth - 10) + ",\"height\":" + (newHeight - 132) + "}]"));
latch3.countDown();
}); });
user.getDriver().manage().window().setSize(new Dimension(newWidth, newHeight)); user.getDriver().manage().window().setSize(new Dimension(newWidth, newHeight));
user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 6); user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 6);
latch3.await();
user.getEventManager().off("streamPropertyChanged"); user.getEventManager().off("streamPropertyChanged");
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) { for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
Assert.assertTrue(iter.next()); Assert.assertTrue(iter.next());

View File

@ -20,6 +20,7 @@ package io.openvidu.test.e2e.browser;
import static java.lang.invoke.MethodHandles.lookup; import static java.lang.invoke.MethodHandles.lookup;
import static org.slf4j.LoggerFactory.getLogger; import static org.slf4j.LoggerFactory.getLogger;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.WebDriverWait; import org.openqa.selenium.support.ui.WebDriverWait;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -68,6 +69,7 @@ public class BrowserUser {
protected void configureDriver() { protected void configureDriver() {
this.waiter = new WebDriverWait(this.driver, this.timeOfWaitInSeconds); this.waiter = new WebDriverWait(this.driver, this.timeOfWaitInSeconds);
this.eventManager = new OpenViduEventManager(this.driver, this.timeOfWaitInSeconds); this.eventManager = new OpenViduEventManager(this.driver, this.timeOfWaitInSeconds);
this.driver.manage().window().setSize(new Dimension(1920,1080));
} }
public void dispose() { public void dispose() {

View File

@ -21,6 +21,7 @@ import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.DesiredCapabilities;
@ -41,7 +42,7 @@ public class ChromeUser extends BrowserUser {
// This flag fakes user media with synthetic video // This flag fakes user media with synthetic video
options.addArguments("--use-fake-device-for-media-stream"); options.addArguments("--use-fake-device-for-media-stream");
// This flag selects the entire screen as video source when screen sharing // This flag selects the entire screen as video source when screen sharing
options.addArguments("--auto-select-desktop-capture-source=OpenVidu TestApp - Google Chrome"); options.addArguments("--auto-select-desktop-capture-source=OpenVidu TestApp");
try { try {
// Add Screen Sharing extension // Add Screen Sharing extension