public void TestRubTaskInNotLeaderState() { string lockId = "lockId"; // ReSharper disable once RedundantArgumentDefaultValue // ReSharper disable once RedundantArgumentNameForLiteralExpression var lockerMock = new LockerMock(isLeader: false, id: lockId, keeperId: LeaderAwareTaskRunner.GenerateLockKeeperId()); LeaderAwareTaskRunner runner = new LeaderAwareTaskRunner(lockerMock, lockId); runner.RunTaskOnLeader(() => Assert.True(false)); }
public void TestBecameALeader() { string lockId = "lockId"; int i = 0; // ReSharper disable once RedundantArgumentDefaultValue // ReSharper disable once RedundantArgumentNameForLiteralExpression var lockerMock = new LockerMock(isLeader: true, id: lockId, keeperId: LeaderAwareTaskRunner.GenerateLockKeeperId()); LeaderAwareTaskRunner runner = new LeaderAwareTaskRunner(lockerMock, lockId, 0); runner.RunTaskOnLeader(() => i++); Thread.Sleep(200); lockerMock.IsLeader = false; runner.RunTaskOnLeader(() => i++); Assert.AreEqual(1, i); Thread.Sleep(200); lockerMock.IsLeader = true; runner.RunTaskOnLeader(() => i++); Assert.AreEqual(2, i); }
static void Main(string[] args) { string lockId = "task1"; string connectionString = "mongodb://localhost/LeaderElectionTest"; using (var locker = new MongoDbPessimisticLocker(connectionString)) { var leaderAwareTaskRunner = new LeaderAwareTaskRunner(locker, lockId); var taskRunner = new TaskRunner(500, () => { leaderAwareTaskRunner.RunTaskOnLeader(() => { Console.WriteLine("task executed on a leader"); }); }); taskRunner.Start(); Console.ReadLine(); taskRunner.Stop(); } }