openvidu-test-e2e: fix race condition when running openvidu-browser event callbacks

pull/789/head
pabloFuente 2023-02-03 13:32:55 +01:00
parent de5d712967
commit 99e2b1fe97
1 changed files with 13 additions and 16 deletions

View File

@ -60,12 +60,9 @@ public class OpenViduEventManager {
private final Consumer<JsonObject> callback; private final Consumer<JsonObject> callback;
private JsonObject eventResult; private JsonObject eventResult;
public RunnableCallback(Consumer<JsonObject> callback) { public RunnableCallback(Consumer<JsonObject> callback, JsonObject eventResult) {
this.callback = callback; this.callback = callback;
} this.eventResult = eventResult;
public void setEventResult(JsonObject json) {
this.eventResult = json;
} }
@Override @Override
@ -79,11 +76,11 @@ public class OpenViduEventManager {
private WebDriver driver; private WebDriver driver;
private Queue<JsonObject> eventQueue; private Queue<JsonObject> eventQueue;
private Map<String, Collection<RunnableCallback>> eventCallbacks; private Map<String, Collection<Consumer<JsonObject>>> eventCallbacks;
private Map<String, AtomicInteger> eventNumbers; private Map<String, AtomicInteger> eventNumbers;
private Map<String, CountDownLatch> eventCountdowns; private Map<String, CountDownLatch> eventCountdowns;
private Map<Integer, Map<String, Collection<RunnableCallback>>> eventCallbacksByUser; private Map<Integer, Map<String, Collection<Consumer<JsonObject>>>> eventCallbacksByUser;
private Map<Integer, Map<String, AtomicInteger>> eventNumbersByUser; private Map<Integer, Map<String, AtomicInteger>> eventNumbersByUser;
private Map<Integer, Map<String, CountDownLatch>> eventCountdownsByUser; private Map<Integer, Map<String, CountDownLatch>> eventCountdownsByUser;
@ -161,13 +158,13 @@ public class OpenViduEventManager {
public void on(String eventName, Consumer<JsonObject> callback) { public void on(String eventName, Consumer<JsonObject> callback) {
this.eventCallbacks.putIfAbsent(eventName, new HashSet<>()); 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<JsonObject> callback) { public void on(int numberOfUser, String eventName, Consumer<JsonObject> callback) {
this.eventCallbacksByUser.putIfAbsent(numberOfUser, new HashMap<>()); this.eventCallbacksByUser.putIfAbsent(numberOfUser, new HashMap<>());
this.eventCallbacksByUser.get(numberOfUser).putIfAbsent(eventName, new HashSet<>()); 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) { public void off(String eventName) {
@ -315,15 +312,15 @@ public class OpenViduEventManager {
log.info(eventType); log.info(eventType);
if (this.eventCallbacks.containsKey(eventType)) { if (this.eventCallbacks.containsKey(eventType)) {
for (RunnableCallback callback : this.eventCallbacks.get(eventType)) { for (Consumer<JsonObject> callback : this.eventCallbacks.get(eventType)) {
callback.setEventResult(event); final RunnableCallback runnableCallback = new RunnableCallback(callback, event);
execService.submit(callback); execService.submit(runnableCallback);
} }
} }
if (this.eventCallbacksByUser.containsKey(numberOfUser)) { if (this.eventCallbacksByUser.containsKey(numberOfUser)) {
for (RunnableCallback callback : this.eventCallbacksByUser.get(numberOfUser).get(eventType)) { for (Consumer<JsonObject> callback : this.eventCallbacksByUser.get(numberOfUser).get(eventType)) {
callback.setEventResult(event); final RunnableCallback runnableCallback = new RunnableCallback(callback, event);
execService.submit(callback); execService.submit(runnableCallback);
} }
} }
} }
@ -358,7 +355,7 @@ public class OpenViduEventManager {
} }
} }
private String getAndClearEventsInBrowser() { private synchronized String getAndClearEventsInBrowser() {
String events = (String) ((JavascriptExecutor) driver) String events = (String) ((JavascriptExecutor) driver)
.executeScript("var e = window.myEvents; window.myEvents = ''; return e;"); .executeScript("var e = window.myEvents; window.myEvents = ''; return e;");
return events; return events;