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;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
@ -69,7 +71,7 @@ public class OpenViduEventManager {
|
|||
private ExecutorService execService = Executors.newCachedThreadPool();
|
||||
private WebDriver driver;
|
||||
private Queue<JSONObject> eventQueue;
|
||||
private Map<String, RunnableCallback> eventCallbacks;
|
||||
private Map<String, Collection<RunnableCallback>> eventCallbacks;
|
||||
private Map<String, AtomicInteger> eventNumbers;
|
||||
private Map<String, CountDownLatch> eventCountdowns;
|
||||
private AtomicBoolean isInterrupted = new AtomicBoolean(false);
|
||||
|
@ -113,7 +115,8 @@ public class OpenViduEventManager {
|
|||
}
|
||||
|
||||
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) {
|
||||
|
@ -164,10 +167,11 @@ public class OpenViduEventManager {
|
|||
|
||||
System.out.println(event.get("event") + ": " + event);
|
||||
|
||||
RunnableCallback callback = this.eventCallbacks.get(event.get("event"));
|
||||
if (callback != null) {
|
||||
callback.setEventResult(event);
|
||||
execService.submit(callback);
|
||||
if (this.eventCallbacks.containsKey(event.get("event"))) {
|
||||
for (RunnableCallback callback : this.eventCallbacks.get(event.get("event"))) {
|
||||
callback.setEventResult(event);
|
||||
execService.submit(callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -203,7 +207,7 @@ public class OpenViduEventManager {
|
|||
.executeScript("var e = window.myEvents; window.myEvents = ''; return e;");
|
||||
return events;
|
||||
}
|
||||
|
||||
|
||||
public boolean hasMediaStream(WebElement videoElement) {
|
||||
boolean hasMediaStream = (boolean) ((JavascriptExecutor) driver).executeScript(
|
||||
"return (!!(document.getElementById('" + videoElement.getAttribute("id") + "').srcObject))");
|
||||
|
|
|
@ -28,6 +28,7 @@ import java.util.Iterator;
|
|||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
@ -661,9 +662,14 @@ public class OpenViduTestAppE2eTest {
|
|||
|
||||
user.getDriver().findElement(By.id("auto-join-checkbox")).click();
|
||||
|
||||
final CountDownLatch latch1 = new CountDownLatch(2);
|
||||
|
||||
// First publication (audio + video [CAMERA])
|
||||
user.getEventManager().on("streamPlaying", (event) -> {
|
||||
threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA"));
|
||||
if (event.get("eventContent") != null) {
|
||||
threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA"));
|
||||
}
|
||||
latch1.countDown();
|
||||
});
|
||||
user.getDriver().findElement(By.id("one2many-btn")).click();
|
||||
|
||||
|
@ -673,6 +679,9 @@ public class OpenViduTestAppE2eTest {
|
|||
user.getEventManager().waitUntilEventReaches("accessAllowed", 1);
|
||||
user.getEventManager().waitUntilEventReaches("streamCreated", 2);
|
||||
user.getEventManager().waitUntilEventReaches("streamPlaying", 2);
|
||||
|
||||
latch1.await();
|
||||
|
||||
user.getEventManager().off("streamPlaying");
|
||||
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
|
||||
Assert.assertTrue(iter.next());
|
||||
|
@ -685,15 +694,23 @@ public class OpenViduTestAppE2eTest {
|
|||
|
||||
Thread.sleep(2000);
|
||||
|
||||
final CountDownLatch latch2 = new CountDownLatch(2);
|
||||
|
||||
// Second publication (only video (SCREEN))
|
||||
user.getEventManager().on("streamPlaying", (event) -> {
|
||||
threadAssertions.add(((String) event.get("eventContent")).contains("SCREEN"));
|
||||
if (event.get("eventContent") != null) {
|
||||
threadAssertions.add(((String) event.get("eventContent")).contains("SCREEN"));
|
||||
}
|
||||
latch2.countDown();
|
||||
});
|
||||
user.getDriver().findElements(By.className("change-publisher-btn")).get(0).click();
|
||||
user.getEventManager().waitUntilEventReaches("streamDestroyed", 2);
|
||||
user.getEventManager().waitUntilEventReaches("accessAllowed", 2);
|
||||
user.getEventManager().waitUntilEventReaches("streamCreated", 4);
|
||||
user.getEventManager().waitUntilEventReaches("streamPlaying", 4);
|
||||
|
||||
latch2.await();
|
||||
|
||||
user.getEventManager().off("streamPlaying");
|
||||
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
|
||||
Assert.assertTrue(iter.next());
|
||||
|
@ -705,15 +722,23 @@ public class OpenViduTestAppE2eTest {
|
|||
|
||||
Thread.sleep(2000);
|
||||
|
||||
final CountDownLatch latch3 = new CountDownLatch(2);
|
||||
|
||||
// Third publication (audio + video [CAMERA])
|
||||
user.getEventManager().on("streamPlaying", (event) -> {
|
||||
threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA"));
|
||||
if (event.get("eventContent") != null) {
|
||||
threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA"));
|
||||
}
|
||||
latch3.countDown();
|
||||
});
|
||||
user.getDriver().findElements(By.className("change-publisher-btn")).get(0).click();
|
||||
user.getEventManager().waitUntilEventReaches("streamDestroyed", 4);
|
||||
user.getEventManager().waitUntilEventReaches("accessAllowed", 3);
|
||||
user.getEventManager().waitUntilEventReaches("streamCreated", 6);
|
||||
user.getEventManager().waitUntilEventReaches("streamPlaying", 6);
|
||||
|
||||
latch3.await();
|
||||
|
||||
user.getEventManager().off("streamPlaying");
|
||||
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
|
||||
Assert.assertTrue(iter.next());
|
||||
|
@ -755,11 +780,16 @@ public class OpenViduTestAppE2eTest {
|
|||
user.getEventManager().waitUntilEventReaches("streamPlaying", 2);
|
||||
|
||||
// Unpublish video
|
||||
final CountDownLatch latch1 = new CountDownLatch(2);
|
||||
user.getEventManager().on("streamPropertyChanged", (event) -> {
|
||||
threadAssertions.add(((String) event.get("eventContent")).contains("videoActive [false]"));
|
||||
latch1.countDown();
|
||||
});
|
||||
user.getDriver().findElements(By.className("pub-video-btn")).get(0).click();
|
||||
user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 2);
|
||||
|
||||
latch1.await();
|
||||
|
||||
user.getEventManager().off("streamPropertyChanged");
|
||||
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
|
||||
Assert.assertTrue(iter.next());
|
||||
|
@ -767,11 +797,16 @@ public class OpenViduTestAppE2eTest {
|
|||
}
|
||||
|
||||
// Unpublish audio
|
||||
final CountDownLatch latch2 = new CountDownLatch(2);
|
||||
user.getEventManager().on("streamPropertyChanged", (event) -> {
|
||||
threadAssertions.add(((String) event.get("eventContent")).contains("audioActive [false]"));
|
||||
latch2.countDown();
|
||||
});
|
||||
user.getDriver().findElements(By.className("pub-audio-btn")).get(0).click();
|
||||
user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 4);
|
||||
|
||||
latch2.await();
|
||||
|
||||
user.getEventManager().off("streamPropertyChanged");
|
||||
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
|
||||
Assert.assertTrue(iter.next());
|
||||
|
@ -779,14 +814,19 @@ public class OpenViduTestAppE2eTest {
|
|||
}
|
||||
|
||||
// Resize captured window
|
||||
int newWidth = 1280;
|
||||
int newHeight = 720;
|
||||
final CountDownLatch latch3 = new CountDownLatch(2);
|
||||
int newWidth = 1500;
|
||||
int newHeight = 500;
|
||||
user.getEventManager().on("streamPropertyChanged", (event) -> {
|
||||
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.getEventManager().waitUntilEventReaches("streamPropertyChanged", 6);
|
||||
|
||||
latch3.await();
|
||||
|
||||
user.getEventManager().off("streamPropertyChanged");
|
||||
for (Iterator<Boolean> iter = threadAssertions.iterator(); iter.hasNext();) {
|
||||
Assert.assertTrue(iter.next());
|
||||
|
@ -979,7 +1019,7 @@ public class OpenViduTestAppE2eTest {
|
|||
Assert.assertFalse(file3.exists());
|
||||
|
||||
user.getDriver().findElement(By.id("close-dialog-btn")).click();
|
||||
|
||||
|
||||
gracefullyLeaveParticipants(1);
|
||||
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ package io.openvidu.test.e2e.browser;
|
|||
import static java.lang.invoke.MethodHandles.lookup;
|
||||
import static org.slf4j.LoggerFactory.getLogger;
|
||||
|
||||
import org.openqa.selenium.Dimension;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -27,7 +28,7 @@ import org.slf4j.Logger;
|
|||
import io.openvidu.test.e2e.OpenViduEventManager;
|
||||
|
||||
public class BrowserUser {
|
||||
|
||||
|
||||
final static Logger log = getLogger(lookup().lookupClass());
|
||||
|
||||
protected WebDriver driver;
|
||||
|
@ -56,7 +57,7 @@ public class BrowserUser {
|
|||
public String getClientData() {
|
||||
return this.clientData;
|
||||
}
|
||||
|
||||
|
||||
public int getTimeOfWait() {
|
||||
return this.timeOfWaitInSeconds;
|
||||
}
|
||||
|
@ -68,8 +69,9 @@ public class BrowserUser {
|
|||
protected void configureDriver() {
|
||||
this.waiter = new WebDriverWait(this.driver, this.timeOfWaitInSeconds);
|
||||
this.eventManager = new OpenViduEventManager(this.driver, this.timeOfWaitInSeconds);
|
||||
this.driver.manage().window().setSize(new Dimension(1920,1080));
|
||||
}
|
||||
|
||||
|
||||
public void dispose() {
|
||||
this.eventManager.stopPolling();
|
||||
this.driver.quit();
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.io.IOException;
|
|||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
import org.openqa.selenium.remote.DesiredCapabilities;
|
||||
|
@ -31,7 +32,7 @@ public class ChromeUser extends BrowserUser {
|
|||
|
||||
public ChromeUser(String userName, int timeOfWaitInSeconds) {
|
||||
super(userName, timeOfWaitInSeconds);
|
||||
|
||||
|
||||
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
|
||||
capabilities.setAcceptInsecureCerts(true);
|
||||
|
||||
|
@ -41,17 +42,17 @@ 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=OpenVidu TestApp - Google Chrome");
|
||||
|
||||
options.addArguments("--auto-select-desktop-capture-source=OpenVidu TestApp");
|
||||
|
||||
try {
|
||||
// Add Screen Sharing extension
|
||||
options.addExtensions(new ClassPathResource("ScreenCapturing.crx").getFile());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
|
@ -64,7 +65,7 @@ public class ChromeUser extends BrowserUser {
|
|||
log.info("Using local web driver");
|
||||
this.driver = new ChromeDriver(capabilities);
|
||||
}
|
||||
|
||||
|
||||
this.driver.manage().timeouts().setScriptTimeout(this.timeOfWaitInSeconds, TimeUnit.SECONDS);
|
||||
this.configureDriver();
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ public class FirefoxUser extends BrowserUser {
|
|||
|
||||
public FirefoxUser(String userName, int timeOfWaitInSeconds) {
|
||||
super(userName, timeOfWaitInSeconds);
|
||||
|
||||
|
||||
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
|
||||
capabilities.setAcceptInsecureCerts(true);
|
||||
FirefoxProfile profile = new FirefoxProfile();
|
||||
|
@ -40,7 +40,7 @@ public class FirefoxUser extends BrowserUser {
|
|||
profile.setPreference("media.navigator.streams.fake", true);
|
||||
|
||||
capabilities.setCapability(FirefoxDriver.PROFILE, profile);
|
||||
|
||||
|
||||
String REMOTE_URL = System.getProperty("REMOTE_URL_FIREFOX");
|
||||
if (REMOTE_URL != null) {
|
||||
log.info("Using URL {} to connect to remote web driver", REMOTE_URL);
|
||||
|
@ -53,7 +53,7 @@ public class FirefoxUser extends BrowserUser {
|
|||
log.info("Using local web driver");
|
||||
this.driver = new FirefoxDriver(capabilities);
|
||||
}
|
||||
|
||||
|
||||
this.configureDriver();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue