diff --git a/src/TraceEvent/DynamicTraceEventParser.cs b/src/TraceEvent/DynamicTraceEventParser.cs index 1f80e3cf1..b8e97bb89 100644 --- a/src/TraceEvent/DynamicTraceEventParser.cs +++ b/src/TraceEvent/DynamicTraceEventParser.cs @@ -1353,7 +1353,6 @@ public PayloadFetch(ushort offset, RegisteredTraceEventParser.TdhInputType inTyp Size = 1; break; case RegisteredTraceEventParser.TdhInputType.Int16: - case RegisteredTraceEventParser.TdhInputType.UInt16: Size = 2; if (outType == 1) // Encoding for String { @@ -1362,18 +1361,33 @@ public PayloadFetch(ushort offset, RegisteredTraceEventParser.TdhInputType inTyp } Type = typeof(short); break; + case RegisteredTraceEventParser.TdhInputType.UInt16: + Size = 2; + if (outType == 1) // Encoding for String + { + Type = typeof(char); + break; + } + Type = typeof(ushort); + break; case RegisteredTraceEventParser.TdhInputType.Int32: - case RegisteredTraceEventParser.TdhInputType.UInt32: case RegisteredTraceEventParser.TdhInputType.HexInt32: Type = typeof(int); Size = 4; break; + case RegisteredTraceEventParser.TdhInputType.UInt32: + Type = typeof(uint); + Size = 4; + break; case RegisteredTraceEventParser.TdhInputType.Int64: - case RegisteredTraceEventParser.TdhInputType.UInt64: case RegisteredTraceEventParser.TdhInputType.HexInt64: Type = typeof(long); Size = 8; break; + case RegisteredTraceEventParser.TdhInputType.UInt64: + Type = typeof(ulong); + Size = 8; + break; case RegisteredTraceEventParser.TdhInputType.Float: Type = typeof(float); Size = 4; diff --git a/src/TraceEvent/TraceEvent.Tests/Parsing/PayloadFetchTests.cs b/src/TraceEvent/TraceEvent.Tests/Parsing/PayloadFetchTests.cs new file mode 100644 index 000000000..5d07bb4a6 --- /dev/null +++ b/src/TraceEvent/TraceEvent.Tests/Parsing/PayloadFetchTests.cs @@ -0,0 +1,81 @@ +using Microsoft.Diagnostics.Tracing.Parsers; +using System; +using Xunit; + +namespace TraceEventTests +{ + public class PayloadFetchTests + { + [Fact] + public void PayloadFetch_UInt16_ShouldBeUShort() + { + var payloadFetch = new Microsoft.Diagnostics.Tracing.Parsers.DynamicTraceEventData.PayloadFetch( + 0, + RegisteredTraceEventParser.TdhInputType.UInt16, + 0); + + Assert.Equal(typeof(ushort), payloadFetch.Type); + Assert.Equal((ushort)2, payloadFetch.Size); + } + + [Fact] + public void PayloadFetch_UInt32_ShouldBeUInt() + { + var payloadFetch = new Microsoft.Diagnostics.Tracing.Parsers.DynamicTraceEventData.PayloadFetch( + 0, + RegisteredTraceEventParser.TdhInputType.UInt32, + 0); + + Assert.Equal(typeof(uint), payloadFetch.Type); + Assert.Equal((ushort)4, payloadFetch.Size); + } + + [Fact] + public void PayloadFetch_UInt64_ShouldBeULong() + { + var payloadFetch = new Microsoft.Diagnostics.Tracing.Parsers.DynamicTraceEventData.PayloadFetch( + 0, + RegisteredTraceEventParser.TdhInputType.UInt64, + 0); + + Assert.Equal(typeof(ulong), payloadFetch.Type); + Assert.Equal((ushort)8, payloadFetch.Size); + } + + [Fact] + public void PayloadFetch_Int16_ShouldBeShort() + { + var payloadFetch = new Microsoft.Diagnostics.Tracing.Parsers.DynamicTraceEventData.PayloadFetch( + 0, + RegisteredTraceEventParser.TdhInputType.Int16, + 0); + + Assert.Equal(typeof(short), payloadFetch.Type); + Assert.Equal((ushort)2, payloadFetch.Size); + } + + [Fact] + public void PayloadFetch_Int32_ShouldBeInt() + { + var payloadFetch = new Microsoft.Diagnostics.Tracing.Parsers.DynamicTraceEventData.PayloadFetch( + 0, + RegisteredTraceEventParser.TdhInputType.Int32, + 0); + + Assert.Equal(typeof(int), payloadFetch.Type); + Assert.Equal((ushort)4, payloadFetch.Size); + } + + [Fact] + public void PayloadFetch_Int64_ShouldBeLong() + { + var payloadFetch = new Microsoft.Diagnostics.Tracing.Parsers.DynamicTraceEventData.PayloadFetch( + 0, + RegisteredTraceEventParser.TdhInputType.Int64, + 0); + + Assert.Equal(typeof(long), payloadFetch.Type); + Assert.Equal((ushort)8, payloadFetch.Size); + } + } +}