@Test public void testTracestateIsNotResolvedWithNullRequest() { Map<String, String> headers = new HashMap<>(); String incomingTracestate = getTracestateHeaderValue("id1"); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, incomingTracestate); RequestTelemetry requestTelemetry = new RequestTelemetry(); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.COMPLETE); mockProfileFetcher.setAppIdToReturn("id2"); TraceContextCorrelation.resolveRequestSource(null, requestTelemetry, "ikey1"); Assert.assertNull(requestTelemetry.getSource()); }
headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, TraceContextCorrelationTests.getTracestateHeaderValue("id1")); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); HttpServletResponse response = (HttpServletResponse)ServletUtils.generateDummyServletResponse(); Assert.assertEquals(TraceContextCorrelationTests.getRequestSourceValue("id1"), requestTelemetry.getSource());
Assert.assertEquals(TraceContextCorrelationTests.getRequestSourceValue("id1"), requestTelemetry.getSource());
@Test public void testTraceparentAreResolved() { //setup Map<String, String> headers = new HashMap<>(); Traceparent t = new Traceparent(); headers.put(TraceContextCorrelation.TRACEPARENT_HEADER_NAME, t.toString()); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); HttpServletResponse response = (HttpServletResponse)ServletUtils.generateDummyServletResponse(); RequestTelemetry requestTelemetry = new RequestTelemetry(); //run TraceContextCorrelation.resolveCorrelation(request, response, requestTelemetry); //validate we have generated proper ID's Assert.assertNotNull(requestTelemetry.getId()); Assert.assertTrue(requestTelemetry.getId().startsWith(formatedID(t.getTraceId()))); //validate operation context ID's OperationContext operation = requestTelemetry.getContext().getOperation(); Assert.assertEquals(t.getTraceId(), operation.getId()); Assert.assertEquals(formatedID(t.getTraceId() + "." + t.getSpanId()), operation.getParentId()); }
Assert.assertEquals(TraceContextCorrelationTests.getRequestSourceValue("id1"), requestTelemetry.getSource());
@Test public void testCorrelationIdsAreResolvedIfNoTraceparentHeader() { //setup - no headers Map<String, String> headers = new HashMap<>(); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); HttpServletResponse response = (HttpServletResponse)ServletUtils.generateDummyServletResponse(); RequestTelemetry requestTelemetry = new RequestTelemetry(); //run TraceContextCorrelation.resolveCorrelation(request, response, requestTelemetry); //validate operation context ID's - there is no parent, so parentId should be null, traceId // is newly generated and request.Id is based on new traceId-spanId OperationContext operation = requestTelemetry.getContext().getOperation(); Assert.assertNotNull(requestTelemetry.getId()); // First trace will have it's own spanId also. Assert.assertTrue(requestTelemetry.getId().startsWith(formatedID(operation.getId()))); Assert.assertNull(operation.getParentId()); }
@Test public void testTracestateIsNotResolvedWithNullIkey() { Map<String, String> headers = new HashMap<>(); String incomingTracestate = getTracestateHeaderValue("id1"); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, incomingTracestate); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); RequestTelemetry requestTelemetry = new RequestTelemetry(); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.COMPLETE); mockProfileFetcher.setAppIdToReturn("id2"); TraceContextCorrelation.resolveRequestSource(request, requestTelemetry, null); Assert.assertNull(requestTelemetry.getSource()); }
Assert.assertEquals(TraceContextCorrelationTests.getRequestSourceValue("id1"), requestTelemetry.getSource());
@Test public void testTracestateIsResolved() { Map<String, String> headers = new HashMap<>(); String incomingTracestate = getTracestateHeaderValue("id1"); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, incomingTracestate); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); RequestTelemetry requestTelemetry = new RequestTelemetry(); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.COMPLETE); mockProfileFetcher.setAppIdToReturn("id2"); TraceContextCorrelation.resolveRequestSource(request, requestTelemetry, "ikey1"); Assert.assertEquals("cid-v1:id1", requestTelemetry.getSource()); }
Assert.assertEquals(TraceContextCorrelationTests.getRequestSourceValue("id1"), requestTelemetry.getSource());
@Test public void testTracestateIsNotResolvedWithNullRequestTelemetry() { Map<String, String> headers = new HashMap<>(); String incomingTracestate = getTracestateHeaderValue("id1"); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, incomingTracestate); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); RequestTelemetry requestTelemetry = new RequestTelemetry(); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.COMPLETE); mockProfileFetcher.setAppIdToReturn("id2"); TraceContextCorrelation.resolveRequestSource(request, null, "ikey1"); Assert.assertNull(requestTelemetry.getSource()); }
@Test public void testSourceNotSetWhenIncomingAppIdInTraceStateIsSameAsCurrent() { Map<String, String> headers = new HashMap<>(); String incomingTracestate = getTracestateHeaderValue("id1"); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, incomingTracestate); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); RequestTelemetry requestTelemetry = new RequestTelemetry(); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.COMPLETE); mockProfileFetcher.setAppIdToReturn("id1"); TraceContextCorrelation.resolveRequestSource(request, requestTelemetry, "ikey1"); //source and target have same appId Assert.assertNull(requestTelemetry.getSource()); }
@Test(expected = AssertionError.class) public void testTraceStateIsNotResolvedIfHeaderDoesntHaveAzureComponent() { Map<String, String> headers = new HashMap<>(); // get tracestate with non azure component String incomingTracestate = getTracestateHeaderValue(null); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, incomingTracestate); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); RequestTelemetry requestTelemetry = new RequestTelemetry(); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.COMPLETE); mockProfileFetcher.setAppIdToReturn("id1"); TraceContextCorrelation.resolveRequestSource(request, requestTelemetry, "ikey1"); Assert.assertNull(requestTelemetry.getSource()); }
@Test public void testTracestateIsPassedAsIsWhenAppIdResolutionIsFailed() { //turn on W3C defaultModule.isW3CEnabled = true; //setup: initialize a request context RequestTelemetryContext context = new RequestTelemetryContext(DateTimeUtils.getDateTimeNow().getTime()); ThreadContext.setRequestTelemetryContext(context); //mock a servlet request with cross-component correlation headers Map<String, String> headers = new HashMap<>(); Traceparent tp = new Traceparent(); headers.put(TraceContextCorrelation.TRACEPARENT_HEADER_NAME, tp.toString()); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, TraceContextCorrelationTests.getTracestateHeaderValue("id1")); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); HttpServletResponse response = (HttpServletResponse)ServletUtils.generateDummyServletResponse(); //configure mock appId fetcher to return different appId from what's on the request header mockProfileFetcher.setAppIdToReturn("id2"); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.FAILED); //run defaultModule.onBeginRequest(request, response); Assert.assertNotNull(ThreadContext.getRequestTelemetryContext().getTracestate()); Assert.assertEquals(TraceContextCorrelationTests.getTracestateHeaderValue("id1"), ThreadContext.getRequestTelemetryContext().getTracestate().toString()); }
@Test public void testTracestateIsPassedAsItIsWhenAppIdResolutionIsPending() { //turn on W3C defaultModule.isW3CEnabled = true; //setup: initialize a request context RequestTelemetryContext context = new RequestTelemetryContext(DateTimeUtils.getDateTimeNow().getTime()); ThreadContext.setRequestTelemetryContext(context); //mock a servlet request with cross-component correlation headers Map<String, String> headers = new HashMap<>(); Traceparent tp = new Traceparent(); headers.put(TraceContextCorrelation.TRACEPARENT_HEADER_NAME, tp.toString()); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, TraceContextCorrelationTests.getTracestateHeaderValue("id1")); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); HttpServletResponse response = (HttpServletResponse)ServletUtils.generateDummyServletResponse(); //configure mock appId fetcher to return different appId from what's on the request header mockProfileFetcher.setAppIdToReturn("id2"); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.PENDING); //run defaultModule.onBeginRequest(request, response); Assert.assertNotNull(ThreadContext.getRequestTelemetryContext().getTracestate()); Assert.assertEquals(TraceContextCorrelationTests.getTracestateHeaderValue("id1"), ThreadContext.getRequestTelemetryContext().getTracestate().toString()); }
@Test public void testTracestateIsSetWhenHeaderIsEmpty() { //turn on W3C defaultModule.isW3CEnabled = true; //setup: initialize a request context RequestTelemetryContext context = new RequestTelemetryContext(DateTimeUtils.getDateTimeNow().getTime()); ThreadContext.setRequestTelemetryContext(context); //mock a servlet request with cross-component correlation headers Map<String, String> headers = new HashMap<>(); Traceparent tp = new Traceparent(); headers.put(TraceContextCorrelation.TRACEPARENT_HEADER_NAME, tp.toString()); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, ""); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); HttpServletResponse response = (HttpServletResponse)ServletUtils.generateDummyServletResponse(); //configure mock appId fetcher to return different appId from what's on the request header mockProfileFetcher.setAppIdToReturn("id2"); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.COMPLETE); //run defaultModule.onBeginRequest(request, response); Assert.assertNotNull(ThreadContext.getRequestTelemetryContext().getTracestate()); Assert.assertEquals(TraceContextCorrelationTests.getTracestateHeaderValue("id2"), ThreadContext.getRequestTelemetryContext().getTracestate().toString()); }
@Test public void testOnEndDoesNotOverrideSourceFieldWhenW3CEnabled() { // Enable W3C defaultModule.isW3CEnabled = true; //setup: initialize a request telemetry context RequestTelemetryContext context = new RequestTelemetryContext(DateTimeUtils.getDateTimeNow().getTime()); ThreadContext.setRequestTelemetryContext(context); RequestTelemetry requestTelemetry = ThreadContext.getRequestTelemetryContext().getHttpRequestTelemetry(); requestTelemetry.setSource("myAppId"); //mock a servlet request with cross-component correlation headers Map<String, String> headers = new HashMap<String, String>(); headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, TraceContextCorrelationTests.getTracestateHeaderValue("id1")); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); HttpServletResponse response = (HttpServletResponse)ServletUtils.generateDummyServletResponse(); //configure mock appId fetcher to return different appId from what's on the request header mockProfileFetcher.setAppIdToReturn("id2"); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.COMPLETE); //run defaultModule.onBeginRequest(request, response); defaultModule.onEndRequest(request, null); //validate source Assert.assertEquals("myAppId", requestTelemetry.getSource()); }
@Test public void testNewTracestateIsCreatedWhenHeaderIsNotPresent() { //turn on W3C defaultModule.isW3CEnabled = true; //setup: initialize a request context RequestTelemetryContext context = new RequestTelemetryContext(DateTimeUtils.getDateTimeNow().getTime()); ThreadContext.setRequestTelemetryContext(context); //mock a servlet request with cross-component correlation headers Map<String, String> headers = new HashMap<>(); Traceparent tp = new Traceparent(); headers.put(TraceContextCorrelation.TRACEPARENT_HEADER_NAME, tp.toString()); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); HttpServletResponse response = (HttpServletResponse)ServletUtils.generateDummyServletResponse(); //configure mock appId fetcher to return different appId from what's on the request header mockProfileFetcher.setAppIdToReturn("id2"); mockProfileFetcher.setResultStatus(ProfileFetcherResultTaskStatus.COMPLETE); //run defaultModule.onBeginRequest(request, response); Assert.assertNotNull(ThreadContext.getRequestTelemetryContext().getTracestate()); Assert.assertEquals(TraceContextCorrelationTests.getTracestateHeaderValue("id2"), ThreadContext.getRequestTelemetryContext().getTracestate().toString()); }
headers.put(TraceContextCorrelation.TRACESTATE_HEADER_NAME, TraceContextCorrelationTests.getTracestateHeaderValue("id1")); HttpServletRequest request = ServletUtils.createServletRequestWithHeaders(headers); HttpServletResponse response = (HttpServletResponse)ServletUtils.generateDummyServletResponse(); Assert.assertEquals(TraceContextCorrelationTests.getTracestateHeaderValue("id2"), ThreadContext.getRequestTelemetryContext().getTracestate().toString());