Skip to content

Commit

Permalink
Enable http server concurrency test everywhere (#4465)
Browse files Browse the repository at this point in the history
* Enable http server concurrency test everywhere

* remove testConcurrency method as test is now always enabled

* rebase
  • Loading branch information
laurit authored Oct 22, 2021
1 parent e1e30eb commit ef131ac
Show file tree
Hide file tree
Showing 48 changed files with 283 additions and 153 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,6 @@ abstract class AkkaHttpServerInstrumentationTest extends HttpServerTest<Object>
boolean testCapturedHttpHeaders() {
false
}

@Override
boolean testConcurrency() {
return true
}
}

class AkkaHttpServerInstrumentationTestSync extends AkkaHttpServerInstrumentationTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -97,6 +98,13 @@ abstract class AbstractArmeriaHttpServerTest extends HttpServerTest<Server> {
}
}

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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -110,14 +111,23 @@ 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())
}
}
}

@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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -181,6 +182,15 @@ class DropwizardTest extends HttpServerTest<DropwizardTestSupport> 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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -155,6 +156,8 @@ class GrailsTest extends HttpServerTest<ConfigurableApplicationContext> 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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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")
Expand All @@ -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())
}
}
}

Expand Down Expand Up @@ -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())
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -123,6 +126,7 @@ class GrizzlyFilterchainServerTest extends HttpServerTest<HttpServer> 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())
Expand All @@ -134,13 +138,11 @@ class GrizzlyFilterchainServerTest extends HttpServerTest<HttpServer> implements

ResponseParameters buildResponse(HttpRequestPacket request) {
String uri = request.getRequestURI()
String requestParams = request.getQueryString()
String fullPath = uri + (requestParams != null ? "?" + requestParams : "")

Map<String, String> headers = new HashMap<>()

HttpServerTest.ServerEndpoint endpoint
switch (fullPath) {
Closure closure
switch (uri) {
case "/success":
endpoint = SUCCESS
break
Expand All @@ -153,7 +155,7 @@ class GrizzlyFilterchainServerTest extends HttpServerTest<HttpServer> implements
break
case "/exception":
throw new Exception(EXCEPTION.body)
case "/query?some=query":
case "/query":
endpoint = QUERY_PARAM
break
case "/path/123/param":
Expand All @@ -162,6 +164,16 @@ class GrizzlyFilterchainServerTest extends HttpServerTest<HttpServer> 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
Expand All @@ -171,23 +183,26 @@ class GrizzlyFilterchainServerTest extends HttpServerTest<HttpServer> 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 {
Map<String, String> headers
HttpServerTest.ServerEndpoint endpoint
int status
byte[] responseBody
Closure closure

ResponseParameters(HttpServerTest.ServerEndpoint endpoint,
int status,
byte[] responseBody,
Map<String, String> headers) {
Map<String, String> headers,
Closure closure) {
this.endpoint = endpoint
this.status = status
this.responseBody = responseBody
this.headers = headers
this.closure = closure
}

int getStatus() {
Expand All @@ -207,6 +222,12 @@ class GrizzlyFilterchainServerTest extends HttpServerTest<HttpServer> implements
builder.header(header.getKey(), header.getValue())
}
}

void execute() {
if (closure != null) {
closure.run()
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -96,6 +97,15 @@ class GrizzlyTest extends HttpServerTest<HttpServer> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,11 +213,6 @@ abstract class JaxRsHttpServerTest<S> extends HttpServerTest<S> implements Agent
true
}
@Override
boolean testConcurrency() {
true
}
boolean testInterfaceMethodWithPath() {
true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -113,6 +114,11 @@ class JettyHandlerTest extends HttpServerTest<Server> 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)
Expand Down
Loading

0 comments on commit ef131ac

Please sign in to comment.