public void MockEtwProcessorStopsProcessingOnQueueEmptyAndStopProcessingWhenQueueEmptyFlagIsSet()
 {
     const string anySessionName = "session";
     int eventsProcessed = 0;
     int numEventsInjectedAfterProcess = 10;
     int numEventsInjectedBeforeProcess = 10;
     using (var processor = new MockETWProcessor(anySessionName))
     {
         processor.StopProcessingWhenQueueEmpty = true;
         for (int i = 0; i < numEventsInjectedBeforeProcess; i++)
         {
             processor.InjectEvent(new ETWEvent(new DateTime(), new Guid(), "", ushort.MaxValue, "", new byte(),
                                                EventKeywords.AuditFailure, EventLevel.Critical,
                                                EventOpcode.DataCollectionStart, new Guid(), 1, 1,
                                                new OrderedDictionary()));
         }
         processor.EventProcessed += ev => eventsProcessed++;
         processor.Process();
         for (int i = 0; i < numEventsInjectedAfterProcess; i++)
         {
             processor.InjectEvent(new ETWEvent(new DateTime(), new Guid(), "", ushort.MaxValue, "", new byte(),
                                                EventKeywords.AuditFailure, EventLevel.Critical,
                                                EventOpcode.DataCollectionStart, new Guid(), 1, 1,
                                                new OrderedDictionary()));
         }
     }
     Assert.AreEqual(numEventsInjectedBeforeProcess, eventsProcessed);
 }
        public void MockETWProcessorTriggersEndEventWithSessionNameAndEventCount()
        {
            const string anySessionName = "session";
            const long anyEventCount = 42;
            bool eventTriggered = false;

            using (var processor = new MockETWProcessor(anySessionName))
            {
                processor.EventProcessed += ev => { };
                processor.SessionEnd += (name, end, count, lostCount, unreadableCount) =>
                                        {
                                            Assert.AreEqual(anySessionName, name);
                                            Assert.AreEqual(anyEventCount, count);
                                            eventTriggered = true;
                                        };
                processor.ProcessAsync();
                for (int i = 0; i < anyEventCount; ++i)
                {
                    processor.InjectEvent(new ETWEvent(DateTime.Now, Guid.Empty, string.Empty, 0, string.Empty, 0,
                                                       EventKeywords.None,
                                                       EventLevel.Verbose, EventOpcode.Info, Guid.Empty, 0, 0, null));
                }
                processor.StopProcessing();
                Assert.IsTrue(eventTriggered);
            }
        }
        public void MockETWProcessWaitsForTaskToEnd()
        {
            const string anySessionName = "session";
            bool eventTriggered = false;

            using (var processor = new MockETWProcessor(anySessionName))
            {
                processor.EventProcessed += ev => eventTriggered = true;
                processor.SubscribeToEvents(TestLogger.Write, EventLevel.Verbose);

                var t = new Task(processor.Process);
                t.Start();
                while (t.Status != TaskStatus.Running) // we must wait for the task to actually start
                {
                    Thread.Sleep(10);
                }
                TestLogger.Write.String("Hi");
                processor.StopProcessing();
                t.Wait();
                Assert.IsTrue(eventTriggered);
            }
        }
        public void MockETWProcessorTriggersStartEventWithSessionName()
        {
            const string anySessionName = "session";
            bool eventTriggered = false;

            using (var processor = new MockETWProcessor(anySessionName))
            {
                processor.SessionStart += (name, start) =>
                                          {
                                              Assert.AreEqual(anySessionName, name);
                                              eventTriggered = true;
                                          };
                processor.ProcessAsync();
                processor.StopProcessing();
                Assert.IsTrue(eventTriggered);
            }
        }
        public void MockETWProcessorTriggersForSubscribedEventSources()
        {
            const string anySessionName = "session";
            bool eventTriggered = false;

            using (var processor = new MockETWProcessor(anySessionName))
            {
                processor.EventProcessed += ev => eventTriggered = true;
                processor.SubscribeToEvents(TestLogger.Write, EventLevel.Verbose);

                processor.ProcessAsync();
                TestLogger.Write.String("Hi");
                processor.StopProcessing();
                Assert.IsTrue(eventTriggered);
            }
        }
        public void MockETWProcessorTriggersEventProcessedWithSameETWEventObjectPassedToInjectEvent()
        {
            const string anySessionName = "session";
            var anyEvent = new ETWEvent(DateTime.Now, Guid.Empty, string.Empty, 0, string.Empty, 0, EventKeywords.None,
                                        EventLevel.Verbose, EventOpcode.Info, Guid.Empty, 0, 0, null);
            bool eventTriggered = false;

            using (var processor = new MockETWProcessor(anySessionName))
            {
                processor.EventProcessed += ev =>
                                            {
                                                Assert.AreSame(anyEvent, ev);
                                                eventTriggered = true;
                                            };
                processor.ProcessAsync();
                processor.InjectEvent(anyEvent);
                processor.StopProcessing();
                Assert.IsTrue(eventTriggered);
            }
        }
 public EventSourceInjector(MockETWProcessor parentProcessor)
 {
     this.parentProcessor = parentProcessor;
 }
 public EventSourceInjector(MockETWProcessor parentProcessor)
 {
     this.parentProcessor = parentProcessor;
 }