first successful tiny and trivial Operational Transformation test, replicating the addition of a leaderboard

This commit is contained in:
Axel Uhl
2012-03-28 14:51:13 +02:00
parent b35a479d9d
commit 2e603bc6e3
6 changed files with 99 additions and 7 deletions
@@ -35,8 +35,7 @@ public class MongoDBServiceImpl implements MongoDBService {
return configuration;
}
public void setConfiguration(MongoDBConfiguration configuration)
{
public void setConfiguration(MongoDBConfiguration configuration) {
this.configuration = configuration;
logger.info("Used Mongo configuration: host:port/DBName: "+configuration.getHostName()+":"+configuration.getPort()+"/"+configuration.getDatabaseName());
}
@@ -46,7 +45,6 @@ public class MongoDBServiceImpl implements MongoDBService {
configuration = MongoDBConfiguration.getDefaultTestConfiguration();
logger.info("Used default Mongo configuration: host:port/DBName: "+configuration.getHostName()+":"+configuration.getPort()+"/"+configuration.getDatabaseName());
}
try {
return getDB(configuration);
} catch (UnknownHostException e) {
@@ -193,6 +193,7 @@ public class PeerImpl<O extends Operation<S>, S> implements Peer<O, S> {
* by this peer's apply(...) method.
*/
peer.apply(PeerImpl.this, operation, numberOfMergedOpsForPeer);
// TODO what to do if apply throws a RuntimeException?
}
});
}
@@ -10,7 +10,10 @@ Require-Bundle: com.sap.sailing.server,
com.sap.sailing.domain.tractracadapter,
com.sap.sailing.domain.swisstimingadapter,
com.sap.sailing.domain.common,
com.sap.sailing.expeditionconnector
com.sap.sailing.expeditionconnector,
com.sap.sailing.operationaltransformation,
com.sap.sailing.mongodb,
com.mongodb.driver;bundle-version="2.6.2"
Import-Package: junit.framework;version="4.8.1",
org.junit;version="4.8.1",
com.tractrac.clientmodule,
@@ -0,0 +1,56 @@
package com.sap.sailing.server.test;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.common.DefaultLeaderboardName;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.mongodb.MongoDBService;
import com.sap.sailing.operationaltransformation.Peer;
import com.sap.sailing.operationaltransformation.Peer.Role;
import com.sap.sailing.operationaltransformation.PeerImpl;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.impl.RacingEventServiceImpl;
import com.sap.sailing.server.operationaltransformation.AddLeaderboard;
import com.sap.sailing.server.operationaltransformation.OperationalTransformer;
import com.sap.sailing.server.operationaltransformation.RacingEventServiceOperation;
public class OperationalTransformationTest {
private static final String LEADERBOARDNAME = "TESTBOARD";
private RacingEventService racingEventServiceServer;
private RacingEventService racingEventServiceReplica;
private Peer<RacingEventServiceOperation, RacingEventService> server;
private Peer<RacingEventServiceOperation, RacingEventService> replica;
@Before
public void setUp() {
// ensure that leaderboards will be loaded from and stored to the test database which is
MongoDBService.INSTANCE.getDB().dropDatabase();
racingEventServiceServer = new RacingEventServiceImpl();
racingEventServiceReplica = new RacingEventServiceImpl();
OperationalTransformer transformer = new OperationalTransformer();
server = new PeerImpl<>(transformer, racingEventServiceServer, Role.SERVER);
replica = new PeerImpl<>(transformer, racingEventServiceReplica, Role.CLIENT);
// wire the peers:
server.addPeer(replica);
replica.addPeer(server);
}
@Test
public void testAddLeaderboard() {
RacingEventServiceOperation addLeaderboardOp = new AddLeaderboard(LEADERBOARDNAME, new int[] { 5 });
server.apply(addLeaderboardOp);
server.waitForNotRunning();
Map<String, Leaderboard> replicaLeaderboards = racingEventServiceReplica.getLeaderboards();
assertEquals(2, replicaLeaderboards.size()); // expected to include the default leaderboard
assertEquals(new HashSet<String>(Arrays.asList(new String[] { DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME, LEADERBOARDNAME })),
replicaLeaderboards.keySet());
}
}
@@ -30,5 +30,6 @@ Export-Package: com.sap.sailing.server,
x-friends:="com.sap.sailing.mongodb.test,
com.sap.sailing.server.test,
com.sap.sailing.domain.swisstimingadapter.test,
com.sap.sailing.gwt.ui.test"
com.sap.sailing.gwt.ui.test",
com.sap.sailing.server.operationaltransformation
Web-ContextPath: /sailingserver
@@ -0,0 +1,33 @@
package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.server.RacingEventService;
public class AddLeaderboard extends AbstractRacingEventServiceOperation {
private final String leaderboardName;
private final int[] discardThresholds;
public AddLeaderboard(String leaderboardName, int[] discardThresholds) {
super();
this.leaderboardName = leaderboardName;
this.discardThresholds = discardThresholds;
}
@Override
public RacingEventService applyTo(RacingEventService toState) {
toState.addLeaderboard(leaderboardName, discardThresholds);
return toState;
}
@Override
public RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp) {
// TODO Auto-generated method stub
return null;
}
@Override
public RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp) {
// TODO Auto-generated method stub
return null;
}
}