public async Task SendAsync_CurrentActivitySet_RequestHeadersSet(bool useW3CFormat, ActivityContextHeaders activityContextHeaders) { const string TraceStateString = "CustomTraceStateString"; string expectedId = null; var invoker = new HttpMessageInvoker(new ActivityPropagationHandler(activityContextHeaders, new MockHttpHandler( (HttpRequestMessage request, CancellationToken cancellationToken) => { var headers = request.Headers; Assert.True(headers.TryGetValues(useW3CFormat ? "traceparent" : "Request-Id", out var values)); Assert.Equal(expectedId, Assert.Single(values)); if (useW3CFormat) { Assert.True(headers.TryGetValues("tracestate", out values)); Assert.Equal(TraceStateString, Assert.Single(values)); } if (activityContextHeaders.HasFlag(ActivityContextHeaders.Baggage)) { Assert.True(headers.TryGetValues("Baggage", out values)); Assert.Equal("foo=bar", Assert.Single(values)); } if (activityContextHeaders.HasFlag(ActivityContextHeaders.CorrelationContext)) { Assert.True(headers.TryGetValues("Correlation-Context", out values)); Assert.Equal("foo=bar", Assert.Single(values)); } return(Task.FromResult <HttpResponseMessage>(null)); }))); var activity = new Activity("CustomOperation"); if (useW3CFormat) { activity.SetIdFormat(ActivityIdFormat.W3C); activity.TraceStateString = TraceStateString; activity.SetParentId("00-01234567890123456789012345678901-0123456789012345-01"); } else { activity.SetIdFormat(ActivityIdFormat.Hierarchical); activity.SetParentId("|root"); } activity.AddBaggage("foo", "bar"); activity.Start(); expectedId = activity.Id; await invoker.SendAsync(new HttpRequestMessage(), CancellationToken.None); activity.Stop(); }
public ActivityPropagationHandler(ActivityContextHeaders activityContextHeaders, HttpMessageHandler innerHandler) : base(innerHandler) { _activityContextHeaders = activityContextHeaders; }