public async Task Should_start_and_log_activity() { var diagnosticListener = new DiagnosticListener("DummySource"); var startCalled = false; diagnosticListener.Subscribe(new CallbackDiagnosticListener(pair => { if (pair.Key == $"{ActivityNames.OutgoingPhysicalMessage}.Start") { startCalled = true; pair.Value.ShouldNotBeNull(); Activity.Current.ShouldNotBeNull(); Activity.Current.OperationName.ShouldBe(ActivityNames.OutgoingPhysicalMessage); pair.Value.ShouldBeAssignableTo <IOutgoingPhysicalMessageContext>(); } })); var context = new TestableOutgoingPhysicalMessageContext(); var behavior = new OutgoingPhysicalMessageDiagnostics(diagnosticListener); await behavior.Invoke(context, () => Task.CompletedTask); startCalled.ShouldBeTrue(); }
public async Task Should_start_and_log_activity() { var startCalled = false; using var listener = new ActivityListener { ShouldListenTo = source => source.Name == "NServiceBus.Extensions.Diagnostics", Sample = (ref ActivityCreationOptions <ActivityContext> _) => ActivitySamplingResult.AllDataAndRecorded, ActivityStarted = activity => { startCalled = true; activity.ShouldNotBeNull(); activity.OperationName.ShouldBe(ActivityNames.OutgoingPhysicalMessage); }, }; ActivitySource.AddActivityListener(listener); var context = new TestableOutgoingPhysicalMessageContext(); var behavior = new OutgoingPhysicalMessageDiagnostics(new FakeActivityEnricher()); await behavior.Invoke(context, () => Task.CompletedTask); startCalled.ShouldBeTrue(); }
public async Task Should_fire_activity_start_stop_when_listener_attached() { var diagnosticListener = new DiagnosticListener("DummySource"); var context = new TestableOutgoingPhysicalMessageContext(); var stopFired = false; var startFired = false; diagnosticListener.Subscribe(new CallbackDiagnosticListener(pair => { if (pair.Key == $"{ActivityNames.OutgoingPhysicalMessage}.Start") { startFired = true; } if (pair.Key == $"{ActivityNames.OutgoingPhysicalMessage}.Stop") { stopFired = true; } })); var behavior = new OutgoingPhysicalMessageDiagnostics(diagnosticListener); await behavior.Invoke(context, () => Task.CompletedTask); startFired.ShouldBeTrue(); stopFired.ShouldBeTrue(); }
public async Task Should_add_headers_to_tags() { var diagnosticListener = new DiagnosticListener("DummySource"); var startCalled = false; diagnosticListener.Subscribe(new CallbackDiagnosticListener(pair => { if (pair.Key == $"{ActivityNames.OutgoingPhysicalMessage}.Start") { startCalled = true; var started = Activity.Current; started.ShouldNotBeNull(); started.Tags.ShouldNotContain(kvp => kvp.Key == "foo"); started.Tags.ShouldContain(kvp => kvp.Key == "SomeHeader1" && kvp.Value == "SomeValue1"); started.Tags.ShouldContain(kvp => kvp.Key == "SomeHeader2" && kvp.Value == "SomeValue2"); } })); var context = new TestableOutgoingPhysicalMessageContext { Headers = { { "foo", "bar" }, { "NServiceBus.SomeHeader1", "SomeValue1" }, { "NServiceBus.SomeHeader2", "SomeValue2" }, } }; var behavior = new OutgoingPhysicalMessageDiagnostics(diagnosticListener); await behavior.Invoke(context, () => Task.CompletedTask); startCalled.ShouldBeTrue(); }
public async Task Should_not_fire_activity_start_stop_when_no_listener_attached() { var context = new TestableOutgoingPhysicalMessageContext(); var stopFired = false; var startFired = false; using var listener = new ActivityListener { ShouldListenTo = source => source.Name == "Nonsense", ActivityStarted = _ => startFired = true, ActivityStopped = _ => stopFired = true }; ActivitySource.AddActivityListener(listener); var behavior = new OutgoingPhysicalMessageDiagnostics(new FakeActivityEnricher()); await behavior.Invoke(context, () => Task.CompletedTask); startFired.ShouldBeFalse(); stopFired.ShouldBeFalse(); }
public async Task Should_start_activity_and_set_appropriate_headers() { // Generate an id we can use for the request id header (in the correct format) Activity started = null; using var listener = new ActivityListener { ShouldListenTo = source => source.Name == "NServiceBus.Extensions.Diagnostics", Sample = (ref ActivityCreationOptions <ActivityContext> _) => ActivitySamplingResult.AllDataAndRecorded, ActivityStarted = activity => started = activity, }; ActivitySource.AddActivityListener(listener); var context = new TestableOutgoingPhysicalMessageContext(); var behavior = new OutgoingPhysicalMessageDiagnostics(new FakeActivityEnricher()); var outerActivity = new Activity("Outer") { TraceStateString = "TraceStateValue", }; outerActivity.AddBaggage("Key1", "Value1"); outerActivity.AddBaggage("Key2", "Value2"); outerActivity.Start(); await behavior.Invoke(context, () => Task.CompletedTask); outerActivity.Stop(); started.ShouldNotBeNull(); started.ParentId.ShouldBe(outerActivity.Id); context.Headers.ShouldContain(kvp => kvp.Key == "traceparent" && kvp.Value == started.Id); context.Headers.ShouldContain(kvp => kvp.Key == "tracestate" && kvp.Value == outerActivity.TraceStateString); context.Headers.ShouldContain(kvp => kvp.Key == "Correlation-Context" && kvp.Value == "Key2=Value2,Key1=Value1"); context.Headers.ShouldContain(kvp => kvp.Key == "baggage" && kvp.Value == "Key2=Value2,Key1=Value1"); }
public async Task Should_fire_activity_start_stop_when_listener_attached() { var context = new TestableOutgoingPhysicalMessageContext(); var stopFired = false; var startFired = false; using var listener = new ActivityListener { ShouldListenTo = source => source.Name == "NServiceBus.Extensions.Diagnostics", Sample = (ref ActivityCreationOptions <ActivityContext> _) => ActivitySamplingResult.AllDataAndRecorded, ActivityStarted = _ => startFired = true, ActivityStopped = _ => stopFired = true }; ActivitySource.AddActivityListener(listener); var behavior = new OutgoingPhysicalMessageDiagnostics(new FakeActivityEnricher()); await behavior.Invoke(context, () => Task.CompletedTask); startFired.ShouldBeTrue(); stopFired.ShouldBeTrue(); }
public async Task Should_start_activity_and_set_appropriate_headers() { // Generate an id we can use for the request id header (in the correct format) var diagnosticListener = new DiagnosticListener("DummySource"); Activity started = null; diagnosticListener.Subscribe(new CallbackDiagnosticListener(pair => { if (pair.Key == $"{ActivityNames.OutgoingPhysicalMessage}.Start") { started = Activity.Current; } })); var context = new TestableOutgoingPhysicalMessageContext(); var behavior = new OutgoingPhysicalMessageDiagnostics(diagnosticListener); var activity = new Activity("Outer") { TraceStateString = "TraceStateValue", }; activity.AddBaggage("Key1", "Value1"); activity.AddBaggage("Key2", "Value2"); activity.Start(); await behavior.Invoke(context, () => Task.CompletedTask); activity.Stop(); started.ShouldNotBeNull(); started.ParentId.ShouldBe(activity.Id); context.Headers.ShouldContain(kvp => kvp.Key == "traceparent" && kvp.Value == started.Id); context.Headers.ShouldContain(kvp => kvp.Key == "tracestate" && kvp.Value == activity.TraceStateString); context.Headers.ShouldContain(kvp => kvp.Key == "Correlation-Context" && kvp.Value == "Key2=Value2,Key1=Value1"); }