mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-26 23:46:36 +00:00
first successful tiny and trivial Operational Transformation test, replicating the addition of a leaderboard
This commit is contained in:
+2
-4
@@ -35,18 +35,16 @@ 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());
|
||||
}
|
||||
|
||||
public DB getDB() {
|
||||
if(configuration == null) {
|
||||
if (configuration == null) {
|
||||
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) {
|
||||
|
||||
+2
-1
@@ -104,7 +104,7 @@ public class PeerImpl<O extends Operation<S>, S> implements Peer<O, S> {
|
||||
|
||||
@Override
|
||||
public S addPeer(Peer<O, S> peer) {
|
||||
if ( role == Role.CLIENT && getPeers().size() > 0) {
|
||||
if (role == Role.CLIENT && getPeers().size() > 0) {
|
||||
throw new RuntimeException("A client must be connected to at most one server");
|
||||
}
|
||||
unmergedOperationsForPeer.put(peer, new UnmergedOperationsQueue<O, S>());
|
||||
@@ -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,
|
||||
|
||||
Executable
+56
@@ -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
|
||||
|
||||
java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AddLeaderboard.java
Executable
+33
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user