public void DisposeAndStateDoesNotChangeAfterHartbeatTest()
        {
            var mocker = new AutoMocker();
            var serverIdentifier = new ServerIdentifier();

            mocker.Use(serverIdentifier);

            var options = new RaftOptions();
            options.Hartbeat.FromMilliseconds = 50;
            options.Hartbeat.ToMilliseconds = 50;

            var timer = new HartbeatTimer(options, mocker.Get<ILoggerFactory>(), serverIdentifier);
            var state = ServerStateType.Leader;

            var dispose = timer.Subscribe((s) =>
            {
                state = s;
            });

            dispose.Dispose();

            Thread.Sleep(100);

            Assert.Equal(ServerStateType.Leader, state);
        }
        public void SubscribeTest()
        {
            var mocker = new AutoMocker();

            var serverIdentifier = new ServerIdentifier();

            mocker.Use(serverIdentifier);

            var options = new RaftOptions();
            options.Hartbeat.FromMilliseconds = 0;
            options.Hartbeat.ToMilliseconds = 0;

            var timer = new HartbeatTimer(options, mocker.Get<ILoggerFactory>(), serverIdentifier);
            var state = ServerStateType.Leader;

            timer.Subscribe((s) =>
            {
                state = s;    
            });

            Thread.Sleep(100);

            Assert.Equal(ServerStateType.Candidate, state);
        }