public void ResponderWorkerScheduler_CurrentWorkerThreadCount_increased_when_busy()
        {
            var worker = new TestWorker(30);

            using (var scheduler = new ResponderWorkerScheduler(0, 1))
            {
                Assert.AreEqual(0, scheduler.CurrentWorkerThreadCount);

                scheduler.AddWorker(worker, new TestMessage(), null);

                worker.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentWorkerThreadCount);
            }
        }
        public void ResponderWorkerScheduler_CurrentWorkerThreadCount_not_decreased_when_back_idle_before_MaxIdleTime()
        {
            var worker = new TestWorker(30);

            using (var scheduler = new ResponderWorkerScheduler(0, 1, TimeSpan.FromMilliseconds(100)))
            {
                scheduler.AddWorker(worker, new TestMessage(), null);

                worker.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentWorkerThreadCount);

                worker.WaitCompleted(Timeout);
                Thread.Sleep(15);
                Assert.AreEqual(1, scheduler.CurrentWorkerThreadCount);
            }
        }
        public void ResponderWorkerScheduler_CurrentBusyThreadCount_decreased_when_back_idle()
        {
            var worker = new TestWorker(30);

            using (var scheduler = new ResponderWorkerScheduler(1, 1))
            {
                scheduler.AddWorker(worker, new TestMessage(), null);

                worker.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentBusyThreadCount);

                worker.WaitCompleted(Timeout);
                Thread.Sleep(15);
                Assert.AreEqual(0, scheduler.CurrentBusyThreadCount);
            }
        }
        public void ResponderWorkerScheduler_CurrentWorkerThreadCount_increased_twice()
        {
            using (var scheduler = new ResponderWorkerScheduler(0, 2, TimeSpan.FromMilliseconds(1)))
            {
                Assert.AreEqual(0, scheduler.CurrentWorkerThreadCount);

                var worker1 = new TestWorker(10);
                scheduler.AddWorker(worker1, new TestMessage(), null);
                worker1.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentWorkerThreadCount);

                var worker2 = new TestWorker(10);
                scheduler.AddWorker(worker2, new TestMessage(), null);
                worker2.WaitStarted(Timeout);
                Assert.AreEqual(2, scheduler.CurrentWorkerThreadCount);
            }
        }
        public void ResponderWorkerScheduler_CurrentBusyThreadCount_increased_then_decreased_then_increased()
        {
            using (var scheduler = new ResponderWorkerScheduler(1, 1))
            {
                var worker1 = new TestWorker(30);
                scheduler.AddWorker(worker1, new TestMessage(), null);

                worker1.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentBusyThreadCount);

                worker1.WaitCompleted(Timeout);
                Thread.Sleep(10);
                Assert.AreEqual(0, scheduler.CurrentBusyThreadCount);

                var worker2 = new TestWorker(30);
                scheduler.AddWorker(worker2, new TestMessage(), null);

                worker2.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentBusyThreadCount);
            }
        }
        public void ResponderWorkerScheduler_CurrentWorkerThreadCount_increased_twice()
        {
            using (var scheduler = new ResponderWorkerScheduler(0, 2, TimeSpan.FromMilliseconds(1)))
            {
                Assert.AreEqual(0, scheduler.CurrentWorkerThreadCount);

                var worker1 = new TestWorker(10);
                scheduler.AddWorker(worker1, new TestMessage(), null);
                worker1.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentWorkerThreadCount);

                var worker2 = new TestWorker(10);
                scheduler.AddWorker(worker2, new TestMessage(), null);
                worker2.WaitStarted(Timeout);
                Assert.AreEqual(2, scheduler.CurrentWorkerThreadCount);
            }
        }
        public void ResponderWorkerScheduler_CurrentWorkerThreadCount_not_decreased_when_back_idle_before_MaxIdleTime()
        {
            var worker = new TestWorker(30);
            using (var scheduler = new ResponderWorkerScheduler(0, 1, TimeSpan.FromMilliseconds(100)))
            {
                scheduler.AddWorker(worker, new TestMessage(), null);

                worker.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentWorkerThreadCount);

                worker.WaitCompleted(Timeout);
                Thread.Sleep(15);
                Assert.AreEqual(1, scheduler.CurrentWorkerThreadCount);
            }
        }
        public void ResponderWorkerScheduler_CurrentWorkerThreadCount_increased_when_busy()
        {
            var worker = new TestWorker(30);
            using (var scheduler = new ResponderWorkerScheduler(0, 1))
            {
                Assert.AreEqual(0, scheduler.CurrentWorkerThreadCount);

                scheduler.AddWorker(worker, new TestMessage(), null);

                worker.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentWorkerThreadCount);
            }
        }
        public void ResponderWorkerScheduler_CurrentBusyThreadCount_increased_then_decreased_then_increased()
        {
            using (var scheduler = new ResponderWorkerScheduler(1, 1))
            {
                var worker1 = new TestWorker(30);
                scheduler.AddWorker(worker1, new TestMessage(), null);

                worker1.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentBusyThreadCount);

                worker1.WaitCompleted(Timeout);
                Thread.Sleep(10);
                Assert.AreEqual(0, scheduler.CurrentBusyThreadCount);

                var worker2 = new TestWorker(30);
                scheduler.AddWorker(worker2, new TestMessage(), null);

                worker2.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentBusyThreadCount);
            }
        }
        public void ResponderWorkerScheduler_CurrentBusyThreadCount_decreased_when_back_idle()
        {
            var worker = new TestWorker(30);
            using (var scheduler = new ResponderWorkerScheduler(1, 1))
            {
                scheduler.AddWorker(worker, new TestMessage(), null);

                worker.WaitStarted(Timeout);
                Assert.AreEqual(1, scheduler.CurrentBusyThreadCount);

                worker.WaitCompleted(Timeout);
                Thread.Sleep(15);
                Assert.AreEqual(0, scheduler.CurrentBusyThreadCount);
            }
        }