예제 #1
0
        public void Shutdown_ReleaseAfter1Second()
        {
            var msg1       = new DispatchEvent(new FakeEvent());
            var evt        = new ManualResetEvent(false);
            var context    = new FakeContext(X => Thread.Sleep(1000));
            var dispatcher = new AsyncHandler(2);

            dispatcher.HandleDownstream(context, msg1);
            dispatcher.Close();
        }
예제 #2
0
        public void Shutdown_NotReleased()
        {
            var msg1       = new DispatchEvent(new FakeEvent());
            var evt        = new ManualResetEvent(false);
            var context    = new FakeContext(X => evt.WaitOne());
            var dispatcher = new AsyncHandler(2);

            dispatcher.HandleDownstream(context, msg1);
            Assert.Throws <InvalidOperationException>(() => dispatcher.Close());

            evt.Set();

            // and expect the third to get running.
            Assert.True(context.Wait(TimeSpan.FromMilliseconds(100)));
        }
예제 #3
0
        public void ShutDown_NoMoreDispatching()
        {
            var dispatcher = new AsyncHandler(2);
            var command    = new FakeCommand();
            var state      = new DispatchCommand(command);
            var state2     = new DispatchCommand(new FakeCommand());
            var context    = new DownContext(null, null);

            // dispatch first and check that it's passed by properly
            dispatcher.HandleDownstream(context, state);
            Assert.True(context.WaitDown(TimeSpan.FromMilliseconds(50)));
            context.ResetDown();

            dispatcher.Close();

            dispatcher.HandleDownstream(context, state2);
            Assert.False(context.WaitDown(TimeSpan.FromMilliseconds(50)));
        }