108 lines
3.6 KiB
Groovy
108 lines
3.6 KiB
Groovy
/*
|
|
* Copyright The OpenTelemetry Authors
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import io.opentelemetry.api.common.AttributeKey
|
|
import io.opentelemetry.instrumentation.test.AgentTestTrait
|
|
import io.opentelemetry.instrumentation.test.asserts.TraceAssert
|
|
import io.opentelemetry.instrumentation.test.base.HttpServerTest
|
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes
|
|
import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpRequest
|
|
|
|
import javax.servlet.Servlet
|
|
|
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.AUTH_REQUIRED
|
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS
|
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.CAPTURE_PARAMETERS
|
|
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
|
|
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS
|
|
|
|
abstract class AbstractServlet3Test<SERVER, CONTEXT> extends HttpServerTest<SERVER> implements AgentTestTrait {
|
|
@Override
|
|
URI buildAddress() {
|
|
return new URI("http://localhost:$port$contextPath/")
|
|
}
|
|
|
|
// FIXME: Add authentication tests back in...
|
|
// @Shared
|
|
// protected String user = "user"
|
|
// @Shared
|
|
// protected String pass = "password"
|
|
|
|
abstract Class<Servlet> servlet()
|
|
|
|
abstract void addServlet(CONTEXT context, String path, Class<Servlet> servlet)
|
|
|
|
protected void setupServlets(CONTEXT context) {
|
|
def servlet = servlet()
|
|
|
|
addServlet(context, SUCCESS.path, servlet)
|
|
addServlet(context, QUERY_PARAM.path, servlet)
|
|
addServlet(context, ERROR.path, servlet)
|
|
addServlet(context, EXCEPTION.path, servlet)
|
|
addServlet(context, REDIRECT.path, servlet)
|
|
addServlet(context, AUTH_REQUIRED.path, servlet)
|
|
addServlet(context, INDEXED_CHILD.path, servlet)
|
|
addServlet(context, CAPTURE_HEADERS.path, servlet)
|
|
addServlet(context, CAPTURE_PARAMETERS.path, servlet)
|
|
}
|
|
|
|
protected ServerEndpoint lastRequest
|
|
|
|
@Override
|
|
AggregatedHttpRequest request(ServerEndpoint uri, String method) {
|
|
lastRequest = uri
|
|
super.request(uri, method)
|
|
}
|
|
|
|
@Override
|
|
String expectedHttpRoute(ServerEndpoint endpoint) {
|
|
switch (endpoint) {
|
|
case NOT_FOUND:
|
|
return getContextPath() + "/*"
|
|
default:
|
|
return super.expectedHttpRoute(endpoint)
|
|
}
|
|
}
|
|
|
|
@Override
|
|
List<AttributeKey<?>> extraAttributes() {
|
|
[
|
|
SemanticAttributes.HTTP_SERVER_NAME,
|
|
SemanticAttributes.NET_TRANSPORT
|
|
]
|
|
}
|
|
|
|
@Override
|
|
boolean testCapturedRequestParameters() {
|
|
true
|
|
}
|
|
|
|
boolean errorEndpointUsesSendError() {
|
|
true
|
|
}
|
|
|
|
@Override
|
|
boolean hasResponseSpan(ServerEndpoint endpoint) {
|
|
endpoint == REDIRECT || (endpoint == ERROR && errorEndpointUsesSendError())
|
|
}
|
|
|
|
@Override
|
|
void responseSpan(TraceAssert trace, int index, Object parent, String method, ServerEndpoint endpoint) {
|
|
switch (endpoint) {
|
|
case REDIRECT:
|
|
redirectSpan(trace, index, parent)
|
|
break
|
|
case ERROR:
|
|
sendErrorSpan(trace, index, parent)
|
|
break
|
|
}
|
|
}
|
|
}
|