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);
        }
Example #2
0
        public void SetHeaderKeyValueWithEmptyHeaders()
        {
            HttpHeaders headers = CreateHeaders();

            HttpHeadersUtilities.SetHeaderKeyValue(headers, "HEADER_NAME", "KEY_NAME", "KEY_VALUE");
            Assert.AreEqual("KEY_VALUE", HttpHeadersUtilities.GetHeaderKeyValue(headers, "HEADER_NAME", "KEY_NAME"));
        }
Example #3
0
        public void GetHeaderKeyValuesWithMatchingHeader()
        {
            HttpHeaders headers = CreateHeaders();

            headers.Add("HEADER_NAME", "KEY_NAME=KEY_VALUE");
            Assert.AreEqual("KEY_VALUE", HttpHeadersUtilities.GetHeaderKeyValue(headers, "HEADER_NAME", "KEY_NAME"));
        }
Example #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());
            }
        }
        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);
        }
Example #6
0
        public void GetHeaderValuesWithMatchingHeader()
        {
            HttpHeaders headers = CreateHeaders();

            headers.Add("MOCK_HEADER_NAME", "MOCK_HEADER_VALUE");
            EnumerableAssert.AreEqual(new[] { "MOCK_HEADER_VALUE" }, HttpHeadersUtilities.GetHeaderValues(headers, "MOCK_HEADER_NAME"));
        }
Example #7
0
        public async Task TestDependencyCollectionWithW3CHeadersWithState()
        {
            using (var module = new DependencyTrackingTelemetryModule())
            {
                module.EnableW3CHeadersInjection = true;
                this.config.TelemetryInitializers.Add(new W3COperationCorrelationTelemetryInitializer());
                module.Initialize(this.config);

                var parent = new Activity("parent")
                             .Start()
                             .GenerateW3CContext();

                parent.SetTracestate("some=state");

                var url     = new Uri(localhostUrl);
                var request = new HttpRequestMessage(HttpMethod.Get, url);
                using (new LocalServer(localhostUrl))
                {
                    await new HttpClient().SendAsync(request);
                }

                // DiagnosticSource Response event is fired after SendAsync returns on netcoreapp1.*
                // let's wait until dependency is collected
                Assert.IsTrue(SpinWait.SpinUntil(() => this.sentTelemetry != null, TimeSpan.FromSeconds(1)));

                parent.Stop();

                var traceState = HttpHeadersUtilities.GetHeaderValues(request.Headers, W3CConstants.TraceStateHeader).First();
                Assert.AreEqual($"{W3CConstants.AzureTracestateNamespace}={expectedAppId},some=state", traceState);
            }
        }
Example #8
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 OnResponseWithFailedResponseEventWithMatchingRequestAndDifferentTargetInstrumentationKeyHashHeader()
        {
            Guid loggingRequestId      = Guid.NewGuid();
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme);

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

            DependencyTelemetry telemetry = this.listener.PendingDependencyTelemetry.Single().Telemetry;

            Assert.AreEqual(string.Empty, telemetry.ResultCode);
            Assert.AreEqual(true, telemetry.Success);

            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.NotFound);
            string targetApplicationId   = MockAppId2;

            HttpHeadersUtilities.SetRequestContextKeyValue(response.Headers, RequestResponseHeaders.RequestContextCorrelationTargetKey, targetApplicationId);

            this.listener.OnResponse(response, loggingRequestId);
            Assert.AreEqual(0, this.listener.PendingDependencyTelemetry.Count());
            Assert.AreEqual(1, this.sentTelemetry.Count);
            Assert.AreSame(telemetry, this.sentTelemetry.Single());

            Assert.AreEqual(RemoteDependencyConstants.AI, telemetry.Type);
            Assert.AreEqual(GetApplicationInsightsTarget(targetApplicationId), telemetry.Target);
            Assert.AreEqual(NotFoundResultCode, telemetry.ResultCode);
            Assert.AreEqual(false, telemetry.Success);
        }
Example #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));
            }
        }
        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);
        }
        /// <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;
                    }
                }
            }
        }
        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);
        }
Example #14
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);
        }
        /// <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;
                    }
                }
            }
        }
        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);
        }
Example #17
0
 public void SetHeaderKeyValueShouldRequireHeaders()
 {
     Assert.ThrowsAny <ArgumentNullException>(() =>
     {
         IHeaderDictionary nullDictionary = null;
         HttpHeadersUtilities.SetHeaderKeyValue(nullDictionary, "header", "key", "value");
     });
 }
Example #18
0
        public void GetHeaderValueEmpty()
        {
            IHeaderDictionary headers = new HeaderDictionary();
            var values = HttpHeadersUtilities.SafeGetCommaSeparatedHeaderValues(headers, W3C.W3CConstants.TraceStateHeader, 100500, 100500)?.ToList();

            Assert.NotNull(values);
            Assert.Empty(values);
        }
Example #19
0
        public void GetHeaderKeyValuesWithMultipleMatchingHeaderNamesButOnlyOneMatchingKeyName()
        {
            HttpHeaders headers = CreateHeaders();

            headers.Add("HEADER_NAME", "A=a");
            headers.Add("HEADER_NAME", "B=b");
            headers.Add("HEADER_NAME", "C=c");
            Assert.AreEqual("b", HttpHeadersUtilities.GetHeaderKeyValue(headers, "HEADER_NAME", "B"));
        }
Example #20
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));
        }
Example #21
0
        public void GetHeaderValueMaxItemsTruncatesEndInvalid()
        {
            IHeaderDictionary headers = new HeaderDictionary(new Dictionary <string, StringValues> {
                [W3C.W3CConstants.TraceStateHeader] = "k1=v1,k2=v2"
            });
            var values = HttpHeadersUtilities.SafeGetCommaSeparatedHeaderValues(headers, W3C.W3CConstants.TraceStateHeader, 100500, 0)?.ToList();

            Assert.NotNull(values);
            Assert.Empty(values);
        }
Example #22
0
        public void SetHeaderKeyValueWithMultipleMatchingHeaderNamesButOnlyOneMatchingKeyName()
        {
            HttpHeaders headers = CreateHeaders();

            headers.Add("HEADER_NAME", "A=a1");
            headers.Add("HEADER_NAME", "B=b1");
            headers.Add("HEADER_NAME", "C=c1");
            HttpHeadersUtilities.SetHeaderKeyValue(headers, "HEADER_NAME", "B", "b2");
            EnumerableAssert.AreEqual(new[] { "A=a1", "C=c1", "B=b2" }, HttpHeadersUtilities.GetHeaderValues(headers, "HEADER_NAME"));
            Assert.IsTrue(HttpHeadersUtilities.ContainsHeaderKeyValue(headers, "HEADER_NAME", "B"));
        }
Example #23
0
        public void SetRequestContextKeyValueShouldSetTheHeaders()
        {
            IHeaderDictionary headers = new HeaderDictionary();

            HttpHeadersUtilities.SetRequestContextKeyValue(headers, "key", "value");

            Assert.Equal(1, headers.Count);

            Assert.Equal(RequestResponseHeaders.RequestContextHeader, headers.First().Key);
            Assert.Equal("key=value", headers.First().Value);
        }
Example #24
0
        public void ContainsRequestContextKeyValueShouldReturnTrueWhenExists()
        {
            IHeaderDictionary headers = new HeaderDictionary(
                new Dictionary <string, StringValues> {
                { RequestResponseHeaders.RequestContextHeader, new StringValues("app=id,other=otherValue") }
            });

            Assert.True(HttpHeadersUtilities.ContainsRequestContextKeyValue(headers, "app"));
            Assert.True(HttpHeadersUtilities.ContainsRequestContextKeyValue(headers, "other"));
            Assert.False(HttpHeadersUtilities.ContainsRequestContextKeyValue(headers, "Non-exists"));
        }
Example #25
0
        public void SetHeaderKeyValueWithMultipleMatchingHeaderNamesAndMultipleMatchingKeyNames()
        {
            HttpHeaders headers = CreateHeaders();

            headers.Add("HEADER_NAME", "A=a");
            headers.Add("HEADER_NAME", "B=b");
            headers.Add("HEADER_NAME", "C=c1");
            headers.Add("HEADER_NAME", "C=c2");
            HttpHeadersUtilities.SetHeaderKeyValue(headers, "HEADER_NAME", "C", "c3");
            EnumerableAssert.AreEqual(new[] { "A=a", "B=b", "C=c3" }, HttpHeadersUtilities.GetHeaderValues(headers, "HEADER_NAME"));
        }
Example #26
0
        public void SetHeaderKeyValueShouldAddTheHeader()
        {
            IHeaderDictionary headers = new HeaderDictionary();

            HttpHeadersUtilities.SetHeaderKeyValue(headers, "newHeader", "key", "value");

            Assert.Equal(1, headers.Count);

            Assert.Equal("newHeader", headers.First().Key);
            Assert.Equal("key=value", headers.First().Value);
        }
Example #27
0
        public void GetHeaderValueMaxItemsTruncatesEnd()
        {
            IHeaderDictionary headers = new HeaderDictionary(new Dictionary <string, StringValues> {
                [W3C.W3CConstants.TraceStateHeader] = "k1=v1,k2=v2,k3=v3,k4=v4"
            });
            var values = HttpHeadersUtilities.SafeGetCommaSeparatedHeaderValues(headers, W3C.W3CConstants.TraceStateHeader, 100500, 2)?.ToList();

            Assert.NotNull(values);
            Assert.Equal(2, values.Count);
            Assert.Equal("k1=v1", values.First());
            Assert.Equal("k2=v2", values.Last());
        }
Example #28
0
        public void GetHeaderKeyValueShouldReturnValue()
        {
            IHeaderDictionary headerDictionary = new HeaderDictionary(
                new Dictionary <string, StringValues>()
            {
                { "HeaderName", new StringValues("app=id") },
                { "NoizyName", new StringValues("noizy=noizy-id") }
            });

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

            Assert.Equal("id", actual);
        }
Example #29
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));
        }