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)); } }
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 }
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); } } }