Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
 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();
     }
 }
Beispiel #3
0
        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();
            }
        }
Beispiel #4
0
        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();
            }
        }