public void TestRequestUriIsPopulatedByMiddleware(bool isAspNetCore2)
        {
            HttpContext context = CreateContext(HttpRequestScheme, HttpRequestHost, HttpRequestPath, HttpRequestQueryString);

            using (var hostingListener = CreateHostingListener(isAspNetCore2))
            {
                HandleRequestBegin(hostingListener, context, 0, isAspNetCore2);

                Assert.NotNull(context.Features.Get<RequestTelemetry>());
                Assert.Equal(CommonMocks.TestApplicationId,
                    HttpHeadersUtilities.GetRequestContextKeyValue(context.Response.Headers,
                        RequestResponseHeaders.RequestContextTargetKey));

                HandleRequestEnd(hostingListener, context, 0, isAspNetCore2);
            }

            Assert.Single(sentTelemetry);
            Assert.IsType<RequestTelemetry>(this.sentTelemetry.First());
            RequestTelemetry requestTelemetry = sentTelemetry.First() as RequestTelemetry;
            Assert.NotNull(requestTelemetry.Url);
            Assert.True(requestTelemetry.Duration.TotalMilliseconds >= 0);
            Assert.True(requestTelemetry.Success);
            Assert.Equal(CommonMocks.InstrumentationKey, requestTelemetry.Context.InstrumentationKey);
            Assert.True(string.IsNullOrEmpty(requestTelemetry.Source));
            Assert.Equal(CreateUri(HttpRequestScheme, HttpRequestHost, HttpRequestPath, HttpRequestQueryString), requestTelemetry.Url);
            Assert.NotEmpty(requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Contains(SdkVersionTestUtils.VersionPrefix, requestTelemetry.Context.GetInternalContext().SdkVersion);
        }
        public void OnEndRequestFromSameInstrumentationKey(bool isAspNetCore2)
        {
            HttpContext context = CreateContext(HttpRequestScheme, HttpRequestHost, "/Test", method: "GET");
            HttpHeadersUtilities.SetRequestContextKeyValue(context.Request.Headers, RequestResponseHeaders.RequestContextSourceKey, CommonMocks.TestApplicationId);

            using (var hostingListener = CreateHostingListener(isAspNetCore2))
            {
                HandleRequestBegin(hostingListener, context, 0, isAspNetCore2);

                Assert.NotNull(context.Features.Get<RequestTelemetry>());

                Assert.Equal(CommonMocks.TestApplicationId,
                    HttpHeadersUtilities.GetRequestContextKeyValue(context.Response.Headers,
                        RequestResponseHeaders.RequestContextTargetKey));

                HandleRequestEnd(hostingListener, context, 0, isAspNetCore2);
            }

            Assert.NotNull(this.sentTelemetry);
            Assert.IsType<RequestTelemetry>(this.sentTelemetry.First());
            RequestTelemetry requestTelemetry = this.sentTelemetry.First() as RequestTelemetry;
            Assert.True(requestTelemetry.Duration.TotalMilliseconds >= 0);
            Assert.True(requestTelemetry.Success);
            Assert.Equal(CommonMocks.InstrumentationKey, requestTelemetry.Context.InstrumentationKey);
            Assert.True(string.IsNullOrEmpty(requestTelemetry.Source));
            Assert.Equal(CreateUri(HttpRequestScheme, HttpRequestHost, "/Test"), requestTelemetry.Url);
            Assert.NotEmpty(requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Contains(SdkVersionTestUtils.VersionPrefix, requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Equal("GET /Test", requestTelemetry.Name);
        }
Ejemplo n.º 3
0
        public void TestConditionalAppIdFlagIsRespected(bool isAspNetCore2)
        {
            HttpContext            context = CreateContext(HttpRequestScheme, HttpRequestHost);
            TelemetryConfiguration config  = TelemetryConfiguration.CreateDefault();

            // This flag tells sdk to not add app id in response header, unless its received in incoming headers.
            // For tests, no incoming headers is add, so the response should not have app id as well.
            config.ExperimentalFeatures.Add("conditionalAppId");

            using (var hostingListener = CreateHostingListener(isAspNetCore2, config))
            {
                HandleRequestBegin(hostingListener, context, 0, isAspNetCore2);

                Assert.NotNull(context.Features.Get <RequestTelemetry>());

                // VALIDATE
                Assert.Null(HttpHeadersUtilities.GetRequestContextKeyValue(context.Response.Headers,
                                                                           RequestResponseHeaders.RequestContextTargetKey));

                HandleRequestEnd(hostingListener, context, 0, isAspNetCore2);
            }

            Assert.Single(sentTelemetry);
            Assert.IsType <RequestTelemetry>(this.sentTelemetry.First());

            RequestTelemetry requestTelemetry = this.sentTelemetry.First() as RequestTelemetry;

            Assert.True(requestTelemetry.Duration.TotalMilliseconds >= 0);
            Assert.True(requestTelemetry.Success);
            Assert.Equal(CommonMocks.InstrumentationKey, requestTelemetry.Context.InstrumentationKey);
            Assert.True(string.IsNullOrEmpty(requestTelemetry.Source));
            Assert.Equal(CreateUri(HttpRequestScheme, HttpRequestHost), requestTelemetry.Url);
            Assert.NotEmpty(requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Contains(SdkVersionTestUtils.VersionPrefix, requestTelemetry.Context.GetInternalContext().SdkVersion);
        }
Ejemplo n.º 4
0
        public void ApplicationInsightsUrlAreNotTracked()
        {
            var activity = new Activity("System.Net.Http.HttpRequestOut");

            activity.Start();

            var appInsightsUrl            = TelemetryConfiguration.CreateDefault().TelemetryChannel.EndpointAddress;
            HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Get, appInsightsUrl);

            using (var listener = this.CreateHttpListener(HttpInstrumentationVersion.V2))
            {
                listener.OnActivityStart(requestMsg);
                Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers,
                                                                             RequestResponseHeaders.RequestContextCorrelationSourceKey));
                Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers,
                                                                             RequestResponseHeaders.RequestIdHeader));
                Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers,
                                                                             RequestResponseHeaders.StandardParentIdHeader));
                Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers,
                                                                             RequestResponseHeaders.StandardRootIdHeader));

                listener.OnActivityStop(null, requestMsg, TaskStatus.Faulted);

                Assert.IsFalse(this.sentTelemetry.Any());
            }
        }
Ejemplo n.º 5
0
        public void OnEndRequestFromSameInstrumentationKey()
        {
            HttpContext context = CreateContext(HttpRequestScheme, HttpRequestHost, "/Test", method: "GET");

            HttpHeadersUtilities.SetRequestContextKeyValue(context.Request.Headers, RequestResponseHeaders.RequestContextSourceKey, CorrelationIdLookupHelperStub.AppId);

            HandleRequestBegin(context, 0);

            Assert.NotNull(context.Features.Get <RequestTelemetry>());

            Assert.Equal(HttpHeadersUtilities.GetRequestContextKeyValue(context.Response.Headers, RequestResponseHeaders.RequestContextTargetKey), CorrelationIdLookupHelperStub.AppId);

            HandleRequestEnd(context, 0);

            Assert.NotNull(this.sentTelemetry);
            Assert.IsType <RequestTelemetry>(this.sentTelemetry[0]);
            RequestTelemetry requestTelemetry = this.sentTelemetry[0] as RequestTelemetry;

            Assert.True(requestTelemetry.Duration.TotalMilliseconds >= 0);
            Assert.True(requestTelemetry.Success);
            Assert.Equal(CommonMocks.InstrumentationKey, requestTelemetry.Context.InstrumentationKey);
            Assert.Equal("", requestTelemetry.Source);
            Assert.Equal("GET", requestTelemetry.HttpMethod);
            Assert.Equal(CreateUri(HttpRequestScheme, HttpRequestHost, "/Test"), requestTelemetry.Url);
            Assert.NotEmpty(requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Contains(SdkVersionTestUtils.VersionPrefix, requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Equal("GET /Test", requestTelemetry.Name);
        }
        public void OnEndRequestFromDifferentInstrumentationKey()
        {
            HttpContext context = CreateContext(HttpRequestScheme, HttpRequestHost, "/Test", method: "GET");

            HttpHeadersUtilities.SetRequestContextKeyValue(context.Request.Headers, RequestResponseHeaders.RequestContextSourceKey, "DIFFERENT_INSTRUMENTATION_KEY_HASH");

            HandleRequestBegin(context, 0);

            Assert.NotNull(context.Features.Get <RequestTelemetry>());
            Assert.Equal(CommonMocks.TestApplicationId, HttpHeadersUtilities.GetRequestContextKeyValue(context.Response.Headers, RequestResponseHeaders.RequestContextTargetKey));

            HandleRequestEnd(context, 0);

            Assert.Equal(1, sentTelemetry.Count);
            Assert.IsType <RequestTelemetry>(this.sentTelemetry.First());
            RequestTelemetry requestTelemetry = this.sentTelemetry.First() as RequestTelemetry;

            Assert.True(requestTelemetry.Duration.TotalMilliseconds >= 0);
            Assert.True(requestTelemetry.Success);
            Assert.Equal(CommonMocks.InstrumentationKey, requestTelemetry.Context.InstrumentationKey);
            Assert.Equal("", requestTelemetry.Source);
            Assert.Equal("GET", requestTelemetry.HttpMethod);
            Assert.Equal(CreateUri(HttpRequestScheme, HttpRequestHost, "/Test"), requestTelemetry.Url);
            Assert.NotEmpty(requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Contains(SdkVersionTestUtils.VersionPrefix, requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Equal("GET /Test", requestTelemetry.Name);
        }
        public void TestSdkVersionIsPopulatedByMiddleware()
        {
            HttpContext context = CreateContext(HttpRequestScheme, HttpRequestHost);

            HandleRequestBegin(context, 0);

            Assert.NotNull(context.Features.Get <RequestTelemetry>());

            Assert.Equal(CommonMocks.TestApplicationId, HttpHeadersUtilities.GetRequestContextKeyValue(context.Response.Headers, RequestResponseHeaders.RequestContextTargetKey));

            HandleRequestEnd(context, 0);

            Assert.Equal(1, sentTelemetry.Count);
            Assert.IsType <RequestTelemetry>(this.sentTelemetry.First());

            RequestTelemetry requestTelemetry = this.sentTelemetry.First() as RequestTelemetry;

            Assert.True(requestTelemetry.Duration.TotalMilliseconds >= 0);
            Assert.True(requestTelemetry.Success);
            Assert.Equal(CommonMocks.InstrumentationKey, requestTelemetry.Context.InstrumentationKey);
            Assert.Equal("", requestTelemetry.Source);
            Assert.Equal(CreateUri(HttpRequestScheme, HttpRequestHost), requestTelemetry.Url);
            Assert.NotEmpty(requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Contains(SdkVersionTestUtils.VersionPrefix, requestTelemetry.Context.GetInternalContext().SdkVersion);
        }
        public void RequestWillBeMarkedAsFailedForRunawayException()
        {
            HttpContext context = CreateContext(HttpRequestScheme, HttpRequestHost);

            HandleRequestBegin(context, 0);

            Assert.NotNull(context.Features.Get <RequestTelemetry>());
            Assert.Equal(CommonMocks.TestApplicationId, HttpHeadersUtilities.GetRequestContextKeyValue(context.Response.Headers, RequestResponseHeaders.RequestContextTargetKey));

            middleware.OnDiagnosticsUnhandledException(context, null);
            HandleRequestEnd(context, 0);

            var telemetries = sentTelemetry.ToArray();

            Assert.Equal(2, sentTelemetry.Count);
            Assert.IsType <ExceptionTelemetry>(telemetries[0]);

            Assert.IsType <RequestTelemetry>(telemetries[1]);
            RequestTelemetry requestTelemetry = telemetries[1] as RequestTelemetry;

            Assert.True(requestTelemetry.Duration.TotalMilliseconds >= 0);
            Assert.False(requestTelemetry.Success);
            Assert.Equal(CommonMocks.InstrumentationKey, requestTelemetry.Context.InstrumentationKey);
            Assert.Equal("", requestTelemetry.Source);
            Assert.Equal(CreateUri(HttpRequestScheme, HttpRequestHost), requestTelemetry.Url);
            Assert.NotEmpty(requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Contains(SdkVersionTestUtils.VersionPrefix, requestTelemetry.Context.GetInternalContext().SdkVersion);
        }
        /// <summary>
        /// Implements initialization logic.
        /// </summary>
        /// <param name="platformContext">Http context</param>
        /// <param name="requestTelemetry">Request telemetry object associated with the current request.</param>
        /// <param name="telemetry">Telemetry item to initialize.</param>
        protected override void OnInitializeTelemetry(
            HttpContext platformContext,
            RequestTelemetry requestTelemetry,
            ITelemetry telemetry)
        {
            HttpRequest currentRequest = platformContext.Request;

            if (currentRequest?.Headers != null && string.IsNullOrEmpty(requestTelemetry.Source))
            {
                string headerCorrelationId = HttpHeadersUtilities.GetRequestContextKeyValue(currentRequest.Headers, RequestResponseHeaders.RequestContextSourceKey);

                string appCorrelationId = null;
                // If the source header is present on the incoming request, and it is an external component (not the same ikey as the one used by the current component), populate the source field.
                if (!string.IsNullOrEmpty(headerCorrelationId))
                {
                    if (string.IsNullOrEmpty(requestTelemetry.Context.InstrumentationKey))
                    {
                        requestTelemetry.Source = headerCorrelationId;
                    }
                    else if (this.correlationIdLookupHelper.TryGetXComponentCorrelationId(requestTelemetry.Context.InstrumentationKey, out appCorrelationId) &&
                             appCorrelationId != headerCorrelationId)
                    {
                        requestTelemetry.Source = headerCorrelationId;
                    }
                }
            }
        }
Ejemplo n.º 10
0
        public void OnRequestWithUriInExcludedDomainList()
        {
            using (var listener = new HttpCoreDiagnosticSourceListener(
                       this.configuration,
                       setComponentCorrelationHttpHeaders: true,
                       correlationDomainExclusionList: new string[] { "excluded.host.com" },
                       injectLegacyHeaders: false,
                       injectRequestIdInW3CMode: true,
                       HttpInstrumentationVersion.V1))
            {
                Guid loggingRequestId         = Guid.NewGuid();
                HttpRequestMessage requestMsg =
                    new HttpRequestMessage(HttpMethod.Post, "http://excluded.host.com/path/to/file.html");
                listener.OnRequest(requestMsg, loggingRequestId);

                Assert.IsTrue(listener.PendingDependencyTelemetry.TryGetValue(requestMsg, out _));
                Assert.AreEqual(0, this.sentTelemetry.Count);

                Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers,
                                                                             RequestResponseHeaders.RequestContextCorrelationSourceKey));
                Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers,
                                                                             RequestResponseHeaders.RequestIdHeader));
                Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers,
                                                                             RequestResponseHeaders.StandardParentIdHeader));
                Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers,
                                                                             RequestResponseHeaders.StandardRootIdHeader));
            }
        }
        /// <summary>
        /// Implements initialization logic.
        /// </summary>
        /// <param name="platformContext">Http context</param>
        /// <param name="requestTelemetry">Request telemetry object associated with the current request.</param>
        /// <param name="telemetry">Telemetry item to initialize.</param>
        protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry)
        {
            HttpRequest currentRequest = platformContext.Request;

            if (currentRequest?.Headers != null && string.IsNullOrEmpty(requestTelemetry.Source))
            {
                string headerCorrelationId = HttpHeadersUtilities.GetRequestContextKeyValue(currentRequest.Headers, RequestResponseHeaders.RequestContextSourceKey);

                string applicationId = null;
                // If the source header is present on the incoming request, and it is an external component (not the same ikey as the one used by the current component), populate the source field.
                if (!string.IsNullOrEmpty(headerCorrelationId))
                {
                    headerCorrelationId = StringUtilities.EnforceMaxLength(headerCorrelationId, InjectionGuardConstants.AppIdMaxLengeth);
                    if (string.IsNullOrEmpty(requestTelemetry.Context.InstrumentationKey))
                    {
                        requestTelemetry.Source = headerCorrelationId;
                    }
                    else if ((this.applicationIdProvider?.TryGetApplicationId(requestTelemetry.Context.InstrumentationKey, out applicationId) ?? false) &&
                             applicationId != headerCorrelationId)
                    {
                        requestTelemetry.Source = headerCorrelationId;
                    }
                }
            }
        }
Ejemplo n.º 12
0
        public void OnStartActivityWithUriInExcludedDomainList()
        {
            HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, "http://excluded.host.com/path/to/file.html");

            this.listener.OnActivityStart(requestMsg);
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers, RequestResponseHeaders.RequestContextCorrelationSourceKey));
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers, RequestResponseHeaders.RequestIdHeader));
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers, RequestResponseHeaders.StandardParentIdHeader));
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers, RequestResponseHeaders.StandardRootIdHeader));
        }
Ejemplo n.º 13
0
        public void GetRequestContextKeyValueShouldReturnContextKeyValue()
        {
            IHeaderDictionary headerDictionary = new HeaderDictionary(
                new Dictionary <string, StringValues>()
            {
                { RequestResponseHeaders.RequestContextHeader, new StringValues("app=id") },
                { "NoizyName", new StringValues("noizy=noizy-id") }
            });

            string actual = HttpHeadersUtilities.GetRequestContextKeyValue(headerDictionary, "app");

            Assert.Equal("id", actual);
        }
        public void OnRequestWithUriInExcludedDomainList()
        {
            Guid loggingRequestId      = Guid.NewGuid();
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://excluded.host.com/path/to/file.html");

            this.listener.OnRequest(request, loggingRequestId);
            Assert.AreEqual(1, this.listener.PendingDependencyTelemetry.Count());
            Assert.AreEqual(0, this.sentTelemetry.Count);

            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(request.Headers, RequestResponseHeaders.RequestContextCorrelationSourceKey));
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(request.Headers, RequestResponseHeaders.RequestIdHeader));
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(request.Headers, RequestResponseHeaders.StandardParentIdHeader));
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(request.Headers, RequestResponseHeaders.StandardRootIdHeader));
        }
Ejemplo n.º 15
0
        public void ApplicationInsightsUrlAreNotTracked()
        {
            var activity = new Activity("System.Net.Http.HttpRequestOut");

            activity.Start();

            var appInsightsUrl            = TelemetryConfiguration.Active.TelemetryChannel.EndpointAddress;
            HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Get, appInsightsUrl);

            this.listener.OnActivityStart(requestMsg);
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers, RequestResponseHeaders.RequestContextCorrelationSourceKey));
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers, RequestResponseHeaders.RequestIdHeader));
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers, RequestResponseHeaders.StandardParentIdHeader));
            Assert.IsNull(HttpHeadersUtilities.GetRequestContextKeyValue(requestMsg.Headers, RequestResponseHeaders.StandardRootIdHeader));

            var exception = new HttpRequestException("message", new Exception("The server name or address could not be resolved"));

            this.listener.OnException(exception, requestMsg);
            this.listener.OnActivityStop(null, requestMsg, TaskStatus.Faulted);

            Assert.IsFalse(this.sentTelemetry.Any());
        }
        public void OnEndRequestSetsRequestNameToMethodAndPathForPostRequest()
        {
            HttpContext context = CreateContext(HttpRequestScheme, HttpRequestHost, "/Test", method: "POST");

            HandleRequestBegin(context, 0);

            Assert.NotNull(context.Features.Get <RequestTelemetry>());
            Assert.Equal(CommonMocks.TestApplicationId, HttpHeadersUtilities.GetRequestContextKeyValue(context.Response.Headers, RequestResponseHeaders.RequestContextTargetKey));

            HandleRequestEnd(context, 0);

            Assert.Single(sentTelemetry);
            Assert.IsType <RequestTelemetry>(this.sentTelemetry.First());
            RequestTelemetry requestTelemetry = this.sentTelemetry.Single() as RequestTelemetry;

            Assert.True(requestTelemetry.Duration.TotalMilliseconds >= 0);
            Assert.True(requestTelemetry.Success);
            Assert.Equal(CommonMocks.InstrumentationKey, requestTelemetry.Context.InstrumentationKey);
            Assert.True(string.IsNullOrEmpty(requestTelemetry.Source));
            Assert.Equal(CreateUri(HttpRequestScheme, HttpRequestHost, "/Test"), requestTelemetry.Url);
            Assert.NotEmpty(requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Contains(SdkVersionTestUtils.VersionPrefix, requestTelemetry.Context.GetInternalContext().SdkVersion);
            Assert.Equal("POST /Test", requestTelemetry.Name);
        }
 private static string GetRequestContextKeyValue(HttpRequestMessage request, string keyName)
 {
     return(HttpHeadersUtilities.GetRequestContextKeyValue(request.Headers, keyName));
 }