@Test public void censusHttpExecuteInterceptorShouldInjectHeader() throws IOException { Random random = new Random(); SpanContext spanContext = SpanContext.create( TraceId.generateRandomId(random), SpanId.generateRandomId(random), TraceOptions.DEFAULT); Span mockSpan = createMockBuilder(Span.class) .withConstructor(SpanContext.class, EnumSet.class) .withArgs(spanContext, null) .createMock(); Scope scope = tracer.withSpan(mockSpan); try { HttpExecuteInterceptor interceptor = censusHttpModule.new CensusHttpExecuteInterceptor(null); interceptor.intercept(httpRequest); assertThat(httpRequest.getHeaders().get("X-Cloud-Trace-Context")).isNotNull(); } finally { scope.close(); } }
@SuppressWarnings("deprecation") private static SpanContext fromSleuthSpan(org.springframework.cloud.sleuth.Span span) { return SpanContext.create( TraceId.fromBytes( ByteBuffer.allocate(TraceId.SIZE) .putLong(span.getTraceIdHigh()) .putLong(span.getTraceId()) .array()), SpanId.fromBytes(ByteBuffer.allocate(SpanId.SIZE).putLong(span.getSpanId()).array()), Boolean.TRUE.equals(span.isExportable()) ? sampledOptions : notSampledOptions); } }
@Test public void parseSampled() throws SpanContextParseException { Map<String, String> headersSampled = new HashMap<String, String>(); headersSampled.put(X_B3_TRACE_ID, TRACE_ID_BASE16); headersSampled.put(X_B3_SPAN_ID, SPAN_ID_BASE16); headersSampled.put(X_B3_SAMPLED, "1"); assertThat(b3Format.extract(headersSampled, getter)) .isEqualTo(SpanContext.create(TRACE_ID, SPAN_ID, TRACE_OPTIONS)); }
@Test public void parseFlag() throws SpanContextParseException { Map<String, String> headersFlagSampled = new HashMap<String, String>(); headersFlagSampled.put(X_B3_TRACE_ID, TRACE_ID_BASE16); headersFlagSampled.put(X_B3_SPAN_ID, SPAN_ID_BASE16); headersFlagSampled.put(X_B3_FLAGS, "1"); assertThat(b3Format.extract(headersFlagSampled, getter)) .isEqualTo(SpanContext.create(TRACE_ID, SPAN_ID, TRACE_OPTIONS)); }
@Test public void parseEightBytesTraceId() throws SpanContextParseException { Map<String, String> headersEightBytes = new HashMap<String, String>(); headersEightBytes.put(X_B3_TRACE_ID, TRACE_ID_BASE16_EIGHT_BYTES); headersEightBytes.put(X_B3_SPAN_ID, SPAN_ID_BASE16); headersEightBytes.put(X_B3_SAMPLED, "1"); assertThat(b3Format.extract(headersEightBytes, getter)) .isEqualTo(SpanContext.create(TRACE_ID_EIGHT_BYTES, SPAN_ID, TRACE_OPTIONS)); }
@Test public void parseZeroFlag() throws SpanContextParseException { Map<String, String> headersFlagNotSampled = new HashMap<String, String>(); headersFlagNotSampled.put(X_B3_TRACE_ID, TRACE_ID_BASE16); headersFlagNotSampled.put(X_B3_SPAN_ID, SPAN_ID_BASE16); headersFlagNotSampled.put(X_B3_FLAGS, "0"); assertThat(b3Format.extract(headersFlagNotSampled, getter)) .isEqualTo(SpanContext.create(TRACE_ID, SPAN_ID, TraceOptions.DEFAULT)); }
@Test public void parseZeroSampled() throws SpanContextParseException { Map<String, String> headersNotSampled = new HashMap<String, String>(); headersNotSampled.put(X_B3_TRACE_ID, TRACE_ID_BASE16); headersNotSampled.put(X_B3_SPAN_ID, SPAN_ID_BASE16); headersNotSampled.put(X_B3_SAMPLED, "0"); assertThat(b3Format.extract(headersNotSampled, getter)) .isEqualTo(SpanContext.create(TRACE_ID, SPAN_ID, TraceOptions.DEFAULT)); }
@Test public void extract_NotSampledContext_WithTraceState() throws SpanContextParseException { Map<String, String> carrier = new LinkedHashMap<String, String>(); carrier.put(TRACEPARENT, TRACEPARENT_HEADER_NOT_SAMPLED); carrier.put(TRACESTATE, TRACESTATE_NOT_DEFAULT_ENCODING); assertThat(traceContextFormat.extract(carrier, getter)) .isEqualTo( SpanContext.create(TRACE_ID, SPAN_ID, TraceOptions.DEFAULT, TRACESTATE_NOT_DEFAULT)); }
@Test public void extract_NotSampledContext_EmptyTraceState() throws SpanContextParseException { Map<String, String> carrier = new LinkedHashMap<String, String>(); carrier.put(TRACEPARENT, TRACEPARENT_HEADER_NOT_SAMPLED); carrier.put(TRACESTATE, ""); assertThat(traceContextFormat.extract(carrier, getter)) .isEqualTo(SpanContext.create(TRACE_ID, SPAN_ID, TraceOptions.DEFAULT, TRACESTATE_DEFAULT)); }
@Test public void parseEightBytesTraceId_NotSampledSpanContext() throws SpanContextParseException { Map<String, String> headersEightBytes = new HashMap<String, String>(); headersEightBytes.put(X_B3_TRACE_ID, TRACE_ID_BASE16_EIGHT_BYTES); headersEightBytes.put(X_B3_SPAN_ID, SPAN_ID_BASE16); assertThat(b3Format.extract(headersEightBytes, getter)) .isEqualTo(SpanContext.create(TRACE_ID_EIGHT_BYTES, SPAN_ID, TraceOptions.DEFAULT)); }
@Test public void parseMissingSampledAndMissingFlag() throws SpanContextParseException { Map<String, String> headersNotSampled = new HashMap<String, String>(); headersNotSampled.put(X_B3_TRACE_ID, TRACE_ID_BASE16); headersNotSampled.put(X_B3_SPAN_ID, SPAN_ID_BASE16); SpanContext spanContext = SpanContext.create(TRACE_ID, SPAN_ID, TraceOptions.DEFAULT); assertThat(b3Format.extract(headersNotSampled, getter)).isEqualTo(spanContext); }
@Test public void extract_NotSampledContext_TraceStateWithSpaces() throws SpanContextParseException { Map<String, String> carrier = new LinkedHashMap<String, String>(); carrier.put(TRACEPARENT, TRACEPARENT_HEADER_NOT_SAMPLED); carrier.put(TRACESTATE, "foo=bar , bar=baz"); assertThat(traceContextFormat.extract(carrier, getter)) .isEqualTo( SpanContext.create(TRACE_ID, SPAN_ID, TraceOptions.DEFAULT, TRACESTATE_NOT_DEFAULT)); }
@Test public void extract_NotSampledContext() throws SpanContextParseException { Map<String, String> carrier = new LinkedHashMap<String, String>(); carrier.put(TRACEPARENT, TRACEPARENT_HEADER_NOT_SAMPLED); assertThat(traceContextFormat.extract(carrier, getter)) .isEqualTo(SpanContext.create(TRACE_ID, SPAN_ID, TraceOptions.DEFAULT, TRACESTATE_DEFAULT)); }
@Test public void inject_SampledContext() { Map<String, String> carrier = new LinkedHashMap<String, String>(); traceContextFormat.inject( SpanContext.create(TRACE_ID, SPAN_ID, SAMPLED_TRACE_OPTIONS, TRACESTATE_DEFAULT), carrier, setter); assertThat(carrier).containsExactly(TRACEPARENT, TRACEPARENT_HEADER_SAMPLED); }
@Test public void serialize_NotSampledContext() { Map<String, String> carrier = new HashMap<String, String>(); b3Format.inject(SpanContext.create(TRACE_ID, SPAN_ID, TraceOptions.DEFAULT), carrier, setter); assertThat(carrier) .containsExactly(X_B3_TRACE_ID, TRACE_ID_BASE16, X_B3_SPAN_ID, SPAN_ID_BASE16); }
@Test public void parseWithShortSpanIdAndSamplingShouldSucceed() throws SpanContextParseException { final String spanId = "1"; ByteBuffer buffer = ByteBuffer.allocate(SpanId.SIZE); buffer.putLong(Long.parseLong(spanId)); SpanId expectedSpanId = SpanId.fromBytes(buffer.array()); parseSuccess( constructHeader(TRACE_ID_BASE16, spanId, SAMPLED), SpanContext.create(TRACE_ID, expectedSpanId, TRACE_OPTIONS_SAMPLED)); } }
@Test public void serializeSampledContextShouldSucceed() throws SpanContextParseException { Map<String, String> carrier = new HashMap<String, String>(); cloudTraceFormat.inject( SpanContext.create(TRACE_ID, SPAN_ID, TRACE_OPTIONS_SAMPLED), carrier, setter); assertThat(carrier) .containsExactly(HEADER_NAME, constructHeader(TRACE_ID_BASE16, SPAN_ID_BASE10, SAMPLED)); }
@Test public void parseSampledShouldSucceed() throws SpanContextParseException { parseSuccess( constructHeader(TRACE_ID_BASE16, SPAN_ID_BASE10, OPTIONS_SAMPLED_MORE_BITS), SpanContext.create(TRACE_ID, SPAN_ID, TRACE_OPTIONS_SAMPLED)); }
@Test public void parseMaxUnsignedLongSpanIdShouldSucceed() throws SpanContextParseException { parseSuccess( constructHeader(TRACE_ID_BASE16, SPAN_ID_BASE10_MAX_UNSIGNED_LONG, SAMPLED), SpanContext.create(TRACE_ID, SPAN_ID_MAX, TRACE_OPTIONS_SAMPLED)); }
private static SpanContext sampleSpanContext() { return SpanContext.create( TraceId.fromBytes(new byte[] {FF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}), SpanId.fromBytes(new byte[] {0, 0, 0, 0, 0, 0, 1, 0}), TraceOptions.builder().setIsSampled(true).build(), Tracestate.builder().build()); }