コード例 #1
0
        public void Follower_on_timeout_should_become_candidate()
        {
            var storageEnvironmentOptions = StorageEnvironmentOptions.CreateMemoryOnly();

            storageEnvironmentOptions.OwnsPagers = false;

            var nodeOptions = new RaftEngineOptions(new NodeConnectionInfo {
                Name = "real"
            }, storageEnvironmentOptions, _inMemoryTransportHub.CreateTransportFor("real"), new DictionaryStateMachine());

            PersistentState.SetTopologyExplicitly(nodeOptions,
                                                  new Topology(
                                                      new Guid("355a589b-cadc-463d-a515-5add2ea47205"),
                                                      new[]
            {
                new NodeConnectionInfo {
                    Name = "real"
                }, new NodeConnectionInfo {
                    Name = "u2"
                }, new NodeConnectionInfo {
                    Name = "pj"
                },
            }, new NodeConnectionInfo[0], new NodeConnectionInfo[0]), throwIfTopologyExists: true);
            storageEnvironmentOptions.OwnsPagers = true;

            using (var node = new RaftEngine(nodeOptions))
            {
                var timeoutEvent = new ManualResetEventSlim();
                node.StateTimeout += timeoutEvent.Set;

                ForceTimeout("real");

                timeoutEvent.Wait();
                Assert.Equal(RaftEngineState.Candidate, node.State);
            }
        }