private void ProbeEvent(EventSchema eventSchema, EventSource source)
        {
            using (var listener = new ProbeEventListener(eventSchema, this))
            {
                try
                {
                    listener.EnableEvents(source, eventSchema.Level, eventSchema.Keywords);
                    MethodInfo method;
                    if (this.TryInvokeMethod(eventSchema, source, listener, out method))
                    {
                        if (listener.EventData == null)
                        {
                            throw new EventSourceAnalyzerException(string.Format(CultureInfo.CurrentCulture, Resources.EventSourceAnalyzerMissingWriteEventCallError, method.Name));
                        }

                        if (listener.Error != null)
                        {
                            throw listener.Error;
                        }
                    }
                }
                finally
                {
                    listener.DisableEvents(source);
                }
            }
        }
        public void Enqueue()
        {
            using (ProbeEventListener listener = new ProbeEventListener())
            {
                // arrange
                listener.EnableEvents(ProbeEventListenerEventSource.Log, EventLevel.Verbose);
                listener.EventSourceCreated += (sender, eventArgs) =>
                                               _output.WriteLine($"Created event source: {eventArgs.EventSource.Name}");

                // act
                ProbeEventListenerEventSource.Log.Foo("1");
                ProbeEventListenerEventSource.Log.Bar("2");
                ProbeEventListenerEventSource.Log.Foo("3");

                // assert
                Assert.Collection(listener.OrderedEvents,
                                  e =>
                {
                    Assert.Equal("Foo", e.EventName);
                    Assert.Equal("1", e.Payload.Single());
                },
                                  e =>
                {
                    Assert.Equal("Bar", e.EventName);
                    Assert.Equal("2", e.Payload.Single());
                },
                                  e =>
                {
                    Assert.Equal("Foo", e.EventName);
                    Assert.Equal("3", e.Payload.Single());
                });
            }
        }
 private void CheckEnableEvents(EventSource eventSource)
 {
     using (var listener = new ProbeEventListener())
     {
         //// EnableEvents will do a general validation pass
         listener.EnableEvents(eventSource, EventLevel.LogAlways);
         //// Restore source
         listener.DisableEvents(eventSource);
     }
 }
Example #4
0
        public void RunProcessDisabled()
        {
            using (var listener = new ProbeEventListener())
            {
                // act
                TestEventSource.Log.RunProcess(333);

                // assert
                Assert.Empty(listener.OrderedEvents);
            };
        }
Example #5
0
        public void ActivatingDisabled()
        {
            using (ProbeEventListener listener = new ProbeEventListener())
            {
                // act
                ProviderActivationEventSource.Log.Activating("Activating-Disabled");

                // assert
                Assert.Empty(listener.OrderedEvents);
            };
        }
Example #6
0
        public void NoInstanceDisabled()
        {
            using (ProbeEventListener listener = new ProbeEventListener())
            {
                // act
                ProviderActivationEventSource.Log.NoInstance("NoInstance-Disabled");

                // assert
                Assert.Empty(listener.OrderedEvents);
            };
        }
        public void CriticalFormatDisabled()
        {
            using (ProbeEventListener listener = new ProbeEventListener())
            {
                // act
                DefaultEventSource.Log.Critical("Critical-Format-{0}", "Disabled");

                // assert
                Assert.Empty(listener.OrderedEvents);
            };
        }
        public void WarningDisabled()
        {
            using (ProbeEventListener listener = new ProbeEventListener())
            {
                // act
                DefaultEventSource.Log.Warning("Warning-Message-Disabled");

                // assert
                Assert.Empty(listener.OrderedEvents);
            };
        }
        public void VerboseFormatDisabled()
        {
            using (ProbeEventListener listener = new ProbeEventListener())
            {
                // act
                DefaultEventSource.Log.Verbose("Verbose-Format-{0}", "Disabled");

                // assert
                Assert.Empty(listener.OrderedEvents);
            };
        }
        private bool TryInvokeMethod(EventSchema eventSchema, EventSource source, ProbeEventListener listener, out MethodInfo method)
        {
            //// Find the method that matches event id or task name
            method = this.GetMethodFromSchema(source, eventSchema);

            if (method != null)
            {
                try
                {
                    // Call with default values to perform all checks but order
                    ParameterInfo[] parameters    = method.GetParameters();
                    object[]        defaultValues = parameters.Select(p => p.ParameterType.Default()).ToArray();
                    method.Invoke(source, defaultValues);

                    if (listener.Error == null && !this.ExcludeWriteEventTypeOrder)
                    {
                        // Invoke the method at most N-1 times, where N == params count.
                        for (int i = 0; i < parameters.Length - 1; i++)
                        {
                            listener.TypeOrderOffset = i;
                            defaultValues[i]         = parameters[i].ParameterType.NotDefault();
                            method.Invoke(source, defaultValues);
                            if (listener.Error != null)
                            {
                                break;
                            }
                        }
                    }

                    return(true);
                }
                catch (ArgumentException e)
                {
                    throw new EventSourceAnalyzerException(string.Format(CultureInfo.CurrentCulture, Resources.EventSourceAnalyzerMethodCallError, method.Name), e);
                }
            }

            return(false);
        }
        private bool TryInvokeMethod(EventSchema eventSchema, EventSource source, ProbeEventListener listener, out MethodInfo method)
        {
            //// Find the method that matches event id or task name
            method = this.GetMethodFromSchema(source, eventSchema);

            if (method != null)
            {
                try
                {
                    // Call with default values to perform all checks but order
                    ParameterInfo[] parameters = method.GetParameters();
                    object[] defaultValues = parameters.Select(p => p.ParameterType.Default()).ToArray();
                    method.Invoke(source, defaultValues);

                    if (listener.Error == null && !this.ExcludeWriteEventTypeOrder)
                    {
                        // Invoke the method at most N-1 times, where N == params count.
                        for (int i = 0; i < parameters.Length - 1; i++)
                        {
                            listener.TypeOrderOffset = i;
                            defaultValues[i] = parameters[i].ParameterType.NotDefault();
                            method.Invoke(source, defaultValues);
                            if (listener.Error != null)
                            {
                                break;
                            }
                        }
                    }

                    return true;
                }
                catch (ArgumentException e)
                {
                    throw new EventSourceAnalyzerException(string.Format(CultureInfo.CurrentCulture, Properties.Resources.EventSourceAnalyzerMethodCallError, method.Name), e);
                }
            }

            return false;
        }
        private void ProbeEvent(EventSchema eventSchema, EventSource source)
        {
            using (var listener = new ProbeEventListener(eventSchema, this))
            {
                try
                {
                    listener.EnableEvents(source, eventSchema.Level, eventSchema.Keywords);
                    MethodInfo method;
                    if (this.TryInvokeMethod(eventSchema, source, listener, out method))
                    {
                        if (listener.EventData == null)
                        {
                            throw new EventSourceAnalyzerException(string.Format(CultureInfo.CurrentCulture, Properties.Resources.EventSourceAnalyzerMissingWriteEventCallError, method.Name));
                        }

                        if (listener.Error != null)
                        {
                            throw listener.Error;
                        }
                    }
                }
                finally
                {
                    listener.DisableEvents(source);
                }
            }
        }
 private void CheckEnableEvents(EventSource eventSource)
 {
     using (var listener = new ProbeEventListener())
     {
         //// EnableEvents will do a general validation pass
         listener.EnableEvents(eventSource, EventLevel.LogAlways);
         //// Restore source
         listener.DisableEvents(eventSource);
     }
 }