Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test captured HTTP headers - HTTP server tests, part 2 #4328

Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ abstract class AkkaHttpServerInstrumentationTest extends HttpServerTest<Object>
return "akka.request"
}

@Override
boolean testCapturedHttpHeaders() {
false
}

@Override
boolean testConcurrency() {
return true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ import io.opentelemetry.instrumentation.test.LibraryTestTrait
class ArmeriaHttpServerTest extends AbstractArmeriaHttpServerTest implements LibraryTestTrait {
@Override
ServerBuilder configureServer(ServerBuilder sb) {
return sb.decorator(ArmeriaTracing.create(getOpenTelemetry()).newServiceDecorator())
return sb.decorator(ArmeriaTracing.newBuilder(getOpenTelemetry())
.captureHttpServerHeaders(capturedHttpHeadersForTesting())
.build()
.newServiceDecorator())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.instrumentation.armeria.v1_3

import com.linecorp.armeria.common.HttpData
import com.linecorp.armeria.common.HttpHeaderNames
import com.linecorp.armeria.common.HttpRequest
import com.linecorp.armeria.common.HttpResponse
Expand All @@ -24,6 +25,7 @@ import io.opentelemetry.semconv.trace.attributes.SemanticAttributes

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.PATH_PARAM
Expand Down Expand Up @@ -95,6 +97,16 @@ abstract class AbstractArmeriaHttpServerTest extends HttpServerTest<Server> {
}
}

sb.service("/captureHeaders") { ctx, req ->
controller(CAPTURE_HEADERS) {
HttpResponse.of(
ResponseHeaders.of(HttpStatus.valueOf(CAPTURE_HEADERS.status),
"X-Test-Response", req.headers().get("X-Test-Request"),
HttpHeaderNames.CONTENT_TYPE, MediaType.PLAIN_TEXT_UTF_8),
HttpData.ofUtf8(CAPTURE_HEADERS.body))
}
}

// Make sure user decorators see spans.
sb.decorator(new DecoratingHttpServiceFunction() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import io.dropwizard.setup.Bootstrap
import io.dropwizard.setup.Environment

import javax.ws.rs.GET
import javax.ws.rs.HeaderParam
import javax.ws.rs.Path
import javax.ws.rs.PathParam
import javax.ws.rs.QueryParam
Expand All @@ -17,6 +18,7 @@ import javax.ws.rs.container.Suspended
import javax.ws.rs.core.Response
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.PATH_PARAM
Expand Down Expand Up @@ -110,5 +112,17 @@ class DropwizardAsyncTest extends DropwizardTest {
}
}
}

@GET
@Path("captureHeaders")
void capture_headers(@HeaderParam("X-Test-Request") String header,
@Suspended final AsyncResponse asyncResponse) {
controller(CAPTURE_HEADERS) {
asyncResponse.resume(Response.status(CAPTURE_HEADERS.status)
.header("X-Test-Response", header)
.entity(CAPTURE_HEADERS.body)
.build())
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@ import io.opentelemetry.sdk.trace.data.SpanData
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes

import javax.ws.rs.GET
import javax.ws.rs.HeaderParam
import javax.ws.rs.Path
import javax.ws.rs.PathParam
import javax.ws.rs.QueryParam
import javax.ws.rs.core.Response

import static io.opentelemetry.api.trace.SpanKind.INTERNAL
import static io.opentelemetry.api.trace.SpanKind.SERVER
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.NOT_FOUND
Expand Down Expand Up @@ -121,6 +123,10 @@ class DropwizardTest extends HttpServerTest<DropwizardTestSupport> implements Ag
"${SemanticAttributes.HTTP_FLAVOR.key}" "1.1"
"${SemanticAttributes.HTTP_USER_AGENT.key}" TEST_USER_AGENT
"${SemanticAttributes.HTTP_CLIENT_IP.key}" TEST_CLIENT_IP
if (endpoint == ServerEndpoint.CAPTURE_HEADERS) {
"http.request.header.x_test_request" { it == ["test"] }
"http.response.header.x_test_response" { it == ["test"] }
}
}
}
}
Expand Down Expand Up @@ -194,6 +200,17 @@ class DropwizardTest extends HttpServerTest<DropwizardTestSupport> implements Ag
Response.status(PATH_PARAM.status).entity(param.toString()).build()
}
}

@GET
@Path("captureHeaders")
Response capture_headers(@HeaderParam("X-Test-Request") String header) {
controller(CAPTURE_HEADERS) {
Response.status(CAPTURE_HEADERS.status)
.header("X-Test-Response", header)
.entity(CAPTURE_HEADERS.body)
.build()
}
}
}

@Path("/")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,8 @@ class FinatraServerLatestTest extends HttpServerTest<HttpServer> implements Agen
SemanticAttributes.HTTP_URL
]
}

boolean testCapturedHttpHeaders() {
false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,8 @@ class FinatraServerTest extends HttpServerTest<HttpServer> implements AgentTestT
SemanticAttributes.HTTP_URL
]
}

boolean testCapturedHttpHeaders() {
false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import org.springframework.boot.autoconfigure.web.ServerProperties
import org.springframework.context.ConfigurableApplicationContext

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.NOT_FOUND
Expand Down Expand Up @@ -141,6 +142,8 @@ class GrailsTest extends HttpServerTest<ConfigurableApplicationContext> implemen
name "TestController.query"
} else if (endpoint == PATH_PARAM) {
name "TestController.path"
} else if (endpoint == CAPTURE_HEADERS) {
name "TestController.captureHeaders"
} else if (endpoint == NOT_FOUND) {
name "ResourceHttpRequestHandler.handleRequest"
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import grails.artefact.Controller
import grails.web.Action
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.PATH_PARAM
Expand Down Expand Up @@ -64,4 +65,12 @@ class TestController implements Controller {
render params.id
}
}

@Action
def captureHeaders() {
HttpServerTest.controller(CAPTURE_HEADERS) {
response.setHeader("X-Test-Response", request.getHeader("X-Test-Request"))
render CAPTURE_HEADERS.body
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class UrlMappings {
"/error-status"(controller: 'test', action: 'error')
"/exception"(controller: 'test', action: 'exception')
"/path/$id/param"(controller: 'test', action: 'path')
"/captureHeaders"(controller: 'test', action: 'captureHeaders')

"500"(controller: 'error')
"404"(controller: 'error', action: 'notFound')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ class GrizzlyFilterchainServerTest extends HttpServerTest<HttpServer> implements
false
}

@Override
boolean testCapturedHttpHeaders() {
false
}

void setUpTransport(FilterChain filterChain) {
TCPNIOTransportBuilder transportBuilder = TCPNIOTransportBuilder.newInstance()
.setOptimizedForMultiplexing(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ class GrizzlyTest extends HttpServerTest<HttpServer> implements AgentTestTrait {
.until({ !isRequestRunning() })
}

@Override
boolean testCapturedHttpHeaders() {
false
}

static boolean isRequestRunning() {
def result = Thread.getAllStackTraces().values().find { stackTrace ->
def element = stackTrace.find {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,10 @@ abstract class JaxRsHttpServerTest<S> extends HttpServerTest<S> implements Agent
"${SemanticAttributes.HTTP_FLAVOR.key}" "1.1"
"${SemanticAttributes.HTTP_USER_AGENT.key}" TEST_USER_AGENT
"${SemanticAttributes.HTTP_CLIENT_IP.key}" TEST_CLIENT_IP
if (fullUrl.getPath().endsWith(ServerEndpoint.CAPTURE_HEADERS.getPath())) {
"http.request.header.x_test_request" { it == ["test"] }
"http.response.header.x_test_response" { it == ["test"] }
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import io.opentelemetry.instrumentation.test.base.HttpServerTest

import javax.ws.rs.ApplicationPath
import javax.ws.rs.GET
import javax.ws.rs.HeaderParam
import javax.ws.rs.Path
import javax.ws.rs.PathParam
import javax.ws.rs.QueryParam
Expand All @@ -23,6 +24,7 @@ import java.util.concurrent.CompletableFuture
import java.util.concurrent.CompletionStage
import java.util.concurrent.CyclicBarrier

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
Expand Down Expand Up @@ -86,6 +88,17 @@ class JaxRsTestResource {
}
}

@GET
@Path("captureHeaders")
Response capture_headers(@HeaderParam("X-Test-Request") String header) {
HttpServerTest.controller(CAPTURE_HEADERS) {
Response.status(CAPTURE_HEADERS.status)
.header("X-Test-Response", header)
.entity(CAPTURE_HEADERS.body)
.build()
}
}

@Path("/child")
@GET
void indexed_child(@Context UriInfo uriInfo, @Suspended AsyncResponse response) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import org.eclipse.jetty.server.handler.AbstractHandler
import org.eclipse.jetty.server.handler.ErrorHandler
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.NOT_FOUND
Expand Down Expand Up @@ -95,6 +96,11 @@ class JettyHandlerTest extends HttpServerTest<Server> implements AgentTestTrait
case ERROR:
response.sendError(endpoint.status, endpoint.body)
break
case CAPTURE_HEADERS:
response.setHeader("X-Test-Response", request.getHeader("X-Test-Request"))
response.status = endpoint.status
response.writer.print(endpoint.body)
break
case EXCEPTION:
throw new Exception(endpoint.body)
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import javax.servlet.ServletException
import javax.servlet.http.HttpServletRequest
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.NOT_FOUND
Expand Down Expand Up @@ -96,6 +97,11 @@ class JettyHandlerTest extends HttpServerTest<Server> implements AgentTestTrait
case ERROR:
response.sendError(endpoint.status, endpoint.body)
break
case CAPTURE_HEADERS:
response.setHeader("X-Test-Response", request.getHeader("X-Test-Request"))
response.status = endpoint.status
response.writer.print(endpoint.body)
break
case EXCEPTION:
throw new Exception(endpoint.body)
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,11 @@ class Netty38ServerTest extends HttpServerTest<ServerBootstrap> implements Agent
return "HTTP GET"
}

@Override
boolean testCapturedHttpHeaders() {
false
}

@Override
boolean testConcurrency() {
return true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,11 @@ class Netty40ServerTest extends HttpServerTest<EventLoopGroup> implements AgentT
return "HTTP GET"
}

@Override
boolean testCapturedHttpHeaders() {
false
}

@Override
boolean testConcurrency() {
return true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,11 @@ class Netty41ServerTest extends HttpServerTest<EventLoopGroup> implements AgentT
return "HTTP GET"
}

@Override
boolean testCapturedHttpHeaders() {
false
}

@Override
boolean testConcurrency() {
return true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ class PlayServerTest extends HttpServerTest<Server> implements AgentTestTrait {
true
}

@Override
boolean testCapturedHttpHeaders() {
false
}

@Override
boolean testConcurrency() {
return true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ class PlayServerTest extends HttpServerTest<Server> implements AgentTestTrait {
server.stop()
}

@Override
boolean testCapturedHttpHeaders() {
false
}

@Override
boolean hasHandlerSpan(ServerEndpoint endpoint) {
true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,9 @@ class RatpackAsyncHttpServerTest extends AbstractRatpackAsyncHttpServerTest impl
@Override
void configure(RatpackServerSpec serverSpec) {
}

@Override
boolean testCapturedHttpHeaders() {
false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,9 @@ class RatpackForkedHttpServerTest extends AbstractRatpackForkedHttpServerTest im
@Override
void configure(RatpackServerSpec serverSpec) {
}

@Override
boolean testCapturedHttpHeaders() {
false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,9 @@ class RatpackHttpServerTest extends AbstractRatpackHttpServerTest implements Age
@Override
void configure(RatpackServerSpec serverSpec) {
}

@Override
boolean testCapturedHttpHeaders() {
false
}
}
Loading