[U] public void EachViewSeesNextButSkipsTheDeadNode()
        {
            var seeds = Enumerable.Range(9200, NumberOfNodes).Select(p => new Node(new Uri("http://localhost:" + p))).ToList();

            seeds.First().MarkDead(DateTime.Now.AddDays(1));
            var pool = new StaticConnectionPool(seeds, randomize: false);

            for (var i = 0; i < 20; i++)
            {
                var node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9201);
                node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9202);
            }
            /** After we marked the first node alive again, we expect it to be hit again*/
            seeds.First().MarkAlive();
            for (var i = 0; i < 20; i++)
            {
                var node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9201);
                node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9202);
                node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9200);
            }
        }
        [U] public void ViewSeesResurrectedNodes()
        {
            var dateTimeProvider = new TestableDateTimeProvider();
            var seeds            = Enumerable.Range(9200, NumberOfNodes).Select(p => new Node(new Uri("http://localhost:" + p))).ToList();

            seeds.First().MarkDead(dateTimeProvider.Now().AddDays(1));
            var pool = new StaticConnectionPool(seeds, randomize: false, dateTimeProvider: dateTimeProvider);

            for (var i = 0; i < 20; i++)
            {
                var node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9201);
                node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9202);
            }

            /** If we roll the clock forward two days, the node that was marked
             * dead until tomorrow (or yesterday!) should be resurrected
             */
            dateTimeProvider.ChangeTime(d => d.AddDays(2));
            var n = pool.CreateView().First();

            n.Uri.Port.Should().Be(9201);
            n = pool.CreateView().First();
            n.Uri.Port.Should().Be(9202);
            n = pool.CreateView().First();
            n.Uri.Port.Should().Be(9200);
            n.IsResurrected.Should().BeTrue();
        }
        [U] public void EachViewSkipsAheadWithOne()
        {
            var seeds = Enumerable.Range(9200, NumberOfNodes).Select(p => new Node(new Uri("http://localhost:" + p))).ToList();
            var pool  = new StaticConnectionPool(seeds, randomize: false);

            for (var i = 0; i < 20; i++)
            {
                var node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9200);
                node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9201);
                node = pool.CreateView().First();
                node.Uri.Port.Should().Be(9202);
            }
        }