package com.github.kristofa.brave.http; import com.github.kristofa.brave.KeyValueAnnotation; import com.github.kristofa.brave.SpanId; import org.junit.Before; import org.junit.Test; import zipkin.TraceKeys; import java.net.URI; import java.util.Collection; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; public class HttpClientRequestAdapterTest { private static final String SPAN_NAME = "span_name"; private static final long TRACE_ID = 1; private static final long SPAN_ID = 2; private static final Long PARENT_SPAN_ID = 3L; private static final String TEST_URI = "http://abc.com/request"; private HttpClientRequestAdapter clientRequestAdapter; private HttpClientRequest request; private SpanNameProvider spanNameProvider; @Before public void setup() { request = mock(HttpClientRequest.class); spanNameProvider = mock(SpanNameProvider.class); clientRequestAdapter = new HttpClientRequestAdapter(request, spanNameProvider); } @Test public void getSpanName() { when(spanNameProvider.spanName(request)).thenReturn(SPAN_NAME); assertEquals(SPAN_NAME, clientRequestAdapter.getSpanName()); verify(spanNameProvider).spanName(request); verifyNoMoreInteractions(request, spanNameProvider); } @Test public void addSpanIdToRequest_NoSpanId() { clientRequestAdapter.addSpanIdToRequest(null); verify(request).addHeader(BraveHttpHeaders.Sampled.getName(), "0"); verifyNoMoreInteractions(request, spanNameProvider); } @Test public void addSpanIdToRequest_WithParentSpanId() { SpanId id = SpanId.builder().traceId(TRACE_ID).spanId(SPAN_ID).parentId(PARENT_SPAN_ID).build(); clientRequestAdapter.addSpanIdToRequest(id); verify(request).addHeader(BraveHttpHeaders.Sampled.getName(), "1"); verify(request).addHeader(BraveHttpHeaders.TraceId.getName(), "0000000000000001"); verify(request).addHeader(BraveHttpHeaders.SpanId.getName(), String.valueOf(SPAN_ID)); verify(request).addHeader(BraveHttpHeaders.ParentSpanId.getName(), String.valueOf(PARENT_SPAN_ID)); verifyNoMoreInteractions(request, spanNameProvider); } @Test public void addSpanIdToRequest_WithoutParentSpanId() { SpanId id = SpanId.builder().traceId(TRACE_ID).spanId(SPAN_ID).parentId(null).build(); clientRequestAdapter.addSpanIdToRequest(id); verify(request).addHeader(BraveHttpHeaders.Sampled.getName(), "1"); verify(request).addHeader(BraveHttpHeaders.TraceId.getName(), "0000000000000001"); verify(request).addHeader(BraveHttpHeaders.SpanId.getName(), String.valueOf(SPAN_ID)); verifyNoMoreInteractions(request, spanNameProvider); } @Test public void requestAnnotations() { when(request.getUri()).thenReturn(URI.create(TEST_URI)); Collection<KeyValueAnnotation> annotations = clientRequestAdapter.requestAnnotations(); assertEquals(1, annotations.size()); KeyValueAnnotation a = annotations.iterator().next(); assertEquals(TraceKeys.HTTP_URL, a.getKey()); assertEquals(TEST_URI, a.getValue()); verify(request).getUri(); verifyNoMoreInteractions(request, spanNameProvider); } @Test public void traceId_when128bit() throws Exception { SpanId id = SpanId.builder().traceIdHigh(TRACE_ID).traceId(TRACE_ID).spanId(SPAN_ID).parentId(null).build(); clientRequestAdapter.addSpanIdToRequest(id); verify(request).addHeader(BraveHttpHeaders.Sampled.getName(), "1"); verify(request).addHeader(BraveHttpHeaders.TraceId.getName(), "00000000000000010000000000000001"); verify(request).addHeader(BraveHttpHeaders.SpanId.getName(), String.valueOf(SPAN_ID)); verifyNoMoreInteractions(request, spanNameProvider); } }