public void RoundRobin()
        {
            var memberIds = new[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() };
            var lb        = new RoundRobinLoadBalancer();

            Assert.That(lb.Count, Is.EqualTo(0));
            Assert.Throws <InvalidOperationException>(() => lb.GetMember());

            lb.NotifyMembers(memberIds);
            Assert.That(lb.Count, Is.EqualTo(3));

            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[1]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[2]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[0]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[1]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[2]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[0]));

            memberIds = new[] { Guid.NewGuid(), Guid.NewGuid() };

            lb.NotifyMembers(memberIds);
            Assert.That(lb.Count, Is.EqualTo(2));

            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[1]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[0]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[1]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[0]));

            lb.NotifyMembers(new Guid[0]);
            Assert.That(lb.Count, Is.EqualTo(0));
            Assert.Throws <InvalidOperationException>(() => lb.GetMember());
        }
        public void RoundRobin()
        {
            var memberIds = new[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() };
            var lb        = new RoundRobinLoadBalancer();

            Assert.That(lb.Count, Is.EqualTo(0));
            Assert.That(lb.GetMember(), Is.EqualTo(Guid.Empty));

            lb.SetMembers(memberIds);
            Assert.That(lb.Count, Is.EqualTo(3));

            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[1]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[2]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[0]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[1]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[2]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[0]));

            memberIds = new[] { Guid.NewGuid(), Guid.NewGuid() };

            lb.SetMembers(memberIds);
            Assert.That(lb.Count, Is.EqualTo(2));

            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[1]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[0]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[1]));
            Assert.That(lb.GetMember(), Is.EqualTo(memberIds[0]));

            lb.SetMembers(new Guid[0]);
            Assert.That(lb.Count, Is.EqualTo(0));
            Assert.That(lb.GetMember(), Is.EqualTo(Guid.Empty));
        }