public void TestAsyncActorResult_IsAddedToMessageCompletionQueue() { var messageCompletionQueue = new Mock<IAsyncQueue<AsyncMessageContext>>(); messageCompletionQueue.Setup(m => m.GetConsumingEnumerable(It.IsAny<CancellationToken>())) .Returns(new BlockingCollection<AsyncMessageContext>().GetConsumingEnumerable()); var actorHost = new ActorHost(socketFactory.Object, actorHandlersMap, messageCompletionQueue.Object, new AsyncQueue<IActor>(), routerConfiguration, messageTracer.Object, logger); actorHost.AssignActor(new EchoActor()); try { StartActorHost(actorHost); var delay = AsyncOp; var asyncMessage = new AsyncMessage {Delay = delay}; var messageIn = Message.CreateFlowStartMessage(asyncMessage, AsyncMessage.MessageIdentity); actorHostSocketFactory.GetRoutableSocket().DeliverMessage(messageIn); Thread.Sleep(AsyncOpCompletionDelay + AsyncOp); messageCompletionQueue.Verify(m => m.Enqueue(It.Is<AsyncMessageContext>(amc => IsAsyncMessage(amc)), It.IsAny<CancellationToken>()), Times.Once); messageCompletionQueue.Verify(m => m.GetConsumingEnumerable(It.IsAny<CancellationToken>()), Times.Once); } finally { actorHost.Stop(); } }
public void TestAsyncActorResult_IsSentAfterCompletion() { var actorHost = new ActorHost(socketFactory.Object, actorHandlersMap, new AsyncQueue<AsyncMessageContext>(), new AsyncQueue<IActor>(), routerConfiguration, messageTracer.Object, logger); actorHost.AssignActor(new EchoActor()); try { StartActorHost(actorHost); var delay = AsyncOp; var asyncMessage = new AsyncMessage {Delay = delay}; var messageIn = Message.CreateFlowStartMessage(asyncMessage, AsyncMessage.MessageIdentity); actorHostSocketFactory.GetRoutableSocket().DeliverMessage(messageIn); Thread.Sleep(AsyncOpCompletionDelay + AsyncOp); var messageOut = actorHostSocketFactory.GetAsyncCompletionSocket().GetSentMessages().BlockingLast(AsyncOpCompletionDelay); CollectionAssert.AreEqual(AsyncMessage.MessageIdentity, messageOut.Identity); Assert.AreEqual(delay, messageOut.GetPayload<AsyncMessage>().Delay); CollectionAssert.AreEqual(messageOut.CorrelationId, messageIn.CorrelationId); } finally { actorHost.Stop(); } }