From 4fb4a9af00bd93f2a156a7edcae32e0e7dad2b71 Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Mon, 12 Aug 2019 10:33:37 +0200 Subject: [PATCH] Bug 5101: drive-by fix for sporadically failing RegattaApiTest --- .../selenium/api/regatta/RegattaApi.java | 22 +++++++++++++++++++ .../selenium/api/test/RegattaApiTest.java | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/regatta/RegattaApi.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/regatta/RegattaApi.java index 8131eb13716..f569c3c39ef 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/regatta/RegattaApi.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/regatta/RegattaApi.java @@ -4,9 +4,11 @@ import java.util.Map; import java.util.Optional; import java.util.TreeMap; import java.util.UUID; +import java.util.function.Predicate; import org.json.simple.JSONArray; import org.json.simple.JSONObject; +import org.openqa.selenium.TimeoutException; import com.sap.sailing.selenium.api.core.ApiContext; @@ -29,6 +31,26 @@ public class RegattaApi { return new RegattaRaces(ctx.get(REGATTAS + "/" + regattaName + LIST_REGATTA_RACES)); } + public RegattaRaces getRegattaRaces(ApiContext ctx, String regattaName, Predicate predicateToCheck) + throws TimeoutException { + for (int i = 0; i < 20; i++) { + final RegattaRaces regattaRaces = getRegattaRaces(ctx, regattaName); + if (predicateToCheck.test(regattaRaces)) { + return regattaRaces; + } + if (i == 19) { + // skip unnecessary 500ms wait + break; + } + try { + Thread.sleep(500); + } catch (InterruptedException e) { + throw new TimeoutException(e); + } + } + throw new TimeoutException("Expected condition failed, 20 tries, waited for 10 seconds."); + } + public Competitor createAndAddCompetitor(ApiContext ctx, String regattaName, String boatclass, String competitorEmail, String competitorName, String nationalityIOC, UUID deviceUuid) { return createAndAddCompetitor(ctx, regattaName, boatclass, competitorEmail, competitorName, nationalityIOC, diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/RegattaApiTest.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/RegattaApiTest.java index 66e8b9a80ed..c25ab0a2e72 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/RegattaApiTest.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/RegattaApiTest.java @@ -102,7 +102,7 @@ public class RegattaApiTest extends AbstractSeleniumTest { RaceColumn[] raceColumns = regattaApi.addRaceColumn(ctx, EVENT_NAME, "R", 1); leaderboardApi.startRaceLogTracking(ctx, EVENT_NAME, raceColumns[0].getRaceName(), "Default"); - regattaRaces = regattaApi.getRegattaRaces(ctx, EVENT_NAME); + regattaRaces = regattaApi.getRegattaRaces(ctx, EVENT_NAME, r -> r.getRaces().length > 0); assertEquals("read: reagtta.series should have 1 entries", 1, regattaRaces.getRaces().length); }