mirror of https://github.com/OpenVidu/openvidu.git
openvidu-test-e2e: browser events checking system reinforced
parent
15e09b9d5b
commit
20716b8c1a
|
@ -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();
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue