void GivenAWorkingWorkBalancer_WhenItStopWorking_ThenTheWorkersAreNotWorking()
        {
            List <DummyWorker> ListWorker = new List <DummyWorker>();

            ListWorker.Add(new DummyWorker());

            Server.WorkBalancer TestWorkBalancer = new Server.WorkBalancer(ListWorker.ToArray());
            TestWorkBalancer.StartWorking();
            TestWorkBalancer.StopWorking();
            Assert.False(ListWorker[0].DummyIsWorking);
            Assert.False(ListWorker[0].IsWorking());
        }
        void GivenAWorkingWorkBalancerWithIdleWorkers_WhenAWorkerDies_ThenItsWorkIsShared()
        {
            List <DummyWorker> ListWorker = new List <DummyWorker>();

            for (int W = 0; W < 2; W++)
            {
                ListWorker.Add(new DummyWorker("Dummy work"));
            }

            Server.WorkBalancer TestWorkBalancer = new Server.WorkBalancer(ListWorker.ToArray());
            TestWorkBalancer.StartWorking();
            ListWorker[0].DummyIsAlive = false;
            while (ListWorker[1].DummyListWorkToDo.Count == 1)
            {
                ;
            }
            Assert.Equal(2, ListWorker[1].DummyListWorkToDo.Count);
        }
        void GivenAWorkingWorkBalancerWithIdleWorkers_WhenAWorkerDies_ThenAnotherWorkerTakesItsPlace()
        {
            List <DummyWorker> ListWorker = new List <DummyWorker>();

            for (int W = 0; W < 15; W++)
            {
                ListWorker.Add(new DummyWorker());
            }

            Server.WorkBalancer TestWorkBalancer = new Server.WorkBalancer(ListWorker.ToArray());
            Assert.Equal(10, TestWorkBalancer.ActiveWorkersCount);
            Assert.Equal(5, TestWorkBalancer.IdleWorkersCount);
            TestWorkBalancer.StartWorking();
            ListWorker[0].DummyIsAlive = false;
            while (TestWorkBalancer.IdleWorkersCount == 5)
            {
                ;
            }
            Assert.Equal(10, TestWorkBalancer.ActiveWorkersCount);
            Assert.Equal(4, TestWorkBalancer.IdleWorkersCount);
            Assert.Equal(1, TestWorkBalancer.DeadWorkersCount);
        }
        void GivenAWorkingWorkBalancerWithNoIdleWorkers_WhenAWorkerDies_ThenTheRemaining4KeepWorking()
        {
            List <DummyWorker> ListWorker = new List <DummyWorker>();

            for (int W = 0; W < 5; W++)
            {
                ListWorker.Add(new DummyWorker());
            }

            Server.WorkBalancer TestWorkBalancer = new Server.WorkBalancer(ListWorker.ToArray());
            Assert.Equal(5, TestWorkBalancer.ActiveWorkersCount);
            Assert.Equal(0, TestWorkBalancer.IdleWorkersCount);
            TestWorkBalancer.StartWorking();
            ListWorker[0].DummyIsAlive = false;
            while (TestWorkBalancer.DeadWorkersCount == 0)
            {
                ;
            }
            Assert.Equal(4, TestWorkBalancer.ActiveWorkersCount);
            Assert.Equal(0, TestWorkBalancer.IdleWorkersCount);
            Assert.Equal(1, TestWorkBalancer.DeadWorkersCount);
        }