public void StartsActivitySourceActivity() { using var _ = SetAppConfigSwitch(); // Bug: there is no way to set activity type to W3C // https://github.com/dotnet/runtime/issues/43853 var oldDefault = Activity.DefaultIdFormat; Activity.DefaultIdFormat = ActivityIdFormat.W3C; try { using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.AddAttribute("Attribute1", "Value1"); scope.AddAttribute("Attribute2", 2, i => i.ToString()); scope.AddAttribute("Attribute3", 3); scope.AddLink("00-6e76af18746bae4eadc3581338bbe8b1-2899ebfdbdce904b-00", "foo=bar"); scope.AddLink("00-6e76af18746bae4eadc3581338bbe8b2-2899ebfdbdce904b-00", null, new Dictionary <string, string>() { { "linkAttribute", "linkAttributeValue" } }); Assert.IsTrue(scope.IsEnabled); scope.Start(); scope.Dispose(); Assert.AreEqual(1, activityListener.Activities.Count); var activity = activityListener.Activities.Dequeue(); Assert.AreEqual("ClientName.ActivityName", activity.DisplayName); Assert.AreEqual("Value1", activity.TagObjects.Single(o => o.Key == "Attribute1").Value); Assert.AreEqual("2", activity.TagObjects.Single(o => o.Key == "Attribute2").Value); Assert.AreEqual("3", activity.TagObjects.Single(o => o.Key == "Attribute3").Value); var links = activity.Links.ToArray(); Assert.AreEqual(2, links.Length); Assert.AreEqual(ActivityContext.Parse("00-6e76af18746bae4eadc3581338bbe8b1-2899ebfdbdce904b-00", "foo=bar"), links[0].Context); Assert.AreEqual(ActivityContext.Parse("00-6e76af18746bae4eadc3581338bbe8b2-2899ebfdbdce904b-00", null), links[1].Context); Assert.AreEqual(ActivityIdFormat.W3C, activity.IdFormat); } finally { Activity.DefaultIdFormat = oldDefault; } }
public void StartActivityNoOpsWithoutSwitch() { using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.Start(); scope.Dispose(); Assert.AreEqual(0, activityListener.Activities.Count); }
public void StartActivitySourceActivityIgnoresInvalidLinkParent() { using var _ = SetAppConfigSwitch(); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.AddLink("test"); scope.Start(); scope.Dispose(); Assert.AreEqual(0, activityListener.Activities.Single().Links.Count()); }
public async Task ActivitySourceActivityStartedOnRequest() { using var _ = SetAppConfigSwitch(); ActivityIdFormat previousFormat = Activity.DefaultIdFormat; Activity.DefaultIdFormat = ActivityIdFormat.W3C; try { Activity activity = null; using var testListener = new TestActivitySourceListener("Azure.Core.Http"); MockTransport mockTransport = CreateMockTransport(_ => { activity = Activity.Current; MockResponse mockResponse = new MockResponse(201); mockResponse.AddHeader(new HttpHeader("x-ms-request-id", "server request id")); return(mockResponse); }); string clientRequestId = null; Task <Response> requestTask = SendRequestAsync(mockTransport, request => { request.Method = RequestMethod.Get; request.Uri.Reset(new Uri("http://example.com")); request.Headers.Add("User-Agent", "agent"); clientRequestId = request.ClientRequestId; }, s_enabledPolicy); await requestTask; Assert.AreEqual(activity, testListener.Activities.Single()); CollectionAssert.Contains(activity.Tags, new KeyValuePair <string, string>("http.status_code", "201")); CollectionAssert.Contains(activity.Tags, new KeyValuePair <string, string>("http.url", "http://example.com/")); CollectionAssert.Contains(activity.Tags, new KeyValuePair <string, string>("http.method", "GET")); CollectionAssert.Contains(activity.Tags, new KeyValuePair <string, string>("http.user_agent", "agent")); CollectionAssert.Contains(activity.Tags, new KeyValuePair <string, string>("requestId", clientRequestId)); CollectionAssert.Contains(activity.Tags, new KeyValuePair <string, string>("serviceRequestId", "server request id")); CollectionAssert.Contains(activity.Tags, new KeyValuePair <string, string>("az.namespace", "Microsoft.Azure.Core.Cool.Tests")); } finally { Activity.DefaultIdFormat = previousFormat; } }
public void CanSetActivitySourceAndDiagnosticSourceActivitiesTogether() { using var _ = SetAppConfigSwitch(); using var testListener = new TestDiagnosticListener("Azure.Clients"); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.Start(); (string Key, object Value, DiagnosticListener)startEvent = testListener.Events.Dequeue(); Activity activityAfterStart = Activity.Current; scope.AddAttribute("Attribute1", "Value1"); scope.AddAttribute("Attribute2", 2, i => i.ToString()); scope.AddAttribute("Attribute3", 3); scope.Dispose(); (string Key, object Value, DiagnosticListener)stopEvent = testListener.Events.Dequeue(); Assert.AreEqual(1, activityListener.Activities.Count); var activitySourceActivity = activityListener.Activities.Dequeue(); Assert.AreEqual("Value1", activitySourceActivity.TagObjects.Single(o => o.Key == "Attribute1").Value); Assert.AreEqual("2", activitySourceActivity.TagObjects.Single(o => o.Key == "Attribute2").Value); Assert.AreEqual("3", activitySourceActivity.TagObjects.Single(o => o.Key == "Attribute3").Value); Assert.Null(Activity.Current); Assert.AreEqual("ClientName.ActivityName.Start", startEvent.Key); Assert.AreEqual("ClientName.ActivityName.Stop", stopEvent.Key); var diagnosticSourceActivity = (Activity)startEvent.Value; Assert.AreEqual(ActivityIdFormat.W3C, diagnosticSourceActivity.IdFormat); CollectionAssert.Contains(diagnosticSourceActivity.Tags, new KeyValuePair <string, string>("Attribute1", "Value1")); CollectionAssert.Contains(diagnosticSourceActivity.Tags, new KeyValuePair <string, string>("Attribute2", "2")); CollectionAssert.Contains(diagnosticSourceActivity.Tags, new KeyValuePair <string, string>("Attribute3", "3")); Assert.AreEqual(activityAfterStart, diagnosticSourceActivity); }
public void NestedClientActivitiesSuppressionByDefault() { using var _ = SetAppConfigSwitch(); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); using DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName", DiagnosticScope.ActivityKind.Client); scope.Start(); DiagnosticScope nestedScope = clientDiagnostics.CreateScope("ClientName.NestedActivityName", DiagnosticScope.ActivityKind.Internal); nestedScope.Start(); Assert.IsFalse(nestedScope.IsEnabled); Assert.AreEqual("ClientName.ActivityName", Activity.Current.OperationName); nestedScope.Dispose(); Assert.AreEqual("ClientName.ActivityName", Activity.Current.OperationName); }
public void CanSetActivitySourceAttributesAfterStarting() { using var _ = SetAppConfigSwitch(); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.Start(); scope.AddAttribute("name", "value"); scope.Dispose(); Assert.AreEqual(1, activityListener.Activities.Count); var activity = activityListener.Activities.Dequeue(); Assert.AreEqual("value", activity.TagObjects.Single(o => o.Key == "name").Value); }
public void NestedActivitiesOuterSampledOut() { using var _ = SetAppConfigSwitch(); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true, true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.AddAttribute("sampled-out", true); scope.Start(); Assert.IsNull(Activity.Current); using var activityListener2 = new TestActivitySourceListener("Azure.Clients2.ClientName"); DiagnosticScopeFactory clientDiagnostics2 = new DiagnosticScopeFactory("Azure.Clients2", "Microsoft.Azure.Core.Cool.Tests", true, true); DiagnosticScope nestedScope = clientDiagnostics2.CreateScope("ClientName.NestedActivityName"); nestedScope.Start(); Assert.IsTrue(nestedScope.IsEnabled); Assert.AreEqual("ClientName.NestedActivityName", Activity.Current.OperationName); nestedScope.Dispose(); Assert.IsNull(Activity.Current); }