Esempio n. 1
0
        public void DoNotStartElectionAfterDisposal()
        {
            // arrange
            var resetEvent = new ManualResetEvent(false);
            var timeout    = TimeSpan.FromMilliseconds(100);
            var configMock = new Mock <IServerConfiguration>();

            configMock.Setup(mocked => mocked.ElectionTimeout).Returns(timeout);
            var config     = configMock.Object;
            var scheduler  = new EventLoop();
            var serverMock = new Mock <IConsensusServerStateApi>();

            serverMock.Setup(mocked => mocked.StartElection()).Callback(() => resetEvent.Set());
            serverMock.Setup(mocked => mocked.Configuration).Returns(config);
            serverMock.Setup(mocked => mocked.Scheduler).Returns(scheduler);
            var server = serverMock.Object;
            var state  = new Follower(server);

            // act
            state.Start();
            state.Dispose();
            var changedToCandidate = resetEvent.WaitOne(timeout + timeout);

            // assert
            Assert.That(changedToCandidate, Is.False, "An election timout should not have occurred because the follower is disposed");

            // cleanup
            scheduler.Dispose();
            resetEvent.Dispose();
        }