Enable exception tests on vert.x (#2914)
This commit is contained in:
parent
9e9fe118fb
commit
5670024178
|
@ -126,4 +126,9 @@ class VertxRxCircuitBreakerHttpServerTest extends VertxRxHttpServerTest {
|
||||||
.listen(port) { startFuture.complete() }
|
.listen(port) { startFuture.complete() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
boolean hasExceptionOnServerSpan(HttpServerTest.ServerEndpoint endpoint) {
|
||||||
|
return endpoint != EXCEPTION && super.hasExceptionOnServerSpan(endpoint)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ package server
|
||||||
|
|
||||||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.ERROR
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.ERROR
|
||||||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.EXCEPTION
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.EXCEPTION
|
||||||
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND
|
||||||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM
|
||||||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM
|
||||||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT
|
||||||
|
@ -53,25 +54,21 @@ class VertxRxHttpServerTest extends HttpServerTest<Vertx> implements AgentTestTr
|
||||||
server.close()
|
server.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
boolean testException() {
|
|
||||||
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean testPathParam() {
|
boolean testPathParam() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
boolean testNotFound() {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
String expectedServerSpanName(ServerEndpoint endpoint) {
|
String expectedServerSpanName(ServerEndpoint endpoint) {
|
||||||
return endpoint == PATH_PARAM ? "/path/:id/param" : endpoint.getPath()
|
switch (endpoint) {
|
||||||
|
case PATH_PARAM:
|
||||||
|
return "/path/:id/param"
|
||||||
|
case NOT_FOUND:
|
||||||
|
return "HTTP GET"
|
||||||
|
default:
|
||||||
|
return endpoint.getPath()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Class<AbstractVerticle> verticle() {
|
protected Class<AbstractVerticle> verticle() {
|
||||||
|
|
|
@ -10,6 +10,10 @@ import io.opentelemetry.context.Context;
|
||||||
import io.opentelemetry.instrumentation.api.tracer.ServerSpan;
|
import io.opentelemetry.instrumentation.api.tracer.ServerSpan;
|
||||||
import io.vertx.core.Handler;
|
import io.vertx.core.Handler;
|
||||||
import io.vertx.ext.web.RoutingContext;
|
import io.vertx.ext.web.RoutingContext;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.UndeclaredThrowableException;
|
||||||
|
import java.util.concurrent.CompletionException;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -26,8 +30,8 @@ public final class RoutingContextHandlerWrapper implements Handler<RoutingContex
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(RoutingContext context) {
|
public void handle(RoutingContext context) {
|
||||||
try {
|
|
||||||
Span serverSpan = ServerSpan.fromContextOrNull(Context.current());
|
Span serverSpan = ServerSpan.fromContextOrNull(Context.current());
|
||||||
|
try {
|
||||||
if (serverSpan != null) {
|
if (serverSpan != null) {
|
||||||
// TODO should update only SERVER span using
|
// TODO should update only SERVER span using
|
||||||
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/465
|
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/465
|
||||||
|
@ -36,6 +40,24 @@ public final class RoutingContextHandlerWrapper implements Handler<RoutingContex
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
log.error("Failed to update server span name with vert.x route", ex);
|
log.error("Failed to update server span name with vert.x route", ex);
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
handler.handle(context);
|
handler.handle(context);
|
||||||
|
} catch (Throwable throwable) {
|
||||||
|
if (serverSpan != null) {
|
||||||
|
serverSpan.recordException(unwrapThrowable(throwable));
|
||||||
|
}
|
||||||
|
throw throwable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Throwable unwrapThrowable(Throwable throwable) {
|
||||||
|
if (throwable.getCause() != null
|
||||||
|
&& (throwable instanceof ExecutionException
|
||||||
|
|| throwable instanceof CompletionException
|
||||||
|
|| throwable instanceof InvocationTargetException
|
||||||
|
|| throwable instanceof UndeclaredThrowableException)) {
|
||||||
|
return unwrapThrowable(throwable.getCause());
|
||||||
|
}
|
||||||
|
return throwable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package server
|
package server
|
||||||
|
|
||||||
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND
|
||||||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM
|
||||||
|
|
||||||
import io.opentelemetry.instrumentation.test.AgentTestTrait
|
import io.opentelemetry.instrumentation.test.AgentTestTrait
|
||||||
|
@ -48,22 +49,11 @@ class VertxHttpServerTest extends HttpServerTest<Vertx> implements AgentTestTrai
|
||||||
server.close()
|
server.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
boolean testException() {
|
|
||||||
// TODO(anuraaga): https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean testPathParam() {
|
boolean testPathParam() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
boolean testNotFound() {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean testConcurrency() {
|
boolean testConcurrency() {
|
||||||
return true
|
return true
|
||||||
|
@ -71,7 +61,14 @@ class VertxHttpServerTest extends HttpServerTest<Vertx> implements AgentTestTrai
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
String expectedServerSpanName(ServerEndpoint endpoint) {
|
String expectedServerSpanName(ServerEndpoint endpoint) {
|
||||||
return endpoint == PATH_PARAM ? "/path/:id/param" : endpoint.getPath()
|
switch (endpoint) {
|
||||||
|
case PATH_PARAM:
|
||||||
|
return "/path/:id/param"
|
||||||
|
case NOT_FOUND:
|
||||||
|
return "HTTP GET"
|
||||||
|
default:
|
||||||
|
return endpoint.getPath()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue