public void while_queue_is_busy_should_crash_with_timeout()
        {
            var consumer     = new WaitingConsumer(1);
            var busyQueue    = new QueuedHandler(consumer, "busy_test_queue", watchSlowMsg: false, threadStopWaitTimeout: TimeSpan.FromMilliseconds(100));
            var waitHandle   = new ManualResetEvent(false);
            var handledEvent = new ManualResetEvent(false);

            try
            {
                busyQueue.Start();
                busyQueue.Publish(new DeferredExecutionTestMessage(() =>
                {
                    handledEvent.Set();
                    waitHandle.WaitOne();
                }));

                handledEvent.WaitOne();
                Assert.Throws <TimeoutException>(() => busyQueue.Stop());
            }
            finally
            {
                waitHandle.Set();
                consumer.Wait();

                busyQueue.Stop();
                waitHandle.Dispose();
                handledEvent.Dispose();
                consumer.Dispose();
            }
        }
 public virtual void TearDown()
 {
     Queue.Stop();
     Queue = null;
     Consumer.Dispose();
     Consumer = null;
 }
        public void stoped_not_starting_server()
        {
            //GIVEN
            var controller = new SleepTestController1();
            var mainQueue  = new QueuedHandler(controller, "Main Queue", 1000);

            //WHEN
            mainQueue.Stop();
        }
        public void multiple_stoped()
        {
            //GIVEN
            var controller = new SleepTestController1();
            var mainQueue  = new QueuedHandler(controller, "Main Queue", 1000);

            mainQueue.Start();
            mainQueue.Enqueue(new QueuedTestMessage1());
            controller.MessageHandled();
            try
            {
                mainQueue.Stop();
            }
            catch (InvalidOperationException) { }

            //WHEN
            mainQueue.Stop();
        }
示例#5
0
 public void Stop()
 {
     if (_masterInputQueue != null)
     {
         _masterInputQueue.Stop();
     }
     foreach (var queue in _coreQueues)
     {
         queue.Value.Stop();
     }
 }
 protected override void Dispose(bool disposing)
 {
     if (!_disposed)
     {
         if (disposing)
         {
             SyncQueue?.Stop();
         }
         _disposed = true;
     }
     base.Dispose(disposing);
 }
        public void starting_stoped_server()
        {
            //GIVEN
            var mainQueue = new QueuedHandler(null, "Main Queue");

            mainQueue.Start();
            Thread.Sleep(1000);
            mainQueue.Stop();

            //WHEN
            mainQueue.Start();
        }
        public void throw_exception_on_timeout()
        {
            //GIVEN
            var controller = new SleepTestController1();
            var mainQueue  = new QueuedHandler(controller, "Main Queue", 1000);

            mainQueue.Start();
            mainQueue.Enqueue(new QueuedTestMessage1());

            //WHEN
            Assert.AreEqual(false, controller.MessageHandled());
            mainQueue.Stop();
        }
示例#9
0
 protected override void Dispose(bool disposing)
 {
     if (!_disposed)
     {
         if (disposing)
         {
             _isLive.Set();
             _running.Reset();
             SyncQueue?.Stop();
             _running.Dispose();
         }
         _disposed = true;
     }
     base.Dispose(disposing);
 }
示例#10
0
 public void Stop()
 {
     if (_subsystemStarted)
     {
         if (_masterInputQueue != null)
         {
             _masterInputQueue.Stop();
         }
         foreach (var queue in _coreQueues)
         {
             queue.Value.Stop();
         }
     }
     _subsystemStarted = false;
 }
        private void EnqueueMessage(Message message)
        {
            if (message is StorageMessage.IFlushableMessage)
            {
                Interlocked.Increment(ref FlushMessagesInQueue);
            }

            StorageWriterQueue.Publish(message);

            if (message is SystemMessage.BecomeShuttingDown) // we need to handle this message on main thread to stop StorageWriterQueue
            {
                StorageWriterQueue.Stop();
                BlockWriter = true;
                Bus.Publish(new SystemMessage.ServiceShutdown("StorageWriter"));
            }
        }