public void ExtractTraceContext()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            request.Request.Headers.Add(B3Constants.XB3TraceId, new StringValues(TRACE_ID_BASE16));
            request.Request.Headers.Add(B3Constants.XB3SpanId, new StringValues(SPAN_ID_BASE16));
            request.Request.Headers.Add(B3Constants.XB3Sampled, new StringValues("1"));

            var context = obs.ExtractTraceContext(request);

            Assert.Equal(TRACE_ID_BASE16, context.TraceId.ToLowerBase16());
            Assert.Equal(SPAN_ID_BASE16, context.SpanId.ToLowerBase16());
            Assert.True(context.TraceOptions.IsSampled);

            request = GetHttpRequestMessage();
            request.Request.Headers.Add(B3Constants.XB3TraceId, new StringValues(TRACE_ID_BASE16_EIGHT_BYTES));
            request.Request.Headers.Add(B3Constants.XB3SpanId, new StringValues(SPAN_ID_BASE16));
            request.Request.Headers.Add(B3Constants.XB3Sampled, new StringValues("1"));

            context = obs.ExtractTraceContext(request);
            Assert.Equal("0000000000000000" + TRACE_ID_BASE16_EIGHT_BYTES, context.TraceId.ToLowerBase16());
            Assert.Equal(SPAN_ID_BASE16, context.SpanId.ToLowerBase16());
            Assert.True(context.TraceOptions.IsSampled);
        }
        public void ProcessEvent_Start()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_START_EVENT, new { HttpContext = request });

            Span span = GetCurrentSpan(tracing.Tracer);

            Assert.NotNull(span);

            var spanContext = obs.Active;

            Assert.NotNull(spanContext);

            Assert.Equal(span, spanContext.Active);
            Assert.NotNull(spanContext.ActiveScope);
            Assert.Equal("http:/", span.Name);

            Assert.False(span.HasEnded);

            var spanData   = span.ToSpanData();
            var attributes = spanData.Attributes.AttributeMap;

            Assert.Equal(SpanKind.Server, span.Kind);
            Assert.Equal(AttributeValue.StringAttributeValue("http://localhost:5555/"), attributes[SpanAttributeConstants.HttpUrlKey]);
            Assert.Equal(AttributeValue.StringAttributeValue(HttpMethod.Get.ToString()), attributes[SpanAttributeConstants.HttpMethodKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("localhost:5555"), attributes[SpanAttributeConstants.HttpHostKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("/"), attributes[SpanAttributeConstants.HttpPathKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("Header"), attributes["http.request.TEST"]);
        }
Ejemplo n.º 3
0
        public void InjectTraceContext()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            tracing.Tracer.SpanBuilder("MySpan").StartScopedSpan(out ISpan span);

            obs.InjectTraceContext(request, null);

            Assert.True(request.Headers.Contains(B3Constants.XB3TraceId));
            Assert.True(request.Headers.Contains(B3Constants.XB3SpanId));
            Assert.False(request.Headers.Contains(B3Constants.XB3ParentSpanId));

            var spanId = request.Headers.GetValues(B3Constants.XB3SpanId).Single();

            Assert.Equal(span.Context.SpanId.ToLowerBase16(), spanId);

            var traceId  = request.Headers.GetValues(B3Constants.XB3TraceId).Single();
            var expected = GetTraceId(opts, span.Context);

            Assert.Equal(expected, traceId);

            if (span.Context.TraceOptions.IsSampled)
            {
                Assert.True(request.Headers.Contains(B3Constants.XB3Sampled));
            }
        }
        public void InjectTraceContext()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new HttpClientDesktopObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            var span = tracing.Tracer.SpanBuilder("MySpan").StartSpan() as Span;

            AsyncLocalContext.CurrentSpan = span;

            obs.InjectTraceContext(request, null);

            Assert.NotNull(request.Headers.Get(B3Format.X_B3_TRACE_ID));
            Assert.NotNull(request.Headers.Get(B3Format.X_B3_SPAN_ID));
            Assert.Null(request.Headers.Get(B3Format.X_B3_PARENT_SPAN_ID));

            var spanId = request.Headers.Get(B3Format.X_B3_SPAN_ID);

            Assert.Equal(span.Context.SpanId.ToLowerBase16(), spanId);

            var traceId  = request.Headers.Get(B3Format.X_B3_TRACE_ID);
            var expected = GetTraceId(opts, span.Context);

            Assert.Equal(expected, traceId);

            if (span.Context.TraceOptions.IsSampled)
            {
                Assert.NotNull(request.Headers.Get(B3Format.X_B3_SAMPLED));
            }
        }
        public void Process_NoCurrentSpan_DoesNothing()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:tracing:name"] = "foobar",
                ["management:tracing:ingressIgnorePattern"]     = "pattern",
                ["management:tracing:egressIgnorePattern"]      = "pattern",
                ["management:tracing:maxNumberOfAttributes"]    = "100",
                ["management:tracing:maxNumberOfAnnotations"]   = "100",
                ["management:tracing:maxNumberOfMessageEvents"] = "100",
                ["management:tracing:maxNumberOfLinks"]         = "100",
                ["management:tracing:alwaysSample"]             = "true",
                ["management:tracing:neverSample"]      = "true",
                ["management:tracing:useShortTraceIds"] = "true",
            };

            ConfigurationBuilder builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection(appsettings);
            TracingOptions opts = new TracingOptions(null, builder.Build());

            OpenCensusTracing tracing = new OpenCensusTracing(opts);
            var processor             = new TracingLogProcessor(opts, tracing);
            var result = processor.Process("InputLogMessage");

            Assert.Equal("InputLogMessage", result);
        }
        public void ProcessEvent_IgnoresNulls()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new AspNetCoreMvcViewObserver(opts, tracing);

            obs.ProcessEvent(null, null);
        }
        public void ProcessEvent_IgnoresUnknownEvent()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new AspNetCoreHostingObserver(opts, tracing);

            obs.ProcessEvent(string.Empty, new { HttpContext = GetHttpRequestMessage() });
        }
        public void ProcessEvent_IgnoresUnknownEvent()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new AspNetCoreMvcViewObserver(opts, tracing);

            obs.ProcessEvent(string.Empty, new { viewContext = GetViewContext() });
        }
Ejemplo n.º 9
0
        public void ProcessEvent_IgnoresMissingHttpRequestMessage()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new HttpClientCoreObserver(opts, tracing);

            obs.ProcessEvent(string.Empty, new object());
        }
        public void ProcessEvent_IgnoresNulls()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new HttpClientDesktopObserver(opts, tracing);

            obs.ProcessEvent(null, null);
        }
        public void ProcessEvent_IgnoresUnknownEvent()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new HttpClientDesktopObserver(opts, tracing);

            obs.ProcessEvent(string.Empty, new { Request = GetHttpRequestMessage() });
        }
        public void ExtractSpanName()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new AspNetCoreMvcViewObserver(opts, tracing);

            var ctx      = GetViewContext();
            var spanName = obs.ExtractSpanName(ctx);

            Assert.Equal("view:" + ctx.View.Path, spanName);
        }
        public void ExtractViewPath()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new AspNetCoreMvcViewObserver(opts, tracing);

            var ctx  = GetViewContext();
            var path = obs.ExtractViewPath(ctx);

            Assert.Equal(ctx.View.Path, path);
        }
        public void ShouldIgnore_ReturnsExpected()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new HttpClientDesktopObserver(opts, tracing);

            Assert.True(obs.ShouldIgnoreRequest("/api/v2/spans"));
            Assert.True(obs.ShouldIgnoreRequest("/v2/apps/foobar/permissions"));
            Assert.True(obs.ShouldIgnoreRequest("/v2/apps/barfoo/permissions"));
            Assert.False(obs.ShouldIgnoreRequest("/api/test"));
            Assert.False(obs.ShouldIgnoreRequest("/v2/apps"));
        }
Ejemplo n.º 15
0
        public void ProcessEvent_Stop_NoArgs()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_STOP_EVENT, new { });
            Span span = AsyncLocalContext.CurrentSpan as Span;

            Assert.Null(span);
            Assert.Null(obs.Active);
        }
        public void ProcessEvent_BeforeAction_NoArgs()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new AspNetCoreMvcActionObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_BEFOREACTION_EVENT, new { });
            Span span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
            Assert.Null(obs.Active);
        }
Ejemplo n.º 17
0
        public void ProcessEvent_Stop_NothingStarted()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientCoreObserver.STOP_EVENT, new { Request = request });
            Span span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
            Assert.False(request.Properties.TryGetValue(HttpClientCoreObserver.SPANCONTEXT_KEY, out object context));
        }
        public void ProcessEvent_Stop_NothingStarted()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_STOP_EVENT, new { HttpContext = request });
            Span span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
            Assert.Null(obs.Active);
        }
        public void ProcessEvent_StopEx_NothingStarted()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new HttpClientDesktopObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientDesktopObserver.STOPEX_EVENT, new { Request = request, StatusCode = HttpStatusCode.OK, Headers = new WebHeaderCollection() });
            Span span = AsyncLocalContext.CurrentSpan as Span;

            Assert.Null(span);
            Assert.False(obs.Pending.TryGetValue(request, out HttpClientTracingObserver.SpanContext context));
        }
        public void ProcessEvent_Stop_NoRespose()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new HttpClientDesktopObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientDesktopObserver.STOP_EVENT, new { Request = request });
            Span span = AsyncLocalContext.CurrentSpan as Span;

            Assert.Null(span);
            Assert.False(obs.Pending.TryGetValue(request, out HttpClientTracingObserver.SpanContext context));
        }
        public void ProcessEvent_BeforeView_NoArgs()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new AspNetCoreMvcViewObserver(opts, tracing);
            var ctx = GetViewContext();

            obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { });
            Span span = AsyncLocalContext.CurrentSpan as Span;

            Assert.Null(span);
            Assert.Null(obs.Active);
        }
Ejemplo n.º 22
0
        public void Process_CurrentSpan_ReturnsExpected()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:tracing:name"] = "foobar",
                ["management:tracing:ingressIgnorePattern"]     = "pattern",
                ["management:tracing:egressIgnorePattern"]      = "pattern",
                ["management:tracing:maxNumberOfAttributes"]    = "100",
                ["management:tracing:maxNumberOfAnnotations"]   = "100",
                ["management:tracing:maxNumberOfMessageEvents"] = "100",
                ["management:tracing:maxNumberOfLinks"]         = "100",
                ["management:tracing:alwaysSample"]             = "true",
                ["management:tracing:neverSample"]      = "false",
                ["management:tracing:useShortTraceIds"] = "false",
            };

            ConfigurationBuilder builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection(appsettings);
            TracingOptions opts = new TracingOptions(null, builder.Build());

            OpenCensusTracing tracing = new OpenCensusTracing(opts);
            var span = tracing.Tracer.SpanBuilder("spanName").StartSpan();

            AsyncLocalContext.CurrentSpan = span;

            var processor = new TracingLogProcessor(opts, tracing);
            var result    = processor.Process("InputLogMessage");

            Assert.Contains("InputLogMessage", result);
            Assert.Contains("[", result);
            Assert.Contains("]", result);
            Assert.Contains(span.Context.TraceId.ToLowerBase16(), result);
            Assert.Contains(span.Context.SpanId.ToLowerBase16(), result);
            Assert.Contains("foobar", result);

            var childSpan = tracing.Tracer.SpanBuilderWithExplicitParent("spanName2", span).StartSpan();

            AsyncLocalContext.CurrentSpan = childSpan;

            result = processor.Process("InputLogMessage2");

            Assert.Contains("InputLogMessage2", result);
            Assert.Contains("[", result);
            Assert.Contains("]", result);
            Assert.Contains(childSpan.Context.TraceId.ToLowerBase16(), result);
            Assert.Contains(childSpan.Context.SpanId.ToLowerBase16(), result);
            Assert.Contains(span.Context.SpanId.ToLowerBase16(), result);
            Assert.Contains("foobar", result);
        }
Ejemplo n.º 23
0
        public void ProcessEvent_Start()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientCoreObserver.START_EVENT, new { Request = request });

            Span span = GetCurrentSpan(tracing.Tracer);

            Assert.NotNull(span);
            Assert.True(request.Properties.TryGetValue(HttpClientCoreObserver.SPANCONTEXT_KEY, out object context));
            HttpClientTracingObserver.SpanContext spanContext = context as HttpClientTracingObserver.SpanContext;
            Assert.NotNull(spanContext);
            Assert.Equal(span, spanContext.Active);
            Assert.NotNull(spanContext.ActiveScope);
            Assert.Equal("httpclient:/", span.Name);

            Assert.True(request.Headers.Contains(B3Constants.XB3TraceId));
            Assert.True(request.Headers.Contains(B3Constants.XB3SpanId));
            Assert.False(request.Headers.Contains(B3Constants.XB3ParentSpanId));

            var spanId = request.Headers.GetValues(B3Constants.XB3SpanId).Single();

            Assert.Equal(span.Context.SpanId.ToLowerBase16(), spanId);

            var traceId  = request.Headers.GetValues(B3Constants.XB3TraceId).Single();
            var expected = GetTraceId(opts, span.Context);

            Assert.Equal(expected, traceId);

            if (span.Context.TraceOptions.IsSampled)
            {
                Assert.True(request.Headers.Contains(B3Constants.XB3Sampled));
            }

            Assert.False(span.HasEnded);

            var spanData   = span.ToSpanData();
            var attributes = spanData.Attributes.AttributeMap;

            Assert.Equal(SpanKind.Client, span.Kind);
            Assert.Equal(AttributeValue.StringAttributeValue("http://localhost:5555/"), attributes[SpanAttributeConstants.HttpUrlKey]);
            Assert.Equal(AttributeValue.StringAttributeValue(HttpMethod.Get.ToString()), attributes[SpanAttributeConstants.HttpMethodKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("localhost:5555"), attributes[SpanAttributeConstants.HttpHostKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("/"), attributes[SpanAttributeConstants.HttpPathKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("Header"), attributes["http.request.TEST"]);
        }
        public void ProcessEvent_Start()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new HttpClientDesktopObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientDesktopObserver.START_EVENT, new { Request = request });

            Span span = AsyncLocalContext.CurrentSpan as Span;

            Assert.NotNull(span);
            Assert.True(obs.Pending.TryGetValue(request, out HttpClientTracingObserver.SpanContext spanContext));
            Assert.NotNull(spanContext);
            Assert.Equal(span, spanContext.Active);
            Assert.Null(spanContext.Previous);
            Assert.Equal("httpclient:/", span.Name);

            Assert.NotNull(request.Headers.Get(B3Format.X_B3_TRACE_ID));
            Assert.NotNull(request.Headers.Get(B3Format.X_B3_SPAN_ID));
            Assert.Null(request.Headers.Get(B3Format.X_B3_PARENT_SPAN_ID));

            var spanId = request.Headers.Get(B3Format.X_B3_SPAN_ID);

            Assert.Equal(span.Context.SpanId.ToLowerBase16(), spanId);

            var traceId  = request.Headers.Get(B3Format.X_B3_TRACE_ID);
            var expected = GetTraceId(opts, span.Context);

            Assert.Equal(expected, traceId);

            if (span.Context.TraceOptions.IsSampled)
            {
                Assert.NotNull(request.Headers.Get(B3Format.X_B3_SAMPLED));
            }

            Assert.False(span.HasEnded);

            var spanData   = span.ToSpanData();
            var attributes = spanData.Attributes.AttributeMap;

            Assert.Equal(AttributeValue.StringAttributeValue(SpanAttributeConstants.ClientSpanKind), attributes[SpanAttributeConstants.SpanKindKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("http://localhost:5555/"), attributes[SpanAttributeConstants.HttpUrlKey]);
            Assert.Equal(AttributeValue.StringAttributeValue(HttpMethod.Get.ToString()), attributes[SpanAttributeConstants.HttpMethodKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("localhost"), attributes[SpanAttributeConstants.HttpHostKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("/"), attributes[SpanAttributeConstants.HttpPathKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("Header"), attributes["http.request.TEST"]);
        }
        public void ExtractResponseSize()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new AspNetCoreHostingObserver(opts, tracing);

            var request = GetHttpRequestMessage();

            request.Response.Body.WriteByte(1);
            request.Response.Body.WriteByte(2);

            var result = obs.ExtractResponseSize(request);

            Assert.NotNull(result);
            Assert.Equal(2, result.Value);
        }
        public void ProcessEvent_AfterView_NoBeforeView()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new AspNetCoreMvcViewObserver(opts, tracing);

            obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_AFTERVIEW_EVENT, new { });

            Span span = AsyncLocalContext.CurrentSpan as Span;

            Assert.Null(span);

            var spanContext = obs.Active;

            Assert.Null(spanContext);
        }
        public void ProcessEvent_AfterAction_NoBeforeAction()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new AspNetCoreMvcActionObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_AFTERACTION_EVENT, new { httpContext = request });

            Span span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);

            var spanContext = obs.Active;

            Assert.Null(spanContext);
        }
Ejemplo n.º 28
0
        public void ProcessEvent_BeforeView_NoCurrentSpan()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs = new AspNetCoreMvcViewObserver(opts, tracing);
            var ctx = GetViewContext();

            obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { viewContext = ctx });

            Span span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);

            var spanContext = obs.Active;

            Assert.Null(spanContext);
        }
        public void ProcessEvent_Exception_PreviousStarted()
        {
            var opts = GetOptions();
            OpenCensusTracing tracing = new OpenCensusTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_START_EVENT, new { HttpContext = request });

            Span span = GetCurrentSpan(tracing.Tracer);

            Assert.NotNull(span);
            var spanContext = obs.Active;

            Assert.NotNull(spanContext);

            Assert.Equal(span, spanContext.Active);
            Assert.NotNull(spanContext.ActiveScope);
            Assert.Equal("http:/", span.Name);

            var exception = new Exception("Help");

            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_EXCEPTION_EVENT, new { httpContext = request, exception = exception });

            request.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_STOP_EVENT, new { HttpContext = request });

            Assert.True(span.HasEnded);

            Assert.Null(GetCurrentSpan(tracing.Tracer));
            Assert.Null(obs.Active);

            var spanData   = span.ToSpanData();
            var attributes = spanData.Attributes.AttributeMap;

            Assert.Equal(SpanKind.Server, span.Kind);
            Assert.Equal(AttributeValue.StringAttributeValue("http://localhost:5555/"), attributes[SpanAttributeConstants.HttpUrlKey]);
            Assert.Equal(AttributeValue.StringAttributeValue(HttpMethod.Get.ToString()), attributes[SpanAttributeConstants.HttpMethodKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("localhost:5555"), attributes[SpanAttributeConstants.HttpHostKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("/"), attributes[SpanAttributeConstants.HttpPathKey]);
            Assert.Equal(AttributeValue.StringAttributeValue("Header"), attributes["http.request.TEST"]);
            Assert.Equal(AttributeValue.StringAttributeValue("Header"), attributes["http.response.TEST"]);
            Assert.Equal(AttributeValue.LongAttributeValue((long)HttpStatusCode.InternalServerError), attributes[SpanAttributeConstants.HttpStatusCodeKey]);
            Assert.Equal(AttributeValue.StringAttributeValue(obs.GetExceptionMessage(exception)), attributes[SpanAttributeConstants.ErrorKey]);
            Assert.Equal(AttributeValue.StringAttributeValue(obs.GetExceptionStackTrace(exception)), attributes[SpanAttributeConstants.ErrorStackTrace]);
        }
Ejemplo n.º 30
0
        public void Process_CurrentSpan_ReturnsExpected()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:tracing:name"] = "foobar",
                ["management:tracing:ingressIgnorePattern"]     = "pattern",
                ["management:tracing:egressIgnorePattern"]      = "pattern",
                ["management:tracing:maxNumberOfAttributes"]    = "100",
                ["management:tracing:maxNumberOfAnnotations"]   = "100",
                ["management:tracing:maxNumberOfMessageEvents"] = "100",
                ["management:tracing:maxNumberOfLinks"]         = "100",
                ["management:tracing:alwaysSample"]             = "true",
                ["management:tracing:neverSample"]      = "false",
                ["management:tracing:useShortTraceIds"] = "false",
            };

            var config = TestHelpers.GetConfigurationFromDictionary(appsettings);
            var opts   = new TracingOptions(new ApplicationInstanceInfo(config), config);

            var tracing = new OpenCensusTracing(opts);

            tracing.Tracer.SpanBuilder("spanName").StartScopedSpan(out var span);

            var processor = new TracingLogProcessor(opts, tracing);
            var result    = processor.Process("InputLogMessage");

            Assert.Contains("InputLogMessage", result);
            Assert.Contains("[", result);
            Assert.Contains("]", result);
            Assert.Contains(span.Context.TraceId.ToLowerBase16(), result);
            Assert.Contains(span.Context.SpanId.ToLowerBase16(), result);
            Assert.Contains("foobar", result);

            tracing.Tracer.SpanBuilderWithExplicitParent("spanName2", span).StartScopedSpan(out var childSpan);

            result = processor.Process("InputLogMessage2");

            Assert.Contains("InputLogMessage2", result);
            Assert.Contains("[", result);
            Assert.Contains("]", result);
            Assert.Contains(childSpan.Context.TraceId.ToLowerBase16(), result);
            Assert.Contains(childSpan.Context.SpanId.ToLowerBase16(), result);
            Assert.Contains(span.Context.SpanId.ToLowerBase16(), result);
            Assert.Contains("foobar", result);
        }