Exemple #1
0
        public void OnActivityStartInjectsLegacyHeaders()
        {
            var listenerWithLegacyHeaders = new HttpCoreDiagnosticSourceListener(
                this.configuration,
                setComponentCorrelationHttpHeaders: true,
                correlationDomainExclusionList: new[] { "excluded.host.com" },
                injectLegacyHeaders: true,
                injectW3CHeaders: false);

            using (listenerWithLegacyHeaders)
            {
                var activity = new Activity("System.Net.Http.HttpRequestOut");
                activity.AddBaggage("k", "v");
                activity.Start();

                HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme);
                listenerWithLegacyHeaders.OnActivityStart(requestMsg);

                // Request-Id and Correlation-Context are injected by HttpClient
                // check only legacy headers here
                Assert.AreEqual(Activity.Current.RootId,
                                requestMsg.Headers.GetValues(RequestResponseHeaders.StandardRootIdHeader).Single());
                Assert.AreEqual(Activity.Current.Id,
                                requestMsg.Headers.GetValues(RequestResponseHeaders.StandardParentIdHeader).Single());
                Assert.AreEqual(this.testApplicationId1,
                                GetRequestContextKeyValue(requestMsg, RequestResponseHeaders.RequestContextCorrelationSourceKey));
            }
        }
Exemple #2
0
        public void OnActivityStartInjectsW3CHeaders()
        {
            var listenerWithW3CHeaders = new HttpCoreDiagnosticSourceListener(
                this.configuration,
                setComponentCorrelationHttpHeaders: true,
                correlationDomainExclusionList: new[] { "excluded.host.com" },
                injectLegacyHeaders: false,
                injectW3CHeaders: true);

            this.configuration.TelemetryInitializers.Add(new W3COperationCorrelationTelemetryInitializer());

            using (listenerWithW3CHeaders)
            {
                var activity = new Activity("System.Net.Http.HttpRequestOut").SetParentId("|guid.").Start();

                HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme);
                listenerWithW3CHeaders.OnActivityStart(requestMsg);

                // Request-Id and Correlation-Context are injected by HttpClient
                // check only W3C headers here
                Assert.AreEqual(this.testApplicationId1, GetRequestContextKeyValue(requestMsg, RequestResponseHeaders.RequestContextCorrelationSourceKey));
                Assert.AreEqual($"00-{activity.GetTraceId()}-{activity.GetSpanId()}-02", requestMsg.Headers.GetValues(W3C.W3CConstants.TraceParentHeader).Single());
                Assert.AreEqual($"{W3C.W3CConstants.AzureTracestateNamespace}={this.testApplicationId1}", requestMsg.Headers.GetValues(W3C.W3CConstants.TraceStateHeader).Single());
            }
        }
Exemple #3
0
        public void OnActivityStartInjectsW3CHeadersAndTracksLegacyId()
        {
            var listenerWithW3CHeaders = new HttpCoreDiagnosticSourceListener(
                this.configuration,
                setComponentCorrelationHttpHeaders: true,
                correlationDomainExclusionList: new string[0],
                injectLegacyHeaders: false,
                injectW3CHeaders: true);

            this.configuration.TelemetryInitializers.Add(new W3COperationCorrelationTelemetryInitializer());
            using (listenerWithW3CHeaders)
            {
                var activity = new Activity("System.Net.Http.HttpRequestOut").SetParentId("foo").Start();

                HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme);
                listenerWithW3CHeaders.OnActivityStart(requestMsg);

                // simulate Request-Id injection by .NET
                requestMsg.Headers.Add(RequestResponseHeaders.RequestIdHeader, activity.Id);

                listenerWithW3CHeaders.OnActivityStop(new HttpResponseMessage(HttpStatusCode.OK), requestMsg, TaskStatus.RanToCompletion);

                var telemetry = this.sentTelemetry.Single() as DependencyTelemetry;
                Assert.IsNotNull(telemetry);
                Assert.IsTrue(telemetry.Properties.ContainsKey(W3C.W3CConstants.LegacyRequestIdProperty));
                Assert.AreEqual(activity.Id, telemetry.Properties[W3C.W3CConstants.LegacyRequestIdProperty]);

                Assert.IsTrue(telemetry.Properties.ContainsKey(W3C.W3CConstants.LegacyRootIdProperty));
                Assert.AreEqual(activity.RootId, telemetry.Properties[W3C.W3CConstants.LegacyRootIdProperty]);
            }
        }
Exemple #4
0
        public void OnStartActivityWithUriInExcludedDomainListW3COff()
        {
            Activity.DefaultIdFormat      = ActivityIdFormat.Hierarchical;
            Activity.ForceDefaultIdFormat = true;

            HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, "http://excluded.host.com/path/to/file.html");

            using (var listener = new HttpCoreDiagnosticSourceListener(
                       this.configuration,
                       setComponentCorrelationHttpHeaders: true,
                       correlationDomainExclusionList: new string[] { "excluded.host.com" },
                       injectLegacyHeaders: false,
                       injectRequestIdInW3CMode: true,
                       HttpInstrumentationVersion.V2))
            {
                listener.OnActivityStart(requestMsg);
                Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.RequestContextHeader));
                Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.RequestIdHeader));
                Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.StandardParentIdHeader));
                Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.StandardRootIdHeader));
                Assert.IsFalse(requestMsg.Headers.Contains(W3C.W3CConstants.TraceParentHeader));
                Assert.IsFalse(requestMsg.Headers.Contains(W3C.W3CConstants.TraceStateHeader));
                Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.CorrelationContextHeader));
            }
        }
Exemple #5
0
        public void NetCore30_OnActivityStartInjectsLegacyHeaders()
        {
            var listenerWithLegacyHeaders = new HttpCoreDiagnosticSourceListener(
                this.configuration,
                setComponentCorrelationHttpHeaders: true,
                correlationDomainExclusionList: new[] { "excluded.host.com" },
                injectLegacyHeaders: true,
                injectRequestIdInW3CMode: true,
                HttpInstrumentationVersion.V3);

            using (listenerWithLegacyHeaders)
            {
                var activity = new Activity("System.Net.Http.HttpRequestOut");
                activity.AddBaggage("k", "v");
                activity.TraceStateString = "trace=state";
                activity.Start();

                HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme);
                listenerWithLegacyHeaders.OnActivityStart(requestMsg);

                // Traceparent and tracestate and Correlation-Context are injected by HttpClient
                // check only legacy headers here
                Assert.AreEqual(activity.RootId,
                                requestMsg.Headers.GetValues(RequestResponseHeaders.StandardRootIdHeader).Single());
                Assert.AreEqual(activity.SpanId.ToHexString(), requestMsg.Headers.GetValues(RequestResponseHeaders.StandardParentIdHeader).Single());
                Assert.AreEqual(this.testApplicationId1, GetRequestContextKeyValue(requestMsg, RequestResponseHeaders.RequestContextCorrelationSourceKey));
            }
        }
Exemple #6
0
        public void OnActivityStartInjectsHeadersRequestIdOff()
        {
            using (var listenerWithoutRequestId = new HttpCoreDiagnosticSourceListener(
                       this.configuration,
                       setComponentCorrelationHttpHeaders: true,
                       correlationDomainExclusionList: new[] { "excluded.host.com" },
                       injectLegacyHeaders: false,
                       injectRequestIdInW3CMode: false,
                       HttpInstrumentationVersion.V2))
            {
                var activity = new Activity("System.Net.Http.HttpRequestOut");
                activity.Start();

                HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme);
                listenerWithoutRequestId.OnActivityStart(requestMsg);

                Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.RequestIdHeader));

                var traceparents = requestMsg.Headers.GetValues(W3C.W3CConstants.TraceParentHeader).ToArray();
                Assert.AreEqual(1, traceparents.Length);
                Assert.AreEqual(activity.Id, traceparents[0]);
            }
        }
Exemple #7
0
        public void NetCore30_OnActivityStartInjectsHeadersRequestIdOff()
        {
            using (var listenerWithoutRequestId = new HttpCoreDiagnosticSourceListener(
                       this.configuration,
                       setComponentCorrelationHttpHeaders: true,
                       correlationDomainExclusionList: new[] { "excluded.host.com" },
                       injectLegacyHeaders: false,
                       injectRequestIdInW3CMode: false,
                       HttpInstrumentationVersion.V3))
            {
                var activity = new Activity("System.Net.Http.HttpRequestOut");
                activity.AddBaggage("k", "v");
                activity.TraceStateString = "trace=state";
                activity.Start();

                HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme);
                listenerWithoutRequestId.OnActivityStart(requestMsg);

                Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.RequestIdHeader));
                Assert.IsFalse(requestMsg.Headers.Contains(W3C.W3CConstants.TraceParentHeader));
                Assert.IsFalse(requestMsg.Headers.Contains(W3C.W3CConstants.TraceStateHeader));
                Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.CorrelationContextHeader));
            }
        }