mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-02 18:33:54 +00:00
added test case for bug 723
This commit is contained in:
1 parent
f4928da853
commit
592f830b26
1 file changed
+64
+64
@@ -0,0 +1,64 @@
|
||||
package com.sap.sailing.server.replication.test;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.server.operationaltransformation.CreateFlexibleLeaderboard;
|
||||
import com.sap.sailing.server.replication.ReplicationMasterDescriptor;
|
||||
import com.sap.sailing.server.replication.impl.Replicator;
|
||||
|
||||
public class PrematureOperationReceiptTest extends AbstractServerReplicationTest {
|
||||
private Replicator replicator;
|
||||
private ReplicationServiceTestImpl replicationService;
|
||||
|
||||
/**
|
||||
* Drops the test DB. Sets up master and replica, starts the JMS message broker and registers the replica with the master.
|
||||
*/
|
||||
@Before
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
Pair<ReplicationServiceTestImpl, ReplicationMasterDescriptor> result = basicSetUp(true, /* master=null means create a new one */ null,
|
||||
/* replica=null means create a new one */ null);
|
||||
replicationService = result.getA();
|
||||
replicator = replicationService.startToReplicateFromButDontYetFetchInitialLoad(result.getB(), /* startReplicatorSuspended */ true);
|
||||
}
|
||||
|
||||
/**
|
||||
* If JMS replication starts and the initial load hasn't yet been fully received and installed into the server,
|
||||
* the JMS-transported operations may not yet be applicable on the replica's side. This test forces such a situation
|
||||
* by first creating a leaderboard, then starting the replication but holding back the fetching of the initial load,
|
||||
* then creates a race column in this leaderboard which will be sent as an operation through JMS to the replica which
|
||||
* hasn't yet received the initial load with the leaderboard. Trying to apply will fail unless the replicator is
|
||||
* started in suspended mode and resumed only after the initial load was successfully installed.
|
||||
*/
|
||||
@Test
|
||||
public void testRaceColumnInLeaderboardReplicationAfterInitialLoad() throws InterruptedException, ClassNotFoundException, IOException {
|
||||
final String leaderboardName = "My new leaderboard";
|
||||
final int[] discardThresholds = new int[] { 17, 23 };
|
||||
CreateFlexibleLeaderboard createTestLeaderboard = new CreateFlexibleLeaderboard(leaderboardName, discardThresholds);
|
||||
assertNull(master.getLeaderboardByName(leaderboardName));
|
||||
master.apply(createTestLeaderboard);
|
||||
final Leaderboard masterLeaderboard = master.getLeaderboardByName(leaderboardName);
|
||||
assertNotNull(masterLeaderboard);
|
||||
Thread.sleep(1000); // wait 1s for JMS to deliver the message and the message to be applied
|
||||
final Leaderboard nonExistingReplicaLeaderboard = replica.getLeaderboardByName(leaderboardName);
|
||||
assertNull(nonExistingReplicaLeaderboard); // because replicator is still suspended
|
||||
replicationService.initialLoad();
|
||||
replicator.setSuspended(false);
|
||||
synchronized (replicator) {
|
||||
while (!replicator.isQueueEmpty()) {
|
||||
replicator.wait();
|
||||
}
|
||||
}
|
||||
final Leaderboard replicaLeaderboard = replica.getLeaderboardByName(leaderboardName);
|
||||
assertNotNull(replicaLeaderboard);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user