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;
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))");

View File

@ -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);
}

View File

@ -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();

View File

@ -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();
}

View File

@ -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();
}