diff --git a/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestsWriteEventToListener.cs b/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestsWriteEventToListener.cs index fd5ff41c332b60..ae33fb1b147c29 100644 --- a/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestsWriteEventToListener.cs +++ b/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestsWriteEventToListener.cs @@ -200,6 +200,78 @@ public unsafe void Test_WriteEvent_ArgsBasicTypes() #endregion + #region Validate "null" arguments + + log.EventS(null); + Assert.Equal(8, LoudListener.t_lastEvent.EventId); + Assert.Equal(1, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[0]); + + log.EventSS(null, null); + Assert.Equal(9, LoudListener.t_lastEvent.EventId); + Assert.Equal(2, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[0]); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[1]); + + log.EventSSS(null, null, null); + Assert.Equal(10, LoudListener.t_lastEvent.EventId); + Assert.Equal(3, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[0]); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[1]); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[2]); + + log.EventSI(null, 10); + Assert.Equal(11, LoudListener.t_lastEvent.EventId); + Assert.Equal(2, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[0]); + Assert.Equal(10, (int)LoudListener.t_lastEvent.Payload[1]); + + log.EventSL(null, 10); + Assert.Equal(12, LoudListener.t_lastEvent.EventId); + Assert.Equal(2, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[0]); + Assert.Equal(10, (long)LoudListener.t_lastEvent.Payload[1]); + + log.EventSII(null, 10, 11); + Assert.Equal(13, LoudListener.t_lastEvent.EventId); + Assert.Equal(3, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[0]); + Assert.Equal(10, (int)LoudListener.t_lastEvent.Payload[1]); + Assert.Equal(11, (int)LoudListener.t_lastEvent.Payload[2]); + + log.EventWithLongAndString(10, null); + Assert.Equal(43, LoudListener.t_lastEvent.EventId); + Assert.Equal(2, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal(10, (long)LoudListener.t_lastEvent.Payload[0]); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[1]); + + log.EventWithIntAndString(10, null); + Assert.Equal(42, LoudListener.t_lastEvent.EventId); + Assert.Equal(2, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal(10, (int)LoudListener.t_lastEvent.Payload[0]); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[1]); + + log.EventWithByteArray(null); + Assert.Equal(52, LoudListener.t_lastEvent.EventId); + Assert.Equal(1, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal(new byte[0], (byte[])LoudListener.t_lastEvent.Payload[0]); + + log.EventWithLongAndByteArray(10, null); + Assert.Equal(55, LoudListener.t_lastEvent.EventId); + Assert.Equal(2, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal(10, (long)LoudListener.t_lastEvent.Payload[0]); + Assert.Equal(new byte[0], (byte[])LoudListener.t_lastEvent.Payload[1]); + + log.EventWithFallbackArgs(null, 10, 11, 12); + Assert.Equal(56, LoudListener.t_lastEvent.EventId); + Assert.Equal(4, LoudListener.t_lastEvent.Payload.Count); + Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[0]); + Assert.Equal(10, (int)LoudListener.t_lastEvent.Payload[1]); + Assert.Equal(11, (float)LoudListener.t_lastEvent.Payload[2]); + Assert.Equal(12, (long)LoudListener.t_lastEvent.Payload[3]); + + #endregion + #region Validate DateTime Test_WriteEvent_ArgsBasicTypes_Etw_Validate_DateTime(log); #endregion diff --git a/src/libraries/System.Diagnostics.Tracing/tests/CustomEventSources/EventSourceTest.cs b/src/libraries/System.Diagnostics.Tracing/tests/CustomEventSources/EventSourceTest.cs index 7a6734e33ca3de..d50df9190a55a7 100644 --- a/src/libraries/System.Diagnostics.Tracing/tests/CustomEventSources/EventSourceTest.cs +++ b/src/libraries/System.Diagnostics.Tracing/tests/CustomEventSources/EventSourceTest.cs @@ -367,6 +367,18 @@ public unsafe void EventWithBytePointer(byte* ptr, int length) WriteEventCore(54, 1, &data); } + [Event(55)] + public unsafe void EventWithLongAndByteArray(long l, byte[] arr) + { + this.WriteEvent(55, l, arr); + } + + [Event(56)] + public unsafe void EventWithFallbackArgs(string str, int i, float f, long l) + { + this.WriteEvent(56, str, i, f, l); + } + #region Keywords / Tasks /Opcodes / Channels public class Keywords { diff --git a/src/tests/tracing/eventpipe/nullevent/ETWNullEvent.cs b/src/tests/tracing/eventpipe/nullevent/ETWNullEvent.cs new file mode 100644 index 00000000000000..5808c145225685 --- /dev/null +++ b/src/tests/tracing/eventpipe/nullevent/ETWNullEvent.cs @@ -0,0 +1,80 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using BasicEventSourceTests; +using Microsoft.Diagnostics.NETCore.Client; +using Microsoft.Diagnostics.Tracing; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.Tracing; +using System.Linq; +using System.Threading.Tasks; +using Tracing.Tests.Common; +using Xunit; + +[EventSource(Name = "Test.EventSourceNull")] +class EventSourceNullTest : EventSource +{ + [Event(1)] + public void EventNullString(string str, int i, float f, long l) + { + WriteEvent(1, str, i, f, l); + } + + [Event(2)] + public void EventNullByteArray(byte[] bytes, int i, float f, long l) + { + WriteEvent(2, bytes, i, f, l); + } +} + + +namespace Tracing.Tests.ETWNullEvent +{ + public class ProviderValidation + { + public static void Main(string[] args) + { + List providers = new List + { + new EventPipeProvider("Test.EventSourceNull", EventLevel.Verbose) + }; + + int processId = Process.GetCurrentProcess().Id; + DiagnosticsClient client = new DiagnosticsClient(processId); + using (EventPipeSession session = client.StartEventPipeSession(providers, /* requestRunDown */ false)) + { + + using (var log = new EventSourceNullTest()) + { + log.EventNullString(null, 10, 11, 12); + var events = new EventPipeEventSource(session.EventStream); + events.Process(); + // using (var el = new LoudListener(log)) + // { + // log.EventNullString(null, 10, 11, 12); + // Assert.Equal(1, LoudListener.t_lastEvent.EventId); + // Assert.Equal(4, LoudListener.t_lastEvent.Payload.Count); + // Assert.Equal("", (string)LoudListener.t_lastEvent.Payload[0]); + // Assert.Equal(10, (int)LoudListener.t_lastEvent.Payload[1]); + // Assert.Equal(11, (float)LoudListener.t_lastEvent.Payload[2]); + // Assert.Equal(12, (long)LoudListener.t_lastEvent.Payload[3]); + + // log.EventNullByteArray(null, 10, 11, 12); + // Assert.Equal(2, LoudListener.t_lastEvent.EventId); + // Assert.Equal(4, LoudListener.t_lastEvent.Payload.Count); + // Assert.Equal(new byte[0], (byte[])LoudListener.t_lastEvent.Payload[0]); + // Assert.Equal(10, (int)LoudListener.t_lastEvent.Payload[1]); + // Assert.Equal(11, (float)LoudListener.t_lastEvent.Payload[2]); + // Assert.Equal(12, (long)LoudListener.t_lastEvent.Payload[3]); + + // var events = new EventPipeEventSource(session.EventStream); + // events.Process(); + // } + session.Stop(); + } + } + } + } +} diff --git a/src/tests/tracing/eventpipe/nullevent/ETWNullEvent.csproj b/src/tests/tracing/eventpipe/nullevent/ETWNullEvent.csproj new file mode 100644 index 00000000000000..bfb5dda3397c11 --- /dev/null +++ b/src/tests/tracing/eventpipe/nullevent/ETWNullEvent.csproj @@ -0,0 +1,18 @@ + + + true + $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) + true + true + + + diagnostics_tracing;marshal-ilgen + + + + + + + + + \ No newline at end of file