示例#1
0
        public void AllPeers_and_AllVotingPeers_can_be_persistantly_saved_and_loaded()
        {
            var cancellationTokenSource = new CancellationTokenSource();

            var path = "test" + Guid.NewGuid();

            try
            {
                var expectedAllVotingPeers = new List <string> {
                    "Node123", "Node1", "Node2", "NodeG", "NodeB", "NodeABC"
                };

                using (var options = StorageEnvironmentOptions.ForPath(path))
                {
                    using (var persistentState = new PersistentState("self", options, cancellationTokenSource.Token)
                    {
                        CommandSerializer = new JsonCommandSerializer()
                    })
                    {
                        var currentConfiguration = persistentState.GetCurrentTopology();
                        Assert.Empty(currentConfiguration.AllVotingNodes);

                        var currentTopology = new Topology(new Guid("355a589b-cadc-463d-a515-5add2ea47205"),
                                                           expectedAllVotingPeers.Select(x => new NodeConnectionInfo {
                            Name = x
                        }), Enumerable.Empty <NodeConnectionInfo>(), Enumerable.Empty <NodeConnectionInfo>());
                        persistentState.SetCurrentTopology(currentTopology, 1);
                    }
                }
                using (var options = StorageEnvironmentOptions.ForPath(path))
                {
                    using (var persistentState = new PersistentState("self", options, cancellationTokenSource.Token)
                    {
                        CommandSerializer = new JsonCommandSerializer()
                    })
                    {
                        var currentConfiguration = persistentState.GetCurrentTopology();
                        Assert.Equal(expectedAllVotingPeers.Count, currentConfiguration.AllVotingNodes.Count());
                        foreach (var nodeConnectionInfo in currentConfiguration.AllVotingNodes)
                        {
                            Assert.True(expectedAllVotingPeers.Contains(nodeConnectionInfo.Name));
                        }
                    }
                }
            }
            finally
            {
                new DirectoryInfo(path).Delete(true);
            }
        }