From 99e2b1fe97bde74a143458ab45c0903f96d065d1 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 3 Feb 2023 13:32:55 +0100 Subject: [PATCH] openvidu-test-e2e: fix race condition when running openvidu-browser event callbacks --- .../test/e2e/OpenViduEventManager.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduEventManager.java b/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduEventManager.java index e587d3a3..e57680c4 100644 --- a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduEventManager.java +++ b/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduEventManager.java @@ -60,12 +60,9 @@ public class OpenViduEventManager { private final Consumer callback; private JsonObject eventResult; - public RunnableCallback(Consumer callback) { + public RunnableCallback(Consumer callback, JsonObject eventResult) { this.callback = callback; - } - - public void setEventResult(JsonObject json) { - this.eventResult = json; + this.eventResult = eventResult; } @Override @@ -79,11 +76,11 @@ public class OpenViduEventManager { private WebDriver driver; private Queue eventQueue; - private Map> eventCallbacks; + private Map>> eventCallbacks; private Map eventNumbers; private Map eventCountdowns; - private Map>> eventCallbacksByUser; + private Map>>> eventCallbacksByUser; private Map> eventNumbersByUser; private Map> eventCountdownsByUser; @@ -161,13 +158,13 @@ public class OpenViduEventManager { public void on(String eventName, Consumer callback) { this.eventCallbacks.putIfAbsent(eventName, new HashSet<>()); - this.eventCallbacks.get(eventName).add(new RunnableCallback(callback)); + this.eventCallbacks.get(eventName).add(callback); } public void on(int numberOfUser, String eventName, Consumer callback) { this.eventCallbacksByUser.putIfAbsent(numberOfUser, new HashMap<>()); this.eventCallbacksByUser.get(numberOfUser).putIfAbsent(eventName, new HashSet<>()); - this.eventCallbacksByUser.get(numberOfUser).get(eventName).add(new RunnableCallback(callback)); + this.eventCallbacksByUser.get(numberOfUser).get(eventName).add(callback); } public void off(String eventName) { @@ -315,15 +312,15 @@ public class OpenViduEventManager { log.info(eventType); if (this.eventCallbacks.containsKey(eventType)) { - for (RunnableCallback callback : this.eventCallbacks.get(eventType)) { - callback.setEventResult(event); - execService.submit(callback); + for (Consumer callback : this.eventCallbacks.get(eventType)) { + final RunnableCallback runnableCallback = new RunnableCallback(callback, event); + execService.submit(runnableCallback); } } if (this.eventCallbacksByUser.containsKey(numberOfUser)) { - for (RunnableCallback callback : this.eventCallbacksByUser.get(numberOfUser).get(eventType)) { - callback.setEventResult(event); - execService.submit(callback); + for (Consumer callback : this.eventCallbacksByUser.get(numberOfUser).get(eventType)) { + final RunnableCallback runnableCallback = new RunnableCallback(callback, event); + execService.submit(runnableCallback); } } } @@ -358,7 +355,7 @@ public class OpenViduEventManager { } } - private String getAndClearEventsInBrowser() { + private synchronized String getAndClearEventsInBrowser() { String events = (String) ((JavascriptExecutor) driver) .executeScript("var e = window.myEvents; window.myEvents = ''; return e;"); return events;