Ejemplo n.º 1
0
        public void should_purge_dispatch_queues()
        {
            LoadAndStartDispatcher();

            var firstMessage = new ExecutableEvent {
                IsBlocking = true
            };

            Dispatch(firstMessage);

            firstMessage.HandleStarted.Wait(2.Seconds()).ShouldBeTrue();

            Dispatch(new ExecutableEvent());
            Dispatch(new ExecutableEvent());
            Dispatch(new ExecutableEvent());

            var dispatchQueue = _dispatchQueueFactory.DispatchQueues.ExpectedSingle(x => x.Name == DispatchQueueNameScanner.DefaultQueueName);

            dispatchQueue.QueueLength.ShouldEqual(3);

            var purgeCount = _messageDispatcher.Purge();

            purgeCount.ShouldEqual(3);
            dispatchQueue.QueueLength.ShouldEqual(0);

            firstMessage.Unblock();
        }
Ejemplo n.º 2
0
        public void should_purge_dispatch_queues()
        {
            _messageDispatcher.LoadMessageHandlerInvokers();

            var firstMessage = new ExecutableEvent {
                IsBlocking = true
            };

            Dispatch(firstMessage);

            firstMessage.HandleStarted.Wait(500.Milliseconds()).ShouldBeTrue();

            Dispatch(new ExecutableEvent());
            Dispatch(new ExecutableEvent());
            Dispatch(new ExecutableEvent());

            var dispatchQueue = _dispatchQueueFactory.DispatchQueues.ExpectedSingle();

            dispatchQueue.QueueLength.ShouldEqual(3);

            var purgeCount = _messageDispatcher.Purge();

            purgeCount.ShouldEqual(3);
            dispatchQueue.QueueLength.ShouldEqual(0);

            firstMessage.Unblock();
        }
Ejemplo n.º 3
0
        public void should_batch_messages()
        {
            _dispatchQueue.Start();

            var message0 = new ExecutableEvent {
                IsBlocking = true
            };

            EnqueueInvocation(message0);
            message0.HandleStarted.Wait(500.Milliseconds()).ShouldBeTrue();

            var invokedBatches = new List <List <IMessage> >();

            var messages = Enumerable.Range(0, 10)
                           .Select(x => new ExecutableEvent {
                Callback = i => invokedBatches.Add(i.Messages.ToList())
            })
                           .ToList();

            foreach (var message in messages)
            {
                EnqueueBatchedInvocation(message);
            }

            message0.Unblock();

            Wait.Until(() => invokedBatches.Count >= 1, 500.Milliseconds());

            var invokedBatch = invokedBatches.ExpectedSingle();

            invokedBatch.ShouldBeEquivalentTo(messages);
        }
Ejemplo n.º 4
0
        public void should_not_deliver_messages_until_started()
        {
            var executableEvent = new ExecutableEvent {
                IsBlocking = true
            };

            EnqueueInvocation(executableEvent);

            executableEvent.HandleStarted.Wait(100.Milliseconds()).ShouldBeFalse();

            _dispatchQueue.Start();

            executableEvent.HandleStarted.Wait(100.Milliseconds()).ShouldBeTrue();
            executableEvent.Unblock();
        }
Ejemplo n.º 5
0
        public void should_restart([Values] bool startDelivering)
        {
            _dispatchQueue.Start();
            _dispatchQueue.Stop();

            var message = new ExecutableEvent {
                IsBlocking = true
            };

            EnqueueInvocation(message);

            _dispatchQueue.Start();

            message.HandleStarted.Wait(5.Seconds()).ShouldBeTrue();
            message.Unblock(); // If we don't release the message the test will stay blocked
        }
Ejemplo n.º 6
0
        public void should_run_continuation_with_batch()
        {
            _dispatchQueue.Start();

            var firstMessage = new ExecutableEvent {
                IsBlocking = true
            };

            EnqueueInvocation(firstMessage);

            var dispatch1 = EnqueueBatchedInvocation(new ExecutableEvent());
            var dispatch2 = EnqueueBatchedInvocation(new ExecutableEvent());

            firstMessage.Unblock();

            dispatch1.Wait(500.Milliseconds()).ShouldBeTrue();
            dispatch2.Wait(500.Milliseconds()).ShouldBeTrue();
        }
Ejemplo n.º 7
0
        public void should_finish_current_invocation_before_stopping()
        {
            var message = new ExecutableEvent {
                IsBlocking = true
            };

            _dispatchQueue.Start();
            EnqueueInvocation(message);

            message.HandleStarted.Wait(500.Milliseconds()).ShouldBeTrue();

            var stopTask = Task.Run(() => _dispatchQueue.Stop());

            Thread.Sleep(100);
            stopTask.IsCompleted.ShouldBeFalse();

            Task.Run(() => message.Unblock());
            stopTask.Wait(500.Milliseconds()).ShouldBeTrue();
        }
        public void should_wait_for_dispatch_to_stop()
        {
            LoadAndStartDispatcher();

            var message = new ExecutableEvent {
                IsBlocking = true
            };

            Dispatch(message);

            message.HandleStarted.Wait(5.Seconds()).ShouldBeTrue();

            var stopTask = Task.Run(() => _messageDispatcher.Stop()).WaitForActivation();

            Thread.Sleep(200);
            stopTask.IsCompleted.ShouldBeFalse();

            message.Unblock();
            stopTask.Wait(5.Seconds()).ShouldBeTrue();
        }
        public void should_wait_for_dispatch_to_stop()
        {
            _messageDispatcher.LoadMessageHandlerInvokers();

            var message = new ExecutableEvent {
                IsBlocking = true
            };

            Dispatch(message);

            message.HandleStarted.Wait(500.Milliseconds()).ShouldBeTrue();

            var stopTask = Task.Run(() => _messageDispatcher.Stop());

            Thread.Sleep(200);
            stopTask.IsCompleted.ShouldBeFalse();

            message.Unblock();
            stopTask.Wait(500.Milliseconds()).ShouldBeTrue();
        }
Ejemplo n.º 10
0
        public void should_stop_processing_messages_after_stop()
        {
            var firstMessage = new ExecutableEvent {
                IsBlocking = true
            };

            EnqueueInvocation(firstMessage);

            var otherMessageTasks = new List <Task>();

            otherMessageTasks.Add(EnqueueInvocation(new ExecutableEvent {
                IsBlocking = true
            }));
            otherMessageTasks.Add(EnqueueInvocation(new ExecutableEvent {
                IsBlocking = true
            }));

            _dispatchQueue.Start();

            Thread.Sleep(50);

            otherMessageTasks.Add(EnqueueInvocation(new ExecutableEvent {
                IsBlocking = true
            }));
            otherMessageTasks.Add(EnqueueInvocation(new ExecutableEvent {
                IsBlocking = true
            }));

            var stopTask = Task.Run(() => _dispatchQueue.Stop());

            Wait.Until(() => _dispatchQueue.IsRunning == false, 500.Milliseconds());

            firstMessage.Unblock();

            stopTask.Wait(500.Milliseconds()).ShouldBeTrue();

            foreach (var otherMessageTask in otherMessageTasks)
            {
                otherMessageTask.IsCompleted.ShouldBeFalse();
            }
        }
Ejemplo n.º 11
0
        public async Task should_run_continuation_with_batch_error()
        {
            _dispatchQueue.Start();

            var firstMessage = new ExecutableEvent {
                IsBlocking = true
            };
            var _ = EnqueueInvocation(firstMessage);

            firstMessage.HandleStarted.Wait(5.Seconds()).ShouldBeTrue();

            var dispatch1 = EnqueueBatchedInvocation(new ExecutableEvent {
                Callback = x => Throw()
            });
            var dispatch2 = EnqueueBatchedInvocation(new ExecutableEvent());

            firstMessage.Unblock();

            (await dispatch1).Errors.ShouldNotBeEmpty();
            (await dispatch2).Errors.ShouldNotBeEmpty();
        }
Ejemplo n.º 12
0
        public void should_run_continuation_with_batch_error()
        {
            _dispatchQueue.Start();

            var firstMessage = new ExecutableEvent {
                IsBlocking = true
            };

            EnqueueInvocation(firstMessage);

            var dispatch1 = EnqueueBatchedInvocation(new ExecutableEvent {
                Callback = x => Throw()
            });
            var dispatch2 = EnqueueBatchedInvocation(new ExecutableEvent());

            firstMessage.Unblock();

            dispatch1.Wait(500.Milliseconds()).ShouldBeTrue();
            dispatch1.Result.Errors.ShouldNotBeEmpty();
            dispatch2.Wait(500.Milliseconds()).ShouldBeTrue();
            dispatch2.Result.Errors.ShouldNotBeEmpty();
        }
Ejemplo n.º 13
0
        public void should_purge()
        {
            _dispatchQueue.Start();

            var message = new ExecutableEvent {
                IsBlocking = true
            };

            EnqueueInvocation(message);

            message.HandleStarted.Wait(500.Milliseconds()).ShouldBeTrue();

            EnqueueInvocation(new ExecutableEvent());
            EnqueueInvocation(new ExecutableEvent());

            _dispatchQueue.QueueLength.ShouldEqual(2);

            _dispatchQueue.Purge();

            _dispatchQueue.QueueLength.ShouldEqual(0);

            message.Unblock();
        }