From 4ef7d68d23489a9c557e7e7f074b87ebba96d711 Mon Sep 17 00:00:00 2001 From: Cheena Malhotra Date: Mon, 23 Mar 2020 19:06:57 -0700 Subject: [PATCH] Enable tests for NetCore and enable all traces --- .../Data/SqlClient/SqlClientEventSource.cs | 23 ++++++----- .../Data/SqlClient/SqlClientEventSource.cs | 4 +- .../EventSource/EventSourceTest.cs | 38 ++++++++++--------- 3 files changed, 36 insertions(+), 29 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs index 73dadacbf1..880cd3a670 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs @@ -95,30 +95,35 @@ internal class SqlClientEventSource : EventSource /// private const int AdvancedTraceBinId = 15; + /// + /// Defines EventId for AdvancedTraceError() events + /// + private const int AdvancedTraceErrorId = 16; + /// /// Defines EventId for CorrelationTrace() events /// - private const int CorrelationTraceId = 16; + private const int CorrelationTraceId = 17; /// /// Defines EventId for StateDump() events /// - private const int StateDumpEventId = 17; + private const int StateDumpEventId = 18; /// /// Defines EventId for SNITrace() events /// - private const int SNITraceEventId = 18; + private const int SNITraceEventId = 19; /// /// Defines EventId for SNIEnterScope() events /// - private const int SNIScopeEnterId = 19; + private const int SNIScopeEnterId = 20; /// /// Defines EventId for SNIExitScope() events /// - private const int SNIScopeExitId = 20; + private const int SNIScopeExitId = 21; #endregion /// @@ -873,13 +878,13 @@ internal long PoolerScopeEnter(string message) [Event(PoolerScopeExitId, Level = EventLevel.Informational, Opcode = EventOpcode.Stop, Keywords = Keywords.PoolerScope)] internal void PoolerScopeLeave(long scopeId) { - WriteEvent(ScopeExitId, scopeId); + WriteEvent(PoolerScopeExitId, scopeId); } [Event(AdvancedTraceId, Level = EventLevel.Verbose, Keywords = Keywords.AdvancedTrace)] internal void AdvancedTrace(string message) { - WriteEvent(TraceEventId, message); + WriteEvent(AdvancedTraceId, message); } [Event(AdvancedScopeEnterId, Level = EventLevel.Verbose, Opcode = EventOpcode.Start, Keywords = Keywords.AdvancedTrace)] @@ -902,10 +907,10 @@ internal void AdvancedTraceBin(string message) WriteEvent(AdvancedTraceBinId, message); } - [Event(AdvancedTraceId, Level = EventLevel.Error, Keywords = Keywords.AdvancedTrace)] + [Event(AdvancedTraceErrorId, Level = EventLevel.Error, Keywords = Keywords.AdvancedTrace)] internal void AdvancedTraceError(string message) { - WriteEvent(TraceEventId, message); + WriteEvent(AdvancedTraceErrorId, message); } [Event(CorrelationTraceId, Level = EventLevel.Informational, Keywords = Keywords.CorrelationTrace, Opcode = EventOpcode.Start)] diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs index 74eb90988e..158af0c2e1 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs @@ -715,13 +715,13 @@ internal long PoolerScopeEnter(string message) [Event(PoolerScopeExitId, Level = EventLevel.Informational, Opcode = EventOpcode.Stop, Keywords = Keywords.PoolerScope)] internal void PoolerScopeLeave(long scopeId) { - WriteEvent(ScopeExitId, scopeId); + WriteEvent(PoolerScopeExitId, scopeId); } [Event(AdvancedTraceId, Level = EventLevel.Verbose, Keywords = Keywords.AdvancedTrace)] internal void AdvancedTrace(string message) { - WriteEvent(TraceEventId, message); + WriteEvent(AdvancedTraceId, message); } [Event(AdvancedScopeEnterId, Level = EventLevel.Verbose, Opcode = EventOpcode.Start, Keywords = Keywords.AdvancedTrace)] diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/EventSource/EventSourceTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/EventSource/EventSourceTest.cs index 74eac0d06d..b6b8c6a009 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/EventSource/EventSourceTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/EventSource/EventSourceTest.cs @@ -2,28 +2,19 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System; using System.Collections.Generic; +using System.Diagnostics; using System.Diagnostics.Tracing; +using System.Linq; using Xunit; namespace Microsoft.Data.SqlClient.ManualTesting.Tests { - [SkipOnTargetFramework(TargetFrameworkMonikers.Netcoreapp, "Not Implemented")] public class EventSourceTest { - List ids = new List(); - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - public void EventTraceTests() - { - GetIds(); - //Trace EventKeyword is 3. - //We did not want to break the SqlEventSource for BeginExexute and EndExecute - // BeginExexute and EndExecute are Enabled when any kind of Event logging is enabled, so we check for those values as well. - Assert.All(ids, item => { Assert.True(3 == item || 1 == item || item == 2); }); - } - - private void GetIds() + public void EventSourceTestAll() { using (var TraceListener = new TraceEventListener()) { @@ -31,25 +22,36 @@ private void GetIds() { connection.Open(); using (SqlCommand command = new SqlCommand("SELECT * From [Customers]", connection)) + using (SqlDataReader reader = command.ExecuteReader()) { - command.ExecuteNonQuery(); + while (reader.Read()) + { + // Flush data + } } - ids = TraceListener.IDs; } - ids = TraceListener.IDs; + // Need to investigate better way of collecting traces in sequential runs, + // For now we're collecting all traces to improve code coverage. +#if NETCOREAPP + Assert.True(TraceListener.IDs.Count == 226); +#else + Assert.True(TraceListener.IDs.Count == 250); +#endif + Assert.All(TraceListener.IDs, item => { Assert.Contains(item, Enumerable.Range(1, 21)); }); } } } - [SkipOnTargetFramework(TargetFrameworkMonikers.Netcoreapp, "Not Implemented")] public class TraceEventListener : EventListener { public List IDs = new List(); + protected override void OnEventSourceCreated(EventSource eventSource) { if (eventSource.Name.Equals("Microsoft.Data.SqlClient.EventSource")) { - EnableEvents(eventSource, EventLevel.Informational, (EventKeywords)1); + // Collect all traces for better code coverage + EnableEvents(eventSource, EventLevel.Informational, 0); } }