コード例 #1
0
ファイル: EventQueueTests.cs プロジェクト: scottwis/eddie
        public void EventPumpQueueLength(int numberOfProducers, bool producerDelay)
        {
            EventQueue q = new EventQueue();
            EventProducer[] producers = new EventProducer[numberOfProducers];
            for (int i = 0; i < numberOfProducers; i++)
            {
                producers[i] = new EventProducer(q, i, producerDelay);
            }

            using (EventPump pump = new EventPump(NullListener.NULL, q, false))
            {
                pump.Name = "EventPumpQueueLength";
                pump.Start();

                foreach (EventProducer p in producers)
                {
                    p.ProducerThread.Start();
                }
                foreach (EventProducer p in producers)
                {
                    p.ProducerThread.Join();
                }
                pump.Stop();
            }
            Assert.That(q.Count, Is.EqualTo(0));

            foreach (EventProducer p in producers)
            {
                Console.WriteLine(
                    "#Events: {0}, MaxQueueLength: {1}", p.SentEventsCount, p.MaxQueueLength);
                Assert.IsNull(p.Exception, "{0}", p.Exception);
            }
        }
コード例 #2
0
 private static void WaitForPumpToStop(EventPump pump, int waitTime)
 {
     while (waitTime > 0 && pump.PumpState != EventPumpState.Stopped)
     {
         Thread.Sleep(100);
         waitTime -= 100;
     }
 }
コード例 #3
0
ファイル: EventQueueTests.cs プロジェクト: taoxiease/asegrp
 public void PumpAutoStopsOnRunFinished()
 {
     EventQueue q = new EventQueue();
     EventPump pump = new EventPump( NullListener.NULL, q, true );
     Assert.IsFalse( pump.Pumping, "Should not be pumping initially" );
     StartPump( pump, 1000 );
     Assert.IsTrue( pump.Pumping, "Pump failed to start" );
     q.Enqueue( new RunFinishedEvent( new Exception() ) );
     WaitForPumpToStop( pump, 1000 );
     Assert.IsFalse( pump.Pumping, "Pump failed to stop" );
 }
コード例 #4
0
ファイル: EventQueueTests.cs プロジェクト: taoxiease/asegrp
 public void PumpEvents()
 {
     EventQueue q = new EventQueue();
     EnqueueEvents( q );
     QueuingEventListener el = new QueuingEventListener();
     EventPump pump = new EventPump( el, q, false );
     Assert.IsFalse( pump.Pumping, "Should not be pumping initially" );
     StartPump( pump, 1000 );
     Assert.IsTrue( pump.Pumping, "Pump should still be running" );
     StopPump( pump, 1000 );
     Assert.IsFalse( pump.Pumping, "Pump should have stopped" );
     VerifyQueue( el.Events );
 }
コード例 #5
0
ファイル: EventQueueTests.cs プロジェクト: taoxiease/asegrp
 public void PumpEventsWithAutoStop()
 {
     EventQueue q = new EventQueue();
     EnqueueEvents( q );
     QueuingEventListener el = new QueuingEventListener();
     EventPump pump = new EventPump( el, q, true );
     pump.Start();
     int tries = 10;
     while( --tries > 0 && q.Count > 0 )
     {
         Thread.Sleep(100);
     }
     VerifyQueue( el.Events );
     Assert.IsFalse( pump.Pumping, "Pump failed to stop" );
 }
コード例 #6
0
        public void TracingEventListenerDoesNotDeadlock()
        {
            QueuingEventListener upstreamListener = new QueuingEventListener();
            EventQueue upstreamListenerQueue = upstreamListener.Events;

            // Install a TraceListener sending TestOutput events to the upstreamListener.
            // This simulates RemoteTestRunner.StartTextCapture, where TestContext installs such a TraceListener.
            TextWriter traceWriter = new EventListenerTextWriter(upstreamListener, TestOutputType.Trace);
            const string TraceListenerName = "TracingEventListenerDoesNotDeadlock";
            TraceListener feedingTraceToUpstreamListener = new TextWriterTraceListener(traceWriter, TraceListenerName);

            try
            {
                Trace.Listeners.Add(feedingTraceToUpstreamListener);

                // downstreamListenerToTrace simulates an EventListener installed e.g. by an Addin, 
                // which may call Trace within the EventListener methods:
                TracingEventListener downstreamListenerToTrace = new TracingEventListener();
                using (EventPump pump = new EventPump(downstreamListenerToTrace, upstreamListenerQueue, false))
                {
                    pump.Name = "TracingEventListenerDoesNotDeadlock";
                    pump.Start();

                    const int Repetitions = 10;
                    for (int i = 0; i < Repetitions; i++)
                    {
                        foreach (Event e in events)
                        {
                            Trace.WriteLine("Before sending {0} event.", e.GetType().Name);
                            e.Send(upstreamListener);
                            Trace.WriteLine("After sending {0} event.", e.GetType().Name);
                        }
                    }
                }
            }
            finally
            {
                Trace.Listeners.Remove(TraceListenerName);
                feedingTraceToUpstreamListener.Dispose();
            }
        }
コード例 #7
0
        public void PumpSynchronousAndAsynchronousEvents()
        {
            EventQueue q = new EventQueue();
            using (EventPump pump = new EventPump(NullListener.NULL, q, false))
            {
                pump.Name = "PumpSynchronousAndAsynchronousEvents";
                pump.Start();

                int numberOfAsynchronousEvents = 0;
                int sumOfAsynchronousQueueLength = 0;
                const int Repetitions = 2;
                for (int i = 0; i < Repetitions; i++)
                {
                    foreach (Event e in events)
                    {
                        q.Enqueue(e);
                        if (e.IsSynchronous)
                        {
                            Assert.That(q.Count, Is.EqualTo(0));
                        }
                        else
                        {
                            sumOfAsynchronousQueueLength += q.Count;
                            numberOfAsynchronousEvents++;
                        }
                    }
                }

                Console.WriteLine("Average queue length: {0}", (float)sumOfAsynchronousQueueLength / numberOfAsynchronousEvents);
            }
        }
コード例 #8
0
        public void PumpPendingEventsAfterAutoStop()
        {
            EventQueue q = new EventQueue();
            EnqueueEvents(q);
            Event[] eventsAfterStop =
            {
                new OutputEvent(new TestOutput("foo", TestOutputType.Out)),
                new OutputEvent(new TestOutput("bar", TestOutputType.Trace)),
            };
            foreach (Event e in eventsAfterStop)
            {
                q.Enqueue(e);
            }

            QueuingEventListener el = new QueuingEventListener();
            using (EventPump pump = new EventPump(el, q, true))
            {
                pump.Name = "PumpPendingEventsAfterAutoStop";
                pump.Start();
                int tries = 10;
                while (--tries > 0 && q.Count > 0)
                {
                    Thread.Sleep(100);
                }

                Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
            }
            Assert.That(el.Events.Count, Is.EqualTo(events.Length + eventsAfterStop.Length));
        }
コード例 #9
0
 public void PumpEventsWithAutoStop()
 {
      EventQueue q = new EventQueue();
     QueuingEventListener el = new QueuingEventListener();
     using (EventPump pump = new EventPump(el, q, true))
     {
         pump.Name = "PumpEventsWithAutoStop";
         pump.Start();
         EnqueueEvents(q);
         int tries = 10;
         while (--tries > 0 && q.Count > 0)
         {
             Thread.Sleep(100);
         }
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
     }
 }
コード例 #10
0
 public void PumpEvents()
 {
     EventQueue q = new EventQueue();
     QueuingEventListener el = new QueuingEventListener();
     using (EventPump pump = new EventPump(el, q, false))
     {
         pump.Name = "PumpEvents";
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
         StartPump(pump, 1000);
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Pumping));
         EnqueueEvents(q);
         StopPump(pump, 1000);
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
     }
     VerifyQueue(el.Events);
 }
コード例 #11
0
 public void PumpAutoStopsOnRunFinished()
 {
     EventQueue q = new EventQueue();
     using (EventPump pump = new EventPump(NullListener.NULL, q, true))
     {
         pump.Name = "PumpAutoStopsOnRunFinished";
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
         StartPump(pump, 1000);
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Pumping));
         q.Enqueue(new RunFinishedEvent(new Exception()));
         WaitForPumpToStop(pump, 1000);
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
     }
 }
コード例 #12
0
ファイル: EventQueueTests.cs プロジェクト: taoxiease/asegrp
 private void WaitForPumpToStop( EventPump pump, int waitTime )
 {
     while( waitTime > 0 && pump.Pumping )
     {
         Thread.Sleep( 10 );
         waitTime -= 10;
     }
 }
コード例 #13
0
ファイル: EventQueueTests.cs プロジェクト: taoxiease/asegrp
        private void StartPump( EventPump pump, int waitTime )
        {
            pump.Start();

            while( waitTime > 0 && !pump.Pumping )
            {
                Thread.Sleep( 10 );
                waitTime -= 10;
            }
        }
コード例 #14
0
ファイル: EventQueueTests.cs プロジェクト: taoxiease/asegrp
 public void StartAndStopPumpOnEmptyQueue()
 {
     EventPump pump = new EventPump( NullListener.NULL, new EventQueue(), false );
     StartPump( pump, 1000 );
     Assert.IsTrue( pump.Pumping, "Pump failed to start" );
     StopPump( pump, 1000 );
     Assert.IsFalse( pump.Pumping, "Pump failed to stop" );
 }
コード例 #15
0
 private static void StopPump(EventPump pump, int waitTime)
 {
     pump.Stop();
     WaitForPumpToStop(pump, waitTime);
 }
コード例 #16
0
 public void StartAndStopPumpOnEmptyQueue()
 {
     EventQueue q = new EventQueue();
     using (EventPump pump = new EventPump(NullListener.NULL, q, false))
     {
         pump.Name = "StartAndStopPumpOnEmptyQueue";
         StartPump(pump, 1000);
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Pumping));
         StopPump(pump, 1000);
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
     }
 }
コード例 #17
0
ファイル: EventQueueTests.cs プロジェクト: stantoxt/nunitv2
 private static void StopPump(EventPump pump, int waitTime)
 {
     pump.Stop();
     WaitForPumpToStop(pump, waitTime);
 }