refactored OT framework such that null may represent a no-op

This commit is contained in:
Axel Uhl committed 2013-07-11 09:17:26 +02:00
1 parent 0055ff6475
commit 8721038677
8 files changed
+145 -80

No files matched your search

@@ -55,9 +55,7 @@ public class RaceLogOperationalTransformationTest {
RaceLogStartTimeEvent startTimeEvent = new RaceLogStartTimeEventImpl(MillisecondsTimePoint.now(), startTime, UUID.randomUUID(), Collections.<Competitor> emptyList(), /* pass ID */ 1, startTime);
RaceLogStartTimeEventWithTransformationSupport e = new RaceLogStartTimeEventWithTransformationSupport(startTimeEvent);
server.apply(e);
server.waitForNotRunning();
client1.waitForNotRunning();
client2.waitForNotRunning();
waitForEventualConsistency();
raceLogClient1.lockForRead();
try {
assertEquals(1, Util.size(raceLogClient1.getRawFixes()));
@@ -87,4 +85,46 @@ public class RaceLogOperationalTransformationTest {
raceLogServer.unlockAfterRead();
}
}
@Test
public void testConflictingApplyServerWins() {
Calendar cServer = new GregorianCalendar(2013, 6, 7, 13, 59, 33);
final MillisecondsTimePoint startTimeServer = new MillisecondsTimePoint(cServer.getTime());
RaceLogStartTimeEvent startTimeEventServer = new RaceLogStartTimeEventImpl(MillisecondsTimePoint.now(), startTimeServer, UUID.randomUUID(), Collections.<Competitor> emptyList(), /* pass ID */ 1, startTimeServer);
RaceLogStartTimeEventWithTransformationSupport eServer = new RaceLogStartTimeEventWithTransformationSupport(startTimeEventServer);
server.apply(eServer);
Calendar cClient1 = new GregorianCalendar(2013, 6, 7, 13, 59, 33);
final MillisecondsTimePoint startTimeClient1 = new MillisecondsTimePoint(cClient1.getTime());
RaceLogStartTimeEvent startTimeEventClient1 = new RaceLogStartTimeEventImpl(MillisecondsTimePoint.now(), startTimeClient1, UUID.randomUUID(), Collections.<Competitor> emptyList(), /* pass ID */ 1, startTimeClient1);
RaceLogStartTimeEventWithTransformationSupport eClient1 = new RaceLogStartTimeEventWithTransformationSupport(startTimeEventClient1);
client1.apply(eClient1);
waitForEventualConsistency();
// now assert that the start time is equal on both clients and the server and equal to that set on the server
raceLogClient1.lockForRead();
try {
assertEquals(1, Util.size(raceLogClient1.getRawFixes()));
assertEquals(startTimeServer, ((RaceLogStartTimeEvent) raceLogClient1.getLastRawFix()).getStartTime());
} finally {
raceLogClient1.unlockAfterRead();
}
raceLogClient2.lockForRead();
try {
assertEquals(1, Util.size(raceLogClient2.getRawFixes()));
assertEquals(startTimeServer, ((RaceLogStartTimeEvent) raceLogClient2.getLastRawFix()).getStartTime());
} finally {
raceLogClient2.unlockAfterRead();
}
raceLogServer.lockForRead();
try {
assertEquals(startTimeServer, ((RaceLogStartTimeEvent) raceLogServer.getLastRawFix()).getStartTime());
} finally {
raceLogServer.unlockAfterRead();
}
}
private void waitForEventualConsistency() {
server.waitForNotRunning();
client1.waitForNotRunning();
client2.waitForNotRunning();
}
}