@Override protected boolean matchesSafely(JaegerSpan item) { if (!name.equals(item.getOperationName())) { return false; } if (matcher != null) { return matcher.matches(item.getLogs()); } return true; } });
@Test public void testThatNewSpanIsCreatedWhenNotProvided() throws MalformedURLException { final BookStoreService service = createJaxWsService(); assertThat(service.getBooks().size(), equalTo(2)); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("POST /BookStore")); }
@Test public void testThatNewSpanIsCreatedWhenNotProvidedUsingAsyncClient() throws Exception { final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider); final Future<Response> f = client.async().get(); final Response r = f.get(1, TimeUnit.SECONDS); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books")); assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("GET " + client.getCurrentURI())); }
@Test public void testThatNewSpanIsCreatedWhenNotProvided() { final Response r = createWebClient("/bookstore/books").get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books")); }
@Test public void testThatNewSpanIsCreatedUsingAsyncInvocation() { final Response r = createWebClient("/bookstore/books/async").get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Processing books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books/async")); }
@Test public void testThatNewInnerSpanIsCreated() throws MalformedURLException { final JaegerSpanContext spanId = fromRandom(); final Map<String, List<String>> headers = new HashMap<>(); tracer.inject(spanId, Builtin.HTTP_HEADERS, new TextMapInjectAdapter(headers)); final BookStoreService service = createJaxWsService(headers); assertThat(service.getBooks().size(), equalTo(2)); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("POST /BookStore")); }
@Test public void testThatNewChildSpanIsCreatedWhenParentIsProvided() throws MalformedURLException { final BookStoreService service = createJaxWsService(new Configurator() { @Override public void configure(final JaxWsProxyFactoryBean factory) { factory.getFeatures().add(new OpenTracingClientFeature(tracer)); } }); assertThat(service.getBooks().size(), equalTo(2)); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(0).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("POST /BookStore")); assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("POST http://localhost:" + PORT + "/BookStore")); }
@Test public void testThatNewInnerSpanIsCreated() { final JaegerSpanContext spanId = fromRandom(); final Response r = withTrace(createWebClient("/bookstore/books"), spanId).get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books")); }
@Test public void testThatInnerSpanIsCreatedUsingPseudoAsyncInvocation() { final JaegerSpanContext spanId = fromRandom(); final Response r = withTrace(createWebClient("/bookstore/books/pseudo-async"), spanId).get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books/pseudo-async")); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Processing books")); }
@Test public void testThatNewChildSpanIsCreatedWhenParentIsProvided() { final Response r = createWebClient("/bookstore/books", openTracingClientProvider).get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(0).getReferences(), not(empty())); }
@Test public void testThatNewSpanIsCreatedInCaseOfFault() throws MalformedURLException { final BookStoreService service = createJaxWsService(); try { service.removeBooks(); fail("Expected SOAPFaultException to be raised"); } catch (final SOAPFaultException ex) { /* expected exception */ } assertThat(TestSender.getAllSpans().size(), equalTo(1)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("POST /BookStore")); }
@Test public void testThatNewInnerSpanIsCreatedUsingAsyncInvocation() { final JaegerSpanContext spanId = fromRandom(); final Response r = withTrace(createWebClient("/bookstore/books/async"), spanId).get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Processing books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books/async")); assertThat(TestSender.getAllSpans().get(1).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getReferences().get(0).getSpanContext().getSpanId(), equalTo(spanId.getSpanId())); }
@Test public void testThatOuterSpanIsCreatedUsingAsyncInvocation() { final JaegerSpanContext spanId = fromRandom(); final Response r = withTrace(createWebClient("/bookstore/books/async/notrace"), spanId).get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(1)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("GET /bookstore/books/async/notrace")); }
@Test public void testThatNewSpansAreCreatedWhenNotProvidedUsingMultipleClients() throws Exception { final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider); // The intention is to make a calls one after another, not in parallel, to ensure the // thread have trace contexts cleared out. final Collection<Response> responses = IntStream .range(0, 4) .mapToObj(index -> client.get()) .collect(Collectors.toList()); for (final Response r: responses) { assertEquals(Status.OK.getStatusCode(), r.getStatus()); } assertThat(TestSender.getAllSpans().size(), equalTo(12)); IntStream .range(0, 4) .map(index -> index * 3) .forEach(index -> { assertThat(TestSender.getAllSpans().get(index).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(index + 1).getOperationName(), equalTo("GET /bookstore/books")); assertThat(TestSender.getAllSpans().get(index + 2).getOperationName(), equalTo("GET " + client.getCurrentURI())); }); }
@Test public void testThatNewSpansAreCreatedWhenNotProvidedUsingMultipleAsyncClients() throws Exception { final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider); // The intention is to make a calls one after another, not in parallel, to ensure the // thread have trace contexts cleared out. final Collection<Response> responses = IntStream .range(0, 4) .mapToObj(index -> client.async().get()) .map(this::get) .collect(Collectors.toList()); for (final Response r: responses) { assertEquals(Status.OK.getStatusCode(), r.getStatus()); } assertThat(TestSender.getAllSpans().size(), equalTo(12)); IntStream .range(0, 4) .map(index -> index * 3) .forEach(index -> { assertThat(TestSender.getAllSpans().get(index).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(index + 1).getOperationName(), equalTo("GET /bookstore/books")); assertThat(TestSender.getAllSpans().get(index + 2).getOperationName(), equalTo("GET " + client.getCurrentURI())); }); }
@Test public void testThatCurrentSpanIsAnnotatedWithKeyValue() { final JaegerSpanContext spanId = fromRandom(); final Response r = withTrace(createWebClient("/bookstore/book/1"), spanId).get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(1)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("GET /bookstore/book/1")); assertThat(TestSender.getAllSpans().get(0).getTags(), hasItem("book-id", "1")); }
@Test public void testThatProvidedSpanIsNotClosedWhenActive() throws MalformedURLException { final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider); try (Scope span = tracer.buildSpan("test span").startActive(true)) { final Response r = client.get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(0).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books")); assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("GET " + client.getCurrentURI())); assertThat(TestSender.getAllSpans().get(2).getReferences(), not(empty())); } // Await till flush happens, usually every second await().atMost(Duration.ONE_SECOND).until(()-> TestSender.getAllSpans().size() == 4); assertThat(TestSender.getAllSpans().size(), equalTo(4)); assertThat(TestSender.getAllSpans().get(3).getOperationName(), equalTo("test span")); assertThat(TestSender.getAllSpans().get(3).getReferences(), empty()); }
@Test public void testThatNewChildSpanIsCreatedWhenParentIsProvidedInCaseOfFault() throws MalformedURLException { final BookStoreService service = createJaxWsService(new Configurator() { @Override public void configure(final JaxWsProxyFactoryBean factory) { factory.getFeatures().add(new OpenTracingClientFeature(tracer)); factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.getInInterceptors().add(new LoggingInInterceptor()); } }); try { service.removeBooks(); fail("Expected SOAPFaultException to be raised"); } catch (final SOAPFaultException ex) { /* expected exception */ } assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("POST /BookStore")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("POST http://localhost:" + PORT + "/BookStore")); }
@Test public void testThatProvidedSpanIsNotDetachedWhenActiveUsingAsyncClient() throws Exception { final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider); try (Scope scope = tracer.buildSpan("test span").startActive(true)) { final Future<Response> f = client.async().get(); final Response r = f.get(1, TimeUnit.HOURS); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(tracer.activeSpan().context(), equalTo(scope.span().context())); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(0).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books")); assertThat(TestSender.getAllSpans().get(1).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("GET " + client.getCurrentURI())); assertThat(TestSender.getAllSpans().get(2).getReferences(), not(empty())); } // Await till flush happens, usually every second await().atMost(Duration.ONE_SECOND).until(()-> TestSender.getAllSpans().size() == 4); assertThat(TestSender.getAllSpans().size(), equalTo(4)); assertThat(TestSender.getAllSpans().get(3).getOperationName(), equalTo("test span")); assertThat(TestSender.getAllSpans().get(3).getReferences(), empty()); }
public static io.jaegertracing.thriftjava.Span convertSpan(JaegerSpan jaegerSpan) { JaegerSpanContext context = jaegerSpan.context(); boolean oneChildOfParent = jaegerSpan.getReferences().size() == 1 && References.CHILD_OF.equals(jaegerSpan.getReferences().get(0).getType()); List<SpanRef> references = oneChildOfParent ? Collections.<SpanRef>emptyList() : buildReferences(jaegerSpan.getReferences()); return new io.jaegertracing.thriftjava.Span( context.getTraceIdLow(), context.getTraceIdHigh(), context.getSpanId(), oneChildOfParent ? context.getParentId() : 0, jaegerSpan.getOperationName(), context.getFlags(), jaegerSpan.getStart(), jaegerSpan.getDuration() ) .setReferences(references) .setTags(buildTags(jaegerSpan.getTags())) .setLogs(buildLogs(jaegerSpan.getLogs())); }