diff --git a/openvidu-browser/src/OpenVidu/Session.ts b/openvidu-browser/src/OpenVidu/Session.ts index 85e4e9c1..1c69a796 100644 --- a/openvidu-browser/src/OpenVidu/Session.ts +++ b/openvidu-browser/src/OpenVidu/Session.ts @@ -532,7 +532,14 @@ export class Session implements EventDispatcher { } signalMessage['data'] = signal.data ? signal.data : ''; - signalMessage['type'] = signal.type ? signal.type : ''; + + let typeAux: string = signal.type ? signal.type : 'signal'; + if (!!typeAux) { + if (typeAux.substring(0, 7) !== 'signal:') { + typeAux = 'signal:' + typeAux; + } + } + signalMessage['type'] = typeAux; this.openvidu.sendRequest('sendMessage', { message: JSON.stringify(signalMessage) @@ -776,7 +783,9 @@ export class Session implements EventDispatcher { .then(connection => { this.ee.emitEvent('signal', [new SignalEvent(this, msg.type, msg.data, connection)]); - this.ee.emitEvent('signal:' + msg.type, [new SignalEvent(this, msg.type, msg.data, connection)]); + if (msg.type !== 'signal') { + this.ee.emitEvent(msg.type, [new SignalEvent(this, msg.type, msg.data, connection)]); + } }) .catch(openViduError => { console.error(openViduError); diff --git a/openvidu-browser/src/OpenViduInternal/Events/Event.ts b/openvidu-browser/src/OpenViduInternal/Events/Event.ts index f4468af1..70c344d4 100644 --- a/openvidu-browser/src/OpenViduInternal/Events/Event.ts +++ b/openvidu-browser/src/OpenViduInternal/Events/Event.ts @@ -37,7 +37,10 @@ export abstract class Event { */ type: string; - private hasBeenPrevented = false; + /** + * @hidden + */ + hasBeenPrevented = false; /** * @hidden @@ -75,6 +78,9 @@ export abstract class Event { this.hasBeenPrevented = true; } - protected abstract callDefaultBehavior(); + /** + * @hidden + */ + abstract callDefaultBehavior(); } \ No newline at end of file diff --git a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduEventManager.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduEventManager.java index a6fa5329..8f7f49c6 100644 --- a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduEventManager.java +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduEventManager.java @@ -18,6 +18,7 @@ package io.openvidu.test.e2e; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Queue; @@ -32,15 +33,15 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + /** * Manager event class for BrowserUser. Collects, cleans and stores events from * openvidu-testapp @@ -49,19 +50,19 @@ import org.slf4j.LoggerFactory; * @since 1.1.1 */ public class OpenViduEventManager { - + private static final Logger log = LoggerFactory.getLogger(OpenViduEventManager.class); private static class RunnableCallback implements Runnable { - private final Consumer callback; - private JSONObject eventResult; + private final Consumer callback; + private JsonObject eventResult; - public RunnableCallback(Consumer callback) { + public RunnableCallback(Consumer callback) { this.callback = callback; } - public void setEventResult(JSONObject json) { + public void setEventResult(JsonObject json) { this.eventResult = json; } @@ -74,7 +75,7 @@ public class OpenViduEventManager { private Thread pollingThread; private ExecutorService execService = Executors.newCachedThreadPool(); private WebDriver driver; - private Queue eventQueue; + private Queue eventQueue; private Map> eventCallbacks; private Map eventNumbers; private Map eventCountdowns; @@ -83,7 +84,7 @@ public class OpenViduEventManager { public OpenViduEventManager(WebDriver driver, int timeOfWaitInSeconds) { this.driver = driver; - this.eventQueue = new ConcurrentLinkedQueue(); + this.eventQueue = new ConcurrentLinkedQueue(); this.eventCallbacks = new ConcurrentHashMap<>(); this.eventNumbers = new ConcurrentHashMap<>(); this.eventCountdowns = new ConcurrentHashMap<>(); @@ -104,6 +105,11 @@ public class OpenViduEventManager { while (!this.isInterrupted.get()) { this.getEventsFromBrowser(); this.emitEvents(); + try { + Thread.sleep(25); + } catch (InterruptedException e) { + e.printStackTrace(); + } } }); this.pollingThread.setUncaughtExceptionHandler(h); @@ -118,7 +124,7 @@ public class OpenViduEventManager { this.pollingThread.interrupt(); } - public void on(String eventName, Consumer callback) { + public void on(String eventName, Consumer callback) { this.eventCallbacks.putIfAbsent(eventName, new HashSet<>()); this.eventCallbacks.get(eventName).add(new RunnableCallback(callback)); } @@ -149,12 +155,30 @@ public class OpenViduEventManager { } } + public boolean assertMediaTracks(WebElement videoElement, boolean audioTransmission, boolean videoTransmission, + String parentSelector) { + return this.assertMediaTracks(Collections.singleton(videoElement), audioTransmission, videoTransmission, + parentSelector); + } + 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)); + success = success && (audioTransmission == this.hasAudioTracks(video, "")) + && (videoTransmission == this.hasVideoTracks(video, "")); + if (!success) + break; + } + return success; + } + + public boolean assertMediaTracks(Iterable videoElements, boolean audioTransmission, + boolean videoTransmission, String parentSelector) { + boolean success = true; + for (WebElement video : videoElements) { + success = success && (audioTransmission == this.hasAudioTracks(video, parentSelector)) + && (videoTransmission == this.hasVideoTracks(video, parentSelector)); if (!success) break; } @@ -174,12 +198,13 @@ public class OpenViduEventManager { private void emitEvents() { while (!this.eventQueue.isEmpty()) { - JSONObject event = this.eventQueue.poll(); + JsonObject event = this.eventQueue.poll(); + final String eventType = event.get("type").getAsString(); - log.info(event.get("event") + ": " + event); + log.info(eventType + ": " + event); - if (this.eventCallbacks.containsKey(event.get("event"))) { - for (RunnableCallback callback : this.eventCallbacks.get(event.get("event"))) { + if (this.eventCallbacks.containsKey(eventType)) { + for (RunnableCallback callback : this.eventCallbacks.get(eventType)) { callback.setEventResult(event); execService.submit(callback); } @@ -195,20 +220,16 @@ public class OpenViduEventManager { } String[] events = rawEvents.replaceFirst("^
", "").split("
"); - JSONParser parser = new JSONParser(); + JsonParser parser = new JsonParser(); for (String e : events) { - try { - JSONObject event = (JSONObject) parser.parse(e); - String eventName = (String) event.get("event"); + JsonObject event = (JsonObject) parser.parse(e); + final String eventType = event.get("type").getAsString(); - this.eventQueue.add(event); - getNumEvents(eventName).incrementAndGet(); + this.eventQueue.add(event); + getNumEvents(eventType).incrementAndGet(); - if (this.eventCountdowns.get(eventName) != null) { - this.eventCountdowns.get(eventName).countDown(); - } - } catch (ParseException exc) { - exc.printStackTrace(); + if (this.eventCountdowns.get(eventType) != null) { + this.eventCountdowns.get(eventType).countDown(); } } } @@ -219,62 +240,40 @@ public class OpenViduEventManager { return events; } - public boolean hasMediaStream(WebElement videoElement) { + public boolean hasMediaStream(WebElement videoElement, String parentSelector) { boolean hasMediaStream = (boolean) ((JavascriptExecutor) driver).executeScript( - "return (!!(document.getElementById('" + videoElement.getAttribute("id") + "').srcObject))"); + "return (!!(document.querySelector('" + parentSelector + (parentSelector.isEmpty() ? "" : " ") + "#" + + videoElement.getAttribute("id") + "').srcObject))"); return hasMediaStream; } public Map getAverageRgbFromVideo(WebElement videoElement) { - String script = "var callback = arguments[arguments.length - 1];" + - "var video = document.getElementById('" + videoElement.getAttribute("id") + "');" + - "var canvas = document.createElement('canvas');" + - "canvas.height = video.videoHeight;" + - "canvas.width = video.videoWidth;" + - "var context = canvas.getContext('2d');" + - "context.drawImage(video, 0, 0, canvas.width, canvas.height);" + - "var imgEl = document.createElement('img');" + - "imgEl.src = canvas.toDataURL();" + - "var blockSize = 5;" + - "var defaultRGB = { r: 0, g: 0, b: 0 };" + - "context.drawImage(video, 0, 0, 220, 150);" + - "var dataURL = canvas.toDataURL();" + - "imgEl.onload = function () {" + - "let i = -4;" + - "var rgb = { r: 0, g: 0, b: 0 };" + - "let count = 0;" + - "if (!context) {" + - " return defaultRGB;" + - "}" + + String script = "var callback = arguments[arguments.length - 1];" + "var video = document.getElementById('" + + videoElement.getAttribute("id") + "');" + "var canvas = document.createElement('canvas');" + + "canvas.height = video.videoHeight;" + "canvas.width = video.videoWidth;" + + "var context = canvas.getContext('2d');" + + "context.drawImage(video, 0, 0, canvas.width, canvas.height);" + + "var imgEl = document.createElement('img');" + "imgEl.src = canvas.toDataURL();" + + "var blockSize = 5;" + "var defaultRGB = { r: 0, g: 0, b: 0 };" + + "context.drawImage(video, 0, 0, 220, 150);" + "var dataURL = canvas.toDataURL();" + + "imgEl.onload = function () {" + "let i = -4;" + "var rgb = { r: 0, g: 0, b: 0 };" + "let count = 0;" + + "if (!context) {" + " return defaultRGB;" + "}" + - "var height = canvas.height = imgEl.naturalHeight || imgEl.offsetHeight || imgEl.height;" + - "var width = canvas.width = imgEl.naturalWidth || imgEl.offsetWidth || imgEl.width;" + - "let data;" + - "context.drawImage(imgEl, 0, 0);" + + "var height = canvas.height = imgEl.naturalHeight || imgEl.offsetHeight || imgEl.height;" + + "var width = canvas.width = imgEl.naturalWidth || imgEl.offsetWidth || imgEl.width;" + "let data;" + + "context.drawImage(imgEl, 0, 0);" + - "try {" + - "data = context.getImageData(0, 0, width, height);" + - "} catch (e) {" + - "return defaultRGB;" + - "}" + + "try {" + "data = context.getImageData(0, 0, width, height);" + "} catch (e) {" + "return defaultRGB;" + + "}" + - "length = data.data.length;" + - "while ((i += blockSize * 4) < length) {" + - "++count;" + - "rgb.r += data.data[i];" + - "rgb.g += data.data[i + 1];" + - "rgb.b += data.data[i + 2];" + - "}" + + "length = data.data.length;" + "while ((i += blockSize * 4) < length) {" + "++count;" + + "rgb.r += data.data[i];" + "rgb.g += data.data[i + 1];" + "rgb.b += data.data[i + 2];" + "}" + - "rgb.r = ~~(rgb.r / count);" + - "rgb.g = ~~(rgb.g / count);" + - "rgb.b = ~~(rgb.b / count);" + + "rgb.r = ~~(rgb.r / count);" + "rgb.g = ~~(rgb.g / count);" + "rgb.b = ~~(rgb.b / count);" + - "console.warn(rgb);" + - "callback(rgb);" + - "};"; + "console.warn(rgb);" + "callback(rgb);" + "};"; Object averageRgb = ((JavascriptExecutor) driver).executeAsyncScript(script); - return (Map)averageRgb; + return (Map) averageRgb; } public String getDimensionOfViewport() { @@ -283,18 +282,20 @@ public class OpenViduEventManager { return dimension; } - private boolean hasAudioTracks(WebElement videoElement) { - boolean audioTracks = (boolean) ((JavascriptExecutor) driver) - .executeScript("return ((document.getElementById('" + videoElement.getAttribute("id") - + "').srcObject.getAudioTracks().length > 0)" + "&& (document.getElementById('" + private boolean hasAudioTracks(WebElement videoElement, String parentSelector) { + boolean audioTracks = (boolean) ((JavascriptExecutor) driver).executeScript( + "return ((document.querySelector('" + parentSelector + (parentSelector.isEmpty() ? "" : " ") + "#" + + videoElement.getAttribute("id") + "').srcObject.getAudioTracks().length > 0)" + + "&& (document.querySelector('" + parentSelector + (parentSelector.isEmpty() ? "" : " ") + "#" + videoElement.getAttribute("id") + "').srcObject.getAudioTracks()[0].enabled))"); return audioTracks; } - private boolean hasVideoTracks(WebElement videoElement) { - boolean videoTracks = (boolean) ((JavascriptExecutor) driver) - .executeScript("return ((document.getElementById('" + videoElement.getAttribute("id") - + "').srcObject.getVideoTracks().length > 0)" + "&& (document.getElementById('" + private boolean hasVideoTracks(WebElement videoElement, String parentSelector) { + boolean videoTracks = (boolean) ((JavascriptExecutor) driver).executeScript( + "return ((document.querySelector('" + parentSelector + (parentSelector.isEmpty() ? "" : " ") + "#" + + videoElement.getAttribute("id") + "').srcObject.getVideoTracks().length > 0)" + + "&& (document.querySelector('" + parentSelector + (parentSelector.isEmpty() ? "" : " ") + "#" + videoElement.getAttribute("id") + "').srcObject.getVideoTracks()[0].enabled))"); return videoTracks; } 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 index 70140e7b..75121109 100644 --- 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 @@ -254,9 +254,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 4); user.getEventManager().waitUntilEventReaches("streamPlaying", 4); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 4); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, numberOfVideos, 4); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(2); } @@ -281,9 +282,10 @@ public class OpenViduTestAppE2eTest { System.out.println(this.getBase64Screenshot(user)); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 4); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, false)); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, numberOfVideos, 4); + Assert.assertTrue("Videos were expected to only have audio tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, false)); gracefullyLeaveParticipants(2); } @@ -306,9 +308,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 4); user.getEventManager().waitUntilEventReaches("streamPlaying", 4); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 4); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - false, true)); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, numberOfVideos, 4); + Assert.assertTrue("Videos were expected to only have video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), false, true)); gracefullyLeaveParticipants(2); } @@ -329,8 +332,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 4); user.getEventManager().waitUntilEventReaches("streamPlaying", 4); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 4); - user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, numberOfVideos, 4); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(4); } @@ -352,9 +357,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 1); user.getEventManager().waitUntilEventReaches("streamPlaying", 1); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 1); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 1 video but found " + numberOfVideos, numberOfVideos, 1); + Assert.assertTrue("Video was expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(1); } @@ -373,8 +379,13 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("connectionCreated", 1); user.getEventManager().waitUntilEventReaches("accessAllowed", 1); + user.getEventManager().waitUntilEventReaches("streamCreated", 1); + user.getEventManager().waitUntilEventReaches("streamPlaying", 1); - Thread.sleep(3000); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 1 video but found " + numberOfVideos, numberOfVideos, 1); + Assert.assertTrue("Video was expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(1); } @@ -397,9 +408,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 1); user.getEventManager().waitUntilEventReaches("streamPlaying", 1); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 1); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 1 video but found " + numberOfVideos, numberOfVideos, 1); + Assert.assertTrue("Video was expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(1); } @@ -424,9 +436,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 16); user.getEventManager().waitUntilEventReaches("streamPlaying", 16); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 16); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 16 videos but found " + numberOfVideos, numberOfVideos, 16); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(4); } @@ -447,9 +460,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 4); user.getEventManager().waitUntilEventReaches("streamPlaying", 4); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 4); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, numberOfVideos, 4); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(2); } @@ -492,9 +506,10 @@ public class OpenViduTestAppE2eTest { user2.getEventManager().waitUntilEventReaches("streamCreated", 2); user2.getEventManager().waitUntilEventReaches("streamPlaying", 2); - Assert.assertEquals(user2.getDriver().findElements(By.tagName("video")).size(), 2); - Assert.assertTrue(user2.getEventManager() - .assertMediaTracks(user2.getDriver().findElements(By.tagName("video")), true, true)); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 2 videos but found " + numberOfVideos, numberOfVideos, 2); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); user2.getEventManager().waitUntilEventReaches("streamDestroyed", 1); user2.getEventManager().waitUntilEventReaches("connectionDestroyed", 1); @@ -518,9 +533,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 2); user.getEventManager().waitUntilEventReaches("streamPlaying", 2); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 2); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 2 videos but found " + numberOfVideos, numberOfVideos, 2); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(1); @@ -551,10 +567,9 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("connectionCreated", 16); user.getDriver().findElements(By.className(("message-btn"))).get(0).click(); - user.getEventManager().waitUntilEventReaches("signal", 4); + user.getEventManager().waitUntilEventReaches("signal:chat", 4); gracefullyLeaveParticipants(4); - } @Test @@ -575,9 +590,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 2); user.getEventManager().waitUntilEventReaches("streamPlaying", 2); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 2); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 2 videos but found " + numberOfVideos, numberOfVideos, 2); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); // Global unsubscribe-subscribe WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 video")); @@ -586,39 +602,42 @@ public class OpenViduTestAppE2eTest { user.getWaiter() .until(ExpectedConditions.not(ExpectedConditions.attributeToBeNotEmpty(subscriberVideo, "srcObject"))); - Assert.assertFalse(user.getEventManager().hasMediaStream(subscriberVideo)); + Assert.assertFalse("Subscriber video should not have srcObject defined after unsubscribe", + user.getEventManager().hasMediaStream(subscriberVideo, "#openvidu-instance-0")); subBtn.click(); user.getEventManager().waitUntilEventReaches("streamPlaying", 3); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 2); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 2 videos but found " + numberOfVideos, numberOfVideos, 2); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); // Video unsubscribe subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 video")); Iterable firstVideo = Arrays.asList(subscriberVideo); user.getDriver().findElement(By.cssSelector(("#openvidu-instance-0 .sub-video-btn"))).click(); Thread.sleep(1000); - Assert.assertTrue(user.getEventManager().assertMediaTracks(firstVideo, true, false)); + Assert.assertTrue("Subscriber video was expected to only have audio track", + user.getEventManager().assertMediaTracks(firstVideo, true, false)); // Audio unsubscribe - user.getDriver().findElement(By.cssSelector(("#openvidu-instance-0 .sub-audio-btn"))).click(); Thread.sleep(1000); - Assert.assertTrue(user.getEventManager().assertMediaTracks(firstVideo, false, false)); + Assert.assertTrue("Subscriber video was expected to not have video or audio tracks", + user.getEventManager().assertMediaTracks(firstVideo, false, false)); // Video and audio subscribe - user.getDriver().findElement(By.cssSelector(("#openvidu-instance-0 .sub-video-btn"))).click(); Thread.sleep(1000); - Assert.assertTrue(user.getEventManager().assertMediaTracks(firstVideo, false, true)); + Assert.assertTrue("Subscriber video was expected to only have video track", + user.getEventManager().assertMediaTracks(firstVideo, false, true)); user.getDriver().findElement(By.cssSelector(("#openvidu-instance-0 .sub-audio-btn"))).click(); Thread.sleep(1000); - Assert.assertTrue(user.getEventManager().assertMediaTracks(firstVideo, true, true)); + Assert.assertTrue("Subscriber video was expected to have audio and video tracks", + user.getEventManager().assertMediaTracks(firstVideo, true, true)); gracefullyLeaveParticipants(2); - } @Test @@ -637,11 +656,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 4); user.getEventManager().waitUntilEventReaches("streamPlaying", 4); - user.getWaiter().until(ExpectedConditions.numberOfElementsToBe(By.tagName("video"), 4)); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); - - Thread.sleep(2000); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, numberOfVideos, 4); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); List publishButtons = user.getDriver().findElements(By.className("pub-btn")); for (WebElement el : publishButtons) { @@ -652,7 +670,8 @@ public class OpenViduTestAppE2eTest { for (WebElement video : user.getDriver().findElements(By.tagName("video"))) { user.getWaiter() .until(ExpectedConditions.not(ExpectedConditions.attributeToBeNotEmpty(video, "srcObject"))); - Assert.assertFalse(user.getEventManager().hasMediaStream(video)); + Assert.assertFalse("Videos were expected to lack srcObject property", + user.getEventManager().hasMediaStream(video, "")); } for (WebElement el : publishButtons) { @@ -662,11 +681,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 8); user.getEventManager().waitUntilEventReaches("streamPlaying", 8); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(2); - } @Test @@ -689,77 +707,78 @@ public class OpenViduTestAppE2eTest { // First publication (audio + video [CAMERA]) user.getEventManager().on("streamPlaying", (event) -> { - if (event.get("eventContent") != null) { - threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA")); - } + JsonObject stream = event.get("target").getAsJsonObject().get("stream").getAsJsonObject(); + threadAssertions.add("CAMERA".equals(stream.get("typeOfVideo").getAsString())); + threadAssertions.add(stream.get("hasAudio").getAsBoolean()); + latch1.countDown(); }); user.getDriver().findElement(By.id("one2many-btn")).click(); - Thread.sleep(2000); - user.getEventManager().waitUntilEventReaches("connectionCreated", 4); user.getEventManager().waitUntilEventReaches("accessAllowed", 1); user.getEventManager().waitUntilEventReaches("streamCreated", 2); user.getEventManager().waitUntilEventReaches("streamPlaying", 2); - if (!latch1.await(8000, TimeUnit.MILLISECONDS)) { + if (!latch1.await(5000, TimeUnit.MILLISECONDS)) { gracefullyLeaveParticipants(2); - fail(); + fail("Waiting for 2 streamPlaying events to happen in total"); return; } user.getEventManager().off("streamPlaying"); + log.info("Thread assertions: {}", threadAssertions.toString()); for (Iterator iter = threadAssertions.iterator(); iter.hasNext();) { - Assert.assertTrue(iter.next()); + Assert.assertTrue("Some Event property was wrong", iter.next()); iter.remove(); } - user.getWaiter().until(ExpectedConditions.numberOfElementsToBe(By.tagName("video"), 2)); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); - - Thread.sleep(2000); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 2 videos but found " + numberOfVideos, numberOfVideos, 2); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); final CountDownLatch latch2 = new CountDownLatch(2); // Second publication (only video (SCREEN)) user.getEventManager().on("streamPlaying", (event) -> { - if (event.get("eventContent") != null) { - threadAssertions.add(((String) event.get("eventContent")).contains("SCREEN")); - } + JsonObject stream = event.get("target").getAsJsonObject().get("stream").getAsJsonObject(); + threadAssertions.add("SCREEN".equals(stream.get("typeOfVideo").getAsString())); + threadAssertions.add(!stream.get("hasAudio").getAsBoolean()); latch2.countDown(); }); user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 .change-publisher-btn")).click(); + user.getEventManager().waitUntilEventReaches("streamDestroyed", 2); user.getEventManager().waitUntilEventReaches("accessAllowed", 2); user.getEventManager().waitUntilEventReaches("streamCreated", 4); user.getEventManager().waitUntilEventReaches("streamPlaying", 4); - if (!latch2.await(8000, TimeUnit.MILLISECONDS)) { + if (!latch2.await(5000, TimeUnit.MILLISECONDS)) { gracefullyLeaveParticipants(2); - fail(); + fail("Waiting for 4 streamPlaying events to happen in total"); return; } user.getEventManager().off("streamPlaying"); + log.info("Thread assertions: {}", threadAssertions.toString()); for (Iterator iter = threadAssertions.iterator(); iter.hasNext();) { - Assert.assertTrue(iter.next()); + Assert.assertTrue("Some Event property was wrong", iter.next()); iter.remove(); } - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - false, true)); - - Thread.sleep(2000); + numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 2 videos but found " + numberOfVideos, numberOfVideos, 2); + Assert.assertTrue("Videos were expected to only have audio tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), false, true)); final CountDownLatch latch3 = new CountDownLatch(2); // Third publication (audio + video [CAMERA]) user.getEventManager().on("streamPlaying", (event) -> { - if (event.get("eventContent") != null) { - threadAssertions.add(((String) event.get("eventContent")).contains("CAMERA")); - } + JsonObject stream = event.get("target").getAsJsonObject().get("stream").getAsJsonObject(); + threadAssertions.add("CAMERA".equals(stream.get("typeOfVideo").getAsString())); + threadAssertions.add(stream.get("hasAudio").getAsBoolean()); latch3.countDown(); }); user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 .change-publisher-btn")).click(); @@ -770,21 +789,23 @@ public class OpenViduTestAppE2eTest { if (!latch3.await(8000, TimeUnit.MILLISECONDS)) { gracefullyLeaveParticipants(2); - fail(); + fail("Waiting for 6 streamPlaying events to happen in total"); return; } user.getEventManager().off("streamPlaying"); + log.info("Thread assertions: {}", threadAssertions.toString()); for (Iterator iter = threadAssertions.iterator(); iter.hasNext();) { - Assert.assertTrue(iter.next()); + Assert.assertTrue("Some Event property was wrong", iter.next()); iter.remove(); } - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 2 videos but found " + numberOfVideos, numberOfVideos, 2); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); gracefullyLeaveParticipants(2); - } @Test @@ -819,23 +840,30 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 3); user.getEventManager().waitUntilEventReaches("streamPlaying", 3); - user.getWaiter().until(ExpectedConditions.numberOfElementsToBe(By.tagName("video"), 3)); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 3 videos but found " + numberOfVideos, numberOfVideos, 3); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); // Moderator forces unpublish user.getDriver().findElement(By.cssSelector("#openvidu-instance-2 .force-unpub-btn")).click(); user.getEventManager().waitUntilEventReaches("streamDestroyed", 3); - user.getWaiter().until(ExpectedConditions.numberOfElementsToBe(By.tagName("video"), 1)); + + List videos = user.getDriver().findElements(By.tagName("video")); + numberOfVideos = videos.size(); + Assert.assertEquals("Expected 1 video but found " + numberOfVideos, numberOfVideos, 1); + Assert.assertFalse("Publisher video should not have srcObject defined after force unpublish", + user.getEventManager().hasMediaStream(videos.get(0), "")); // Publisher publishes again user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 .pub-btn")).click(); user.getEventManager().waitUntilEventReaches("streamCreated", 6); user.getEventManager().waitUntilEventReaches("streamPlaying", 6); - user.getWaiter().until(ExpectedConditions.numberOfElementsToBe(By.tagName("video"), 3)); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 3 videos but found " + numberOfVideos, numberOfVideos, 3); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); // Moderator forces disconnect of publisher user.getDriver().findElement(By.cssSelector("#openvidu-instance-2 .force-disconnect-btn")).click(); @@ -845,7 +873,6 @@ public class OpenViduTestAppE2eTest { user.getWaiter().until(ExpectedConditions.numberOfElementsToBe(By.tagName("video"), 0)); gracefullyLeaveParticipants(3); - } @Test @@ -878,7 +905,8 @@ public class OpenViduTestAppE2eTest { // Unpublish video final CountDownLatch latch1 = new CountDownLatch(2); user.getEventManager().on("streamPropertyChanged", (event) -> { - threadAssertions.add(((String) event.get("eventContent")).contains("videoActive [false]")); + threadAssertions.add("videoActive".equals(event.get("changedProperty").getAsString())); + threadAssertions.add(!event.get("newValue").getAsBoolean()); latch1.countDown(); }); user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 .pub-video-btn")).click(); @@ -891,15 +919,17 @@ public class OpenViduTestAppE2eTest { } user.getEventManager().off("streamPropertyChanged"); + log.info("Thread assertions: {}", threadAssertions.toString()); for (Iterator iter = threadAssertions.iterator(); iter.hasNext();) { - Assert.assertTrue(iter.next()); + Assert.assertTrue("Some Event property was wrong", iter.next()); iter.remove(); } // Unpublish audio final CountDownLatch latch2 = new CountDownLatch(2); user.getEventManager().on("streamPropertyChanged", (event) -> { - threadAssertions.add(((String) event.get("eventContent")).contains("audioActive [false]")); + threadAssertions.add("audioActive".equals(event.get("changedProperty").getAsString())); + threadAssertions.add(!event.get("newValue").getAsBoolean()); latch2.countDown(); }); user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 .pub-audio-btn")).click(); @@ -912,8 +942,9 @@ public class OpenViduTestAppE2eTest { } user.getEventManager().off("streamPropertyChanged"); + log.info("Thread assertions: {}", threadAssertions.toString()); for (Iterator iter = threadAssertions.iterator(); iter.hasNext();) { - Assert.assertTrue(iter.next()); + Assert.assertTrue("Some Event property was wrong", iter.next()); iter.remove(); } @@ -925,8 +956,10 @@ public class OpenViduTestAppE2eTest { final long[] expectedWidthHeight = new long[2]; user.getEventManager().on("streamPropertyChanged", (event) -> { - threadAssertions.add(((String) event.get("eventContent")).contains("videoDimensions [{\"width\":" - + expectedWidthHeight[0] + ",\"height\":" + expectedWidthHeight[1] + "}]")); + String expectedDimensions = "{\"width\":" + expectedWidthHeight[0] + ",\"height\":" + expectedWidthHeight[1] + + "}"; + threadAssertions.add("videoDimensions".equals(event.get("changedProperty").getAsString())); + threadAssertions.add(expectedDimensions.equals(event.get("newValue").getAsJsonObject().toString())); latch3.countDown(); }); @@ -949,8 +982,9 @@ public class OpenViduTestAppE2eTest { } user.getEventManager().off("streamPropertyChanged"); + log.info("Thread assertions: {}", threadAssertions.toString()); for (Iterator iter = threadAssertions.iterator(); iter.hasNext();) { - Assert.assertTrue(iter.next()); + Assert.assertTrue("Some Event property was wrong", iter.next()); iter.remove(); } @@ -973,8 +1007,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 1); user.getEventManager().waitUntilEventReaches("streamPlaying", 1); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 1 video but found " + numberOfVideos, numberOfVideos, 1); + Assert.assertTrue("Video was expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); WebElement recordBtn = user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 .publisher-rec-btn")); recordBtn.click(); @@ -1063,8 +1099,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 1); user.getEventManager().waitUntilEventReaches("streamPlaying", 1); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 1 video but found " + numberOfVideos, numberOfVideos, 1); + Assert.assertTrue("Video was expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); user.getDriver().findElement(By.id("session-api-btn-0")).click(); Thread.sleep(1000); @@ -1118,13 +1156,16 @@ public class OpenViduTestAppE2eTest { File file2 = new File(recordingsPath + sessionName + "/" + ".recording." + sessionName); File file3 = new File(recordingsPath + sessionName + "/" + sessionName + ".jpg"); - Assert.assertTrue(file1.exists() && file1.length() > 0); - Assert.assertTrue(file2.exists() && file2.length() > 0); - Assert.assertTrue(file3.exists() && file3.length() > 0); + Assert.assertTrue("File " + file1.getAbsolutePath() + " does not exist or is empty", + file1.exists() && file1.length() > 0); + Assert.assertTrue("File " + file2.getAbsolutePath() + " does not exist or is empty", + file2.exists() && file2.length() > 0); + Assert.assertTrue("File " + file3.getAbsolutePath() + " does not exist or is empty", + file3.exists() && file3.length() > 0); - Assert.assertTrue( + Assert.assertTrue("Recorded file " + file1.getAbsolutePath() + " is not fine", this.recordedFileFine(file1, new OpenVidu(OPENVIDU_URL, OPENVIDU_SECRET).getRecording(sessionName))); - Assert.assertTrue(this.thumbnailIsFine(file3)); + Assert.assertTrue("Thumbnail " + file3.getAbsolutePath() + " is not fine", this.thumbnailIsFine(file3)); // Try to get the stopped recording user.getDriver().findElement(By.id("get-recording-btn")).click(); @@ -1141,9 +1182,9 @@ public class OpenViduTestAppE2eTest { user.getWaiter() .until(ExpectedConditions.attributeToBe(By.id("api-response-text-area"), "value", "Recording deleted")); - Assert.assertFalse(file1.exists()); - Assert.assertFalse(file2.exists()); - Assert.assertFalse(file3.exists()); + Assert.assertFalse("File " + file1.getAbsolutePath() + " shouldn't exist", file1.exists()); + Assert.assertFalse("File " + file2.getAbsolutePath() + " shouldn't exist", file2.exists()); + Assert.assertFalse("File " + file3.getAbsolutePath() + " shouldn't exist", file3.exists()); user.getDriver().findElement(By.id("close-dialog-btn")).click(); Thread.sleep(500); @@ -1175,8 +1216,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 4); user.getEventManager().waitUntilEventReaches("streamPlaying", 4); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, numberOfVideos, 4); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); user.getDriver().findElement(By.id("session-api-btn-0")).click(); Thread.sleep(1000); @@ -1251,7 +1294,7 @@ public class OpenViduTestAppE2eTest { user.getWaiter() .until(ExpectedConditions.attributeToBe(By.id("api-response-text-area"), "value", "Recording deleted")); - Assert.assertFalse(new File(recPath).exists()); + Assert.assertFalse("Recording folder " + recPath + " shouldn't exist", new File(recPath).exists()); user.getDriver().findElement(By.id("close-dialog-btn")).click(); Thread.sleep(500); @@ -1359,7 +1402,8 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 8); user.getEventManager().waitUntilEventReaches("streamPlaying", 8); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 8); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 8 videos but found " + numberOfVideos, numberOfVideos, 8); user.getDriver().findElement(By.id("session-api-btn-0")).click(); Thread.sleep(1000); @@ -1529,8 +1573,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 4); user.getEventManager().waitUntilEventReaches("streamPlaying", 4); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - true, true)); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, numberOfVideos, 4); + Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true)); // Fetch existing session (change) user.getDriver().findElement(By.id("session-api-btn-0")).click(); @@ -1565,6 +1611,15 @@ public class OpenViduTestAppE2eTest { ExpectedConditions.attributeToBe(By.id("api-response-text-area"), "value", "Stream unpublished")); user.getEventManager().waitUntilEventReaches("streamDestroyed", 2); + numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 3 videos but found " + numberOfVideos, numberOfVideos, 3); + WebElement v = user.getDriver().findElements(By.cssSelector("#openvidu-instance-1 video")).get(0); + Assert.assertFalse("Publisher video should not have srcObject defined after force unpublish", + user.getEventManager().hasMediaStream(v, "#openvidu-instance-1")); + Iterable vs = user.getDriver().findElements(By.cssSelector("#openvidu-instance-0 video")); + Assert.assertTrue("Videos were expected to have audio and video tracks", + user.getEventManager().assertMediaTracks(vs, true, true)); + // Force disconnect wrong user.getDriver().findElement(By.id("resource-id-field")).clear(); user.getDriver().findElement(By.id("resource-id-field")).sendKeys("FAIL"); @@ -1623,16 +1678,17 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 2); user.getEventManager().waitUntilEventReaches("streamPlaying", 2); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 2); - Assert.assertTrue(user.getEventManager().assertMediaTracks(user.getDriver().findElements(By.tagName("video")), - false, true)); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 2 videos but found " + numberOfVideos, numberOfVideos, 2); + Assert.assertTrue("Videos were expected to have a video only track", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), false, true)); WebElement subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video")); // Analyze Chrome fake video stream without gray filter (GREEN color) Map rgb = user.getEventManager().getAverageRgbFromVideo(subscriberVideo); System.out.println(rgb.toString()); - Assert.assertTrue(checkVideoAverageRgbGreen(rgb)); + Assert.assertTrue("Video is not average green", checkVideoAverageRgbGreen(rgb)); // Try to apply none allowed filter user.getDriver().findElement(By.cssSelector(".filter-btn")).click(); @@ -1668,7 +1724,7 @@ public class OpenViduTestAppE2eTest { Thread.sleep(500); rgb = user.getEventManager().getAverageRgbFromVideo(subscriberVideo); System.out.println(rgb.toString()); - Assert.assertTrue(checkVideoAverageRgbGray(rgb)); + Assert.assertTrue("Video is not average gray", checkVideoAverageRgbGray(rgb)); // Execute filter method WebElement filterMethodInput = user.getDriver().findElement(By.id("filter-method-field")); @@ -1686,7 +1742,7 @@ public class OpenViduTestAppE2eTest { Thread.sleep(500); rgb = user.getEventManager().getAverageRgbFromVideo(subscriberVideo); System.out.println(rgb.toString()); - Assert.assertTrue(checkVideoAverageRgbGreen(rgb)); + Assert.assertTrue("Video is not average green", checkVideoAverageRgbGreen(rgb)); user.getDriver().findElement(By.id("close-dialog-btn")).click(); Thread.sleep(500); @@ -1711,7 +1767,7 @@ public class OpenViduTestAppE2eTest { subscriberVideo = user.getDriver().findElement(By.cssSelector("#openvidu-instance-1 video")); rgb = user.getEventManager().getAverageRgbFromVideo(subscriberVideo); System.out.println(rgb.toString()); - Assert.assertTrue(checkVideoAverageRgbGray(rgb)); + Assert.assertTrue("Video is not average gray", checkVideoAverageRgbGray(rgb)); // Remove filter user.getDriver().findElement(By.cssSelector(".filter-btn")).click(); @@ -1725,7 +1781,7 @@ public class OpenViduTestAppE2eTest { // Analyze Chrome fake video stream with gray filter (GREEN color) rgb = user.getEventManager().getAverageRgbFromVideo(subscriberVideo); System.out.println(rgb.toString()); - Assert.assertTrue(checkVideoAverageRgbGreen(rgb)); + Assert.assertTrue("Video is not average green", checkVideoAverageRgbGreen(rgb)); user.getDriver().findElement(By.id("close-dialog-btn")).click(); Thread.sleep(500); @@ -1773,10 +1829,10 @@ public class OpenViduTestAppE2eTest { user.getEventManager().waitUntilEventReaches("streamCreated", 2); user.getEventManager().waitUntilEventReaches("streamPlaying", 2); - Assert.assertEquals(user.getDriver().findElements(By.tagName("video")).size(), 2); - // Assert no audio track only for the moderator incoming video - Assert.assertTrue(user.getEventManager().assertMediaTracks( - user.getDriver().findElements(By.cssSelector("#openvidu-instance-1 video")), false, true)); + int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size(); + Assert.assertEquals("Expected 2 videos but found " + numberOfVideos, numberOfVideos, 2); + Assert.assertTrue("Videos were expected to have only a video track", user.getEventManager() + .assertMediaTracks(user.getDriver().findElements(By.tagName("video")), false, true)); // Publisher applies ZBarCode filter to itself user.getDriver().findElement(By.cssSelector("#openvidu-instance-0 .filter-btn")).click(); @@ -1801,7 +1857,7 @@ public class OpenViduTestAppE2eTest { user.getWaiter().until(ExpectedConditions.attributeContains(By.id("filter-response-text-area"), "value", "Filter event listener added")); - user.getEventManager().waitUntilEventReaches("filterEvent", 2); + user.getEventManager().waitUntilEventReaches("CodeFound", 2); // Publisher unsubscribes from "CodeFound" filter event user.getDriver().findElement(By.id("unsub-filter-event-btn")).click(); @@ -1809,7 +1865,7 @@ public class OpenViduTestAppE2eTest { try { // If this active wait finishes successfully, then the removal of the event // listener has not worked fine - user.getEventManager().waitUntilEventReaches("filterEvent", 3, 3, false); + user.getEventManager().waitUntilEventReaches("CodeFound", 3, 3, false); Assert.fail("'filterEvent' was received. Filter.removeEventListener() failed"); } catch (Exception e) { System.out.println("Filter event removal worked fine"); @@ -1828,7 +1884,7 @@ public class OpenViduTestAppE2eTest { user.getWaiter().until(ExpectedConditions.attributeContains(By.id("filter-response-text-area"), "value", "Filter event listener added")); - user.getEventManager().waitUntilEventReaches("filterEvent", 4); + user.getEventManager().waitUntilEventReaches("CodeFound", 4); // Moderator removes the Publisher's filter user.getDriver().findElement(By.id("remove-filter-btn")).click(); @@ -1839,7 +1895,7 @@ public class OpenViduTestAppE2eTest { try { // If this active wait finishes successfully, then the removal of the filter has // not worked fine - user.getEventManager().waitUntilEventReaches("filterEvent", 5, 3, false); + user.getEventManager().waitUntilEventReaches("CodeFound", 5, 3, false); Assert.fail("'filterEvent' was received. Stream.removeFilter() failed"); } catch (Exception e) { System.out.println("Filter removal worked fine"); @@ -1906,7 +1962,11 @@ public class OpenViduTestAppE2eTest { BufferedImage image = AWTUtil.toBufferedImage(frame); Map colorMap = this.averageColor(image); - Assert.assertEquals(image.getWidth() + "x" + image.getHeight(), recording.getResolution()); + String realResolution = image.getWidth() + "x" + image.getHeight(); + Assert.assertEquals( + "Resolution (" + recording.getResolution() + + ") of recording entity is not equal to real video resolution (" + realResolution + ")", + realResolution, recording.getResolution()); log.info("Recording map color: {}", colorMap.toString()); isFine = this.checkVideoAverageRgbGreen(colorMap); @@ -1922,21 +1982,27 @@ public class OpenViduTestAppE2eTest { // Should be only 2 files: zip and metadata File folder = new File(recPath); - Assert.assertEquals(folder.listFiles().length, 2); + Assert.assertEquals( + "There are more than 2 files (ZIP and metadata) inside individual recording folder " + recPath, + folder.listFiles().length, 2); File file1 = new File(recPath + recording.getName() + ".zip"); File file2 = new File(recPath + ".recording." + recording.getId()); - Assert.assertTrue(file1.exists() && file1.length() > 0); - Assert.assertTrue(file2.exists() && file2.length() > 0); + Assert.assertTrue("File " + file1.getAbsolutePath() + " does not exist or is empty", + file1.exists() && file1.length() > 0); + Assert.assertTrue("File " + file2.getAbsolutePath() + " does not exist or is empty", + file2.exists() && file2.length() > 0); List unzippedWebmFiles = new Unzipper().unzipFile(recPath, recording.getName() + ".zip"); - log.info("Expected {} video files and ZIP file has {}", numberOfVideoFiles, unzippedWebmFiles.size()); - Assert.assertEquals(numberOfVideoFiles, unzippedWebmFiles.size()); + Assert.assertEquals("Expecting " + numberOfVideoFiles + " inside ZIP file but " + unzippedWebmFiles.size() + + " found: " + unzippedWebmFiles.toString(), numberOfVideoFiles, unzippedWebmFiles.size()); File jsonSyncFile = new File(recPath + recording.getName() + ".json"); - Assert.assertTrue(jsonSyncFile.exists() && jsonSyncFile.length() > 0); + Assert.assertTrue("JSON sync file " + jsonSyncFile.getAbsolutePath() + "does not exist or is empty", + jsonSyncFile.exists() && jsonSyncFile.length() > 0); + JsonObject jsonSyncMetadata; try { Gson gson = new Gson(); @@ -1945,7 +2011,7 @@ public class OpenViduTestAppE2eTest { } catch (Exception e) { log.error("Cannot read JSON sync metadata file from {}. Error: {}", jsonSyncFile.getAbsolutePath(), e.getMessage()); - Assert.fail(); + Assert.fail("Cannot read JSON sync metadata file from " + jsonSyncFile.getAbsolutePath()); return; } @@ -1953,7 +2019,10 @@ public class OpenViduTestAppE2eTest { JsonArray syncArray = jsonSyncMetadata.get("files").getAsJsonArray(); for (File webmFile : unzippedWebmFiles) { totalFileSize += webmFile.length(); - Assert.assertTrue(webmFile.exists() && webmFile.length() > 0); + + Assert.assertTrue("WEBM file " + webmFile.getAbsolutePath() + " does not exist or is empty", + webmFile.exists() && webmFile.length() > 0); + double durationInSeconds = 0; boolean found = false; for (int i = 0; i < syncArray.size(); i++) { @@ -1965,14 +2034,19 @@ public class OpenViduTestAppE2eTest { break; } } - Assert.assertTrue(found); + + Assert.assertTrue("Couldn't find in JSON sync object information for webm file " + webmFile.getName(), + found); + log.info("Duration of {} according to sync metadata json file: {} s", webmFile.getName(), durationInSeconds); this.checkMultimediaFile(webmFile, recording.hasAudio(), recording.hasVideo(), durationInSeconds, recording.getResolution(), audioDecoder, videoDecoder); webmFile.delete(); } - Assert.assertEquals(recording.getSize(), totalFileSize); + + Assert.assertEquals("Size of recording entity (" + recording.getSessionId() + + ") is not equal to real file size (" + totalFileSize + ")", recording.getSize(), totalFileSize); jsonSyncFile.delete(); } @@ -2007,7 +2081,11 @@ public class OpenViduTestAppE2eTest { log.info("Duration of {} according to ffmpeg: {} s", file.getName(), metadata.getDuration()); log.info("Duration of {} according to 'duration' property: {} s", file.getName(), duration); log.info("Difference in s duration: {}", Math.abs(metadata.getDuration() - duration)); - Assert.assertTrue(Math.abs((metadata.getDuration() - duration)) < 0.3); + final double difference = 0.3; + Assert.assertTrue( + "Difference between recording entity duration (" + duration + ") and real video duration (" + + metadata.getDuration() + ") is greater than " + difference, + Math.abs((metadata.getDuration() - duration)) < difference); } private boolean thumbnailIsFine(File file) { 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 e4584233..8014c7ea 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 @@ -8,23 +8,26 @@
- + - +
- - -
@@ -33,8 +36,10 @@
- - Publish + + Publish
@@ -52,16 +57,17 @@

Enter active

- Audio - Video + Audio + Video
- +
Video
@@ -69,19 +75,19 @@ Screen
-
- -
@@ -116,25 +122,26 @@
- - {{event.name}} + + {{event.eventName}} -
{{event.content}}
+
{{event.eventContent}}
- + - +
- \ No newline at end of file + diff --git a/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts b/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts index 8a189792..f64aca49 100644 --- a/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts +++ b/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts @@ -4,7 +4,7 @@ import { } from '@angular/core'; import { - OpenVidu, Session, Subscriber, Publisher, VideoInsertMode, StreamEvent, ConnectionEvent, + OpenVidu, Session, Subscriber, Publisher, Event, VideoInsertMode, StreamEvent, ConnectionEvent, SessionDisconnectedEvent, SignalEvent, RecordingEvent, PublisherSpeakingEvent, PublisherProperties, StreamPropertyChangedEvent, OpenViduError } from 'openvidu-browser'; @@ -36,8 +36,9 @@ export interface SessionConf { } export interface OpenViduEvent { - name: string; - content: string; + eventName: string; + eventContent: string; + event: Event; } @Component({ @@ -249,9 +250,10 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.subscribers = []; } - updateEventList(event: string, content: string) { - this.events.push({ name: event, content: content }); - this.testFeedService.pushNewEvent(this.sessionName, this.session.connection.connectionId, event, content); + updateEventList(eventName: string, eventContent: string, event: Event) { + const eventInterface: OpenViduEvent = { eventName, eventContent, event }; + this.events.push(eventInterface); + this.testFeedService.pushNewEvent(this.sessionName, this.session.connection.connectionId, event); } toggleSubscribeTo(): void { @@ -330,7 +332,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { if (this.subscribeTo) { this.syncSubscribe(this.session, event); } - this.updateEventList('streamCreated', event.stream.streamId); + this.updateEventList('streamCreated', event.stream.streamId, event); }); } } @@ -343,7 +345,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { if (index > -1) { this.subscribers.splice(index, 1); } - this.updateEventList('streamDestroyed', event.stream.streamId); + this.updateEventList('streamDestroyed', event.stream.streamId, event); }); } } @@ -358,7 +360,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { } else { newValue = event.changedProperty === 'videoDimensions' ? JSON.stringify(event.newValue) : event.newValue.toString(); } - this.updateEventList('streamPropertyChanged', event.changedProperty + ' [' + newValue + ']'); + this.updateEventList('streamPropertyChanged', event.changedProperty + ' [' + newValue + ']', event); }); } } @@ -367,7 +369,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.session.off('connectionCreated'); if (this.sessionEvents.connectionCreated) { this.session.on('connectionCreated', (event: ConnectionEvent) => { - this.updateEventList('connectionCreated', event.connection.connectionId); + this.updateEventList('connectionCreated', event.connection.connectionId, event); }); } } @@ -377,7 +379,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { if (this.sessionEvents.connectionDestroyed) { this.session.on('connectionDestroyed', (event: ConnectionEvent) => { delete this.subscribers[event.connection.connectionId]; - this.updateEventList('connectionDestroyed', event.connection.connectionId); + this.updateEventList('connectionDestroyed', event.connection.connectionId, event); }); } } @@ -386,7 +388,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.session.off('sessionDisconnected'); if (this.sessionEvents.sessionDisconnected) { this.session.on('sessionDisconnected', (event: SessionDisconnectedEvent) => { - this.updateEventList('sessionDisconnected', 'No data'); + this.updateEventList('sessionDisconnected', '', event); this.subscribers = []; delete this.publisher; delete this.session; @@ -399,7 +401,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.session.off('signal'); if (this.sessionEvents.signal) { this.session.on('signal', (event: SignalEvent) => { - this.updateEventList('signal', event.from.connectionId + '-' + event.data); + this.updateEventList('signal', event.from.connectionId + '-' + event.data, event); }); } } @@ -408,7 +410,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.session.off('recordingStarted'); if (this.sessionEvents.recordingStarted) { this.session.on('recordingStarted', (event: RecordingEvent) => { - this.updateEventList('recordingStarted', event.id); + this.updateEventList('recordingStarted', event.id, event); }); } } @@ -417,7 +419,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.session.off('recordingStopped'); if (this.sessionEvents.recordingStopped) { this.session.on('recordingStopped', (event: RecordingEvent) => { - this.updateEventList('recordingStopped', event.id); + this.updateEventList('recordingStopped', event.id, event); }); } } @@ -426,7 +428,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.session.off('publisherStartSpeaking'); if (this.sessionEvents.publisherStartSpeaking) { this.session.on('publisherStartSpeaking', (event: PublisherSpeakingEvent) => { - this.updateEventList('publisherStartSpeaking', event.connection.connectionId); + this.updateEventList('publisherStartSpeaking', event.connection.connectionId, event); }); } } @@ -437,7 +439,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { } if (this.sessionEvents.publisherStopSpeaking) { this.session.on('publisherStopSpeaking', (event: PublisherSpeakingEvent) => { - this.updateEventList('publisherStopSpeaking', event.connection.connectionId); + this.updateEventList('publisherStopSpeaking', event.connection.connectionId, event); }); } } @@ -656,8 +658,8 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { }); } - updateEventFromChild(event) { - this.updateEventList(event.event, event.content); + updateEventFromChild(event: OpenViduEvent) { + this.updateEventList(event.eventName, event.eventContent, event.event); } updateSubscriberFromChild(newSubscriber: Subscriber) { diff --git a/openvidu-testapp/src/app/components/test-sessions/test-sessions.component.ts b/openvidu-testapp/src/app/components/test-sessions/test-sessions.component.ts index ad3919a7..6db82d6c 100644 --- a/openvidu-testapp/src/app/components/test-sessions/test-sessions.component.ts +++ b/openvidu-testapp/src/app/components/test-sessions/test-sessions.component.ts @@ -38,7 +38,7 @@ export class TestSessionsComponent implements OnInit, OnDestroy { this.eventsInfoSubscription = this.testFeedService.newLastEvent$.subscribe( newEvent => { - (window as any).myEvents += ('
' + JSON.stringify(newEvent)); + (window as any).myEvents += ('
' + this.stringifyEventNoCircularDependencies(newEvent)); }); } @@ -100,4 +100,28 @@ export class TestSessionsComponent implements OnInit, OnDestroy { this.loadSubs(subs); } + stringifyEventNoCircularDependencies(event: Event): string { + const cache = []; + return JSON.stringify(event, function (key, value) { + if (key !== 'ee' && key !== 'openvidu') { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + // Duplicate reference found + try { + // If this value does not reference a parent + return JSON.parse(JSON.stringify(value)); + } catch (error) { + return; + } + } + // Store value in our collection + cache.push(value); + } + return value; + } else { + return; + } + }); + } + } diff --git a/openvidu-testapp/src/app/components/video/video.component.ts b/openvidu-testapp/src/app/components/video/video.component.ts index 229b63a2..f9e99f91 100644 --- a/openvidu-testapp/src/app/components/video/video.component.ts +++ b/openvidu-testapp/src/app/components/video/video.component.ts @@ -10,7 +10,8 @@ import { OpenVidu, Publisher, StreamEvent, - VideoInsertMode + VideoInsertMode, + FilterEvent } from 'openvidu-browser'; import { EventsDialogComponent } from '../dialogs/events-dialog/events-dialog.component'; @@ -19,6 +20,7 @@ import { Subscription } from 'rxjs'; import { LocalRecordingDialogComponent } from '../dialogs/local-recording-dialog/local-recording-dialog.component'; import { ExtensionDialogComponent } from '../dialogs/extension-dialog/extension-dialog.component'; import { FilterDialogComponent } from '../dialogs/filter-dialog/filter-dialog.component'; +import { OpenViduEvent } from '../openvidu-instance/openvidu-instance.component'; @Component({ selector: 'app-video', @@ -32,7 +34,7 @@ export class VideoComponent implements OnInit, OnDestroy { @Input() OV: OpenVidu; @Input() eventCollection: any; - @Output() updateEventListInParent = new EventEmitter(); + @Output() updateEventListInParent = new EventEmitter(); @Output() reSubbed = new EventEmitter(); subbed = true; @@ -312,8 +314,9 @@ export class VideoComponent implements OnInit, OnDestroy { if (!oldValues.videoElementCreated) { sub.on('videoElementCreated', (event: VideoElementEvent) => { this.updateEventListInParent.emit({ - event: 'videoElementCreated', - content: event.element.id + eventName: 'videoElementCreated', + eventContent: event.element.id, + event }); }); } @@ -326,8 +329,9 @@ export class VideoComponent implements OnInit, OnDestroy { sub.on('videoElementDestroyed', (event: VideoElementEvent) => { this.showButtons = false; this.updateEventListInParent.emit({ - event: 'videoElementDestroyed', - content: event.element.id + eventName: 'videoElementDestroyed', + eventContent: event.element.id, + event }); }); } @@ -347,8 +351,9 @@ export class VideoComponent implements OnInit, OnDestroy { } this.showButtons = true; this.updateEventListInParent.emit({ - event: 'streamPlaying', - content: this.streamManager.stream.streamId + eventName: 'streamPlaying', + eventContent: this.streamManager.stream.streamId, + event }); }); } @@ -360,8 +365,9 @@ export class VideoComponent implements OnInit, OnDestroy { if (!oldValues.streamAudioVolumeChange) { sub.on('streamAudioVolumeChange', (event: StreamManagerEvent) => { this.updateEventListInParent.emit({ - event: 'streamAudioVolumeChange', - content: event.value['newValue'] + eventName: 'streamAudioVolumeChange', + eventContent: event.value['newValue'], + event }); }); } @@ -371,11 +377,13 @@ export class VideoComponent implements OnInit, OnDestroy { if (this.eventCollection.streamPropertyChanged) { if (!oldValues.streamPropertyChanged) { - sub.on('streamPropertyChanged', (e: StreamPropertyChangedEvent) => { - const newValue = e.changedProperty === 'videoDimensions' ? JSON.stringify(e.newValue) : e.newValue.toString(); + sub.on('streamPropertyChanged', (event: StreamPropertyChangedEvent) => { + const newValue = event.changedProperty === 'videoDimensions' ? + JSON.stringify(event.newValue) : event.newValue.toString(); this.updateEventListInParent.emit({ - event: 'streamPropertyChanged', - content: e.changedProperty + ' [' + newValue + ']' + eventName: 'streamPropertyChanged', + eventContent: event.changedProperty + ' [' + newValue + ']', + event }); }); } @@ -389,8 +397,9 @@ export class VideoComponent implements OnInit, OnDestroy { if (!oldValues.videoElementCreated) { pub.on('videoElementCreated', (event: VideoElementEvent) => { this.updateEventListInParent.emit({ - event: 'videoElementCreated', - content: event.element.id + eventName: 'videoElementCreated', + eventContent: event.element.id, + event }); }); } @@ -400,10 +409,19 @@ export class VideoComponent implements OnInit, OnDestroy { if (this.eventCollection.accessAllowed) { if (!oldValues.accessAllowed) { - pub.on('accessAllowed', (e) => { + pub.on('accessAllowed', () => { this.updateEventListInParent.emit({ - event: 'accessAllowed', - content: '' + eventName: 'accessAllowed', + eventContent: '', + event: { + type: 'accessAllowed', + target: pub, + cancelable: false, + hasBeenPrevented: false, + isDefaultPrevented: () => false, + preventDefault: () => { }, + callDefaultBehavior: () => { } + } }); }); } @@ -413,10 +431,19 @@ export class VideoComponent implements OnInit, OnDestroy { if (this.eventCollection.accessDenied) { if (!oldValues.accessDenied) { - pub.on('accessDenied', (e) => { + pub.on('accessDenied', (error) => { this.updateEventListInParent.emit({ - event: 'accessDenied', - content: '' + eventName: 'accessDenied', + eventContent: JSON.stringify(error), + event: { + type: 'accessDenied', + target: pub, + cancelable: false, + hasBeenPrevented: false, + isDefaultPrevented: () => false, + preventDefault: () => { }, + callDefaultBehavior: () => { } + } }); }); } @@ -428,8 +455,17 @@ export class VideoComponent implements OnInit, OnDestroy { if (!oldValues.accessDialogOpened) { pub.on('accessDialogOpened', (e) => { this.updateEventListInParent.emit({ - event: 'accessDialogOpened', - content: '' + eventName: 'accessDialogOpened', + eventContent: '', + event: { + type: 'accessDialogOpened', + target: pub, + cancelable: false, + hasBeenPrevented: false, + isDefaultPrevented: () => false, + preventDefault: () => { }, + callDefaultBehavior: () => { } + } }); }); } @@ -441,8 +477,17 @@ export class VideoComponent implements OnInit, OnDestroy { if (!oldValues.accessDialogClosed) { pub.on('accessDialogClosed', (e) => { this.updateEventListInParent.emit({ - event: 'accessDialogClosed', - content: '' + eventName: 'accessDialogClosed', + eventContent: '', + event: { + type: 'accessDialogClosed', + target: pub, + cancelable: false, + hasBeenPrevented: false, + isDefaultPrevented: () => false, + preventDefault: () => { }, + callDefaultBehavior: () => { } + } }); }); } @@ -452,10 +497,11 @@ export class VideoComponent implements OnInit, OnDestroy { if (this.eventCollection.streamCreated) { if (!oldValues.streamCreated) { - pub.on('streamCreated', (e: StreamEvent) => { + pub.on('streamCreated', (event: StreamEvent) => { this.updateEventListInParent.emit({ - event: 'streamCreated', - content: e.stream.streamId + eventName: 'streamCreated', + eventContent: event.stream.streamId, + event }); }); } @@ -465,12 +511,13 @@ export class VideoComponent implements OnInit, OnDestroy { if (this.eventCollection.streamDestroyed) { if (!oldValues.streamDestroyed) { - pub.on('streamDestroyed', (e: StreamEvent) => { + pub.on('streamDestroyed', (event: StreamEvent) => { this.updateEventListInParent.emit({ - event: 'streamDestroyed', - content: e.stream.streamId + eventName: 'streamDestroyed', + eventContent: event.stream.streamId, + event }); - if (e.reason.indexOf('forceUnpublish') !== -1) { + if (event.reason.indexOf('forceUnpublish') !== -1) { this.unpublished = !this.unpublished; this.unpublished ? this.pubSubIcon = 'play_arrow' : this.pubSubIcon = 'stop'; } @@ -482,11 +529,13 @@ export class VideoComponent implements OnInit, OnDestroy { if (this.eventCollection.streamPropertyChanged) { if (!oldValues.streamPropertyChanged) { - pub.on('streamPropertyChanged', (e: StreamPropertyChangedEvent) => { - const newValue = e.changedProperty === 'videoDimensions' ? JSON.stringify(e.newValue) : e.newValue.toString(); + pub.on('streamPropertyChanged', (event: StreamPropertyChangedEvent) => { + const newValue = event.changedProperty === 'videoDimensions' ? + JSON.stringify(event.newValue) : event.newValue.toString(); this.updateEventListInParent.emit({ - event: 'streamPropertyChanged', - content: e.changedProperty + ' [' + newValue + ']' + eventName: 'streamPropertyChanged', + eventContent: event.changedProperty + ' [' + newValue + ']', + event }); }); } @@ -496,10 +545,11 @@ export class VideoComponent implements OnInit, OnDestroy { if (this.eventCollection.videoElementDestroyed) { if (!oldValues.videoElementDestroyed) { - pub.on('videoElementDestroyed', (e: VideoElementEvent) => { + pub.on('videoElementDestroyed', (event: VideoElementEvent) => { this.updateEventListInParent.emit({ - event: 'videoElementDestroyed', - content: '(Publisher)' + eventName: 'videoElementDestroyed', + eventContent: '(Publisher)', + event }); }); } @@ -519,8 +569,9 @@ export class VideoComponent implements OnInit, OnDestroy { } this.showButtons = true; this.updateEventListInParent.emit({ - event: 'streamPlaying', - content: pub.stream.streamId + eventName: 'streamPlaying', + eventContent: pub.stream.streamId, + event }); }); } @@ -532,8 +583,9 @@ export class VideoComponent implements OnInit, OnDestroy { if (!oldValues.streamAudioVolumeChange) { pub.on('streamAudioVolumeChange', (event: StreamManagerEvent) => { this.updateEventListInParent.emit({ - event: 'streamAudioVolumeChange', - content: event.value['newValue'] + eventName: 'streamAudioVolumeChange', + eventContent: event.value['newValue'], + event }); }); } @@ -667,10 +719,11 @@ export class VideoComponent implements OnInit, OnDestroy { }); } - emitFilterEventToParent(event) { + emitFilterEventToParent(event: FilterEvent) { this.updateEventListInParent.emit({ - event: 'filterEvent', - content: event.data + eventName: 'filterEvent', + eventContent: JSON.stringify(event.data), + event }); } diff --git a/openvidu-testapp/src/app/services/test-feed.service.ts b/openvidu-testapp/src/app/services/test-feed.service.ts index 94413fc2..d164c1db 100644 --- a/openvidu-testapp/src/app/services/test-feed.service.ts +++ b/openvidu-testapp/src/app/services/test-feed.service.ts @@ -1,10 +1,12 @@ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; +import { Event } from 'openvidu-browser'; + @Injectable() export class TestFeedService { - lastEvent; + lastEvent: Event; newLastEvent$ = new Subject(); constructor() { } @@ -13,8 +15,8 @@ export class TestFeedService { return this.lastEvent; } - pushNewEvent(session: string, connection: string, event: string, eventContent: string) { - this.lastEvent = ({ session: session, connection: connection, event: event, eventContent: eventContent }); + pushNewEvent(session: string, connection: string, event: Event) { + this.lastEvent = event; this.newLastEvent$.next(this.lastEvent); }