public void GetShouldReturnItemToAwaiterEvenIfFirstTryWasException() { int callCount = 0; string item; Mock.Arrange(() => _itemsContainer.TryGet(out item)) .DoInstead <OutAction <string> >((out string item2) => { callCount++; if (callCount == 3) { throw new Exception(); } if (_queue.Count == 0) { item2 = null; return(false); } item2 = _queue.Dequeue(); return(true); }).Returns <string>(o => o != null); var blockingPipe = new InfinityPipe <string>(_itemsContainer); var t1 = blockingPipe.ReceiveAsync(); Assert.Catch(() => blockingPipe.SendAsync("1").Wait()); Assert.AreEqual(TaskStatus.WaitingForActivation, t1.Status); blockingPipe.SendAsync("1").Wait(); Assert.AreEqual("1", t1.Result); }
public void ShouldReturnDifferentItemsToEachAwaitedClients() { var blockingPipe = new InfinityPipe <string>(_itemsContainer); var t1 = blockingPipe.ReceiveAsync(); var t2 = blockingPipe.ReceiveAsync(); blockingPipe.SendAsync("1").Wait(); blockingPipe.SendAsync("2").Wait(); Assert.AreEqual("1", t1.Result); Assert.AreEqual("2", t2.Result); }
public void GetShouldReturnItemImmediatlyWhenItemIsValid() { var blockingPipe = new InfinityPipe <string>(_itemsContainer); blockingPipe.SendAsync("1").Wait(); var t1 = blockingPipe.ReceiveAsync(); Assert.AreEqual("1", t1.Result); }
public void TestMethod2() { var exceptionHandler = Mock.Create <IExceptionHandler>(); Mock.Arrange(() => exceptionHandler.Handle(null)).IgnoreArguments().Returns <Exception>(o => { Console.WriteLine(o); return(true); }); var itemStore = new ItemStore(); var uniqueQueue = new ItemsQueueContainer <ItemWithDate>(); var infinityPipe = new InfinityPipe <ItemWithDate>(uniqueQueue); var dataflow = DataflowBuilder .StartFrom(infinityPipe) .ConvertItemsTo(o => new ScheduledTransmitterItem <int>(o.DateTime, o.Num, stopSchedule: o.Count == 4)) .TransmitWith(o => o.ScheduledTransmitter(new DateTimeProvider(), exceptionHandler)) .Transform(itemStore.GetItem) .BroadcastTo(t1 => t1.SendToTarget(new LoggingTarget <ItemWithDate>()), t2 => t2.Transform(o => { o.Count++; o.DateTime = DateTime.Now.AddSeconds(o.Num + 1); return(o); }) .RouteTo(condition => condition.Case(o => o.Count == 4) .BroadcastTo(t21 => t21.SendToTarget(new DeleteTarget(itemStore)), t22 => t22.SendToTarget(infinityPipe)), condition => condition.Default() .BroadcastTo(t21 => t21.SendToTarget(new UpdateTarget(itemStore)), t22 => t22.SendToTarget(infinityPipe)))) .Build(); dataflow.Start(); var items = itemStore.Load(); foreach (var item in items) { infinityPipe.SendAsync(item).Wait(); } Task.Delay(10000).Wait(); }
public void WhenSendBatchPipeShouldReturnItemToAwaiterOnlyWhenAllItemsInBatchWillBeAdded() { string receivedItem = null; int itemsContainerCount = -1; var blockingPipe = new InfinityPipe <string>(_itemsContainer); var t1 = blockingPipe.ReceiveAsync(); t1.ContinueWith(o => { receivedItem = o.Result; itemsContainerCount = _queue.Count; }, TaskContinuationOptions.ExecuteSynchronously); blockingPipe.SendAsync(new[] { "1", "2" }).Wait(); Assert.AreEqual("1", receivedItem); Assert.AreEqual(1, itemsContainerCount); }