From df078f95a9fac113d865a55072c4a228e616d912 Mon Sep 17 00:00:00 2001 From: Ago Allikmaa Date: Thu, 27 May 2021 11:18:11 +0300 Subject: [PATCH] Extract HttpServerTest INDEXED_CHILD span attribute collection logic (#3095) * Extrawct HttpServerTest INDEXED_CHILD span attribute collection logic * Adjust whitespace * Fix context issue with JAX-RS * Rerun tests --- .../main/groovy/test/JaxRsTestResource.groovy | 7 +++-- .../src/test/groovy/Netty38ServerTest.groovy | 4 +-- .../src/test/groovy/Netty40ServerTest.groovy | 4 +-- .../src/test/groovy/Netty41ServerTest.groovy | 4 +-- .../groovy/server/PlayAsyncServerTest.groovy | 3 +- .../test/groovy/server/PlayServerTest.groovy | 3 +- .../server/RatpackAsyncHttpServerTest.groovy | 3 +- .../server/RatpackForkedHttpServerTest.groovy | 3 +- .../server/RatpackHttpServerTest.groovy | 3 +- .../src/test/groovy/TestServlet3.groovy | 7 ++--- .../src/test/groovy/TestServlet5.groovy | 7 ++--- .../server/base/ServerTestController.java | 5 +-- ...VertxRxCircuitBreakerHttpServerTest.groovy | 3 +- .../server/VertxRxHttpServerTest.groovy | 5 ++- .../src/test/java/server/VertxWebServer.java | 5 +-- .../test/base/HttpServerTest.groovy | 31 ++++++++++++++++--- 16 files changed, 50 insertions(+), 47 deletions(-) diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-testing/src/main/groovy/test/JaxRsTestResource.groovy b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-testing/src/main/groovy/test/JaxRsTestResource.groovy index 688cd27b45..0601ff486e 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-testing/src/main/groovy/test/JaxRsTestResource.groovy +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-testing/src/main/groovy/test/JaxRsTestResource.groovy @@ -14,7 +14,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS import static java.util.concurrent.TimeUnit.SECONDS -import io.opentelemetry.api.trace.Span import io.opentelemetry.instrumentation.test.base.HttpServerTest import java.util.concurrent.CompletableFuture import java.util.concurrent.CompletionStage @@ -88,10 +87,12 @@ class JaxRsTestResource { @Path("/child") @GET - void indexed_child(@Suspended AsyncResponse response, @QueryParam("id") long id) { + void indexed_child(@Context UriInfo uriInfo, @Suspended AsyncResponse response) { + def parameters = uriInfo.queryParameters + CompletableFuture.runAsync({ HttpServerTest.controller(INDEXED_CHILD) { - Span.current().setAttribute("test.request.id", id) + INDEXED_CHILD.collectSpanAttributes { parameters.getFirst(it) } response.resume("") } }) diff --git a/instrumentation/netty/netty-3.8/javaagent/src/test/groovy/Netty38ServerTest.groovy b/instrumentation/netty/netty-3.8/javaagent/src/test/groovy/Netty38ServerTest.groovy index 6d407e70ff..0de0f2fbbb 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/test/groovy/Netty38ServerTest.groovy +++ b/instrumentation/netty/netty-3.8/javaagent/src/test/groovy/Netty38ServerTest.groovy @@ -16,7 +16,6 @@ import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.LOCATION import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1 -import io.opentelemetry.api.trace.Span import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpServerTest import org.jboss.netty.bootstrap.ServerBootstrap @@ -75,8 +74,7 @@ class Netty38ServerTest extends HttpServerTest implements Agent response.setContent(responseContent) break case INDEXED_CHILD: - QueryStringDecoder queryStringDecoder = new QueryStringDecoder(uri) - Span.current().setAttribute("test.request.id", queryStringDecoder.getParameters().get("id").find() as long) + endpoint.collectSpanAttributes { new QueryStringDecoder(uri).getParameters().get(it).find() } response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.valueOf(endpoint.status)) break case QUERY_PARAM: diff --git a/instrumentation/netty/netty-4.0/javaagent/src/test/groovy/Netty40ServerTest.groovy b/instrumentation/netty/netty-4.0/javaagent/src/test/groovy/Netty40ServerTest.groovy index 1e079996e3..0e8d4a7a90 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/test/groovy/Netty40ServerTest.groovy +++ b/instrumentation/netty/netty-4.0/javaagent/src/test/groovy/Netty40ServerTest.groovy @@ -36,7 +36,6 @@ import io.netty.handler.codec.http.QueryStringDecoder import io.netty.handler.logging.LogLevel import io.netty.handler.logging.LoggingHandler import io.netty.util.CharsetUtil -import io.opentelemetry.api.trace.Span import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpServerTest @@ -73,8 +72,7 @@ class Netty40ServerTest extends HttpServerTest implements AgentT response = new DefaultFullHttpResponse(HTTP_1_1, HttpResponseStatus.valueOf(endpoint.status), content) break case INDEXED_CHILD: - QueryStringDecoder queryStringDecoder = new QueryStringDecoder(uri) - Span.current().setAttribute("test.request.id", queryStringDecoder.parameters().get("id").find() as long) + endpoint.collectSpanAttributes { new QueryStringDecoder(uri).parameters().get(it).find() } response = new DefaultFullHttpResponse(HTTP_1_1, HttpResponseStatus.valueOf(endpoint.status)) break case QUERY_PARAM: diff --git a/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/Netty41ServerTest.groovy b/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/Netty41ServerTest.groovy index 01d5afb859..2c914937ef 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/Netty41ServerTest.groovy +++ b/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/Netty41ServerTest.groovy @@ -35,7 +35,6 @@ import io.netty.handler.codec.http.QueryStringDecoder import io.netty.handler.logging.LogLevel import io.netty.handler.logging.LoggingHandler import io.netty.util.CharsetUtil -import io.opentelemetry.api.trace.Span import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpServerTest @@ -72,8 +71,7 @@ class Netty41ServerTest extends HttpServerTest implements AgentT response = new DefaultFullHttpResponse(HTTP_1_1, HttpResponseStatus.valueOf(endpoint.status), content) break case INDEXED_CHILD: - QueryStringDecoder queryStringDecoder = new QueryStringDecoder(uri) - Span.current().setAttribute("test.request.id", queryStringDecoder.parameters().get("id").find() as long) + endpoint.collectSpanAttributes { new QueryStringDecoder(uri).parameters().get(it).find() } response = new DefaultFullHttpResponse(HTTP_1_1, HttpResponseStatus.valueOf(endpoint.status)) break case QUERY_PARAM: diff --git a/instrumentation/play/play-2.4/javaagent/src/test/groovy/server/PlayAsyncServerTest.groovy b/instrumentation/play/play-2.4/javaagent/src/test/groovy/server/PlayAsyncServerTest.groovy index 32d52b6d6c..f29ae6ae24 100644 --- a/instrumentation/play/play-2.4/javaagent/src/test/groovy/server/PlayAsyncServerTest.groovy +++ b/instrumentation/play/play-2.4/javaagent/src/test/groovy/server/PlayAsyncServerTest.groovy @@ -13,7 +13,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS import static play.mvc.Http.Context.Implicit.request -import io.opentelemetry.api.trace.Span import java.util.concurrent.CompletableFuture import java.util.function.Supplier import play.libs.concurrent.HttpExecution @@ -36,7 +35,7 @@ class PlayAsyncServerTest extends PlayServerTest { .GET(INDEXED_CHILD.getPath()).routeTo({ CompletableFuture.supplyAsync({ controller(INDEXED_CHILD) { - Span.current().setAttribute("test.request.id", request().getQueryString("id") as long) + INDEXED_CHILD.collectSpanAttributes { request().getQueryString(it) } Results.status(INDEXED_CHILD.getStatus()) } }, HttpExecution.defaultContext()) diff --git a/instrumentation/play/play-2.4/javaagent/src/test/groovy/server/PlayServerTest.groovy b/instrumentation/play/play-2.4/javaagent/src/test/groovy/server/PlayServerTest.groovy index e746e85978..15e3438863 100644 --- a/instrumentation/play/play-2.4/javaagent/src/test/groovy/server/PlayServerTest.groovy +++ b/instrumentation/play/play-2.4/javaagent/src/test/groovy/server/PlayServerTest.groovy @@ -14,7 +14,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS import static play.mvc.Http.Context.Implicit.request -import io.opentelemetry.api.trace.Span import io.opentelemetry.api.trace.StatusCode import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.asserts.TraceAssert @@ -37,7 +36,7 @@ class PlayServerTest extends HttpServerTest implements AgentTestTrait { } as Supplier) .GET(INDEXED_CHILD.getPath()).routeTo({ controller(INDEXED_CHILD) { - Span.current().setAttribute("test.request.id", request().getQueryString("id") as long) + INDEXED_CHILD.collectSpanAttributes { request().getQueryString(it) } Results.status(INDEXED_CHILD.getStatus()) } } as Supplier) diff --git a/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackAsyncHttpServerTest.groovy b/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackAsyncHttpServerTest.groovy index cb715c03a4..33b88dc10b 100644 --- a/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackAsyncHttpServerTest.groovy +++ b/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackAsyncHttpServerTest.groovy @@ -13,7 +13,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS -import io.opentelemetry.api.trace.Span import ratpack.exec.Promise import ratpack.groovy.test.embed.GroovyEmbeddedApp import ratpack.test.embed.EmbeddedApp @@ -48,7 +47,7 @@ class RatpackAsyncHttpServerTest extends RatpackHttpServerTest { INDEXED_CHILD } then { controller(INDEXED_CHILD) { - Span.current().setAttribute("test.request.id", request.queryParams.get("id") as long) + INDEXED_CHILD.collectSpanAttributes { request.queryParams.get(it) } context.response.status(INDEXED_CHILD.status).send() } } diff --git a/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackForkedHttpServerTest.groovy b/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackForkedHttpServerTest.groovy index c49be25048..d1f57bb9b5 100644 --- a/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackForkedHttpServerTest.groovy +++ b/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackForkedHttpServerTest.groovy @@ -13,7 +13,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS -import io.opentelemetry.api.trace.Span import ratpack.exec.Promise import ratpack.groovy.test.embed.GroovyEmbeddedApp import ratpack.test.embed.EmbeddedApp @@ -48,7 +47,7 @@ class RatpackForkedHttpServerTest extends RatpackHttpServerTest { INDEXED_CHILD }.fork().then { controller(INDEXED_CHILD) { - Span.current().setAttribute("test.request.id", request.queryParams.get("id") as long) + INDEXED_CHILD.collectSpanAttributes { request.queryParams.get(it) } context.response.status(INDEXED_CHILD.status).send() } } diff --git a/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackHttpServerTest.groovy b/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackHttpServerTest.groovy index 7ccf492be0..a57be48750 100644 --- a/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackHttpServerTest.groovy +++ b/instrumentation/ratpack-1.4/javaagent/src/test/groovy/server/RatpackHttpServerTest.groovy @@ -14,7 +14,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS -import io.opentelemetry.api.trace.Span import io.opentelemetry.api.trace.StatusCode import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.asserts.TraceAssert @@ -48,7 +47,7 @@ class RatpackHttpServerTest extends HttpServerTest implements Agent prefix(INDEXED_CHILD.rawPath()) { all { controller(INDEXED_CHILD) { - Span.current().setAttribute("test.request.id", request.queryParams.get("id") as long) + INDEXED_CHILD.collectSpanAttributes { request.queryParams.get(it) } context.response.status(INDEXED_CHILD.status).send() } } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TestServlet3.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TestServlet3.groovy index bfc9dd9036..90b1440629 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TestServlet3.groovy +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TestServlet3.groovy @@ -11,7 +11,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS import groovy.servlet.AbstractHttpServlet -import io.opentelemetry.api.trace.Span import io.opentelemetry.instrumentation.test.base.HttpServerTest import java.util.concurrent.Phaser import javax.servlet.RequestDispatcher @@ -40,7 +39,7 @@ class TestServlet3 { break case INDEXED_CHILD: resp.status = endpoint.status - Span.current().setAttribute("test.request.id", req.getParameter("id") as long) + endpoint.collectSpanAttributes { req.getParameter(it) } break case QUERY_PARAM: resp.status = endpoint.status @@ -78,7 +77,7 @@ class TestServlet3 { context.complete() break case INDEXED_CHILD: - Span.current().setAttribute("test.request.id", req.getParameter("id") as long) + endpoint.collectSpanAttributes { req.getParameter(it) } resp.status = endpoint.status context.complete() break @@ -128,7 +127,7 @@ class TestServlet3 { resp.writer.print(endpoint.body) break case INDEXED_CHILD: - Span.current().setAttribute("test.request.id", req.getParameter("id") as long) + endpoint.collectSpanAttributes { req.getParameter(it) } resp.status = endpoint.status break case QUERY_PARAM: diff --git a/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/TestServlet5.groovy b/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/TestServlet5.groovy index 7bdf1bfb6a..4786647675 100644 --- a/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/TestServlet5.groovy +++ b/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/TestServlet5.groovy @@ -10,7 +10,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS -import io.opentelemetry.api.trace.Span import io.opentelemetry.instrumentation.test.base.HttpServerTest import jakarta.servlet.RequestDispatcher import jakarta.servlet.ServletException @@ -40,7 +39,7 @@ class TestServlet5 { break case INDEXED_CHILD: resp.status = endpoint.status - Span.current().setAttribute("test.request.id", req.getParameter("id") as long) + endpoint.collectSpanAttributes { req.getParameter(it) } break case QUERY_PARAM: resp.status = endpoint.status @@ -78,7 +77,7 @@ class TestServlet5 { context.complete() break case INDEXED_CHILD: - Span.current().setAttribute("test.request.id", req.getParameter("id") as long) + endpoint.collectSpanAttributes { req.getParameter(it) } resp.status = endpoint.status context.complete() break @@ -128,7 +127,7 @@ class TestServlet5 { resp.writer.print(endpoint.body) break case INDEXED_CHILD: - Span.current().setAttribute("test.request.id", req.getParameter("id") as long) + endpoint.collectSpanAttributes { req.getParameter(it) } resp.status = endpoint.status break case QUERY_PARAM: diff --git a/instrumentation/spring/spring-webflux-5.0/javaagent/src/test/java/server/base/ServerTestController.java b/instrumentation/spring/spring-webflux-5.0/javaagent/src/test/java/server/base/ServerTestController.java index 54ac8f144e..a0fa2e758f 100644 --- a/instrumentation/spring/spring-webflux-5.0/javaagent/src/test/java/server/base/ServerTestController.java +++ b/instrumentation/spring/spring-webflux-5.0/javaagent/src/test/java/server/base/ServerTestController.java @@ -5,7 +5,6 @@ package server.base; -import io.opentelemetry.api.trace.Span; import io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint; import java.net.URI; import java.util.concurrent.Callable; @@ -96,9 +95,7 @@ public abstract class ServerTestController { return wrapControllerMethod( endpoint, () -> { - Span.current() - .setAttribute( - "test.request.id", Long.parseLong(request.getQueryParams().getFirst("id"))); + endpoint.collectSpanAttributes(it -> request.getQueryParams().getFirst(it)); setStatus(response, endpoint); return ""; }); diff --git a/instrumentation/vertx-reactive-3.5/javaagent/src/test/groovy/server/VertxRxCircuitBreakerHttpServerTest.groovy b/instrumentation/vertx-reactive-3.5/javaagent/src/test/groovy/server/VertxRxCircuitBreakerHttpServerTest.groovy index 48b915a479..102724b777 100644 --- a/instrumentation/vertx-reactive-3.5/javaagent/src/test/groovy/server/VertxRxCircuitBreakerHttpServerTest.groovy +++ b/instrumentation/vertx-reactive-3.5/javaagent/src/test/groovy/server/VertxRxCircuitBreakerHttpServerTest.groovy @@ -13,7 +13,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS -import io.opentelemetry.api.trace.Span import io.opentelemetry.instrumentation.test.base.HttpServerTest import io.vertx.circuitbreaker.CircuitBreakerOptions import io.vertx.core.Future @@ -64,7 +63,7 @@ class VertxRxCircuitBreakerHttpServerTest extends VertxRxHttpServerTest { } HttpServerTest.ServerEndpoint endpoint = it.result() controller(endpoint) { - Span.current().setAttribute("test.request.id", ctx.request().params().get("id") as long) + endpoint.collectSpanAttributes { ctx.request().params().get(it) } ctx.response().setStatusCode(endpoint.status).end() } }) diff --git a/instrumentation/vertx-reactive-3.5/javaagent/src/test/groovy/server/VertxRxHttpServerTest.groovy b/instrumentation/vertx-reactive-3.5/javaagent/src/test/groovy/server/VertxRxHttpServerTest.groovy index 65baa153ba..427e130061 100644 --- a/instrumentation/vertx-reactive-3.5/javaagent/src/test/groovy/server/VertxRxHttpServerTest.groovy +++ b/instrumentation/vertx-reactive-3.5/javaagent/src/test/groovy/server/VertxRxHttpServerTest.groovy @@ -14,7 +14,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS -import io.opentelemetry.api.trace.Span import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpServerTest import io.vertx.core.DeploymentOptions @@ -95,8 +94,8 @@ class VertxRxHttpServerTest extends HttpServerTest implements AgentTestTr } } router.route(INDEXED_CHILD.path).handler { ctx -> - controller(QUERY_PARAM) { - Span.current().setAttribute("test.request.id", ctx.request().params().get("id") as long) + controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { ctx.request().params().get(it) } ctx.response().setStatusCode(INDEXED_CHILD.status).end() } } diff --git a/instrumentation/vertx-web-3.0/javaagent/src/test/java/server/VertxWebServer.java b/instrumentation/vertx-web-3.0/javaagent/src/test/java/server/VertxWebServer.java index 8c2fde83d3..69295cf02b 100644 --- a/instrumentation/vertx-web-3.0/javaagent/src/test/java/server/VertxWebServer.java +++ b/instrumentation/vertx-web-3.0/javaagent/src/test/java/server/VertxWebServer.java @@ -13,7 +13,6 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS; -import io.opentelemetry.api.trace.Span; import io.opentelemetry.instrumentation.test.base.HttpServerTest; import io.vertx.core.AbstractVerticle; import io.vertx.core.Future; @@ -53,9 +52,7 @@ public class VertxWebServer extends AbstractVerticle { HttpServerTest.controller( INDEXED_CHILD, () -> { - Span.current() - .setAttribute( - "test.request.id", Long.parseLong(ctx.request().getParam("id"))); + INDEXED_CHILD.collectSpanAttributes(it -> ctx.request().getParam(it)); ctx.response().setStatusCode(INDEXED_CHILD.getStatus()).end(); return null; })); diff --git a/testing-common/src/main/groovy/io/opentelemetry/instrumentation/test/base/HttpServerTest.groovy b/testing-common/src/main/groovy/io/opentelemetry/instrumentation/test/base/HttpServerTest.groovy index 04e5bee2b6..66684f170e 100644 --- a/testing-common/src/main/groovy/io/opentelemetry/instrumentation/test/base/HttpServerTest.groovy +++ b/testing-common/src/main/groovy/io/opentelemetry/instrumentation/test/base/HttpServerTest.groovy @@ -138,6 +138,9 @@ abstract class HttpServerTest extends InstrumentationSpecification imple AUTH_ERROR("basicsecured/endpoint", 401, null), INDEXED_CHILD("child", 200, null), + public static final String ID_ATTRIBUTE_NAME = "test.request.id" + public static final String ID_PARAMETER_NAME = "id" + private final URI uriObj private final String path final String query @@ -177,11 +180,31 @@ abstract class HttpServerTest extends InstrumentationSpecification imple return new URI(uri.scheme, null, uri.host, uri.port, uri.path, uri.query, null) } + /** + * Populates custom test attributes for the {@link HttpServerTest#controller} span (which must + * be the current span when this is called) based on URL parameters. Required for + * {@link #INDEXED_CHILD}. + */ + void collectSpanAttributes(UrlParameterProvider parameterProvider) { + if (this == INDEXED_CHILD) { + String value = parameterProvider.getParameter(ID_PARAMETER_NAME) + + if (value != null) { + Span.current().setAttribute(ID_ATTRIBUTE_NAME, value as long) + } + } + } + private static final Map PATH_MAP = values().collectEntries { [it.path, it] } static ServerEndpoint forPath(String path) { return PATH_MAP.get(path) } + + // Static keyword required for Scala interop + static interface UrlParameterProvider { + String getParameter(String name) + } } Request.Builder request(ServerEndpoint uri, String method, RequestBody body) { @@ -416,11 +439,11 @@ abstract class HttpServerTest extends InstrumentationSpecification imple def job = { latch.await() def url = HttpUrl.get(endpoint.resolvePath(address)).newBuilder() - .query("id=$index") + .query("${ServerEndpoint.ID_PARAMETER_NAME}=$index") .build() Request.Builder builder = request(url, "GET", null) runUnderTrace("client " + index) { - Span.current().setAttribute("test.request.id", index) + Span.current().setAttribute(ServerEndpoint.ID_ATTRIBUTE_NAME, index) propagator.inject(Context.current(), builder, setter) client.newCall(builder.build()).execute() } @@ -439,7 +462,7 @@ abstract class HttpServerTest extends InstrumentationSpecification imple def requestId = Integer.parseInt(rootSpan.name.substring("client ".length())) basicSpan(it, 0, "client " + requestId, null, null) { - it."test.request.id" requestId + "${ServerEndpoint.ID_ATTRIBUTE_NAME}" requestId } indexedServerSpan(it, span(0), requestId) @@ -648,7 +671,7 @@ abstract class HttpServerTest extends InstrumentationSpecification imple name "controller" childOf((SpanData) parent) attributes { - it."test.request.id" requestId + "${ServerEndpoint.ID_ATTRIBUTE_NAME}" requestId } } }