diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java index 67dfd6446c6..7cf1ec92b44 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java @@ -521,7 +521,8 @@ DynamicTrackedRace, GPSTrackListener { */ @Override public void setWindSourcesToExclude(final Iterable windSourcesToExclude) { - final Set effectiveWindSourcesToExclude = new HashSet<>(getWindSourcesToExclude()); + final Set effectiveWindSourcesToExclude = new HashSet<>(); + Util.addAll(windSourcesToExclude, effectiveWindSourcesToExclude); if (!raceIsKnownToStartUpwind) { effectiveWindSourcesToExclude.add(new WindSourceImpl(WindSourceType.COURSE_BASED)); } diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java index 3043368cf8e..d53fe467eb4 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java @@ -6,24 +6,32 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.net.URI; import java.net.URL; import java.util.Collections; import java.util.GregorianCalendar; +import java.util.Optional; import java.util.TimeZone; +import java.util.logging.Level; import java.util.logging.Logger; import org.junit.After; import org.junit.Before; import org.junit.Test; +import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl; +import com.sap.sailing.domain.abstractlog.race.RaceLog; +import com.sap.sailing.domain.abstractlog.race.impl.RaceLogExcludeWindSourcesEventImpl; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaNameAndRaceName; import com.sap.sailing.domain.common.WindSourceType; import com.sap.sailing.domain.common.impl.WindSourceImpl; +import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; +import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore; @@ -33,18 +41,20 @@ import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sailing.domain.tracking.RaceHandle; import com.sap.sailing.domain.tracking.RaceTracker; import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters; -import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.RaceTrackingHandler.DefaultRaceTrackingHandler; +import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.server.interfaces.RacingEventService; import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard; import com.sap.sailing.server.operationaltransformation.ConnectTrackedRaceToLeaderboardColumn; import com.sap.sailing.server.operationaltransformation.CreateFlexibleLeaderboard; import com.sap.sailing.server.operationaltransformation.CreateTrackedRace; +import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.replication.OperationExecutionListener; import com.sap.sse.replication.OperationWithResult; +import com.sap.sse.shared.util.Wait; public class TrackRaceReplicationTest extends AbstractServerReplicationTest { private static final Logger logger = Logger.getLogger(TrackRaceReplicationTest.class.getName()); @@ -199,16 +209,27 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest { try { logger.info("Running testWindSourcesToExcludeReplication()"); startTracking(); + final FlexibleLeaderboard lb = master.addFlexibleLeaderboard("LB", "LB Display Name", new int[0], new LowPoint(), Collections.emptySet()); + final FlexibleRaceColumn r1 = (FlexibleRaceColumn) master.addColumnToLeaderboard("R1", lb.getName(), /* medal race */ false); Thread.sleep(1000); - TrackedRace replicaTrackedRace = replica.getTrackedRace(raceIdentifier); + final TrackedRace replicaTrackedRace = replica.getTrackedRace(raceIdentifier); + r1.setTrackedRace(r1.getFleets().iterator().next(), replicaTrackedRace); assertTrue(Util.isEmpty(masterTrackedRace.getWindSourcesToExclude())); assertTrue(Util.isEmpty(replicaTrackedRace.getWindSourcesToExclude())); - masterTrackedRace.setWindSourcesToExclude(Collections.singleton(new WindSourceImpl(WindSourceType.WEB))); - assertEquals(1, Util.size(masterTrackedRace.getWindSourcesToExclude())); - assertEquals(WindSourceType.WEB, masterTrackedRace.getWindSourcesToExclude().iterator().next().getType()); - Thread.sleep(1000); - assertEquals(1, Util.size(replicaTrackedRace.getWindSourcesToExclude())); - assertEquals(WindSourceType.WEB, replicaTrackedRace.getWindSourcesToExclude().iterator().next().getType()); + if (Wait.wait(()->masterTrackedRace.getAttachedRaceLogs().iterator().hasNext(), + Optional.of(Duration.ONE_MINUTE), Duration.ONE_SECOND, + Level.INFO, "Waiting for race log(s) attached")) { + final RaceLog defaultRaceLog = masterTrackedRace.getAttachedRaceLogs().iterator().next(); + defaultRaceLog.add(new RaceLogExcludeWindSourcesEventImpl(TimePoint.now(), new LogEventAuthorImpl("Me", 0), 0, + Collections.singleton(new WindSourceImpl(WindSourceType.WEB)))); + assertEquals(1, Util.size(masterTrackedRace.getWindSourcesToExclude())); + assertEquals(WindSourceType.WEB, masterTrackedRace.getWindSourcesToExclude().iterator().next().getType()); + Thread.sleep(1000); + assertEquals(1, Util.size(replicaTrackedRace.getWindSourcesToExclude())); + assertEquals(WindSourceType.WEB, replicaTrackedRace.getWindSourcesToExclude().iterator().next().getType()); + } else { + fail("Didn't find race log for "+raceIdentifier); + } } finally { logger.info("Done running testWindSourcesToExcludeReplication()"); }