public async void SubmitsOutOfOrderSpans() { using (var agent = new MockZipkinCollector(collectorPort)) { var scope1 = _tracer.StartActive("op1"); var scope2 = _tracer.StartActive("op2"); scope1.Close(); scope2.Close(); await _httpRecorder.WaitForCompletion(1); Assert.Single(_httpRecorder.Requests); Assert.Single(_httpRecorder.Responses); Assert.All(_httpRecorder.Responses, (x) => Assert.Equal(HttpStatusCode.OK, x.StatusCode)); var trace = _httpRecorder.ZipkinTraces; ZipkinHelpers.AssertSpanEqual(scope1.Span, trace[0][0]); ZipkinHelpers.AssertSpanEqual(scope2.Span, trace[0][1]); // Check root span for mandatory tags. Assert.Contains(scope1.Span.Tags, kvp => kvp.Key == Tags.Language && kvp.Value == TracerConstants.Language); Assert.Contains(scope1.Span.Tags, kvp => kvp.Key == Tags.Version && kvp.Value == TracerConstants.AssemblyVersion); // Child spans should not have root spans tags. Assert.Null(scope2.Span.Tags); } }
public async void MinimalSpan() { using (var agent = new MockZipkinCollector(collectorPort)) { var scope = _tracer.StartActive("Operation"); scope.Span.SetTag(Tags.SpanKind, SpanKinds.Client); scope.Dispose(); await _httpRecorder.WaitForCompletion(1); Assert.Single(_httpRecorder.Requests); Assert.Single(_httpRecorder.Responses); Assert.All(_httpRecorder.Responses, (x) => Assert.Equal(HttpStatusCode.OK, x.StatusCode)); var trace = _httpRecorder.ZipkinTraces.Single(); ZipkinHelpers.AssertSpanEqual(scope.Span, trace); } }
public async void MinimalSpan() { using var mockZipkinCollector = new MockZipkinCollector(); var span = (OpenTracingSpan)_tracer.BuildSpan("Operation") .Start(); span.Finish(); // Check that the HTTP calls went as expected await _httpRecorder.WaitForCompletion(1); Assert.Single(_httpRecorder.Requests); Assert.Single(_httpRecorder.Responses); Assert.All(_httpRecorder.Responses, (x) => Assert.Equal(HttpStatusCode.OK, x.StatusCode)); var trace = _httpRecorder.ZipkinTraces.Single(); ZipkinHelpers.AssertSpanEqual(span.Span, trace.Single()); }
public async void Utf8Everywhere() { using (var agent = new MockZipkinCollector(collectorPort)) { var scope = _tracer.StartActive("Aᛗᚪᚾᚾᚪ", serviceName: "На берегу пустынных волн"); scope.Span.ResourceName = "η γλώσσα μου έδωσαν ελληνική"; scope.Span.SetTag("யாமறிந்த", "ნუთუ კვლა"); scope.Span.Log("யாமறிந்த", "ნუთუ კვლა"); scope.Span.Log("யாமறிந்த", "ნუთუ კვლა"); scope.Dispose(); await _httpRecorder.WaitForCompletion(1); Assert.Single(_httpRecorder.Requests); Assert.Single(_httpRecorder.Responses); Assert.All(_httpRecorder.Responses, (x) => Assert.Equal(HttpStatusCode.OK, x.StatusCode)); var trace = _httpRecorder.ZipkinTraces.Single(); ZipkinHelpers.AssertSpanEqual(scope.Span, trace); } }
public async void Utf8Everywhere() { using var mockZipkinCollector = new MockZipkinCollector(); var span = (OpenTracingSpan)_tracer.BuildSpan("Aᛗᚪᚾᚾᚪ") .WithTag(Tags.ResourceName, "η γλώσσα μου έδωσαν ελληνική") .WithTag(CustomTags.ServiceName, "На берегу пустынных волн") .WithTag("யாமறிந்த", "ნუთუ კვლა") .Start(); span.Finish(); // Check that the HTTP calls went as expected await _httpRecorder.WaitForCompletion(1); Assert.Single(_httpRecorder.Requests); Assert.Single(_httpRecorder.Responses); Assert.All(_httpRecorder.Responses, (x) => Assert.Equal(HttpStatusCode.OK, x.StatusCode)); var trace = _httpRecorder.ZipkinTraces.Single(); ZipkinHelpers.AssertSpanEqual(span.Span, trace.Single()); }
public async void CustomServiceName(bool serviceNamePerSpanEnabled) { var savedServiceNamePerSpanSetting = _tracer.Settings.ServiceNamePerSpanEnabled; try { _tracer.Settings.ServiceNamePerSpanEnabled = serviceNamePerSpanEnabled; using (var agent = new MockZipkinCollector(collectorPort)) { const string serviceName = "MyService"; var scope = _tracer.StartActive("Operation-From-SendTracesToZipkinCollector", serviceName: serviceName); scope.Span.ResourceName = "This is a resource"; scope.Dispose(); agent.WaitForSpans(1); await _httpRecorder.WaitForCompletion(1); Assert.Single(_httpRecorder.Requests); Assert.Single(_httpRecorder.Responses); Assert.All(_httpRecorder.Responses, (x) => Assert.Equal(HttpStatusCode.OK, x.StatusCode)); var trace = _httpRecorder.ZipkinTraces.Single(); var expectedServiceName = serviceNamePerSpanEnabled ? serviceName : _tracer.DefaultServiceName; ZipkinHelpers.AssertSpanEqual(scope.Span, trace, expectedServiceName); } } finally { _tracer.Settings.ServiceNamePerSpanEnabled = savedServiceNamePerSpanSetting; } }
public async void CustomServiceName() { using var mockZipkinCollector = new MockZipkinCollector(); const string ServiceName = "MyService"; var span = (OpenTracingSpan)_tracer.BuildSpan("Operation-From-OpenTracingSendTracesToAgent") .WithTag(Tags.ResourceName, "This is a resource") .WithTag(CustomTags.ServiceName, ServiceName) .Start(); span.Finish(); // Check that the HTTP calls went as expected await _httpRecorder.WaitForCompletion(1); Assert.Single(_httpRecorder.Requests); Assert.Single(_httpRecorder.Responses); Assert.All(_httpRecorder.Responses, (x) => Assert.Equal(HttpStatusCode.OK, x.StatusCode)); var trace = _httpRecorder.ZipkinTraces.Single(); ZipkinHelpers.AssertSpanEqual(span.Span, trace.Single()); }