successfully tested in-place update of competitor in replica with explicity update operation

This commit is contained in:
Axel Uhl
2013-11-07 20:04:03 +01:00
parent 28aa49dbc6
commit eb2d76ca8c
2 changed files with 17 additions and 137 deletions
@@ -1,33 +1,24 @@
package com.sap.sailing.server.replication.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import org.junit.Test;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.CourseImpl;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.impl.Util;
@@ -67,7 +58,8 @@ public class CompetitorReplicationTest extends AbstractServerReplicationTest {
Iterable<Waypoint> emptyWaypointList = Collections.emptyList();
Competitor competitor = AbstractLeaderboardTest.createCompetitor("Der mit dem Kiel zieht");
Iterable<Competitor> competitors = Collections.singleton(competitor);
RaceDefinition raceDefinition = new RaceDefinitionImpl("Test Race", new CourseImpl("Empty Course", emptyWaypointList),
final String raceName = "Test Race";
RaceDefinition raceDefinition = new RaceDefinitionImpl(raceName, new CourseImpl("Empty Course", emptyWaypointList),
masterRegatta.getBoatClass(), competitors);
master.apply(new AddRaceDefinition(masterRegatta.getRegattaIdentifier(), raceDefinition));
Thread.sleep(1000);
@@ -77,131 +69,19 @@ public class CompetitorReplicationTest extends AbstractServerReplicationTest {
assertTrue(Util.isEmpty((replicatedRegatta.getSeries())));
assertNull(replicatedRegatta.getDefaultCourseArea());
assertTrue(regattaId.equals(replicatedRegatta.getId()));
}
@Test
public void testUpdateSpecificRegattaReplication() throws InterruptedException {
Regatta replicatedRegatta;
RaceDefinition replicatedRace = replicatedRegatta.getRaceByName(raceName);
assertNotNull(replicatedRace);
Competitor replicatedCompetitor = replicatedRace.getCompetitors().iterator().next();
assertNotSame(replicatedCompetitor, competitor);
assertEquals(competitor.getId(), replicatedCompetitor.getId());
assertEquals(competitor.getName(), replicatedCompetitor.getName());
assertEquals(competitor.getBoat().getSailID(), replicatedCompetitor.getBoat().getSailID());
assertEquals(competitor.getTeam().getNationality(), replicatedCompetitor.getTeam().getNationality());
final UUID alphaCourseAreaId = UUID.randomUUID();
final UUID tvCourseAreaId = UUID.randomUUID();
Event event = master.addEvent("Event", "Venue", ".", true, UUID.randomUUID());
master.addCourseArea(event.getId(), "Alpha", alphaCourseAreaId);
master.addCourseArea(event.getId(), "TV", tvCourseAreaId);
UUID currentCourseAreaId = null;
Regatta masterRegatta = master.createRegatta("Kiel Week 2012", "49er", UUID.randomUUID(), Collections.<Series>emptyList(),
/* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), currentCourseAreaId);
// Test for 'null'
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId);
// now update competitor on master using replicating operation
final String newCompetitorName = "Der Vogel, der mit dem Kiel zieht";
master.apply(new UpdateCompetitor(competitor.getId().toString(), newCompetitorName, competitor.getBoat().getSailID(), competitor.getTeam().getNationality()));
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
assertNull(replicatedRegatta.getDefaultCourseArea());
// Test for 'alpha'
currentCourseAreaId = alphaCourseAreaId;
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId);
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
assertEquals(currentCourseAreaId, replicatedRegatta.getDefaultCourseArea().getId());
// Test for 'tv'
currentCourseAreaId = tvCourseAreaId;
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId);
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
assertEquals(currentCourseAreaId, replicatedRegatta.getDefaultCourseArea().getId());
// Test back to 'null'
currentCourseAreaId = null;
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId);
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
assertNull(replicatedRegatta.getDefaultCourseArea());
}
@Test
public void testDefaultRegattaReplication() throws InterruptedException {
final String baseEventName = "Kiel Week 2012";
final String boatClassName = "49er";
final UUID regattaId = UUID.randomUUID();
Regatta masterRegatta = master.getOrCreateDefaultRegatta(baseEventName, boatClassName, regattaId);
Thread.sleep(1000);
Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
assertTrue(regattaId.equals(replicatedRegatta.getId()));
}
@Test
public void testSpecificRegattaReplicationWithTwoEmptySeries() throws InterruptedException {
final String baseEventName = "Kiel Week 2012";
final String boatClassName = "49er";
final List<String> emptyRaceColumnNamesList = Collections.emptyList();
Series qualification = new SeriesImpl("Qualification", /* isMedal */ false,
Arrays.asList(new Fleet[] { new FleetImpl("Yellow"), new FleetImpl("Blue") }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null);
Series finals = new SeriesImpl("Finals", /* isMedal */ false,
Arrays.asList(new Fleet[] { new FleetImpl("Gold", 1), new FleetImpl("Silver", 2) }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null);
Series medal = new SeriesImpl("Medal", /* isMedal */ true,
Arrays.asList(new Fleet[] { new FleetImpl("Medal") }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null);
Regatta masterRegatta = master.createRegatta(baseEventName, boatClassName,
UUID.randomUUID(), Arrays.asList(new Series[] { qualification, finals, medal }), /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null);
Thread.sleep(1000);
Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
assertTrue(replicatedRegatta.isPersistent());
assertFalse(Util.isEmpty((replicatedRegatta.getSeries())));
Iterator<? extends Series> seriesIter = replicatedRegatta.getSeries().iterator();
Series replicatedQualification = seriesIter.next();
assertEquals("Qualification", replicatedQualification.getName());
assertEquals(2, Util.size(replicatedQualification.getFleets()));
assertNotNull(replicatedQualification.getFleetByName("Yellow"));
assertNotNull(replicatedQualification.getFleetByName("Blue"));
assertEquals(0, replicatedQualification.getFleetByName("Yellow").compareTo(replicatedQualification.getFleetByName("Blue")));
Series replicatedFinals = seriesIter.next();
assertEquals("Finals", replicatedFinals.getName());
assertEquals(2, Util.size(replicatedFinals.getFleets()));
assertNotNull(replicatedFinals.getFleetByName("Silver"));
assertNotNull(replicatedFinals.getFleetByName("Gold"));
assertEquals(1, replicatedFinals.getFleetByName("Gold").getOrdering());
assertEquals(2, replicatedFinals.getFleetByName("Silver").getOrdering());
Series replicatedMedal = seriesIter.next();
assertEquals("Medal", replicatedMedal.getName());
assertEquals(1, Util.size(replicatedMedal.getFleets()));
assertNotNull(replicatedMedal.getFleetByName("Medal"));
assertNull(replicatedRegatta.getDefaultCourseArea());
}
@Test
public void testSpecificRegattaReplicationWithCourseArea() throws InterruptedException {
final String eventName = "ESS Singapur";
final String venueName = "Singapur, Singapur";
final String publicationUrl = "http://ess40.sapsailing.com";
final boolean isPublic = false;
final String boatClassName = "X40";
final Iterable<Series> series = Collections.emptyList();
final String courseArea = "Alpha";
Event masterEvent = master.addEvent(eventName, venueName, publicationUrl, isPublic, UUID.randomUUID());
CourseArea masterCourseArea = master.addCourseArea(masterEvent.getId(), courseArea, UUID.randomUUID());
Regatta masterRegatta = master.createRegatta(eventName, boatClassName, UUID.randomUUID(), series,
/* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), masterCourseArea.getId());
Thread.sleep(1000);
Event replicatedEvent = replica.getEvent(masterEvent.getId());
assertNotNull(replicatedEvent);
CourseArea replicatedCourseArea = replica.getCourseArea(masterCourseArea.getId());
assertNotNull(replicatedCourseArea);
Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
assertTrue(replicatedRegatta.isPersistent());
assertTrue(Util.isEmpty((replicatedRegatta.getSeries())));
assertNotNull(replicatedRegatta.getDefaultCourseArea());
assertEquals(masterCourseArea.getId(), replicatedRegatta.getDefaultCourseArea().getId());
assertEquals(masterCourseArea.getName(), replicatedRegatta.getDefaultCourseArea().getName());
}
}
assertEquals(newCompetitorName, replicatedCompetitor.getName()); // expect in-place update of existing competitor in replica
}
}