public void WhenMessageReceivedAndNoHandlerRegistered_PromiseIsNotResolved() { var callbackHandlerStack = new CallbackHandlerStack(); var messageHub = new MessageHub(callbackHandlerStack, routerSocket.Object, registrationSocket.Object, localSocketFactory.Object, scaleOutConfigurationProvider.Object, securityProvider.Object, logger); try { var message = Message.CreateFlowStartMessage(new SimpleMessage()); var callback = CallbackPoint.Create <NullMessage>(); var promise = messageHub.EnqueueRequest(message, callback); var callbackMessage = Message.Create(new NullMessage()).As <Message>(); var nonExistingCallbackKey = -1L; callbackMessage.RegisterCallbackPoint(Guid.NewGuid().ToByteArray(), Guid.NewGuid().ToByteArray(), callback.MessageIdentifiers, nonExistingCallbackKey); receivingSocket.SetupMessageReceived(callbackMessage, ReceiveMessageDelay); // messageHub.Start(); ReceiveMessageCompletionDelay.Sleep(); // Assert.IsFalse(promise.GetResponse().Wait(AsyncOpCompletionDelay)); } finally { messageHub.Stop(); } }
public void EnqueueRequest_RegistersMessageAndExceptionHandlers() { try { messageHub.Start(); var message = Message.CreateFlowStartMessage(new SimpleMessage()); var callback = CallbackPoint.Create <SimpleMessage>(); // messageHub.EnqueueRequest(message, callback); AsyncOpCompletionDelay.Sleep(); // callbackHandlerStack.Verify(m => m.Push(It.IsAny <IPromise>(), It.Is <IEnumerable <MessageIdentifier> >(en => ContainsMessageAndExceptionRegistrations(en))), Times.Once); } finally { messageHub.Stop(); } }
public void WhenExceptionMessageReceived_PromiseThrowsException() { var callbackHandlerStack = new CallbackHandlerStack(); var messageHub = new MessageHub(callbackHandlerStack, routerSocket.Object, registrationSocket.Object, localSocketFactory.Object, scaleOutConfigurationProvider.Object, securityProvider.Object, logger); try { var message = Message.CreateFlowStartMessage(new SimpleMessage()); var callback = CallbackPoint.Create <NullMessage>(); var promise = messageHub.EnqueueRequest(message, callback); var errorMessage = Guid.NewGuid().ToString(); var exception = Message.Create(new ExceptionMessage { Exception = new Exception(errorMessage) }).As <Message>(); exception.RegisterCallbackPoint(Guid.NewGuid().ToByteArray(), Guid.NewGuid().ToByteArray(), callback.MessageIdentifiers, promise.CallbackKey.Value); receivingSocket.SetupMessageReceived(exception, ReceiveMessageDelay); // messageHub.Start(); ReceiveMessageCompletionDelay.Sleep(); // Assert.Throws <AggregateException>(() => { var _ = promise.GetResponse().Result; }, errorMessage); } finally { messageHub.Stop(); } }
public void WhenResultMessageIsDelivered_PromiseIsDisposedAndItsCallbackIsRemoved() { var callbackHandlerStack = new CallbackHandlerStack(); var messageHub = new MessageHub(callbackHandlerStack, routerSocket.Object, registrationSocket.Object, localSocketFactory.Object, scaleOutConfigurationProvider.Object, securityProvider.Object, logger); try { var message = Message.CreateFlowStartMessage(new SimpleMessage()); var callback = CallbackPoint.Create <NullMessage>(); var promise = messageHub.EnqueueRequest(message, callback); var callbackMessage = Message.Create(new NullMessage()).As <Message>(); callbackMessage.RegisterCallbackPoint(Guid.NewGuid().ToByteArray(), Guid.NewGuid().ToByteArray(), callback.MessageIdentifiers, promise.CallbackKey.Value); receivingSocket.SetupMessageReceived(callbackMessage, ReceiveMessageDelay); // messageHub.Start(); ReceiveMessageCompletionDelay.Sleep(); // Assert.IsNull(callbackHandlerStack.Pop(new CallbackHandlerKey { Version = callback.MessageIdentifiers.Single().Version, Identity = callback.MessageIdentifiers.Single().Identity, Partition = callback.MessageIdentifiers.Single().Partition, CallbackKey = promise.CallbackKey.Value })); } finally { messageHub.Stop(); } }