public void TestMergeAllDirectoryEntries()
        {
            var registry = Join3Nodes();

            var leaderRegisteredNodesToMerge = new List <Node>();

            leaderRegisteredNodesToMerge.Add(NodeOf(1));
            leaderRegisteredNodesToMerge.Add(NodeOf(2));
            leaderRegisteredNodesToMerge.Add(NodeOf(4));

            var interest = new MockRegistryInterest();

            registry.RegisterRegistryInterest(interest);

            registry.MergeAllDirectoryEntries(leaderRegisteredNodesToMerge);

            Assert.Equal(1, interest.InformMergedAllDirectoryEntriesCheck);
            Assert.Equal(3, interest.LiveNodes.Count());    // 1, 2, 4
            Assert.Equal(2, interest.MergeResults.Count()); // 4 joined, 3 left

            var list = interest.MergeResults.ToList();

            var inspectable1 = list[0];
            var inspectable2 = list[1];

            Assert.Equal(IdOf(3), inspectable1.Node.Id);
            Assert.True(inspectable1.Left);

            Assert.Equal(IdOf(4), inspectable2.Node.Id);
            Assert.True(inspectable2.Joined);
        }
        public void TestPromoteElectedLeader()
        {
            var registry = Join3Nodes();

            var interest = new MockRegistryInterest();

            registry.RegisterRegistryInterest(interest);

            registry.Join(NodeOf(4));

            registry.DeclareLeaderAs(IdOf(3));

            Assert.Equal(1, interest.InformCurrentLeaderCheck);

            registry.PromoteElectedLeader(IdOf(4));

            Assert.Equal(1, interest.InformLeaderDemotedCheck);
            Assert.Equal(3, interest.InformCurrentLeaderCheck);
            Assert.Equal(4, registry.CurrentLeader.Id.Value);
        }