From afd0818218944caf8def8de6ff910849329a4424 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Fri, 12 Dec 2014 21:28:29 +0100 Subject: [PATCH] failing test case for bug 2506 --- ...tialLoadReplicationObjectIdentityTest.java | 81 ++++++++++++++++++- 1 file changed, 77 insertions(+), 4 deletions(-) diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java index 07d442d1576..862220bc514 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java @@ -1,6 +1,7 @@ package com.sap.sailing.server.replication.test; import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; @@ -11,6 +12,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.UUID; @@ -18,10 +20,16 @@ import java.util.UUID; 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.RaceLogEvent; +import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent; +import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEventFactoryImpl; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.base.Event; +import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.base.Series; @@ -33,15 +41,27 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaName; import com.sap.sailing.domain.common.RegattaNameAndRaceName; import com.sap.sailing.domain.common.ScoringSchemeType; +import com.sap.sailing.domain.common.WindSourceType; +import com.sap.sailing.domain.common.impl.DegreeBearingImpl; +import com.sap.sailing.domain.common.impl.DegreePosition; +import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; +import com.sap.sailing.domain.common.impl.WindSourceImpl; import com.sap.sailing.domain.common.media.MediaTrack; import com.sap.sailing.domain.common.media.MediaTrack.MimeType; +import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; +import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.domain.persistence.PersistenceFactory; import com.sap.sailing.domain.persistence.media.MediaDBFactory; import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore; import com.sap.sailing.domain.test.TrackBasedTest; +import com.sap.sailing.domain.tracking.DynamicTrackedRace; +import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.domain.tracking.Wind; +import com.sap.sailing.domain.tracking.WindTrack; import com.sap.sailing.domain.tracking.impl.EmptyWindStore; +import com.sap.sailing.domain.tracking.impl.WindImpl; import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.server.operationaltransformation.AddDefaultRegatta; @@ -105,14 +125,39 @@ public class InitialLoadReplicationObjectIdentityTest extends AbstractServerRepl assertTrue(master.getAllRegattas().iterator().hasNext()); assertNull(replica.getRegatta(masterRegatta.getRegattaIdentifier())); + /* RaceDefinition and DynamicTrackedRace */ + RaceDefinition masterRace = new RaceDefinitionImpl("Test Race", new CourseImpl("Test Course", Collections.emptyList()), + masterRegatta.getBoatClass(), Collections.emptyList()); + masterRegatta.addRace(masterRace); + DynamicTrackedRace masterTrackedRace = master.createTrackedRace(new RegattaNameAndRaceName(masterRegatta.getName(), masterRace.getName()), + master.getWindStore(), master.getGPSFixStore(), /* delayToLiveInMillis */ 3000, + /* millisecondsOverWhichToAverageWind */ 15000, /* millisecondsOverWhichToAverageSpeed */ 10000); + /* Leaderboard */ final String leaderboardName = "Great Leaderboard"; final int[] discardThresholds = new int[] { 17, 23 }; CreateFlexibleLeaderboard createTestLeaderboard = new CreateFlexibleLeaderboard(leaderboardName, null, discardThresholds, new LowPoint(), null); assertNull(master.getLeaderboardByName(leaderboardName)); - master.apply(createTestLeaderboard); + FlexibleLeaderboard masterLeaderboard = master.apply(createTestLeaderboard); assertNotNull(master.getLeaderboardByName(leaderboardName)); assertNull(replica.getLeaderboardByName(leaderboardName)); + masterLeaderboard.addRace(masterTrackedRace, "R1", /* medalRace */ false); + RaceColumn masterR1 = masterLeaderboard.getRaceColumnByName("R1"); + final RaceLog masterR1RaceLog = masterR1.getRaceLog(masterR1.getFleets().iterator().next()); + assertNotNull(masterR1RaceLog); + final WindImpl masterWindFix = new WindImpl(new DegreePosition(12, 13), MillisecondsTimePoint.now(), + new KnotSpeedWithBearingImpl(12.7, new DegreeBearingImpl(123))); + masterR1RaceLog.add(RaceLogEventFactoryImpl.INSTANCE.createWindFixEvent(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Me", 0), + /* passId */ 1, masterWindFix)); + // assert that the wind fix shows up in the tracked race now because the tracked race has the DynamicTrackedRaceLogListener + // propagating the wind fix race log event into the wind track for source RACECOMMITTEE + WindTrack masterRCWindFixes = masterTrackedRace.getOrCreateWindTrack(new WindSourceImpl(WindSourceType.RACECOMMITTEE)); + masterRCWindFixes.lockForRead(); + try { + assertEquals(masterWindFix, masterRCWindFixes.getRawFixes().iterator().next()); + } finally { + masterRCWindFixes.unlockAfterRead(); + } /* LeaderboardGroup */ final String leaderBoardGroupName = "Great Leaderboard Group"; @@ -151,15 +196,43 @@ public class InitialLoadReplicationObjectIdentityTest extends AbstractServerRepl Event replicaEvent = replica.getEvent(eventId); assertNotNull(replicaEvent); - assertNotNull(replica.getRegatta(masterRegatta.getRegattaIdentifier())); + Regatta replicaRegatta = replica.getRegatta(masterRegatta.getRegattaIdentifier()); + assertNotNull(replicaRegatta); LeaderboardGroup replicaLeaderboardGroup = replica.getLeaderboardGroupByName(leaderBoardGroupName); assertNotNull(replicaLeaderboardGroup); assertNotNull(replica.getLeaderboardByName(leaderboardName)); assertTrue(replica.getAllRegattas().iterator().hasNext()); assertSame(replicaLeaderboardGroup, replicaEvent.getLeaderboardGroups().iterator().next()); - //System.out.println("InitialLoadReplicationObjectIdentityTest.testInitialLoad - replica.getAllMediaTracks: " + replica.getAllMediaTracks()); - assertThat(replica.getAllMediaTracks().size(), is(3)); + Leaderboard replicaLeaderboard = replica.getLeaderboardByName(leaderboardName); + RaceColumn replicaR1 = replicaLeaderboard.getRaceColumnByName("R1"); + TrackedRace replicaTrackedRace = replicaR1.getTrackedRace(replicaR1.getFleets().iterator().next()); + assertNotNull(replicaTrackedRace); + RaceLog replicaR1RaceLog = replicaR1.getRaceLog(replicaR1.getFleets().iterator().next()); + replicaR1RaceLog.lockForRead(); + try { + RaceLogEvent replicaRaceLogEvent = replicaR1RaceLog.getRawFixes().iterator().next(); + assertTrue(replicaRaceLogEvent instanceof RaceLogWindFixEvent); + } finally { + replicaR1RaceLog.unlockAfterRead(); + } + // now (see bug 2506) add a wind fix event to the race log and check that it arrived at the wind track + final WindImpl replicaWindFix = new WindImpl(new DegreePosition(14, 15), MillisecondsTimePoint.now(), + new KnotSpeedWithBearingImpl(22.9, new DegreeBearingImpl(155))); + replicaR1RaceLog.add(RaceLogEventFactoryImpl.INSTANCE.createWindFixEvent(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Me", 0), + /* passId */ 1, replicaWindFix)); + // assert that the wind fix shows up in the tracked race now because the tracked race has the DynamicTrackedRaceLogListener + // propagating the wind fix race log event into the wind track for source RACECOMMITTEE + WindTrack replicaRCWindFixes = replicaTrackedRace.getOrCreateWindTrack(new WindSourceImpl(WindSourceType.RACECOMMITTEE)); + replicaRCWindFixes.lockForRead(); + try { + Iterator replicaRCWindFixesIter = replicaRCWindFixes.getRawFixes().iterator(); + replicaRCWindFixesIter.next(); + assertEquals(replicaWindFix, replicaRCWindFixesIter.next()); + } finally { + replicaRCWindFixes.unlockAfterRead(); + } + } @Test