public static IDisposable StartRandomlyCrashing(this Node[] nodes, Subject<IEnumerable<Peer>> peerObservable, Random random, IScheduler scheduler = null)
 {
     return Observable.Interval(new TimeSpan(TestNode.ElectionTimeout.Ticks*7), scheduler ?? Scheduler.Default)
                      .Subscribe(o =>
                                 {
                                     nodes.Start();
                                     var nodeIndexToRemove = random.Next(0, nodes.Count());
                                     Console.WriteLine(string.Format("Removing Node at index {0}", nodeIndexToRemove));
                                     var id = nodes[nodeIndexToRemove].Id;
                                     nodes[nodeIndexToRemove] = new TestNode(new NodeSettings(id, TestNode.ElectionTimeout, TestNode.HeartBeatTimeout, peerObservable, scheduler));
                                     peerObservable.OnNext(nodes.Where(n => n.Id != id).Select(n => n.AsPeer()));
                                 },
                                 e => Debug.WriteLine(e.Message));
 }
Example #2
0
 public async Task all_nodes_start_as_followers()
 {
     TestNode.CreateCluster().ForEach(n => n.State.Should().Be(State.Follower));
 }
Example #3
0
        public async Task nodes_do_not_add_themselves_as_peers()
        {
            var nodes = TestNode.CreateCluster();

            nodes.ForEach(n => n.GetPeerIds().Should().NotContain(p => p == n.Id));
        }
        public async Task Nodes_start_as_followers()
        {
            var nodes = TestNode.CreateCluster();

            nodes.Count(n => n.State == State.Follower).Should().Be(3);
        }