mirror of https://github.com/OpenVidu/openvidu.git
openvidu-test-e2e: fix race condition when running openvidu-browser event callbacks
parent
de5d712967
commit
99e2b1fe97
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue