/// <summary>
        /// Request a responses from your service, this will invoke the request handler registered on your service as if it was called from another service.<br/>
        /// </summary>
        /// <param name="config">Request/Response Configuration</param>
        /// <param name="request">Request message</param>
        /// <typeparam name="TRequest">Type of Request Message</typeparam>
        /// <typeparam name="TResponse">Type of Response Message</typeparam>
        /// <returns>Response Message</returns>
        public TResponse Request <TRequest, TResponse>(RequestResponseConfig config, TRequest request)
        {
            var queue = _requestQueues.FirstOrDefault(q => q.Key == config.Name);

            var replyQueue = UniqueKeyUtility.Generate();

            if (queue.Value != null)
            {
                MockMessage(queue.Value, new RequestMessage
                {
                    MessageBody  = SerializeToJson(request),
                    RequestType  = typeof(TRequest).FullName,
                    ResponseType = typeof(TResponse).FullName,
                    Name         = config.Name,
                    ReplyQueue   = replyQueue
                }, true);

                // ReSharper disable once ImplicitlyCapturedClosure
                TimerUtility.WaitForIt(() => _responses.Any(r => r.ReplyQueue == replyQueue), Debugger.IsAttached ? 360000 : config.MillisecondsTimeout);
            }

            Thread.Sleep(100);

            var response = _responses.FirstOrDefault(r => r.ReplyQueue == replyQueue);

            return(JsonConvert.DeserializeObject <TResponse>(response?.MessageBody));
        }
        public void CanWaitForItWithoutTimeout()
        {
            const bool res = true;

            TimerUtility.WaitForIt(() => true);

            res.Should().BeTrue();
        }
        public void CanStartTask()
        {
            var i = 0;

            _cut.Start(() => ++ i, 10, new CancellationToken());
            TimerUtility.WaitForIt(() => i > 2, 100);
            _cut.Stop();
            i.Should().BeGreaterOrEqualTo(2);
        }
Example #4
0
        public void CanStartWithCancellationTokenTask()
        {
            var i = 0;

            _cut.Start(() => ++ i, new CancellationToken());
            TimerUtility.WaitForIt(() => i > 0, 100);
            _cut.IsCompleted.Should().BeTrue();
            i.Should().Be(1);
        }
Example #5
0
        public void CanStartTask()
        {
            var i = 0;

            _cut.Start(() => ++ i);
            TimerUtility.WaitForIt(() => i > 0, 100);
            _cut.IsCompleted.Should().BeTrue();
            i.Should().Be(1);
        }
        private void ExecuteHandler(Action <object, CancellationToken> messageHandler, bool multiThreadedHandler)
        {
            using (var cut = new QueueHandler(NullLogger.Instance, _queueFactory, _taskFactory))
            {
                cut.Start("MyQueue", true, LocaleQueueMode.TemporaryMaster, true, messageHandler, null, null, 100, multiThreadedHandler, false, _cancellationToken);

                // ReSharper disable once AccessToDisposedClosure
                TimerUtility.WaitForIt(() => cut.Idle, 6000);
            }
        }
        public void DeleteLocaleQueueShouldDeleteQueue()
        {
            var name = $"IntegrationTest_{UniqueKeyUtility.Generate()}";

            try
            {
                _messageQueueManager.Create(name, true, true);
                _messageQueueManager.Delete(name, true);
                TimerUtility.WaitForIt(() => !_messageQueueManager.Exists(name, true), 10000);
                _messageQueueManager.Exists(name, true).Should().BeFalse();
            }
            finally
            {
                _messageQueueManager.Delete(name, true);
            }
        }
        public void CanRestartHandler()
        {
            using (var cut = new QueueHandler(NullLogger.Instance, _queueFactory, _taskFactory))
            {
                cut.Start("MyQueue", true, LocaleQueueMode.TemporaryMaster, true, (m, c) => { c.WaitHandle.WaitOne(2000); }, null, null, 100, true, false, _cancellationToken);

                // ReSharper disable once AccessToDisposedClosure
                TimerUtility.WaitForIt(() => cut.Idle, 6000);

                cut.Stop();

                cut.Start("MyQueue", true, LocaleQueueMode.TemporaryMaster, true, (m, c) => { c.WaitHandle.WaitOne(2000); }, null, null, 100, true, false, _cancellationToken);

                // ReSharper disable once AccessToDisposedClosure
                TimerUtility.WaitForIt(() => cut.Idle, 6000);

                cut.Stop();
            }
        }
        /// <inheritdoc />
        public System.Messaging.MessageQueue Create(string name, bool privateQueue, bool transactional)
        {
            try
            {
                var queue = System.Messaging.MessageQueue.Create(Path(".", name, privateQueue), transactional);

                if (!TimerUtility.WaitForIt(() => Exists(".", name, privateQueue), privateQueue ? 1000 : 20000))
                {
                    throw new TimeoutException("Queue not created in time");
                }

                return(queue);
            }
            catch (Exception exception)
            {
                _logger.Information(exception, "Error Creating Message Queue {Name}", name);

                throw new QueueCreateException(name, privateQueue, exception);
            }
        }
        public void CanWaitForExpression()
        {
            var i = 0;

            TimerUtility.WaitForIt(() => { ++i; return(i > 2); }, 100).Should().BeTrue();
        }
 public void CanWaitForItWithoutTimeout()
 {
     TimerUtility.WaitForIt(() => true);
 }
 public void CanWaitForItTimeout()
 {
     TimerUtility.WaitForIt(() => false, 100).Should().BeFalse();
 }
 private void WaitForIt()
 {
     TimerUtility.WaitForIt(() => _pendingMessages == 0, Debugger.IsAttached ? 3600000 : 6000);
 }