public void TestExecuteAndForget()
        {
            var command   = new MockCommand(true);
            var processor = new MockCommandProcessor();

            processor.Init(Assert.IsNull);
            processor.ExecuteAndForget(1, command);
            Assert.IsTrue(SpinWaitHelper.SpinWaitForCondition(() => command.CurrentState == false, 500));
            //new state should be false
        }
 public void TestRun_With_Exception_OnCompleted()
 {
     using (var target = new ConsumerWorker <int, int>())
     {
         Exception newEx = null;
         target.Init((k, i) => { }, ex => newEx = ex);
         var q = new MockQueue {
             1
         };
         target.Run(q, w => { throw new ApplicationException("Test Exception"); });
         Assert.IsTrue(SpinWaitHelper.SpinWaitForCondition(() => newEx != null, 1000));
         Assert.IsInstanceOfType(newEx, typeof(ApplicationException));
     }
 }
示例#3
0
        public void TryAcceptWorkerMock()
        {
            var worker       = new MockWorker();
            var completed    = new ManualResetEventSlim(false);
            var dequeueCount = new CountdownEvent(1);
            var target       = new ConsumerQueue <int, int>(11, w =>
            {
                Assert.AreSame(worker, w);
                completed.Set();
            }, q => dequeueCount.Signal()); //test that correct instance passed

            target.Add(1);
            Task task = Task.Factory.StartNew(() => target.TryAcceptWorker(worker));

            Assert.IsTrue(SpinWaitHelper.SpinWaitForCondition(() => target.IsBusy, 1000));
            //should become busy when accept occurs
            task.Wait();
            Assert.IsTrue(dequeueCount.Wait(1000)); //completed should be called
            Assert.IsTrue(completed.Wait(1000));    //completed should be called
        }
示例#4
0
        private void Create_Add_AndWaitForCompletion(bool suspendWorkers)
        {
            const int itemsTotal = 20;
            const int consumersTotal = 20;
            using (var countdownConsumer = new CountdownEvent(itemsTotal))
            using (var countdownAdd = new CountdownEvent(itemsTotal))
            {
                using (var target = new MockTaskPool(() => (k, i) =>
                {
                    Assert.AreEqual(k, i);
                    countdownConsumer.Signal();
                },
                    (k, i) =>
                    {
                        Assert.AreEqual(k, i);
                        countdownAdd.Signal();
                    },
                    Assert.IsNull, consumersTotal, suspendWorkers, false, 1000))
                {
                    Assert.AreEqual(consumersTotal, target.PoolSize);

                    Task.Factory.StartNew(() =>
                    {
                        for (int i = 0; i < itemsTotal; i++)
                        {
                            target.Add(i, i);
                        }
                    });
                    Assert.IsTrue(SpinWaitHelper.SpinWaitForCondition(() => target.PendingRequests > 0, 1000));
                    Assert.IsTrue(countdownAdd.Wait(5000)); //should invoke add callback within timeout
                    Assert.IsTrue(countdownConsumer.Wait(5000)); //should invoke consumer within timeout

                    Assert.IsTrue(SpinWaitHelper.SpinWaitForCondition(() => target.IndexSize == itemsTotal, 1000));

                    Assert.IsTrue(SpinWaitHelper.SpinWaitForCondition(() => target.PoolSize == consumersTotal, 10000));

                    Assert.AreEqual(0, target.PendingRequests);
                }
            }
        }