From e8fae9bf0fdbb70f60b681c8a9c97b03fd387197 Mon Sep 17 00:00:00 2001 From: cruizba Date: Thu, 2 Jun 2022 15:08:30 +0200 Subject: [PATCH] openvidu-test-e2e: Fix streamPropertyChangedEventTest race condition. This supposedly fix a flaky test. If the event reaches before the viewport resolution is known, test would fail. Now the viewport resolution is adquired in a new Thread and the resolution is not compared until the event and viewport resolution are received --- .../test/e2e/OpenViduTestAppE2eTest.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) 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 d47b9d16..84e2fdf9 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 @@ -931,6 +931,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { } // Resize captured window + final CountDownLatch latchViewport = new CountDownLatch(1); final CountDownLatch latch3 = new CountDownLatch(2); int newWidth = 1000; int newHeight = 700; @@ -938,26 +939,37 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { final long[] expectedWidthHeight = new long[2]; user.getEventManager().on("streamPropertyChanged", (event) -> { - String expectedDimensions = "{\"width\":" + expectedWidthHeight[0] + ",\"height\":" + expectedWidthHeight[1] - + "}"; - System.out.println("Publisher dimensions: " + event.get("newValue").getAsJsonObject().toString()); - System.out.println("Real dimensions of viewport: " + expectedDimensions); - if ("videoDimensions".equals(event.get("changedProperty").getAsString()) - && "screenResized".equals(event.get("reason").getAsString()) - && expectedDimensions.equals(event.get("newValue").getAsJsonObject().toString())) { - latch3.countDown(); + try { + if (latchViewport.await(4000, TimeUnit.MILLISECONDS)) { + String expectedDimensions = "{\"width\":" + expectedWidthHeight[0] + ",\"height\":" + expectedWidthHeight[1] + + "}"; + System.out.println("Publisher dimensions: " + event.get("newValue").getAsJsonObject().toString()); + System.out.println("Real dimensions of viewport: " + expectedDimensions); + if ("videoDimensions".equals(event.get("changedProperty").getAsString()) + && "screenResized".equals(event.get("reason").getAsString()) + && expectedDimensions.equals(event.get("newValue").getAsJsonObject().toString())) { + latch3.countDown(); + } + } + } catch (InterruptedException e) { + log.error("Error waiting for viewport resolution"); } }); user.getDriver().manage().window().setSize(new Dimension(newWidth, newHeight)); - String widthAndHeight = user.getEventManager().getDimensionOfViewport(); - JsonObject obj = JsonParser.parseString(widthAndHeight).getAsJsonObject(); - expectedWidthHeight[0] = obj.get("width").getAsLong(); - expectedWidthHeight[1] = obj.get("height").getAsLong(); + new Thread(() -> { + String widthAndHeight = user.getEventManager().getDimensionOfViewport(); + JsonObject obj = JsonParser.parseString(widthAndHeight).getAsJsonObject(); - System.out.println("New viewport dimension: " + obj.toString()); + expectedWidthHeight[0] = obj.get("width").getAsLong(); + expectedWidthHeight[1] = obj.get("height").getAsLong(); + + System.out.println("New viewport dimension: " + obj.toString()); + latchViewport.countDown(); + + }).start(); user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 6);