/** * Returns a {@code SpanId} built from a lowercase base16 representation. * * @param src the lowercase base16 representation. * @return a {@code SpanId} built from a lowercase base16 representation. * @throws NullPointerException if {@code src} is null. * @throws IllegalArgumentException if {@code src.length} is not {@code 2 * SpanId.SIZE} OR if the * {@code str} has invalid characters. * @since 0.11 */ public static SpanId fromLowerBase16(CharSequence src) { Utils.checkNotNull(src, "src"); // TODO: Remove this extra condition. Utils.checkArgument( src.length() == BASE16_SIZE, "Invalid size: expected %s, got %s", BASE16_SIZE, src.length()); return fromLowerBase16(src, 0); }
@Test public void fromLowerBase16() { assertThat(SpanId.fromLowerBase16("0000000000000000")).isEqualTo(SpanId.INVALID); assertThat(SpanId.fromLowerBase16("0000000000000061")).isEqualTo(first); assertThat(SpanId.fromLowerBase16("ff00000000000041")).isEqualTo(second); }
@Test public void fromLowerBase16_WithOffset() { assertThat(SpanId.fromLowerBase16("XX0000000000000000AA", 2)).isEqualTo(SpanId.INVALID); assertThat(SpanId.fromLowerBase16("YY0000000000000061BB", 2)).isEqualTo(first); assertThat(SpanId.fromLowerBase16("ZZff00000000000041CC", 2)).isEqualTo(second); }
String spanIdStr = getter.get(carrier, X_B3_SPAN_ID); if (spanIdStr != null) { spanId = SpanId.fromLowerBase16(spanIdStr); } else { throw new SpanContextParseException("Missing X_B3_SPAN_ID.");
@Test public void addSampledSpanToLogEntryWithAllSpans() { String log = logWithSpanAndLog4jConfiguration( TEST_PATTERN, SpanContext.create( TraceId.fromLowerBase16("b9718fe3d82d36fce0e6a1ada1c21db0"), SpanId.fromLowerBase16("75159dde8c503fee"), TraceOptions.builder().setIsSampled(true).build(), EMPTY_TRACESTATE), new Function<Logger, Void>() { @Override public Void apply(Logger logger) { logger.warn("message #1"); return null; } }); assertThat(log) .isEqualTo( "traceId=b9718fe3d82d36fce0e6a1ada1c21db0 spanId=75159dde8c503fee " + "sampled=true WARN - message #1"); }
SpanContext.create( TraceId.fromLowerBase16(TRACE_ID), SpanId.fromLowerBase16(SPAN_ID), TraceOptions.builder().setIsSampled(true).build()), SpanId.fromLowerBase16(PARENT_SPAN_ID), true, /* hasRemoteParent */ "SpanName", /* name */
@Test public void addNonSampledSpanToLogEntryWithAllSpans() { String log = logWithSpanAndLog4jConfiguration( TEST_PATTERN, SpanContext.create( TraceId.fromLowerBase16("cd7061dfa9d312cdcc42edab3feab51b"), SpanId.fromLowerBase16("117d42d4c7acd066"), TraceOptions.builder().setIsSampled(false).build(), EMPTY_TRACESTATE), new Function<Logger, Void>() { @Override public Void apply(Logger logger) { logger.info("message #2"); return null; } }); assertThat(log) .isEqualTo( "traceId=cd7061dfa9d312cdcc42edab3feab51b spanId=117d42d4c7acd066 sampled=false INFO " + "- message #2"); }
SpanContext.create( TraceId.fromLowerBase16(TRACE_ID), SpanId.fromLowerBase16(SPAN_ID), TraceOptions.builder().setIsSampled(true).build()), SpanId.fromLowerBase16(PARENT_SPAN_ID), true, /* hasRemoteParent */ "SpanName", /* name */
SpanContext.create( TraceId.fromLowerBase16(TRACE_ID), SpanId.fromLowerBase16(SPAN_ID), TraceOptions.builder().setIsSampled(true).build()), SpanId.fromLowerBase16(PARENT_SPAN_ID), true, /* hasRemoteParent */ "SpanName", /* name */
@Test public void enhanceLogEntry_ConvertNullProjectIdToEmptyString() { LogEntry logEntry = getEnhancedLogEntry( new OpenCensusTraceLoggingEnhancer(null), new TestSpan( SpanContext.create( TraceId.fromLowerBase16("bfb4248a24325a905873a1d43001d9a0"), SpanId.fromLowerBase16("6f23f9afd448e272"), TraceOptions.builder().setIsSampled(true).build(), EMPTY_TRACESTATE))); assertThat(logEntry.getTrace()).isEqualTo("projects//traces/bfb4248a24325a905873a1d43001d9a0"); }
@Test public void overwriteExistingTracingKey() { String log = logWithSpanAndLog4jConfiguration( TEST_PATTERN, SpanContext.create( TraceId.fromLowerBase16("18e4ae44273a0c44e0c9ea4380792c66"), SpanId.fromLowerBase16("199a7e16daa000a7"), TraceOptions.builder().setIsSampled(true).build(), EMPTY_TRACESTATE), new Function<Logger, Void>() { @Override public Void apply(Logger logger) { ThreadContext.put( OpenCensusTraceContextDataInjector.TRACE_ID_CONTEXT_KEY, "existingTraceId"); try { logger.error("message #5"); } finally { ThreadContext.remove(OpenCensusTraceContextDataInjector.TRACE_ID_CONTEXT_KEY); } return null; } }); assertThat(log) .isEqualTo( "traceId=18e4ae44273a0c44e0c9ea4380792c66 spanId=199a7e16daa000a7 " + "sampled=true ERROR - message #5"); } }
@Test public void preserveOtherKeyValuePairs() { String log = logWithSpanAndLog4jConfiguration( "%X{traceId} %X{myTestKey} %-5level - %msg", SpanContext.create( TraceId.fromLowerBase16("c95329bb6b7de41afbc51a231c128f97"), SpanId.fromLowerBase16("bf22ea74d38eddad"), TraceOptions.builder().setIsSampled(true).build(), EMPTY_TRACESTATE), new Function<Logger, Void>() { @Override public Void apply(Logger logger) { String key = "myTestKey"; ThreadContext.put(key, "myTestValue"); try { logger.error("message #4"); } finally { ThreadContext.remove(key); } return null; } }); assertThat(log).isEqualTo("c95329bb6b7de41afbc51a231c128f97 myTestValue ERROR - message #4"); }
@Test public void enhanceLogEntry_AddNonSampledSpanToLogEntry() { LogEntry logEntry = getEnhancedLogEntry( new OpenCensusTraceLoggingEnhancer("my-test-project-6"), new TestSpan( SpanContext.create( TraceId.fromLowerBase16("72c905c76f99e99974afd84dc053a480"), SpanId.fromLowerBase16("731e102335b7a5a0"), TraceOptions.builder().setIsSampled(false).build(), EMPTY_TRACESTATE))); assertFalse(logEntry.getTraceSampled()); assertThat(logEntry.getTrace()) .isEqualTo("projects/my-test-project-6/traces/72c905c76f99e99974afd84dc053a480"); assertThat(logEntry.getSpanId()).isEqualTo("731e102335b7a5a0"); }
@Test public void enhanceLogEntry_AddSampledSpanToLogEntry() { LogEntry logEntry = getEnhancedLogEntry( new OpenCensusTraceLoggingEnhancer("my-test-project-3"), new TestSpan( SpanContext.create( TraceId.fromLowerBase16("4c6af40c499951eb7de2777ba1e4fefa"), SpanId.fromLowerBase16("de52e84d13dd232d"), TraceOptions.builder().setIsSampled(true).build(), EMPTY_TRACESTATE))); assertTrue(logEntry.getTraceSampled()); assertThat(logEntry.getTrace()) .isEqualTo("projects/my-test-project-3/traces/4c6af40c499951eb7de2777ba1e4fefa"); assertThat(logEntry.getSpanId()).isEqualTo("de52e84d13dd232d"); }
SpanContext.create( TraceId.fromLowerBase16(TRACE_ID), SpanId.fromLowerBase16(SPAN_ID), TraceOptions.builder().setIsSampled(true).build(), Tracestate.builder().build()),
SpanContext.create( TraceId.fromLowerBase16(TRACE_ID), SpanId.fromLowerBase16(SPAN_ID), TraceOptions.builder().setIsSampled(true).build()), SpanId.fromLowerBase16(PARENT_SPAN_ID), true, /* hasRemoteParent */ "Sent.helloworld.Greeter.SayHello", /* name */
SpanContext.create( TraceId.fromLowerBase16(TRACE_ID), SpanId.fromLowerBase16(SPAN_ID), TraceOptions.builder().setIsSampled(true).build()), SpanId.fromLowerBase16(PARENT_SPAN_ID), true, /* hasRemoteParent */ "Recv.helloworld.Greeter.SayHello", /* name */
SpanContext.create( TraceId.fromLowerBase16("e17944156660f55b8cae5ce3f45d4a40"), SpanId.fromLowerBase16("fc3d2ba0d283b66a"), TraceOptions.builder().setIsSampled(true).build(), EMPTY_TRACESTATE);
SpanContext.create( TraceId.fromLowerBase16(TRACE_ID), SpanId.fromLowerBase16(SPAN_ID), TraceOptions.builder().setIsSampled(true).build()), SpanId.fromLowerBase16(PARENT_SPAN_ID), true, /* hasRemoteParent */ "Recv.helloworld.Greeter.SayHello", /* name */
SpanContext.create( TraceId.fromLowerBase16(TRACE_ID), SpanId.fromLowerBase16(SPAN_ID), TraceOptions.builder().setIsSampled(true).build()), SpanId.fromLowerBase16(PARENT_SPAN_ID), true, /* hasRemoteParent */ "Sent.helloworld.Greeter.SayHello", /* name */