/** * Helper method to create extract Incoming Traceparent header. This method can return null. * @param request * @return Incoming Traceparent */ private static Traceparent extractIncomingTraceparent(HttpServletRequest request) { Traceparent incomingTraceparent = null; Enumeration<String> traceparents = request.getHeaders(TRACEPARENT_HEADER_NAME); List<String> traceparentList = getEnumerationAsCollection(traceparents); // W3C spec mandates a request should exactly have 1 Traceparent header if (traceparentList.size() != 1) { return null; } try { incomingTraceparent = Traceparent.fromString(traceparentList.get(0)); } catch (Exception e) { InternalLogger.INSTANCE.error(String.format("Received invalid traceparent header with exception %s, " + "distributed trace might be broken", ExceptionUtils.getStackTrace(e))); } return incomingTraceparent; }
/** * Helper method to create extract Incoming Traceparent header. This method can return null. * @param request * @return Incoming Traceparent */ private static Traceparent extractIncomingTraceparent(HttpServletRequest request) { Traceparent incomingTraceparent = null; Enumeration<String> traceparents = request.getHeaders(TRACEPARENT_HEADER_NAME); List<String> traceparentList = getEnumerationAsCollection(traceparents); // W3C spec mandates a request should exactly have 1 Traceparent header if (traceparentList.size() != 1) { return null; } try { incomingTraceparent = Traceparent.fromString(traceparentList.get(0)); } catch (Exception e) { InternalLogger.INSTANCE.error(String.format("Received invalid traceparent header with exception %s, " + "distributed trace might be broken", ExceptionUtils.getStackTrace(e))); } return incomingTraceparent; }
@Test public void returnsNullTraceParentWhenTryingToCreateFromEmptyString() { Traceparent t1 = Traceparent.fromString(""); Assert.assertNull(t1); } }
@Test(expected = IllegalArgumentException.class) public void throwsWhenTryingToCreateWithMalformedTraceparentString() { String invalidTraceId = Traceparent.randomHex(32); String invalidSpanId = Traceparent.randomHex(16); String invalidTraceparent = String.format("%02x-%s-%s-%02x", 0, invalidTraceId, invalidSpanId, 0); Traceparent t1 = Traceparent.fromString(invalidTraceparent); }
@Test public void canCreateTraceParentFromString() { String traceId = Traceparent.randomHex(16); String spanId = Traceparent.randomHex(8); Traceparent t1 = new Traceparent(0, traceId, spanId, 0); Traceparent t2 = Traceparent.fromString(t1.toString()); Assert.assertEquals(t1.version, t2.version); Assert.assertEquals(t1.traceId, t2.traceId); Assert.assertEquals(t1.spanId, t2.spanId); Assert.assertEquals(t1.traceFlags, t2.traceFlags); // memory reference should be different Assert.assertFalse(t1 == t2); }