From 2e465cb5d17fc94ce69e4066420c1f9155cd5cfc Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Fri, 22 Oct 2021 18:39:30 +0300 Subject: [PATCH] Enable http server concurrency test everywhere (#4465) * Enable http server concurrency test everywhere * remove testConcurrency method as test is now always enabled * rebase --- .../AkkaHttpServerInstrumentationTest.groovy | 5 --- .../v1_3/AbstractArmeriaHttpServerTest.groovy | 8 +++++ .../test/groovy/DropwizardAsyncTest.groovy | 12 ++++++- .../src/test/groovy/DropwizardTest.groovy | 10 ++++++ .../scala/FinatraController.scala | 15 ++++++++ .../src/test/scala/FinatraController.scala | 15 ++++++++ .../src/test/groovy/test/GrailsTest.groovy | 3 ++ .../test/groovy/test/TestController.groovy | 9 +++++ .../src/test/groovy/test/UrlMappings.groovy | 1 + .../src/test/groovy/GrizzlyAsyncTest.groovy | 20 +++++++++-- .../GrizzlyFilterchainServerTest.groovy | 35 +++++++++++++++---- .../src/test/groovy/GrizzlyTest.groovy | 10 ++++++ .../main/groovy/JaxRsHttpServerTest.groovy | 5 --- .../src/test/groovy/JettyHandlerTest.groovy | 6 ++++ .../src/test/groovy/JettyHandlerTest.groovy | 6 ++++ .../src/test/groovy/Netty38ServerTest.groovy | 5 --- .../src/test/groovy/Netty40ServerTest.groovy | 5 --- .../src/test/groovy/Netty41ServerTest.groovy | 5 --- .../test/groovy/server/PlayServerTest.groovy | 5 --- .../groovy/server/PlayAsyncServerTest.groovy | 24 +++++++++++++ .../test/groovy/server/PlayServerTest.groovy | 22 +++++++++--- .../AbstractRatpackHttpServerTest.groovy | 5 --- .../v1_0/AbstractRestletServerTest.groovy | 5 --- .../v1_0/AbstractServletServerTest.groovy | 5 --- .../src/test/groovy/JettyServlet2Test.groovy | 2 ++ .../src/test/groovy/TestServlet2.groovy | 6 ++++ .../src/test/groovy/JettyServlet3Test.groovy | 20 +++-------- .../src/test/groovy/TestServlet3.groovy | 6 ++++ .../src/test/groovy/TomcatServlet3Test.groovy | 15 +++----- .../src/test/groovy/JettyServlet5Test.groovy | 20 +++-------- .../src/test/groovy/TestServlet5.groovy | 6 ++++ .../src/test/groovy/TomcatServlet5Test.groovy | 15 +++----- .../base/SpringWebFluxServerTest.groovy | 5 --- .../groovy/test/boot/TestController.groovy | 10 ++++++ .../test/filter/FilteredAppConfig.groovy | 5 +++ .../groovy/test/filter/TestController.groovy | 6 ++++ .../test/groovy/Struts2ActionSpanTest.groovy | 6 ---- .../opentelemetry/struts/GreetingAction.java | 26 ++++++++++++++ .../javaagent/src/test/resources/struts.xml | 2 ++ .../tomcat/v10_0/TestServlet.java | 3 ++ .../tomcat/v10_0/TomcatAsyncTest.groovy | 5 --- .../tomcat/v7_0/TestServlet.java | 3 ++ .../tomcat/v7_0/TomcatAsyncTest.groovy | 5 --- .../src/test/groovy/UndertowServerTest.groovy | 7 ++++ .../server/VertxRxHttpServerTest.groovy | 5 --- .../server/VertxRxHttpServerTest.groovy | 5 --- .../server/AbstractVertxHttpServerTest.groovy | 5 --- .../test/base/HttpServerTest.groovy | 7 +--- 48 files changed, 283 insertions(+), 153 deletions(-) diff --git a/instrumentation/akka-http-10.0/javaagent/src/test/groovy/AkkaHttpServerInstrumentationTest.groovy b/instrumentation/akka-http-10.0/javaagent/src/test/groovy/AkkaHttpServerInstrumentationTest.groovy index b5f6afd3289b..8c822910573f 100644 --- a/instrumentation/akka-http-10.0/javaagent/src/test/groovy/AkkaHttpServerInstrumentationTest.groovy +++ b/instrumentation/akka-http-10.0/javaagent/src/test/groovy/AkkaHttpServerInstrumentationTest.groovy @@ -28,11 +28,6 @@ abstract class AkkaHttpServerInstrumentationTest extends HttpServerTest boolean testCapturedHttpHeaders() { false } - - @Override - boolean testConcurrency() { - return true - } } class AkkaHttpServerInstrumentationTestSync extends AkkaHttpServerInstrumentationTest { diff --git a/instrumentation/armeria-1.3/testing/src/main/groovy/io/opentelemetry/instrumentation/armeria/v1_3/AbstractArmeriaHttpServerTest.groovy b/instrumentation/armeria-1.3/testing/src/main/groovy/io/opentelemetry/instrumentation/armeria/v1_3/AbstractArmeriaHttpServerTest.groovy index 932c0276df6f..8b236bbb22c4 100644 --- a/instrumentation/armeria-1.3/testing/src/main/groovy/io/opentelemetry/instrumentation/armeria/v1_3/AbstractArmeriaHttpServerTest.groovy +++ b/instrumentation/armeria-1.3/testing/src/main/groovy/io/opentelemetry/instrumentation/armeria/v1_3/AbstractArmeriaHttpServerTest.groovy @@ -28,6 +28,7 @@ import java.util.function.Function import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.REDIRECT @@ -97,6 +98,13 @@ abstract class AbstractArmeriaHttpServerTest extends HttpServerTest { } } + sb.service("/child") { ctx, req -> + controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { QueryParams.fromQueryString(ctx.query()).get(it) } + HttpResponse.of(HttpStatus.valueOf(INDEXED_CHILD.status), MediaType.PLAIN_TEXT_UTF_8, INDEXED_CHILD.body) + } + } + sb.service("/captureHeaders") { ctx, req -> controller(CAPTURE_HEADERS) { HttpResponse.of( diff --git a/instrumentation/dropwizard-testing/src/test/groovy/DropwizardAsyncTest.groovy b/instrumentation/dropwizard-testing/src/test/groovy/DropwizardAsyncTest.groovy index 8e9fc566e02c..6d5583cfb3dc 100644 --- a/instrumentation/dropwizard-testing/src/test/groovy/DropwizardAsyncTest.groovy +++ b/instrumentation/dropwizard-testing/src/test/groovy/DropwizardAsyncTest.groovy @@ -20,6 +20,7 @@ import java.util.concurrent.Executors import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.REDIRECT @@ -110,7 +111,7 @@ class DropwizardAsyncTest extends DropwizardTest { @GET @Path("path/{id}/param") - Response path_param(@PathParam("id") int param, @Suspended final AsyncResponse asyncResponse) { + void path_param(@PathParam("id") int param, @Suspended final AsyncResponse asyncResponse) { executor.execute { controller(PATH_PARAM) { asyncResponse.resume(Response.status(PATH_PARAM.status).entity(param.toString()).build()) @@ -118,6 +119,15 @@ class DropwizardAsyncTest extends DropwizardTest { } } + @GET + @Path("child") + void indexed_child(@QueryParam("id") String param, @Suspended final AsyncResponse asyncResponse) { + controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { it == "id" ? param : null } + asyncResponse.resume(Response.status(INDEXED_CHILD.status).entity(INDEXED_CHILD.body).build()) + } + } + @GET @Path("captureHeaders") void capture_headers(@HeaderParam("X-Test-Request") String header, diff --git a/instrumentation/dropwizard-testing/src/test/groovy/DropwizardTest.groovy b/instrumentation/dropwizard-testing/src/test/groovy/DropwizardTest.groovy index 652b3e87415d..e7d7af03fdf0 100644 --- a/instrumentation/dropwizard-testing/src/test/groovy/DropwizardTest.groovy +++ b/instrumentation/dropwizard-testing/src/test/groovy/DropwizardTest.groovy @@ -29,6 +29,7 @@ import static io.opentelemetry.api.trace.SpanKind.INTERNAL import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.QUERY_PARAM @@ -181,6 +182,15 @@ class DropwizardTest extends HttpServerTest implements Ag } } + @GET + @Path("child") + Response indexed_child(@QueryParam("id") String param) { + controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { it == "id" ? param : null } + Response.status(INDEXED_CHILD.status).entity(INDEXED_CHILD.body).build() + } + } + @GET @Path("captureHeaders") Response capture_headers(@HeaderParam("X-Test-Request") String header) { diff --git a/instrumentation/finatra-2.9/javaagent/src/latestDepTest/scala/FinatraController.scala b/instrumentation/finatra-2.9/javaagent/src/latestDepTest/scala/FinatraController.scala index 7ca5331d0e52..a0ba81a900d8 100644 --- a/instrumentation/finatra-2.9/javaagent/src/latestDepTest/scala/FinatraController.scala +++ b/instrumentation/finatra-2.9/javaagent/src/latestDepTest/scala/FinatraController.scala @@ -81,4 +81,19 @@ class FinatraController extends Controller { } ) } + + any(INDEXED_CHILD.getPath) { request: Request => + controller( + INDEXED_CHILD, + new Closure[Response](null) { + override def call(): Response = { + INDEXED_CHILD.collectSpanAttributes(new UrlParameterProvider { + override def getParameter(name: String): String = + request.getParam(name) + }) + response.ok(INDEXED_CHILD.getBody) + } + } + ) + } } diff --git a/instrumentation/finatra-2.9/javaagent/src/test/scala/FinatraController.scala b/instrumentation/finatra-2.9/javaagent/src/test/scala/FinatraController.scala index caa3dfb47dde..c567da5ca290 100644 --- a/instrumentation/finatra-2.9/javaagent/src/test/scala/FinatraController.scala +++ b/instrumentation/finatra-2.9/javaagent/src/test/scala/FinatraController.scala @@ -82,6 +82,21 @@ class FinatraController extends Controller { ) } + any(INDEXED_CHILD.getPath) { request: Request => + controller( + INDEXED_CHILD, + new Closure[Response](null) { + override def call(): Response = { + INDEXED_CHILD.collectSpanAttributes(new UrlParameterProvider { + override def getParameter(name: String): String = + request.getParam(name) + }) + response.ok(INDEXED_CHILD.getBody) + } + } + ) + } + any("/path/:id/param") { request: Request => controller( PATH_PARAM, diff --git a/instrumentation/grails-3.0/javaagent/src/test/groovy/test/GrailsTest.groovy b/instrumentation/grails-3.0/javaagent/src/test/groovy/test/GrailsTest.groovy index d39c6a782b3c..23787aa963cf 100644 --- a/instrumentation/grails-3.0/javaagent/src/test/groovy/test/GrailsTest.groovy +++ b/instrumentation/grails-3.0/javaagent/src/test/groovy/test/GrailsTest.groovy @@ -23,6 +23,7 @@ import static io.opentelemetry.api.trace.SpanKind.INTERNAL import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.QUERY_PARAM @@ -155,6 +156,8 @@ class GrailsTest extends HttpServerTest implemen name "TestController.path" } else if (endpoint == CAPTURE_HEADERS) { name "TestController.captureHeaders" + } else if (endpoint == INDEXED_CHILD) { + name "TestController.child" } else if (endpoint == NOT_FOUND) { name "ResourceHttpRequestHandler.handleRequest" } else { diff --git a/instrumentation/grails-3.0/javaagent/src/test/groovy/test/TestController.groovy b/instrumentation/grails-3.0/javaagent/src/test/groovy/test/TestController.groovy index 16693260ce89..e4420ddfd21e 100644 --- a/instrumentation/grails-3.0/javaagent/src/test/groovy/test/TestController.groovy +++ b/instrumentation/grails-3.0/javaagent/src/test/groovy/test/TestController.groovy @@ -12,6 +12,7 @@ import io.opentelemetry.instrumentation.test.base.HttpServerTest import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.REDIRECT @@ -73,4 +74,12 @@ class TestController implements Controller { render CAPTURE_HEADERS.body } } + + @Action + def child() { + HttpServerTest.controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes({name -> name == "id" ? params.id : null }) + render INDEXED_CHILD.body + } + } } diff --git a/instrumentation/grails-3.0/javaagent/src/test/groovy/test/UrlMappings.groovy b/instrumentation/grails-3.0/javaagent/src/test/groovy/test/UrlMappings.groovy index 0f99d34a5220..fe15eb60948d 100644 --- a/instrumentation/grails-3.0/javaagent/src/test/groovy/test/UrlMappings.groovy +++ b/instrumentation/grails-3.0/javaagent/src/test/groovy/test/UrlMappings.groovy @@ -15,6 +15,7 @@ class UrlMappings { "/exception"(controller: 'test', action: 'exception') "/path/$id/param"(controller: 'test', action: 'path') "/captureHeaders"(controller: 'test', action: 'captureHeaders') + "/child"(controller: 'test', action: 'child') "500"(controller: 'error') "404"(controller: 'error', action: 'notFound') diff --git a/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyAsyncTest.groovy b/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyAsyncTest.groovy index 1d5ae00bae67..d7d7626e1375 100644 --- a/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyAsyncTest.groovy +++ b/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyAsyncTest.groovy @@ -18,6 +18,7 @@ import java.util.concurrent.Executors 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.INDEXED_CHILD 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.SUCCESS @@ -46,7 +47,7 @@ class GrizzlyAsyncTest extends GrizzlyTest { @Path("/") static class AsyncServiceResource { - private ExecutorService executor = Executors.newSingleThreadExecutor() + private ExecutorService executor = Executors.newCachedThreadPool() @GET @Path("success") @@ -61,8 +62,10 @@ class GrizzlyAsyncTest extends GrizzlyTest { @GET @Path("query") Response query_param(@QueryParam("some") String param, @Suspended AsyncResponse ar) { - controller(QUERY_PARAM) { - ar.resume(Response.status(QUERY_PARAM.status).entity("some=$param".toString()).build()) + executor.execute { + controller(QUERY_PARAM) { + ar.resume(Response.status(QUERY_PARAM.status).entity("some=$param".toString()).build()) + } } } @@ -99,5 +102,16 @@ class GrizzlyAsyncTest extends GrizzlyTest { } } } + + @GET + @Path("child") + void exception(@QueryParam("id") String id, @Suspended AsyncResponse ar) { + executor.execute { + controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { it == "id" ? id : null } + ar.resume(Response.status(INDEXED_CHILD.status).entity(INDEXED_CHILD.body).build()) + } + } + } } } diff --git a/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyFilterchainServerTest.groovy b/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyFilterchainServerTest.groovy index 53edd3d6a27f..0e63f0bb9df2 100644 --- a/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyFilterchainServerTest.groovy +++ b/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyFilterchainServerTest.groovy @@ -5,6 +5,7 @@ import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpServerTest +import java.nio.charset.StandardCharsets import org.glassfish.grizzly.filterchain.BaseFilter import org.glassfish.grizzly.filterchain.FilterChain import org.glassfish.grizzly.filterchain.FilterChainBuilder @@ -17,6 +18,7 @@ import org.glassfish.grizzly.http.HttpRequestPacket import org.glassfish.grizzly.http.HttpResponsePacket import org.glassfish.grizzly.http.HttpServerFilter import org.glassfish.grizzly.http.server.HttpServer +import org.glassfish.grizzly.http.util.Parameters import org.glassfish.grizzly.nio.transport.TCPNIOServerConnection import org.glassfish.grizzly.nio.transport.TCPNIOTransport import org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder @@ -28,6 +30,7 @@ import java.util.concurrent.Executors import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.AUTH_REQUIRED 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.INDEXED_CHILD 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.QUERY_PARAM @@ -123,6 +126,7 @@ class GrizzlyFilterchainServerTest extends HttpServerTest implements responseParameters.fillHeaders(builder) HttpResponsePacket responsePacket = builder.build() controller(responseParameters.getEndpoint()) { + responseParameters.execute() ctx.write(HttpContent.builder(responsePacket) .content(wrap(ctx.getMemoryManager(), responseParameters.getResponseBody())) .build()) @@ -134,13 +138,11 @@ class GrizzlyFilterchainServerTest extends HttpServerTest implements ResponseParameters buildResponse(HttpRequestPacket request) { String uri = request.getRequestURI() - String requestParams = request.getQueryString() - String fullPath = uri + (requestParams != null ? "?" + requestParams : "") - Map headers = new HashMap<>() HttpServerTest.ServerEndpoint endpoint - switch (fullPath) { + Closure closure + switch (uri) { case "/success": endpoint = SUCCESS break @@ -153,7 +155,7 @@ class GrizzlyFilterchainServerTest extends HttpServerTest implements break case "/exception": throw new Exception(EXCEPTION.body) - case "/query?some=query": + case "/query": endpoint = QUERY_PARAM break case "/path/123/param": @@ -162,6 +164,16 @@ class GrizzlyFilterchainServerTest extends HttpServerTest implements case "/authRequired": endpoint = AUTH_REQUIRED break + case "/child": + endpoint = INDEXED_CHILD + Parameters parameters = new Parameters() + parameters.setQuery(request.getQueryStringDC()) + parameters.setQueryStringEncoding(StandardCharsets.UTF_8) + parameters.handleQueryParameters() + closure = { + INDEXED_CHILD.collectSpanAttributes { name -> parameters.getParameter(name) } + } + break default: endpoint = NOT_FOUND break @@ -171,7 +183,7 @@ class GrizzlyFilterchainServerTest extends HttpServerTest implements String responseBody = endpoint == REDIRECT ? "" : endpoint.body byte[] responseBodyBytes = responseBody.getBytes(defaultCharset()) - return new ResponseParameters(endpoint, status, responseBodyBytes, headers) + return new ResponseParameters(endpoint, status, responseBodyBytes, headers, closure) } static class ResponseParameters { @@ -179,15 +191,18 @@ class GrizzlyFilterchainServerTest extends HttpServerTest implements HttpServerTest.ServerEndpoint endpoint int status byte[] responseBody + Closure closure ResponseParameters(HttpServerTest.ServerEndpoint endpoint, int status, byte[] responseBody, - Map headers) { + Map headers, + Closure closure) { this.endpoint = endpoint this.status = status this.responseBody = responseBody this.headers = headers + this.closure = closure } int getStatus() { @@ -207,6 +222,12 @@ class GrizzlyFilterchainServerTest extends HttpServerTest implements builder.header(header.getKey(), header.getValue()) } } + + void execute() { + if (closure != null) { + closure.run() + } + } } } diff --git a/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyTest.groovy b/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyTest.groovy index a8062b69dbd3..c88bfef50708 100644 --- a/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyTest.groovy +++ b/instrumentation/grizzly-2.0/javaagent/src/test/groovy/GrizzlyTest.groovy @@ -20,6 +20,7 @@ import javax.ws.rs.ext.ExceptionMapper 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.INDEXED_CHILD 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.SUCCESS @@ -96,6 +97,15 @@ class GrizzlyTest extends HttpServerTest implements AgentTestTrait { Response.status(ERROR.status).entity(ERROR.body).build() } } + + @GET + @Path("child") + Response exception(@QueryParam("id") String id) { + controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { it == "id" ? id : null } + Response.status(INDEXED_CHILD.status).entity(INDEXED_CHILD.body).build() + } + } } @Override diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-common/testing/src/main/groovy/JaxRsHttpServerTest.groovy b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-common/testing/src/main/groovy/JaxRsHttpServerTest.groovy index 2df38b723e9a..2018ebaa25e0 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-common/testing/src/main/groovy/JaxRsHttpServerTest.groovy +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-common/testing/src/main/groovy/JaxRsHttpServerTest.groovy @@ -213,11 +213,6 @@ abstract class JaxRsHttpServerTest extends HttpServerTest implements Agent true } - @Override - boolean testConcurrency() { - true - } - boolean testInterfaceMethodWithPath() { true } diff --git a/instrumentation/jetty/jetty-11.0/javaagent/src/test/groovy/JettyHandlerTest.groovy b/instrumentation/jetty/jetty-11.0/javaagent/src/test/groovy/JettyHandlerTest.groovy index ed5a8ac75cf4..6f55f40a82f4 100644 --- a/instrumentation/jetty/jetty-11.0/javaagent/src/test/groovy/JettyHandlerTest.groovy +++ b/instrumentation/jetty/jetty-11.0/javaagent/src/test/groovy/JettyHandlerTest.groovy @@ -22,6 +22,7 @@ import spock.lang.Shared import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT @@ -113,6 +114,11 @@ class JettyHandlerTest extends HttpServerTest implements AgentTestTrait break case EXCEPTION: throw new Exception(endpoint.body) + case INDEXED_CHILD: + INDEXED_CHILD.collectSpanAttributes {name -> request.getParameter(name) } + response.status = endpoint.status + response.writer.print(endpoint.body) + break default: response.status = NOT_FOUND.status response.writer.print(NOT_FOUND.body) diff --git a/instrumentation/jetty/jetty-8.0/javaagent/src/test/groovy/JettyHandlerTest.groovy b/instrumentation/jetty/jetty-8.0/javaagent/src/test/groovy/JettyHandlerTest.groovy index 954d2fcc217e..1d33abd5d1fd 100644 --- a/instrumentation/jetty/jetty-8.0/javaagent/src/test/groovy/JettyHandlerTest.groovy +++ b/instrumentation/jetty/jetty-8.0/javaagent/src/test/groovy/JettyHandlerTest.groovy @@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletResponse import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT @@ -114,6 +115,11 @@ class JettyHandlerTest extends HttpServerTest implements AgentTestTrait break case EXCEPTION: throw new Exception(endpoint.body) + case INDEXED_CHILD: + INDEXED_CHILD.collectSpanAttributes {name -> request.getParameter(name) } + response.status = endpoint.status + response.writer.print(endpoint.body) + break default: response.status = NOT_FOUND.status response.writer.print(NOT_FOUND.body) 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 6aba1dc4e7db..24ff07ac42b1 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 @@ -163,9 +163,4 @@ class Netty38ServerTest extends HttpServerTest implements Agent String expectedServerSpanName(ServerEndpoint endpoint) { return "HTTP GET" } - - @Override - boolean testConcurrency() { - return true - } } 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 60d05d54d5c8..5b9794092b93 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 @@ -132,9 +132,4 @@ class Netty40ServerTest extends HttpServerTest implements AgentT String expectedServerSpanName(ServerEndpoint endpoint) { return "HTTP GET" } - - @Override - boolean testConcurrency() { - return true - } } 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 9c4b9e951b63..878970c488a7 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 @@ -131,9 +131,4 @@ class Netty41ServerTest extends HttpServerTest implements AgentT String expectedServerSpanName(ServerEndpoint endpoint) { return "HTTP GET" } - - @Override - boolean testConcurrency() { - return true - } } 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 f185a62be829..511ed72ab6d2 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 @@ -83,11 +83,6 @@ class PlayServerTest extends HttpServerTest implements AgentTestTrait { true } - @Override - boolean testConcurrency() { - return true - } - @Override boolean verifyServerSpanEndTime() { // server spans are ended inside of the controller spans diff --git a/instrumentation/play/play-2.6/javaagent/src/test/groovy/server/PlayAsyncServerTest.groovy b/instrumentation/play/play-2.6/javaagent/src/test/groovy/server/PlayAsyncServerTest.groovy index 04d81a2422fa..b6daed486224 100644 --- a/instrumentation/play/play-2.6/javaagent/src/test/groovy/server/PlayAsyncServerTest.groovy +++ b/instrumentation/play/play-2.6/javaagent/src/test/groovy/server/PlayAsyncServerTest.groovy @@ -8,6 +8,7 @@ package server import play.BuiltInComponents import play.Mode import play.libs.concurrent.HttpExecution +import play.mvc.Controller import play.mvc.Results import play.routing.RoutingDsl import play.server.Server @@ -17,8 +18,10 @@ import java.util.concurrent.CompletableFuture import java.util.concurrent.Executors import java.util.function.Supplier +import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.SUCCESS @@ -70,6 +73,27 @@ class PlayAsyncServerTest extends PlayServerTest { throw new Exception(EXCEPTION.getBody()) } }, execContext) + } as Supplier) + .GET(CAPTURE_HEADERS.getPath()).routeAsync({ + def request = Controller.request() + def response = Controller.response() + CompletableFuture.supplyAsync({ + controller(CAPTURE_HEADERS) { + request.header("X-Test-Request").ifPresent({ value -> + response.setHeader("X-Test-Response", value) + }) + Results.status(CAPTURE_HEADERS.getStatus(), CAPTURE_HEADERS.getBody()) + } + }, execContext) + } as Supplier) + .GET(INDEXED_CHILD.getPath()).routeAsync({ + String id = Controller.request().getQueryString("id") + CompletableFuture.supplyAsync({ + controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { name -> name == "id" ? id : null } + Results.status(INDEXED_CHILD.getStatus(), INDEXED_CHILD.getBody()) + } + }, execContext) } as Supplier) .build() } diff --git a/instrumentation/play/play-2.6/javaagent/src/test/groovy/server/PlayServerTest.groovy b/instrumentation/play/play-2.6/javaagent/src/test/groovy/server/PlayServerTest.groovy index 32d03abb7ecd..4fda5a0179e9 100644 --- a/instrumentation/play/play-2.6/javaagent/src/test/groovy/server/PlayServerTest.groovy +++ b/instrumentation/play/play-2.6/javaagent/src/test/groovy/server/PlayServerTest.groovy @@ -12,6 +12,7 @@ import io.opentelemetry.instrumentation.test.base.HttpServerTest import io.opentelemetry.sdk.trace.data.SpanData import play.BuiltInComponents import play.Mode +import play.mvc.Controller import play.mvc.Results import play.routing.RoutingDsl import play.server.Server @@ -19,8 +20,10 @@ import play.server.Server import java.util.function.Supplier import static io.opentelemetry.api.trace.SpanKind.INTERNAL +import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.SUCCESS @@ -54,6 +57,20 @@ class PlayServerTest extends HttpServerTest implements AgentTestTrait { controller(EXCEPTION) { throw new Exception(EXCEPTION.getBody()) } + } as Supplier) + .GET(CAPTURE_HEADERS.getPath()).routeTo({ + controller(CAPTURE_HEADERS) { + Controller.request().header("X-Test-Request").ifPresent({ value -> + Controller.response().setHeader("X-Test-Response", value) + }) + Results.status(CAPTURE_HEADERS.getStatus(), CAPTURE_HEADERS.getBody()) + } + } as Supplier) + .GET(INDEXED_CHILD.getPath()).routeTo({ + controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { name -> Controller.request().getQueryString(name) } + Results.status(INDEXED_CHILD.getStatus(), INDEXED_CHILD.getBody()) + } } as Supplier) .build() } @@ -64,11 +81,6 @@ class PlayServerTest extends HttpServerTest implements AgentTestTrait { server.stop() } - @Override - boolean testCapturedHttpHeaders() { - false - } - @Override boolean hasHandlerSpan(ServerEndpoint endpoint) { true diff --git a/instrumentation/ratpack-1.4/testing/src/main/groovy/io/opentelemetry/instrumentation/ratpack/server/AbstractRatpackHttpServerTest.groovy b/instrumentation/ratpack-1.4/testing/src/main/groovy/io/opentelemetry/instrumentation/ratpack/server/AbstractRatpackHttpServerTest.groovy index e79b952d8a2f..803e456e8fbf 100644 --- a/instrumentation/ratpack-1.4/testing/src/main/groovy/io/opentelemetry/instrumentation/ratpack/server/AbstractRatpackHttpServerTest.groovy +++ b/instrumentation/ratpack-1.4/testing/src/main/groovy/io/opentelemetry/instrumentation/ratpack/server/AbstractRatpackHttpServerTest.groovy @@ -132,11 +132,6 @@ abstract class AbstractRatpackHttpServerTest extends HttpServerTest { true } - @Override - boolean testConcurrency() { - true - } - @Override String expectedServerSpanName(ServerEndpoint endpoint) { switch (endpoint) { diff --git a/instrumentation/restlet/restlet-1.0/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_0/AbstractServletServerTest.groovy b/instrumentation/restlet/restlet-1.0/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_0/AbstractServletServerTest.groovy index c49a9e9b42f1..5d90ef82d63d 100644 --- a/instrumentation/restlet/restlet-1.0/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_0/AbstractServletServerTest.groovy +++ b/instrumentation/restlet/restlet-1.0/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_0/AbstractServletServerTest.groovy @@ -70,11 +70,6 @@ abstract class AbstractServletServerTest extends HttpServerTest { true } - @Override - boolean testConcurrency() { - true - } - @Override String expectedServerSpanName(ServerEndpoint endpoint) { switch (endpoint) { diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/JettyServlet2Test.groovy b/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/JettyServlet2Test.groovy index 74b7e001a0d4..1a72d3f227ad 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/JettyServlet2Test.groovy +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/JettyServlet2Test.groovy @@ -19,6 +19,7 @@ import static io.opentelemetry.api.trace.SpanKind.INTERNAL import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.AUTH_REQUIRED 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.INDEXED_CHILD 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.SUCCESS @@ -51,6 +52,7 @@ class JettyServlet2Test extends HttpServerTest implements AgentTestTrait servletContext.addServlet(TestServlet2.Sync, ERROR.path) servletContext.addServlet(TestServlet2.Sync, EXCEPTION.path) servletContext.addServlet(TestServlet2.Sync, AUTH_REQUIRED.path) + servletContext.addServlet(TestServlet2.Sync, INDEXED_CHILD.path) jettyServer.setHandler(servletContext) jettyServer.start() diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/TestServlet2.groovy b/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/TestServlet2.groovy index 6bc78255fe9b..2f8b5817ce17 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/TestServlet2.groovy +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/TestServlet2.groovy @@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletResponse 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.INDEXED_CHILD 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.SUCCESS @@ -41,6 +42,11 @@ class TestServlet2 { break case EXCEPTION: throw new Exception(endpoint.body) + case INDEXED_CHILD: + INDEXED_CHILD.collectSpanAttributes {name -> req.getParameter(name) } + resp.status = endpoint.status + resp.writer.print(endpoint.body) + break } } } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3Test.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3Test.groovy index 0247fb139c72..d113cb004764 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3Test.groovy +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3Test.groovy @@ -16,6 +16,7 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.SUCCESS @@ -124,11 +125,6 @@ class JettyServlet3TestSync extends JettyServlet3Test { Class servlet() { TestServlet3.Sync } - - @Override - boolean testConcurrency() { - return true - } } class JettyServlet3TestAsync extends JettyServlet3Test { @@ -148,11 +144,6 @@ class JettyServlet3TestAsync extends JettyServlet3Test { // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807 return false } - - @Override - boolean testConcurrency() { - return true - } } class JettyServlet3TestFakeAsync extends JettyServlet3Test { @@ -167,11 +158,6 @@ class JettyServlet3TestFakeAsync extends JettyServlet3Test { // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807 return false } - - @Override - boolean testConcurrency() { - return true - } } class JettyServlet3TestForward extends JettyDispatchTest { @@ -191,6 +177,7 @@ class JettyServlet3TestForward extends JettyDispatchTest { addServlet(context, "/dispatch" + EXCEPTION.path, RequestDispatcherServlet.Forward) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, RequestDispatcherServlet.Forward) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, RequestDispatcherServlet.Forward) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Forward) } } @@ -225,6 +212,7 @@ class JettyServlet3TestInclude extends JettyDispatchTest { addServlet(context, "/dispatch" + ERROR.path, RequestDispatcherServlet.Include) addServlet(context, "/dispatch" + EXCEPTION.path, RequestDispatcherServlet.Include) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, RequestDispatcherServlet.Include) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Include) } } @@ -246,6 +234,7 @@ class JettyServlet3TestDispatchImmediate extends JettyDispatchTest { addServlet(context, "/dispatch" + REDIRECT.path, TestServlet3.DispatchImmediate) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, TestServlet3.DispatchImmediate) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, TestServlet3.DispatchImmediate) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet3.DispatchImmediate) addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive) } @@ -273,6 +262,7 @@ class JettyServlet3TestDispatchAsync extends JettyDispatchTest { addServlet(context, "/dispatch" + REDIRECT.path, TestServlet3.DispatchAsync) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, TestServlet3.DispatchAsync) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, TestServlet3.DispatchAsync) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet3.DispatchAsync) addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive) } 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 d582aaadb888..71d9ba8c7f74 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 @@ -171,6 +171,9 @@ class TestServlet3 { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) { def target = req.servletPath.replace("/dispatch", "") + if (req.queryString != null) { + target += "?" + req.queryString + } req.startAsync().dispatch(target) } } @@ -180,6 +183,9 @@ class TestServlet3 { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) { def target = req.servletPath.replace("/dispatch", "") + if (req.queryString != null) { + target += "?" + req.queryString + } def context = req.startAsync() context.start { context.dispatch(target) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3Test.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3Test.groovy index 4a96b20baccf..f70d751b2daa 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3Test.groovy +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3Test.groovy @@ -30,6 +30,7 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT @@ -324,11 +325,6 @@ class TomcatServlet3TestAsync extends TomcatServlet3Test { // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807 return false } - - @Override - boolean testConcurrency() { - return true - } } class TomcatServlet3TestFakeAsync extends TomcatServlet3Test { @@ -343,11 +339,6 @@ class TomcatServlet3TestFakeAsync extends TomcatServlet3Test { // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807 return false } - - @Override - boolean testConcurrency() { - return true - } } class TomcatServlet3TestForward extends TomcatDispatchTest { @@ -372,6 +363,7 @@ class TomcatServlet3TestForward extends TomcatDispatchTest { addServlet(context, "/dispatch" + EXCEPTION.path, RequestDispatcherServlet.Forward) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, RequestDispatcherServlet.Forward) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, RequestDispatcherServlet.Forward) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Forward) } } @@ -411,6 +403,7 @@ class TomcatServlet3TestInclude extends TomcatDispatchTest { addServlet(context, "/dispatch" + ERROR.path, RequestDispatcherServlet.Include) addServlet(context, "/dispatch" + EXCEPTION.path, RequestDispatcherServlet.Include) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, RequestDispatcherServlet.Include) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Include) } } @@ -436,6 +429,7 @@ class TomcatServlet3TestDispatchImmediate extends TomcatDispatchTest { addServlet(context, "/dispatch" + REDIRECT.path, TestServlet3.DispatchImmediate) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, TestServlet3.DispatchImmediate) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, TestServlet3.DispatchImmediate) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet3.DispatchImmediate) addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive) } } @@ -457,6 +451,7 @@ class TomcatServlet3TestDispatchAsync extends TomcatDispatchTest { addServlet(context, "/dispatch" + REDIRECT.path, TestServlet3.DispatchAsync) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, TestServlet3.DispatchAsync) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, TestServlet3.DispatchAsync) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet3.DispatchAsync) addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive) } diff --git a/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/JettyServlet5Test.groovy b/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/JettyServlet5Test.groovy index 42d2bce2d037..c9399a76bda8 100644 --- a/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/JettyServlet5Test.groovy +++ b/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/JettyServlet5Test.groovy @@ -15,6 +15,7 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.SUCCESS @@ -104,11 +105,6 @@ class JettyServlet5TestSync extends JettyServlet5Test { Class servlet() { TestServlet5.Sync } - - @Override - boolean testConcurrency() { - return true - } } @IgnoreIf({ !jvm.java11Compatible }) @@ -129,11 +125,6 @@ class JettyServlet5TestAsync extends JettyServlet5Test { // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807 return false } - - @Override - boolean testConcurrency() { - return true - } } @IgnoreIf({ !jvm.java11Compatible }) @@ -149,11 +140,6 @@ class JettyServlet5TestFakeAsync extends JettyServlet5Test { // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807 return false } - - @Override - boolean testConcurrency() { - return true - } } @IgnoreIf({ !jvm.java11Compatible }) @@ -174,6 +160,7 @@ class JettyServlet5TestForward extends JettyDispatchTest { addServlet(context, "/dispatch" + EXCEPTION.path, RequestDispatcherServlet.Forward) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, RequestDispatcherServlet.Forward) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, RequestDispatcherServlet.Forward) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Forward) } } @@ -209,6 +196,7 @@ class JettyServlet5TestInclude extends JettyDispatchTest { addServlet(context, "/dispatch" + ERROR.path, RequestDispatcherServlet.Include) addServlet(context, "/dispatch" + EXCEPTION.path, RequestDispatcherServlet.Include) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, RequestDispatcherServlet.Include) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Include) } } @@ -231,6 +219,7 @@ class JettyServlet5TestDispatchImmediate extends JettyDispatchTest { addServlet(context, "/dispatch" + REDIRECT.path, TestServlet5.DispatchImmediate) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, TestServlet5.DispatchImmediate) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, TestServlet5.DispatchImmediate) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet5.DispatchImmediate) addServlet(context, "/dispatch/recursive", TestServlet5.DispatchRecursive) } @@ -259,6 +248,7 @@ class JettyServlet5TestDispatchAsync extends JettyDispatchTest { addServlet(context, "/dispatch" + REDIRECT.path, TestServlet5.DispatchAsync) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, TestServlet5.DispatchAsync) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, TestServlet5.DispatchAsync) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet5.DispatchAsync) addServlet(context, "/dispatch/recursive", TestServlet5.DispatchRecursive) } 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 4befa97e7a5d..44a2b75484d9 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 @@ -171,6 +171,9 @@ class TestServlet5 { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) { def target = req.servletPath.replace("/dispatch", "") + if (req.queryString != null) { + target += "?" + req.queryString + } req.startAsync().dispatch(target) } } @@ -180,6 +183,9 @@ class TestServlet5 { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) { def target = req.servletPath.replace("/dispatch", "") + if (req.queryString != null) { + target += "?" + req.queryString + } def context = req.startAsync() context.start { context.dispatch(target) diff --git a/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/TomcatServlet5Test.groovy b/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/TomcatServlet5Test.groovy index 101209e2c78f..e05396f57319 100644 --- a/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/TomcatServlet5Test.groovy +++ b/instrumentation/servlet/servlet-5.0/javaagent/src/test/groovy/TomcatServlet5Test.groovy @@ -30,6 +30,7 @@ import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEn import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT @@ -323,11 +324,6 @@ class TomcatServlet5TestAsync extends TomcatServlet5Test { // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807 return false } - - @Override - boolean testConcurrency() { - return true - } } class TomcatServlet5TestFakeAsync extends TomcatServlet5Test { @@ -342,11 +338,6 @@ class TomcatServlet5TestFakeAsync extends TomcatServlet5Test { // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/807 return false } - - @Override - boolean testConcurrency() { - return true - } } class TomcatServlet5TestForward extends TomcatDispatchTest { @@ -371,6 +362,7 @@ class TomcatServlet5TestForward extends TomcatDispatchTest { addServlet(context, "/dispatch" + EXCEPTION.path, RequestDispatcherServlet.Forward) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, RequestDispatcherServlet.Forward) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, RequestDispatcherServlet.Forward) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Forward) } } @@ -410,6 +402,7 @@ class TomcatServlet5TestInclude extends TomcatDispatchTest { addServlet(context, "/dispatch" + ERROR.path, RequestDispatcherServlet.Include) addServlet(context, "/dispatch" + EXCEPTION.path, RequestDispatcherServlet.Include) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, RequestDispatcherServlet.Include) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Include) } } @@ -435,6 +428,7 @@ class TomcatServlet5TestDispatchImmediate extends TomcatDispatchTest { addServlet(context, "/dispatch" + REDIRECT.path, TestServlet5.DispatchImmediate) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, TestServlet5.DispatchImmediate) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, TestServlet5.DispatchImmediate) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet5.DispatchImmediate) addServlet(context, "/dispatch/recursive", TestServlet5.DispatchRecursive) } } @@ -456,6 +450,7 @@ class TomcatServlet5TestDispatchAsync extends TomcatDispatchTest { addServlet(context, "/dispatch" + REDIRECT.path, TestServlet5.DispatchAsync) addServlet(context, "/dispatch" + AUTH_REQUIRED.path, TestServlet5.DispatchAsync) addServlet(context, "/dispatch" + CAPTURE_HEADERS.path, TestServlet5.DispatchAsync) + addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet5.DispatchAsync) addServlet(context, "/dispatch/recursive", TestServlet5.DispatchRecursive) } diff --git a/instrumentation/spring/spring-webflux-5.0/javaagent/src/test/groovy/server/base/SpringWebFluxServerTest.groovy b/instrumentation/spring/spring-webflux-5.0/javaagent/src/test/groovy/server/base/SpringWebFluxServerTest.groovy index 7325b9e4a9af..0eb00a6815ee 100644 --- a/instrumentation/spring/spring-webflux-5.0/javaagent/src/test/groovy/server/base/SpringWebFluxServerTest.groovy +++ b/instrumentation/spring/spring-webflux-5.0/javaagent/src/test/groovy/server/base/SpringWebFluxServerTest.groovy @@ -56,11 +56,6 @@ abstract class SpringWebFluxServerTest extends HttpServerTest expectedExceptionClass() { return IllegalStateException diff --git a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/boot/TestController.groovy b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/boot/TestController.groovy index 2e1f48edb270..ed937202ac12 100644 --- a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/boot/TestController.groovy +++ b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/boot/TestController.groovy @@ -20,6 +20,7 @@ import org.springframework.web.servlet.view.RedirectView import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.REDIRECT @@ -91,6 +92,15 @@ class TestController { } } + @RequestMapping("/child") + @ResponseBody + String indexed_child(@RequestParam("id") String id) { + HttpServerTest.controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { it == "id" ? id : null } + INDEXED_CHILD.body + } + } + @ExceptionHandler ResponseEntity handleException(Throwable throwable) { new ResponseEntity(throwable.message, HttpStatus.INTERNAL_SERVER_ERROR) diff --git a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/filter/FilteredAppConfig.groovy b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/filter/FilteredAppConfig.groovy index 2f52cfb02284..961dba9f048f 100644 --- a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/filter/FilteredAppConfig.groovy +++ b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/filter/FilteredAppConfig.groovy @@ -35,6 +35,7 @@ import java.nio.charset.StandardCharsets import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.REDIRECT @@ -119,6 +120,10 @@ class FilteredAppConfig extends WebMvcConfigurerAdapter { break case EXCEPTION: throw new Exception(endpoint.body) + case INDEXED_CHILD: + INDEXED_CHILD.collectSpanAttributes { name -> req.getParameter(name) } + resp.writer.print(endpoint.body) + break default: chain.doFilter(request, response) } diff --git a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/filter/TestController.groovy b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/filter/TestController.groovy index f64b77afdc44..0ed933e17f11 100644 --- a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/filter/TestController.groovy +++ b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/test/groovy/test/filter/TestController.groovy @@ -62,6 +62,12 @@ class TestController { throw new Exception("This should not be called") } + @RequestMapping("/child") + @ResponseBody + ResponseEntity indexed_child(@RequestParam("id") String id) { + throw new Exception("This should not be called") + } + @ExceptionHandler ResponseEntity handleException(Throwable throwable) { diff --git a/instrumentation/struts-2.3/javaagent/src/test/groovy/Struts2ActionSpanTest.groovy b/instrumentation/struts-2.3/javaagent/src/test/groovy/Struts2ActionSpanTest.groovy index b05ea742db1c..9ef9e9988bbf 100644 --- a/instrumentation/struts-2.3/javaagent/src/test/groovy/Struts2ActionSpanTest.groovy +++ b/instrumentation/struts-2.3/javaagent/src/test/groovy/Struts2ActionSpanTest.groovy @@ -47,12 +47,6 @@ class Struts2ActionSpanTest extends HttpServerTest implements AgentTestT return false } - // no idea how to test that in struts - @Override - boolean testCapturedHttpHeaders() { - false - } - @Override boolean hasHandlerSpan(ServerEndpoint endpoint) { return endpoint != NOT_FOUND diff --git a/instrumentation/struts-2.3/javaagent/src/test/java/io/opentelemetry/struts/GreetingAction.java b/instrumentation/struts-2.3/javaagent/src/test/java/io/opentelemetry/struts/GreetingAction.java index d3a217d76efa..3138cb70cb96 100644 --- a/instrumentation/struts-2.3/javaagent/src/test/java/io/opentelemetry/struts/GreetingAction.java +++ b/instrumentation/struts-2.3/javaagent/src/test/java/io/opentelemetry/struts/GreetingAction.java @@ -7,6 +7,9 @@ import com.opensymphony.xwork2.ActionSupport; import io.opentelemetry.instrumentation.test.base.HttpServerTest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.struts2.ServletActionContext; public class GreetingAction extends ActionSupport { @@ -59,6 +62,29 @@ public String path_param() { return "greeting"; } + public String indexed_child() { + responseBody = + HttpServerTest.controller( + HttpServerTest.ServerEndpoint.INDEXED_CHILD, + () -> { + HttpServerTest.ServerEndpoint.INDEXED_CHILD.collectSpanAttributes( + (name) -> ServletActionContext.getRequest().getParameter(name)); + return HttpServerTest.ServerEndpoint.INDEXED_CHILD.getBody(); + }); + return "greeting"; + } + + public String capture_headers() { + HttpServletRequest request = ServletActionContext.getRequest(); + HttpServletResponse response = ServletActionContext.getResponse(); + response.setHeader("X-Test-Response", request.getHeader("X-Test-Request")); + responseBody = + HttpServerTest.controller( + HttpServerTest.ServerEndpoint.CAPTURE_HEADERS, + HttpServerTest.ServerEndpoint.CAPTURE_HEADERS::getBody); + return "greeting"; + } + public String dispatch_servlet() { return "greetingServlet"; } diff --git a/instrumentation/struts-2.3/javaagent/src/test/resources/struts.xml b/instrumentation/struts-2.3/javaagent/src/test/resources/struts.xml index 11a08fb2ed29..14356db4131a 100644 --- a/instrumentation/struts-2.3/javaagent/src/test/resources/struts.xml +++ b/instrumentation/struts-2.3/javaagent/src/test/resources/struts.xml @@ -32,6 +32,8 @@ + + diff --git a/instrumentation/tomcat/tomcat-10.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v10_0/TestServlet.java b/instrumentation/tomcat/tomcat-10.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v10_0/TestServlet.java index 1af1bb11cf20..fe74846ada0e 100644 --- a/instrumentation/tomcat/tomcat-10.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v10_0/TestServlet.java +++ b/instrumentation/tomcat/tomcat-10.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v10_0/TestServlet.java @@ -28,6 +28,9 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IO if (serverEndpoint == HttpServerTest.ServerEndpoint.CAPTURE_HEADERS) { resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); } + if (serverEndpoint == HttpServerTest.ServerEndpoint.INDEXED_CHILD) { + HttpServerTest.ServerEndpoint.INDEXED_CHILD.collectSpanAttributes(req::getParameter); + } resp.getWriter().print(serverEndpoint.getBody()); if (serverEndpoint == HttpServerTest.ServerEndpoint.REDIRECT) { resp.sendRedirect(serverEndpoint.getBody()); diff --git a/instrumentation/tomcat/tomcat-10.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v10_0/TomcatAsyncTest.groovy b/instrumentation/tomcat/tomcat-10.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v10_0/TomcatAsyncTest.groovy index cab0c2a390e0..dfe113c52860 100644 --- a/instrumentation/tomcat/tomcat-10.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v10_0/TomcatAsyncTest.groovy +++ b/instrumentation/tomcat/tomcat-10.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v10_0/TomcatAsyncTest.groovy @@ -114,11 +114,6 @@ class TomcatAsyncTest extends HttpServerTest implements AgentTestTrait { return false } - @Override - boolean testConcurrency() { - return true - } - @Override Class expectedExceptionClass() { ServletException diff --git a/instrumentation/tomcat/tomcat-7.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v7_0/TestServlet.java b/instrumentation/tomcat/tomcat-7.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v7_0/TestServlet.java index a32d229519df..dfe34f613f56 100644 --- a/instrumentation/tomcat/tomcat-7.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v7_0/TestServlet.java +++ b/instrumentation/tomcat/tomcat-7.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v7_0/TestServlet.java @@ -28,6 +28,9 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IO if (serverEndpoint == HttpServerTest.ServerEndpoint.CAPTURE_HEADERS) { resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); } + if (serverEndpoint == HttpServerTest.ServerEndpoint.INDEXED_CHILD) { + HttpServerTest.ServerEndpoint.INDEXED_CHILD.collectSpanAttributes(req::getParameter); + } resp.getWriter().print(serverEndpoint.getBody()); if (serverEndpoint == HttpServerTest.ServerEndpoint.REDIRECT) { resp.sendRedirect(serverEndpoint.getBody()); diff --git a/instrumentation/tomcat/tomcat-7.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v7_0/TomcatAsyncTest.groovy b/instrumentation/tomcat/tomcat-7.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v7_0/TomcatAsyncTest.groovy index 033678427cc1..3d5b3009b9a4 100644 --- a/instrumentation/tomcat/tomcat-7.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v7_0/TomcatAsyncTest.groovy +++ b/instrumentation/tomcat/tomcat-7.0/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/tomcat/v7_0/TomcatAsyncTest.groovy @@ -114,11 +114,6 @@ class TomcatAsyncTest extends HttpServerTest implements AgentTestTrait { return false } - @Override - boolean testConcurrency() { - return true - } - @Override Class expectedExceptionClass() { ServletException diff --git a/instrumentation/undertow-1.4/javaagent/src/test/groovy/UndertowServerTest.groovy b/instrumentation/undertow-1.4/javaagent/src/test/groovy/UndertowServerTest.groovy index cc73a92f1e16..7c517a41d6da 100644 --- a/instrumentation/undertow-1.4/javaagent/src/test/groovy/UndertowServerTest.groovy +++ b/instrumentation/undertow-1.4/javaagent/src/test/groovy/UndertowServerTest.groovy @@ -20,6 +20,7 @@ import io.undertow.util.StatusCodes import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS 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.INDEXED_CHILD 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.SUCCESS @@ -67,6 +68,12 @@ class UndertowServerTest extends HttpServerTest implements AgentTestTr throw new Exception(EXCEPTION.body) } } + .addExactPath(INDEXED_CHILD.rawPath()) { exchange -> + controller(INDEXED_CHILD) { + INDEXED_CHILD.collectSpanAttributes { name -> exchange.getQueryParameters().get(name).peekFirst() } + exchange.getResponseSender().send(INDEXED_CHILD.body) + } + } .addExactPath("sendResponse") { exchange -> Span.current().addEvent("before-event") runWithSpan("sendResponse") { diff --git a/instrumentation/vertx-reactive-3.5/javaagent/src/latestDepTest/groovy/server/VertxRxHttpServerTest.groovy b/instrumentation/vertx-reactive-3.5/javaagent/src/latestDepTest/groovy/server/VertxRxHttpServerTest.groovy index b82f8c941b61..53000de116ee 100644 --- a/instrumentation/vertx-reactive-3.5/javaagent/src/latestDepTest/groovy/server/VertxRxHttpServerTest.groovy +++ b/instrumentation/vertx-reactive-3.5/javaagent/src/latestDepTest/groovy/server/VertxRxHttpServerTest.groovy @@ -74,11 +74,6 @@ class VertxRxHttpServerTest extends HttpServerTest implements AgentTestTr } } - @Override - boolean testConcurrency() { - return true - } - @Override boolean verifyServerSpanEndTime() { // server spans are ended inside of the controller spans diff --git a/instrumentation/vertx-reactive-3.5/javaagent/src/version35Test/groovy/server/VertxRxHttpServerTest.groovy b/instrumentation/vertx-reactive-3.5/javaagent/src/version35Test/groovy/server/VertxRxHttpServerTest.groovy index 4835a4b9b362..4e3fcc9b82f1 100644 --- a/instrumentation/vertx-reactive-3.5/javaagent/src/version35Test/groovy/server/VertxRxHttpServerTest.groovy +++ b/instrumentation/vertx-reactive-3.5/javaagent/src/version35Test/groovy/server/VertxRxHttpServerTest.groovy @@ -75,11 +75,6 @@ class VertxRxHttpServerTest extends HttpServerTest implements AgentTestTr } } - @Override - boolean testConcurrency() { - return true - } - @Override boolean verifyServerSpanEndTime() { // server spans are ended inside of the controller spans diff --git a/instrumentation/vertx-web-3.0/testing/src/main/groovy/server/AbstractVertxHttpServerTest.groovy b/instrumentation/vertx-web-3.0/testing/src/main/groovy/server/AbstractVertxHttpServerTest.groovy index fcad3b6b9419..7e2b8a4bed4f 100644 --- a/instrumentation/vertx-web-3.0/testing/src/main/groovy/server/AbstractVertxHttpServerTest.groovy +++ b/instrumentation/vertx-web-3.0/testing/src/main/groovy/server/AbstractVertxHttpServerTest.groovy @@ -53,11 +53,6 @@ abstract class AbstractVertxHttpServerTest extends HttpServerTest impleme return true } - @Override - boolean testConcurrency() { - return true - } - @Override boolean verifyServerSpanEndTime() { // server spans are ended inside of the controller spans 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 e0e86ea3d59c..5c91855dba7a 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 @@ -131,10 +131,6 @@ abstract class HttpServerTest extends InstrumentationSpecification imple true } - boolean testConcurrency() { - false - } - boolean verifyServerSpanEndTime() { return true } @@ -160,7 +156,7 @@ abstract class HttpServerTest extends InstrumentationSpecification imple AUTH_REQUIRED("authRequired", 200, null), LOGIN("login", 302, null), AUTH_ERROR("basicsecured/endpoint", 401, null), - INDEXED_CHILD("child", 200, null), + INDEXED_CHILD("child", 200, ""), public static final String ID_ATTRIBUTE_NAME = "test.request.id" public static final String ID_PARAMETER_NAME = "id" @@ -426,7 +422,6 @@ abstract class HttpServerTest extends InstrumentationSpecification imple def "high concurrency test"() { setup: - assumeTrue(testConcurrency()) int count = 100 def endpoint = INDEXED_CHILD