public async Task ReportsHierarchicalActivities() { using (var module = new EtwTelemetryModule()) { var listeningRequest = new EtwListeningRequest(); listeningRequest.ProviderName = TestProvider.ProviderName; module.Sources.Add(listeningRequest); module.Initialize(GetTestTelemetryConfiguration()); for (int i = 0; i < 6; i += 2) { Parallel.For(0, 2, (idx) => { PerformActivityAsync(i + idx).GetAwaiter().GetResult(); }); } await this.WaitForItems(this.adapterHelper.Channel, 12).ConfigureAwait(false); ITelemetry[] capturedItems = this.adapterHelper.Channel.SentItems; TraceTelemetry requestStopEvent = capturedItems.OfType <TraceTelemetry>().FirstOrDefault((i) => i.Properties.TryGetValue("EventName", out string eventName) && string.Equals(eventName, "Request/Stop", StringComparison.Ordinal)); Assert.IsNotNull(requestStopEvent, "Request/Stop event not found"); Assert.IsTrue(requestStopEvent.Properties.TryGetValue("ActivityID", out string activityID), "Event does not have ActivityID property"); Assert.IsTrue(activityID.StartsWith("//", StringComparison.Ordinal), "The activity ID is not a hierarchical one"); } }
public async Task ReactsToConfigurationChanges() { using (var module = new EtwTelemetryModule()) { var listeningRequest = new EtwListeningRequest(); listeningRequest.ProviderName = TestProvider.ProviderName; module.Sources.Add(listeningRequest); module.Initialize(GetTestTelemetryConfiguration()); TestProvider.Log.Info("Hey!"); TestProvider.Log.Warning(1, 2); await this.WaitForItems(this.adapterHelper.Channel, 3).ConfigureAwait(false); // Now request reporting events only with certain keywords listeningRequest.Keywords = (ulong)TestProvider.Keywords.NonRoutine; module.Initialize(GetTestTelemetryConfiguration(resetChannel: false)); await Task.Delay(500).ConfigureAwait(false); TestProvider.Log.Info("Hey again!"); TestProvider.Log.Warning(3, 4); await this.WaitForItems(this.adapterHelper.Channel, 5).ConfigureAwait(false); List <TraceTelemetry> expectedTelemetry = new List <TraceTelemetry>(); TraceTelemetry traceTelemetry = new TraceTelemetry("Hey!", SeverityLevel.Information); traceTelemetry.Properties["information"] = "Hey!"; expectedTelemetry.Add(traceTelemetry); traceTelemetry = new TraceTelemetry("Warning!", SeverityLevel.Warning); traceTelemetry.Properties["i1"] = 1.ToString(InvariantCulture); traceTelemetry.Properties["i2"] = 2.ToString(InvariantCulture); expectedTelemetry.Add(traceTelemetry); // Note that second informational event is not expected traceTelemetry = new TraceTelemetry("Warning!", SeverityLevel.Warning); traceTelemetry.Properties["i1"] = 3.ToString(InvariantCulture); traceTelemetry.Properties["i2"] = 4.ToString(InvariantCulture); expectedTelemetry.Add(traceTelemetry); CollectionAssert.AreEqual( expectedTelemetry, this.adapterHelper.Channel.SentItems.Where(item => !((TraceTelemetry)item).Properties["EventId"].Equals("65534", StringComparison.Ordinal)).ToList(), new TraceTelemetryComparer(), "Reported events are not what was expected"); } }