From 4531232d6762ef194d1a3e422f17eac43b84e2ba Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 14 Aug 2024 14:50:15 +0200 Subject: [PATCH 01/43] convert servlet tests to java --- .../groovy/HttpServletResponseTest.groovy | 299 ------------------ .../src/test/groovy/JettyServlet2Test.groovy | 167 ---------- .../src/test/groovy/TestServlet2.groovy | 54 ---- .../servlet/v2_2/HttpServletResponseTest.java | 289 +++++++++++++++++ .../servlet/v2_2/JettyServlet2Test.java | 130 ++++++++ .../servlet/v2_2/TestServlet2.java | 53 ++++ 6 files changed, 472 insertions(+), 520 deletions(-) delete mode 100644 instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/HttpServletResponseTest.groovy delete mode 100644 instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/JettyServlet2Test.groovy delete mode 100644 instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/TestServlet2.groovy create mode 100644 instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java create mode 100644 instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java create mode 100644 instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/HttpServletResponseTest.groovy b/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/HttpServletResponseTest.groovy deleted file mode 100644 index 82e2fef4e27c..000000000000 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/HttpServletResponseTest.groovy +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.api.trace.SpanKind -import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification -import io.opentelemetry.semconv.incubating.CodeIncubatingAttributes - -import javax.servlet.http.HttpServlet -import spock.lang.Subject - -import javax.servlet.ServletOutputStream -import javax.servlet.ServletRequest -import javax.servlet.ServletResponse -import javax.servlet.http.Cookie -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse - -import static io.opentelemetry.api.trace.StatusCode.ERROR -import static java.util.Collections.emptyEnumeration - -class HttpServletResponseTest extends AgentInstrumentationSpecification { - - @Subject - def response = new TestResponse() - def request = Mock(HttpServletRequest) { - getMethod() >> "GET" - getProtocol() >> "TEST" - getHeaderNames() >> emptyEnumeration() - getAttributeNames() >> emptyEnumeration() - } - - def setup() { - def servlet = new HttpServlet() {} - // We need to call service so HttpServletAdvice can link the request to the response. - servlet.service((ServletRequest) request, (ServletResponse) response) - clearExportedData() - } - - def "test send no-parent"() { - when: - response.sendError(0) - response.sendError(0, "") - response.sendRedirect("") - - then: - assertTraces(0) {} - } - - def "test send with parent"() { - when: - runWithSpan("parent") { - response.sendError(0) - response.sendError(0, "") - response.sendRedirect("") - } - - then: - assertTraces(1) { - trace(0, 4) { - span(0) { - name "parent" - kind SpanKind.INTERNAL - hasNoParent() - } - span(1) { - name "TestResponse.sendError" - childOf span(0) - attributes { - "$CodeIncubatingAttributes.CODE_NAMESPACE" TestResponse.name - "$CodeIncubatingAttributes.CODE_FUNCTION" "sendError" - } - } - span(2) { - name "TestResponse.sendError" - childOf span(0) - attributes { - "$CodeIncubatingAttributes.CODE_NAMESPACE" TestResponse.name - "$CodeIncubatingAttributes.CODE_FUNCTION" "sendError" - } - } - span(3) { - name "TestResponse.sendRedirect" - childOf span(0) - attributes { - "$CodeIncubatingAttributes.CODE_NAMESPACE" TestResponse.name - "$CodeIncubatingAttributes.CODE_FUNCTION" "sendRedirect" - } - } - } - } - } - - def "test send with exception"() { - setup: - def ex = new Exception("some error") - def response = new TestResponse() { - @Override - void sendRedirect(String s) { - throw ex - } - } - def servlet = new HttpServlet() {} - // We need to call service so HttpServletAdvice can link the request to the response. - servlet.service((ServletRequest) request, (ServletResponse) response) - clearExportedData() - - when: - runWithSpan("parent") { - response.sendRedirect("") - } - - then: - def th = thrown(Exception) - th == ex - - assertTraces(1) { - trace(0, 2) { - span(0) { - name "parent" - kind SpanKind.INTERNAL - hasNoParent() - status ERROR - errorEvent(ex.class, ex.message) - } - span(1) { - name 'HttpServletResponseTest$2.sendRedirect' - childOf span(0) - status ERROR - errorEvent(ex.class, ex.message) - } - } - } - } - - static class TestResponse implements HttpServletResponse { - - @Override - void addCookie(Cookie cookie) { - - } - - @Override - boolean containsHeader(String s) { - return false - } - - @Override - String encodeURL(String s) { - return null - } - - @Override - String encodeRedirectURL(String s) { - return null - } - - @Override - String encodeUrl(String s) { - return null - } - - @Override - String encodeRedirectUrl(String s) { - return null - } - - @Override - void sendError(int i, String s) throws IOException { - - } - - @Override - void sendError(int i) throws IOException { - - } - - @Override - void sendRedirect(String s) throws IOException { - - } - - @Override - void setDateHeader(String s, long l) { - - } - - @Override - void addDateHeader(String s, long l) { - - } - - @Override - void setHeader(String s, String s1) { - - } - - @Override - void addHeader(String s, String s1) { - - } - - @Override - void setIntHeader(String s, int i) { - - } - - @Override - void addIntHeader(String s, int i) { - - } - - @Override - void setStatus(int i) { - - } - - @Override - void setStatus(int i, String s) { - - } - - @Override - String getCharacterEncoding() { - return null - } - - @Override - String getContentType() { - return null - } - - @Override - ServletOutputStream getOutputStream() throws IOException { - return null - } - - @Override - PrintWriter getWriter() throws IOException { - return null - } - - @Override - void setCharacterEncoding(String charset) { - - } - - @Override - void setContentLength(int i) { - - } - - @Override - void setContentType(String s) { - - } - - @Override - void setBufferSize(int i) { - - } - - @Override - int getBufferSize() { - return 0 - } - - @Override - void flushBuffer() throws IOException { - - } - - @Override - void resetBuffer() { - - } - - @Override - boolean isCommitted() { - return false - } - - @Override - void reset() { - - } - - @Override - void setLocale(Locale locale) { - - } - - @Override - Locale getLocale() { - return null - } - } -} 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 deleted file mode 100644 index ea904600b175..000000000000 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/JettyServlet2Test.groovy +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.api.common.AttributeKey -import io.opentelemetry.instrumentation.api.internal.HttpConstants -import io.opentelemetry.instrumentation.test.AgentTestTrait -import io.opentelemetry.instrumentation.test.asserts.TraceAssert -import io.opentelemetry.instrumentation.test.base.HttpServerTest -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint -import io.opentelemetry.sdk.trace.data.SpanData -import io.opentelemetry.semconv.incubating.CodeIncubatingAttributes -import org.eclipse.jetty.server.Response -import org.eclipse.jetty.server.Server -import org.eclipse.jetty.server.handler.ErrorHandler -import org.eclipse.jetty.servlet.ServletContextHandler - -import javax.annotation.Nullable -import javax.servlet.http.HttpServletRequest - -import static io.opentelemetry.api.trace.SpanKind.INTERNAL -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.PATH_PARAM -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS - -class JettyServlet2Test extends HttpServerTest implements AgentTestTrait { - - private static final CONTEXT = "ctx" - - @Override - Server startServer(int port) { - def jettyServer = new Server(port) - jettyServer.connectors.each { - it.setHost('localhost') - } - ServletContextHandler servletContext = new ServletContextHandler(null, "/$CONTEXT") - servletContext.errorHandler = new ErrorHandler() { - protected void handleErrorPage(HttpServletRequest request, Writer writer, int code, String message) throws IOException { - Throwable th = (Throwable) request.getAttribute("javax.servlet.error.exception") - writer.write(th ? th.message : message) - } - } - - // FIXME: Add tests for security/authentication. -// ConstraintSecurityHandler security = setupAuthentication(jettyServer) -// servletContext.setSecurityHandler(security) - - servletContext.addServlet(TestServlet2.Sync, SUCCESS.path) - servletContext.addServlet(TestServlet2.Sync, QUERY_PARAM.path) - servletContext.addServlet(TestServlet2.Sync, REDIRECT.path) - 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() - - return jettyServer - } - - @Override - void stopServer(Server server) { - server.stop() - server.destroy() - } - - @Override - URI buildAddress() { - return new URI("http://localhost:$port/$CONTEXT/") - } - - @Override - Set> httpAttributes(ServerEndpoint endpoint) { - [] as Set - } - - @Override - String expectedServerSpanName(ServerEndpoint endpoint, String method, @Nullable String route) { - if (method == HttpConstants._OTHER) { - return "HTTP " + endpoint.resolvePath(address).path - } - switch (endpoint) { - case NOT_FOUND: - return method - case PATH_PARAM: - return method + " " + getContextPath() + "/path/:id/param" - default: - return method + " " + endpoint.resolvePath(address).path - } - } - - @Override - boolean testNotFound() { - false - } - - // servlet 2 does not expose a way to retrieve response headers - @Override - boolean testCapturedHttpHeaders() { - false - } - - @Override - boolean hasResponseSpan(ServerEndpoint endpoint) { - endpoint == REDIRECT || endpoint == ERROR - } - - @Override - boolean hasResponseCustomizer(ServerEndpoint endpoint) { - true - } - - @Override - void responseSpan(TraceAssert trace, int index, Object parent, String method = "GET", ServerEndpoint endpoint = SUCCESS) { - def responseMethod = endpoint == REDIRECT ? "sendRedirect" : "sendError" - trace.span(index) { - name "Response.$responseMethod" - kind INTERNAL - childOf((SpanData) parent) - attributes { - "$CodeIncubatingAttributes.CODE_NAMESPACE" Response.name - "$CodeIncubatingAttributes.CODE_FUNCTION" responseMethod - } - } - } - - /** - * Setup simple authentication for tests - *

- * requests to {@code /auth/*} need login 'user' and password 'password' - *

- * For details @see http://www.eclipse.org/jetty/documentation/9.3.x/embedded-examples.html - * - * @param jettyServer server to attach login service - * @return SecurityHandler that can be assigned to servlet - */ -// private ConstraintSecurityHandler setupAuthentication(Server jettyServer) { -// ConstraintSecurityHandler security = new ConstraintSecurityHandler() -// -// Constraint constraint = new Constraint() -// constraint.setName("auth") -// constraint.setAuthenticate(true) -// constraint.setRoles("role") -// -// ConstraintMapping mapping = new ConstraintMapping() -// mapping.setPathSpec("/auth/*") -// mapping.setConstraint(constraint) -// -// security.setConstraintMappings(mapping) -// security.setAuthenticator(new BasicAuthenticator()) -// -// LoginService loginService = new HashLoginService("TestRealm", -// "src/test/resources/realm.properties") -// security.setLoginService(loginService) -// jettyServer.addBean(loginService) -// -// security -// } -} 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 deleted file mode 100644 index 3031280e8bc2..000000000000 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/groovy/TestServlet2.groovy +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.instrumentation.test.base.HttpServerTest -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint -import javax.servlet.http.HttpServlet -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS - -class TestServlet2 { - - static class Sync extends HttpServlet { - @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) { - req.getRequestDispatcher() - ServerEndpoint endpoint = ServerEndpoint.forPath(req.servletPath) - HttpServerTest.controller(endpoint) { - resp.contentType = "text/plain" - switch (endpoint) { - case SUCCESS: - resp.status = endpoint.status - resp.writer.print(endpoint.body) - break - case QUERY_PARAM: - resp.status = endpoint.status - resp.writer.print(req.queryString) - break - case REDIRECT: - resp.sendRedirect(endpoint.body) - break - case ERROR: - resp.sendError(endpoint.status, endpoint.body) - 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-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java new file mode 100644 index 000000000000..89e862cb00be --- /dev/null +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java @@ -0,0 +1,289 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v2_2; + +import static io.opentelemetry.instrumentation.testing.GlobalTraceUtil.runWithSpan; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.sdk.trace.data.StatusData; +import io.opentelemetry.semconv.ExceptionAttributes; +import io.opentelemetry.semconv.incubating.CodeIncubatingAttributes; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Collections; +import java.util.Locale; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +public class HttpServletResponseTest { + + @RegisterExtension + static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); + + private final TestResponse response = new TestResponse(); + private final HttpServletRequest request = mock(HttpServletRequest.class); + + @BeforeEach + void setUp() throws ServletException, IOException { + when(request.getProtocol()).thenReturn("HTTP/1.1"); + when(request.getMethod()).thenReturn("GET"); + when(request.getHeaderNames()).thenReturn(Collections.emptyEnumeration()); + when(request.getAttributeNames()).thenReturn(Collections.emptyEnumeration()); + + HttpServlet servlet = new HttpServlet() {}; + // We need to call service so HttpServletAdvice can link the request to the response. + servlet.service(request, response); + testing.clearData(); + } + + @Test + void test_send_no_parent() { + response.sendError(0); + response.sendError(0, ""); + response.sendRedirect(""); + + assertThat(testing.spans()).isEmpty(); + } + + @Test + void test_send_with_parent() { + runWithSpan( + "parent", + () -> { + response.sendError(0); + response.sendError(0, ""); + response.sendRedirect(""); + }); + + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> span.hasName("parent").hasKind(SpanKind.INTERNAL).hasNoParent(), + span -> + span.hasName("TestResponse.sendError") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + CodeIncubatingAttributes.CODE_NAMESPACE, + TestResponse.class.getName()), + equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "sendError")), + span -> + span.hasName("TestResponse.sendError") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + CodeIncubatingAttributes.CODE_NAMESPACE, + TestResponse.class.getName()), + equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "sendError")), + span -> + span.hasName("TestResponse.sendRedirect") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + CodeIncubatingAttributes.CODE_NAMESPACE, + TestResponse.class.getName()), + equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "sendRedirect")))); + } + + @Test + void test_send_with_exception() throws ServletException, IOException { + RuntimeException ex = new RuntimeException("some error"); + TestResponse response = + new TestResponse() { + @Override + public void sendRedirect(String s) { + throw ex; + } + }; + HttpServlet servlet = new HttpServlet() {}; + // We need to call service so HttpServletAdvice can link the request to the response. + servlet.service(request, response); + testing.clearData(); + + assertThatCode(() -> runWithSpan("parent", () -> response.sendRedirect(""))) + .isInstanceOf(RuntimeException.class) + .hasMessage("some error"); + + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("parent") + .hasKind(SpanKind.INTERNAL) + .hasNoParent() + .hasStatus(StatusData.error()) + .hasEventsSatisfyingExactly( + event -> + event.hasAttributesSatisfyingExactly( + equalTo( + ExceptionAttributes.EXCEPTION_TYPE, + "java.lang.RuntimeException"), + satisfies( + ExceptionAttributes.EXCEPTION_MESSAGE, + message -> message.startsWith("some error")), + satisfies( + ExceptionAttributes.EXCEPTION_STACKTRACE, + val -> val.isInstanceOf(String.class)))), + span -> + span.hasName("HttpServletResponseTest$2.sendRedirect") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)) + .hasStatus(StatusData.error()) + .hasEventsSatisfyingExactly( + event -> + event.hasAttributesSatisfyingExactly( + equalTo( + ExceptionAttributes.EXCEPTION_TYPE, + "java.lang.RuntimeException"), + satisfies( + ExceptionAttributes.EXCEPTION_MESSAGE, + message -> message.startsWith("some error")), + satisfies( + ExceptionAttributes.EXCEPTION_STACKTRACE, + val -> val.isInstanceOf(String.class)))))); + } + + @SuppressWarnings("deprecation") + public static class TestResponse implements HttpServletResponse { + @Override + public void addCookie(Cookie cookie) {} + + @Override + public boolean containsHeader(String s) { + return false; + } + + @Override + public String encodeURL(String s) { + return null; + } + + @Override + public String encodeRedirectURL(String s) { + return null; + } + + @Override + public String encodeUrl(String s) { + return null; + } + + @Override + public String encodeRedirectUrl(String s) { + return null; + } + + @Override + public void sendError(int i, String s) {} + + @Override + public void sendError(int i) {} + + @Override + public void sendRedirect(String s) {} + + @Override + public void setDateHeader(String s, long l) {} + + @Override + public void addDateHeader(String s, long l) {} + + @Override + public void setHeader(String s, String s1) {} + + @Override + public void addHeader(String s, String s1) {} + + @Override + public void setIntHeader(String s, int i) {} + + @Override + public void addIntHeader(String s, int i) {} + + @Override + public void setStatus(int i) {} + + @Override + public void setStatus(int i, String s) {} + + @Override + public String getCharacterEncoding() { + return null; + } + + @Override + public String getContentType() { + return null; + } + + @Override + public ServletOutputStream getOutputStream() { + return null; + } + + @Override + public PrintWriter getWriter() { + return null; + } + + @Override + public void setCharacterEncoding(String charset) {} + + @Override + public void setContentLength(int i) {} + + @Override + public void setContentType(String s) {} + + @Override + public void setBufferSize(int i) {} + + @Override + public int getBufferSize() { + return 0; + } + + @Override + public void flushBuffer() {} + + @Override + public void resetBuffer() {} + + @Override + public boolean isCommitted() { + return false; + } + + @Override + public void reset() {} + + @Override + public void setLocale(Locale locale) {} + + @Override + public Locale getLocale() { + return null; + } + } +} diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java new file mode 100644 index 000000000000..9d20865be132 --- /dev/null +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java @@ -0,0 +1,130 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v2_2; + +import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.PATH_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static io.opentelemetry.semconv.incubating.CodeIncubatingAttributes.CODE_FUNCTION; +import static io.opentelemetry.semconv.incubating.CodeIncubatingAttributes.CODE_NAMESPACE; + +import io.opentelemetry.instrumentation.api.internal.HttpConstants; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; +import java.io.IOException; +import java.io.Writer; +import java.util.HashSet; +import javax.annotation.Nullable; +import javax.servlet.http.HttpServletRequest; +import org.codehaus.groovy.runtime.DefaultGroovyMethods; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Response; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.ErrorHandler; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.junit.jupiter.api.extension.RegisterExtension; + +public class JettyServlet2Test extends AbstractHttpServerTest { + + @RegisterExtension + public static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + private static final String CONTEXT = "ctx"; + + @Override + protected Server setupServer() throws Exception { + Server jettyServer = new Server(port); + for (Connector connector : jettyServer.getConnectors()) { + connector.setHost("localhost"); + } + ServletContextHandler servletContext = new ServletContextHandler(null, "/" + CONTEXT); + servletContext.setErrorHandler( + new ErrorHandler() { + @Override + protected void handleErrorPage( + HttpServletRequest request, Writer writer, int code, String message) + throws IOException { + Throwable th = (Throwable) request.getAttribute("javax.servlet.error.exception"); + writer.write(DefaultGroovyMethods.asBoolean(th) ? th.getMessage() : message); + } + }); + + // FIXME: Add tests for security/authentication. + // ConstraintSecurityHandler security = setupAuthentication(jettyServer) + // servletContext.setSecurityHandler(security) + + servletContext.addServlet(TestServlet2.Sync.class, SUCCESS.getPath()); + servletContext.addServlet(TestServlet2.Sync.class, QUERY_PARAM.getPath()); + servletContext.addServlet(TestServlet2.Sync.class, REDIRECT.getPath()); + servletContext.addServlet(TestServlet2.Sync.class, ERROR.getPath()); + servletContext.addServlet(TestServlet2.Sync.class, EXCEPTION.getPath()); + servletContext.addServlet(TestServlet2.Sync.class, AUTH_REQUIRED.getPath()); + servletContext.addServlet(TestServlet2.Sync.class, INDEXED_CHILD.getPath()); + + jettyServer.setHandler(servletContext); + jettyServer.start(); + + return jettyServer; + } + + @Override + public void stopServer(Server server) throws Exception { + server.stop(); + server.destroy(); + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setContextPath("/" + CONTEXT); + options.setHttpAttributes(e -> new HashSet<>()); + options.setTestNotFound(false); + // servlet 2 does not expose a way to retrieve response headers + options.setTestCaptureHttpHeaders(false); + options.setHasResponseSpan(e -> e.equals(REDIRECT) || e.equals(ERROR)); + options.setHasResponseCustomizer(e -> true); + } + + @Override + public String expectedServerSpanName( + ServerEndpoint endpoint, String method, @Nullable String route) { + if (method.equals(HttpConstants._OTHER)) { + return "HTTP " + getContextPath() + endpoint.getPath(); + } + + if (DefaultGroovyMethods.isCase(NOT_FOUND, endpoint)) { + return method; + } else if (DefaultGroovyMethods.isCase(PATH_PARAM, endpoint)) { + return method + " " + getContextPath() + "/path/:id/param"; + } else { + return method + " " + getContextPath() + endpoint.getPath(); + } + } + + @Override + protected SpanDataAssert assertResponseSpan( + SpanDataAssert span, String method, ServerEndpoint endpoint) { + String responseMethod = endpoint.equals(REDIRECT) ? "sendRedirect" : "sendError"; + return span.hasName("Response." + responseMethod) + .hasKind(INTERNAL) + .hasAttributesSatisfyingExactly( + equalTo(CODE_NAMESPACE, Response.class.getName()), + equalTo(CODE_FUNCTION, responseMethod)); + } +} diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java new file mode 100644 index 000000000000..cb5218e31e1b --- /dev/null +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java @@ -0,0 +1,53 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v2_2; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; + +import io.opentelemetry.instrumentation.test.base.HttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class TestServlet2 { + public static class Sync extends HttpServlet { + @Override + protected void service(final HttpServletRequest req, final HttpServletResponse resp) { + req.getRequestDispatcher(null); + final ServerEndpoint endpoint = ServerEndpoint.forPath(req.getServletPath()); + HttpServerTest.controller( + endpoint, + () -> { + resp.setContentType("text/plain"); + switch (endpoint.name()) { + case "SUCCESS": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + break; + case "QUERY_PARAM": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(req.getQueryString()); + break; + case "REDIRECT": + resp.sendRedirect(endpoint.getBody()); + break; + case "ERROR": + resp.sendError(endpoint.getStatus(), endpoint.getBody()); + break; + case "EXCEPTION": + throw new Exception(endpoint.getBody()); + case "INDEXED_CHILD": + INDEXED_CHILD.collectSpanAttributes(req::getParameter); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + break; + } + return null; + }); + } + } +} From 37aba931c694cbf638e47f9622cd4863975f107d Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 14 Aug 2024 15:29:01 +0200 Subject: [PATCH 02/43] convert servlet tests to java --- .../servlet/v2_2/HttpServletResponseTest.java | 1 + .../instrumentation/servlet/v2_2/TestServlet2.java | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java index 89e862cb00be..42ccc5f72c5d 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java @@ -164,6 +164,7 @@ public void sendRedirect(String s) { val -> val.isInstanceOf(String.class)))))); } + /** Tests deprecated methods */ @SuppressWarnings("deprecation") public static class TestResponse implements HttpServletResponse { @Override diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java index cb5218e31e1b..c5c7cf3b4286 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java @@ -14,11 +14,14 @@ import javax.servlet.http.HttpServletResponse; public class TestServlet2 { + + private TestServlet2() {} + public static class Sync extends HttpServlet { @Override - protected void service(final HttpServletRequest req, final HttpServletResponse resp) { + protected void service(HttpServletRequest req, HttpServletResponse resp) { req.getRequestDispatcher(null); - final ServerEndpoint endpoint = ServerEndpoint.forPath(req.getServletPath()); + ServerEndpoint endpoint = ServerEndpoint.forPath(req.getServletPath()); HttpServerTest.controller( endpoint, () -> { @@ -45,6 +48,8 @@ protected void service(final HttpServletRequest req, final HttpServletResponse r resp.setStatus(endpoint.getStatus()); resp.getWriter().print(endpoint.getBody()); break; + default: + break; } return null; }); From 61eb3ead7223c3c2e95f95e9cc8cd444c278f7d9 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 15 Aug 2024 08:51:47 +0200 Subject: [PATCH 03/43] convert servlet 3.0 tests to java --- .../groovy/AbstractServlet3MappingTest.groovy | 80 --- .../test/groovy/AbstractServlet3Test.groovy | 218 -------- .../groovy/JettyServlet3MappingTest.groovy | 56 --- .../src/test/groovy/JettyServlet3Test.groovy | 17 +- .../groovy/JettyServletHandlerTest.groovy | 5 +- .../src/test/groovy/TestServlet3.groovy | 1 + .../TomcatServlet3FilterMappingTest.groovy | 136 ----- .../groovy/TomcatServlet3MappingTest.groovy | 65 --- .../src/test/groovy/TomcatServlet3Test.groovy | 469 ------------------ .../servlet/v3_0/AbstractServlet3Test.java | 214 ++++++++ .../servlet/v3_0/ErrorHandlerValve.java | 32 ++ .../v3_0}/RequestDispatcherServlet.java | 10 +- .../servlet/v3_0/TestAccessLogValve.java | 79 +++ .../servlet/v3_0/TomcatServlet3SyncTest.java | 15 + .../servlet/v3_0/TomcatServlet3Test.java | 232 +++++++++ .../v3_0/TomcatServlet3TestAsyncTest.java | 20 + .../v3_0/TomcatServlet3TestFakeAsyncTest.java | 15 + .../v3_0/dispatch/TomcatDispatchTest.java | 18 + .../TomcatServlet3TestDispatchAsync.java | 54 ++ .../TomcatServlet3TestDispatchImmediate.java | 59 +++ .../dispatch/TomcatServlet3TestForward.java | 62 +++ .../dispatch/TomcatServlet3TestInclude.java | 62 +++ .../mapping/AbstractServlet3MappingTest.java | 100 ++++ .../mapping/JettyServlet3MappingTest.java | 68 +++ .../TomcatServlet3FilterMappingTest.java | 120 +++++ ...tServlet3FilterServletNameMappingTest.java | 25 + ...atServlet3FilterUrlPatternMappingTest.java | 18 + .../mapping/TomcatServlet3MappingTest.java | 85 ++++ 28 files changed, 1298 insertions(+), 1037 deletions(-) delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/AbstractServlet3MappingTest.groovy delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/AbstractServlet3Test.groovy delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3MappingTest.groovy delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3FilterMappingTest.groovy delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3MappingTest.groovy delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3Test.groovy create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/ErrorHandlerValve.java rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/{ => io/opentelemetry/javaagent/instrumentation/servlet/v3_0}/RequestDispatcherServlet.java (92%) create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TestAccessLogValve.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3SyncTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3Test.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestAsyncTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestFakeAsyncTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatDispatchTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchAsync.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchImmediate.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestForward.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestInclude.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/AbstractServlet3MappingTest.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/AbstractServlet3MappingTest.groovy deleted file mode 100644 index 0349aefbf742..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/AbstractServlet3MappingTest.groovy +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.api.trace.SpanKind -import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification -import io.opentelemetry.instrumentation.test.base.HttpServerTestTrait -import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse -import spock.lang.Unroll - -import javax.servlet.Servlet -import javax.servlet.ServletException -import javax.servlet.http.HttpServlet -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse - -import static io.opentelemetry.api.trace.StatusCode.ERROR - -abstract class AbstractServlet3MappingTest extends AgentInstrumentationSpecification implements HttpServerTestTrait { - - def setupSpec() { - setupServer() - } - - def cleanupSpec() { - cleanupServer() - } - - abstract void addServlet(CONTEXT context, String path, Class servlet) - - protected void setupServlets(CONTEXT context) { - addServlet(context, "/prefix/*", TestServlet) - addServlet(context, "*.suffix", TestServlet) - } - - static class TestServlet extends HttpServlet { - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - response.getWriter().write("Ok") - } - } - - @Unroll - def "test path #path"() { - setup: - AggregatedHttpResponse response = client.get(address.resolve(path).toString()).aggregate().join() - - expect: - response.status().code() == success ? 200 : 404 - - and: - def spanCount = success ? 1 : 2 - assertTraces(1) { - trace(0, spanCount) { - span(0) { - name "GET " + getContextPath() + route - kind SpanKind.SERVER - if (!success && response.status().code() >= 500) { - status ERROR - } - } - if (!success) { - span(1) { - } - } - } - } - - where: - path | route | success - 'prefix' | '/prefix/*' | true - 'prefix/' | '/prefix/*' | true - 'prefix/a' | '/prefix/*' | true - 'prefixa' | '/*' | false - 'a.suffix' | '/*.suffix' | true - '.suffix' | '/*.suffix' | true - 'suffix' | '/*' | false - } -} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/AbstractServlet3Test.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/AbstractServlet3Test.groovy deleted file mode 100644 index 7f990d7118ca..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/AbstractServlet3Test.groovy +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.api.trace.SpanKind -import io.opentelemetry.instrumentation.api.internal.HttpConstants -import io.opentelemetry.instrumentation.test.AgentTestTrait -import io.opentelemetry.instrumentation.test.asserts.TraceAssert -import io.opentelemetry.instrumentation.test.base.HttpServerTest -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint -import io.opentelemetry.javaagent.bootstrap.servlet.ExperimentalSnippetHolder -import io.opentelemetry.semconv.HttpAttributes - -import javax.servlet.Servlet - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS - -abstract class AbstractServlet3Test extends HttpServerTest 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() - - abstract void addServlet(CONTEXT context, String path, Class servlet) - - public static final ServerEndpoint HTML_PRINT_WRITER = - new ServerEndpoint("HTML_PRINT_WRITER", "htmlPrintWriter", - 200, - "\n" - + "\n" - + "\n" - + " \n" - + " Title\n" - + "\n" - + "\n" - + "

test works

\n" - + "\n" - + "") - public static final ServerEndpoint HTML_SERVLET_OUTPUT_STREAM = - new ServerEndpoint("HTML_SERVLET_OUTPUT_STREAM", "htmlServletOutputStream", - 200, - "\n" - + "\n" - + "\n" - + " \n" - + " Title\n" - + "\n" - + "\n" - + "

test works

\n" - + "\n" - + "") - 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) - addServlet(context, HTML_PRINT_WRITER.path, servlet) - addServlet(context, HTML_SERVLET_OUTPUT_STREAM.path, servlet) - } - - @Override - String expectedHttpRoute(ServerEndpoint endpoint, String method) { - // no need to compute route if we're not expecting it - if (!httpAttributes(endpoint).contains(HttpAttributes.HTTP_ROUTE)) { - return null - } - if (method == HttpConstants._OTHER) { - return endpoint.resolvePath(address).path - } - switch (endpoint) { - case NOT_FOUND: - return getContextPath() + "/*" - default: - return super.expectedHttpRoute(endpoint, method) - } - } - - @Override - boolean testCapturedRequestParameters() { - true - } - - boolean errorEndpointUsesSendError() { - true - } - - @Override - boolean hasResponseCustomizer(ServerEndpoint endpoint) { - 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 - } - } - - def "snippet injection with ServletOutputStream"() { - setup: - ExperimentalSnippetHolder.setSnippet("\n ") - def request = request(HTML_SERVLET_OUTPUT_STREAM, "GET") - def response = client.execute(request).aggregate().join() - - expect: - response.status().code() == HTML_SERVLET_OUTPUT_STREAM.status - String result = "\n" + - "\n" + - "\n" + - " \n" + - " \n" + - " Title\n" + - "\n" + - "\n" + - "

test works

\n" + - "\n" + - "" - response.contentUtf8() == result - response.headers().contentLength() == result.length() - - cleanup: - ExperimentalSnippetHolder.setSnippet("") - - def expectedRoute = expectedHttpRoute(HTML_SERVLET_OUTPUT_STREAM, "GET") - assertTraces(1) { - trace(0, 2) { - span(0) { - name "GET" + (expectedRoute != null ? " " + expectedRoute : "") - kind SpanKind.SERVER - hasNoParent() - } - span(1) { - name "controller" - kind SpanKind.INTERNAL - childOf span(0) - } - } - } - } - - def "snippet injection with PrintWriter"() { - setup: - ExperimentalSnippetHolder.setSnippet("\n ") - def request = request(HTML_PRINT_WRITER, "GET") - def response = client.execute(request).aggregate().join() - - expect: - response.status().code() == HTML_PRINT_WRITER.status - String result = "\n" + - "\n" + - "\n" + - " \n" + - " \n" + - " Title\n" + - "\n" + - "\n" + - "

test works

\n" + - "\n" + - "" - - response.contentUtf8() == result - response.headers().contentLength() == result.length() - - cleanup: - ExperimentalSnippetHolder.setSnippet("") - - def expectedRoute = expectedHttpRoute(HTML_PRINT_WRITER, "GET") - assertTraces(1) { - trace(0, 2) { - span(0) { - name "GET" + (expectedRoute != null ? " " + expectedRoute : "") - kind SpanKind.SERVER - hasNoParent() - } - span(1) { - name "controller" - kind SpanKind.INTERNAL - childOf span(0) - } - } - } - } -} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3MappingTest.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3MappingTest.groovy deleted file mode 100644 index dd338121e9d9..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3MappingTest.groovy +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import org.eclipse.jetty.server.Server -import org.eclipse.jetty.servlet.ServletContextHandler - -import javax.servlet.Servlet -import javax.servlet.ServletException -import javax.servlet.http.HttpServlet -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse - -class JettyServlet3MappingTest extends AbstractServlet3MappingTest { - - @Override - Server startServer(int port) { - Server server = new Server(port) - ServletContextHandler handler = new ServletContextHandler(null, contextPath) - setupServlets(handler) - server.setHandler(handler) - server.start() - return server - } - - @Override - void stopServer(Server server) { - server.stop() - server.destroy() - } - - @Override - protected void setupServlets(ServletContextHandler handler) { - super.setupServlets(handler) - - addServlet(handler, "/", DefaultServlet) - } - - @Override - void addServlet(ServletContextHandler handler, String path, Class servlet) { - handler.addServlet(servlet, path) - } - - static class DefaultServlet extends HttpServlet { - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - response.sendError(404) - } - } - - @Override - String getContextPath() { - "/jetty-context" - } -} 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 f2f93e4c2ef9..514ee11a1637 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 @@ -5,6 +5,7 @@ import io.opentelemetry.instrumentation.test.asserts.TraceAssert import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test import org.eclipse.jetty.server.Server import org.eclipse.jetty.server.handler.ErrorHandler import org.eclipse.jetty.servlet.ServletContextHandler @@ -96,7 +97,7 @@ abstract class JettyServlet3Test extends AbstractServlet3Test servlet) { + void addServlet(ServletContextHandler servletContext, String path, Class servlet) { servletContext.addServlet(servlet, path) } @@ -128,7 +129,7 @@ abstract class JettyServlet3Test extends AbstractServlet3Test servlet() { + Class servlet() { TestServlet3.Sync } } @@ -136,7 +137,7 @@ class JettyServlet3TestSync extends JettyServlet3Test { class JettyServlet3TestAsync extends JettyServlet3Test { @Override - Class servlet() { + Class servlet() { TestServlet3.Async } @@ -154,14 +155,14 @@ class JettyServlet3TestAsync extends JettyServlet3Test { class JettyServlet3TestFakeAsync extends JettyServlet3Test { @Override - Class servlet() { + Class servlet() { TestServlet3.FakeAsync } } class JettyServlet3TestForward extends JettyDispatchTest { @Override - Class servlet() { + Class servlet() { TestServlet3.Sync // dispatch to sync servlet } @@ -185,7 +186,7 @@ class JettyServlet3TestForward extends JettyDispatchTest { class JettyServlet3TestInclude extends JettyDispatchTest { @Override - Class servlet() { + Class servlet() { TestServlet3.Sync // dispatch to sync servlet } @@ -224,7 +225,7 @@ class JettyServlet3TestInclude extends JettyDispatchTest { class JettyServlet3TestDispatchImmediate extends JettyDispatchTest { @Override - Class servlet() { + Class servlet() { TestServlet3.Sync } @@ -253,7 +254,7 @@ class JettyServlet3TestDispatchImmediate extends JettyDispatchTest { class JettyServlet3TestDispatchAsync extends JettyDispatchTest { @Override - Class servlet() { + Class servlet() { TestServlet3.Async } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServletHandlerTest.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServletHandlerTest.groovy index f681852649f4..63c5aa4eefdc 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServletHandlerTest.groovy +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServletHandlerTest.groovy @@ -6,6 +6,7 @@ import io.opentelemetry.api.common.AttributeKey import io.opentelemetry.instrumentation.test.asserts.TraceAssert import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test import io.opentelemetry.semconv.HttpAttributes import org.eclipse.jetty.server.Server import org.eclipse.jetty.server.handler.ErrorHandler @@ -65,7 +66,7 @@ class JettyServletHandlerTest extends AbstractServlet3Test servlet) { + void addServlet(ServletHandler servletHandler, String path, Class servlet) { servletHandler.addServletWithMapping(servlet, path) } @@ -81,7 +82,7 @@ class JettyServletHandlerTest extends AbstractServlet3Test servlet() { + Class servlet() { TestServlet3.Sync } 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 9048c157c27f..9183dbfb5b2e 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 @@ -5,6 +5,7 @@ import io.opentelemetry.instrumentation.test.base.HttpServerTest import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test import javax.servlet.RequestDispatcher import javax.servlet.ServletException diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3FilterMappingTest.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3FilterMappingTest.groovy deleted file mode 100644 index b40142c784ee..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3FilterMappingTest.groovy +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import org.apache.catalina.Context -import org.apache.catalina.startup.Tomcat -import org.apache.tomcat.util.descriptor.web.FilterDef -import org.apache.tomcat.util.descriptor.web.FilterMap - -import javax.servlet.Filter -import javax.servlet.FilterChain -import javax.servlet.FilterConfig -import javax.servlet.ServletException -import javax.servlet.ServletRequest -import javax.servlet.ServletResponse -import javax.servlet.http.HttpServlet -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse - -abstract class TomcatServlet3FilterMappingTest extends TomcatServlet3MappingTest { - - void addFilter(Context servletContext, String path, Class filter) { - String name = UUID.randomUUID() - FilterDef filterDef = new FilterDef() - filterDef.setFilter(filter.newInstance()) - filterDef.setFilterName(name) - servletContext.addFilterDef(filterDef) - FilterMap filterMap = new FilterMap() - filterMap.setFilterName(name) - filterMap.addURLPattern(path) - servletContext.addFilterMap(filterMap) - } - - void addFilterWithServletName(Context servletContext, String servletName, Class filter) { - String name = UUID.randomUUID() - FilterDef filterDef = new FilterDef() - filterDef.setFilter(filter.newInstance()) - filterDef.setFilterName(name) - servletContext.addFilterDef(filterDef) - FilterMap filterMap = new FilterMap() - filterMap.setFilterName(name) - filterMap.addServletName(servletName) - servletContext.addFilterMap(filterMap) - } - - static class TestFilter implements Filter { - @Override - void init(FilterConfig filterConfig) throws ServletException { - } - - @Override - void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - if (servletRequest.getAttribute("firstFilterCalled") != null) { - servletRequest.setAttribute("testFilterCalled", Boolean.TRUE) - filterChain.doFilter(servletRequest, servletResponse) - } else { - throw new IllegalStateException("First filter should have been called.") - } - } - - @Override - void destroy() { - } - } - - static class FirstFilter implements Filter { - @Override - void init(FilterConfig filterConfig) throws ServletException { - } - - @Override - void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - servletRequest.setAttribute("firstFilterCalled", Boolean.TRUE) - filterChain.doFilter(servletRequest, servletResponse) - } - - @Override - void destroy() { - } - } - - static class LastFilter implements Filter { - - @Override - void init(FilterConfig filterConfig) throws ServletException { - } - - @Override - void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - if (servletRequest.getAttribute("testFilterCalled") != null) { - HttpServletResponse response = (HttpServletResponse) servletResponse - response.getWriter().write("Ok") - response.setStatus(HttpServletResponse.SC_OK) - } else { - filterChain.doFilter(servletRequest, servletResponse) - } - } - - @Override - void destroy() { - } - } - - static class DefaultServlet extends HttpServlet { - protected void service(HttpServletRequest req, HttpServletResponse resp) { - throw new IllegalStateException("Servlet should not have been called, filter should have handled the request.") - } - } -} - -class TomcatServlet3FilterUrlPatternMappingTest extends TomcatServlet3FilterMappingTest { - @Override - protected void setupServlets(Context context) { - addFilter(context, "/*", FirstFilter) - addFilter(context, "/prefix/*", TestFilter) - addFilter(context, "*.suffix", TestFilter) - addFilter(context, "/*", LastFilter) - } -} - -class TomcatServlet3FilterServletNameMappingTest extends TomcatServlet3FilterMappingTest { - @Override - protected void setupServlets(Context context) { - Tomcat.addServlet(context, "prefix-servlet", new DefaultServlet()) - context.addServletMappingDecoded("/prefix/*", "prefix-servlet") - Tomcat.addServlet(context, "suffix-servlet", new DefaultServlet()) - context.addServletMappingDecoded("*.suffix", "suffix-servlet") - - addFilter(context, "/*", FirstFilter) - addFilterWithServletName(context, "prefix-servlet", TestFilter) - addFilterWithServletName(context, "suffix-servlet", TestFilter) - addFilterWithServletName(context, "prefix-servlet", LastFilter) - addFilterWithServletName(context, "suffix-servlet", LastFilter) - } -} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3MappingTest.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3MappingTest.groovy deleted file mode 100644 index 829edd344a5a..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3MappingTest.groovy +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import org.apache.catalina.Context -import org.apache.catalina.startup.Tomcat -import org.apache.tomcat.JarScanFilter -import org.apache.tomcat.JarScanType - -import javax.servlet.Servlet -import java.nio.file.Files - -class TomcatServlet3MappingTest extends AbstractServlet3MappingTest { - - @Override - Tomcat startServer(int port) { - def tomcatServer = new Tomcat() - - def baseDir = Files.createTempDirectory("tomcat").toFile() - baseDir.deleteOnExit() - tomcatServer.setBaseDir(baseDir.getAbsolutePath()) - - tomcatServer.setPort(port) - tomcatServer.getConnector().enableLookups = true // get localhost instead of 127.0.0.1 - - File applicationDir = new File(baseDir, "/webapps/ROOT") - if (!applicationDir.exists()) { - applicationDir.mkdirs() - applicationDir.deleteOnExit() - } - Context servletContext = tomcatServer.addWebapp(contextPath, applicationDir.getAbsolutePath()) - // Speed up startup by disabling jar scanning: - servletContext.getJarScanner().setJarScanFilter(new JarScanFilter() { - @Override - boolean check(JarScanType jarScanType, String jarName) { - return false - } - }) - - setupServlets(servletContext) - - tomcatServer.start() - - return tomcatServer - } - - @Override - void stopServer(Tomcat server) { - server.stop() - server.destroy() - } - - @Override - void addServlet(Context servletContext, String path, Class servlet) { - String name = UUID.randomUUID() - Tomcat.addServlet(servletContext, name, servlet.newInstance()) - servletContext.addServletMappingDecoded(path, name) - } - - @Override - String getContextPath() { - return "/tomcat-context" - } -} 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 deleted file mode 100644 index d902559869fe..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TomcatServlet3Test.groovy +++ /dev/null @@ -1,469 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.instrumentation.test.asserts.TraceAssert -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint -import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse -import org.apache.catalina.AccessLog -import org.apache.catalina.Context -import org.apache.catalina.connector.Request -import org.apache.catalina.connector.Response -import org.apache.catalina.core.StandardHost -import org.apache.catalina.startup.Tomcat -import org.apache.catalina.valves.ErrorReportValve -import org.apache.catalina.valves.ValveBase -import org.apache.tomcat.JarScanFilter -import org.apache.tomcat.JarScanType -import spock.lang.Shared -import spock.lang.Unroll - -import javax.servlet.Servlet -import javax.servlet.ServletException -import java.nio.file.Files -import java.util.concurrent.TimeUnit -import java.util.concurrent.TimeoutException - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS -import static org.junit.jupiter.api.Assumptions.assumeTrue - -@Unroll -abstract class TomcatServlet3Test extends AbstractServlet3Test { - - static final ServerEndpoint ACCESS_LOG_SUCCESS = new ServerEndpoint("ACCESS_LOG_SUCCESS", - "success?access-log=true", SUCCESS.status, SUCCESS.body, false) - static final ServerEndpoint ACCESS_LOG_ERROR = new ServerEndpoint("ACCESS_LOG_ERROR", - "error-status?access-log=true", ERROR.status, ERROR.body, false) - - @Override - Throwable expectedException() { - new ServletException(EXCEPTION.body) - } - - @Override - boolean hasResponseSpan(ServerEndpoint endpoint) { - endpoint == NOT_FOUND || super.hasResponseSpan(endpoint) - } - - @Override - void responseSpan(TraceAssert trace, int index, Object parent, String method, ServerEndpoint endpoint) { - switch (endpoint) { - case NOT_FOUND: - sendErrorSpan(trace, index, parent) - break - } - super.responseSpan(trace, index, parent, method, endpoint) - } - - @Shared - def accessLogValue = new TestAccessLogValve() - - @Override - Tomcat startServer(int port) { - def tomcatServer = new Tomcat() - - def baseDir = Files.createTempDirectory("tomcat").toFile() - baseDir.deleteOnExit() - tomcatServer.setBaseDir(baseDir.getAbsolutePath()) - - tomcatServer.setPort(port) - tomcatServer.getConnector().enableLookups = true // get localhost instead of 127.0.0.1 - - File applicationDir = new File(baseDir, "/webapps/ROOT") - if (!applicationDir.exists()) { - applicationDir.mkdirs() - applicationDir.deleteOnExit() - } - Context servletContext = tomcatServer.addWebapp(contextPath, applicationDir.getAbsolutePath()) - // Speed up startup by disabling jar scanning: - servletContext.getJarScanner().setJarScanFilter(new JarScanFilter() { - @Override - boolean check(JarScanType jarScanType, String jarName) { - return false - } - }) - -// setupAuthentication(tomcatServer, servletContext) - setupServlets(servletContext) - - (tomcatServer.host as StandardHost).errorReportValveClass = ErrorHandlerValve.name - (tomcatServer.host as StandardHost).getPipeline().addValve(accessLogValue) - - tomcatServer.start() - - return tomcatServer - } - - def setup() { - accessLogValue.loggedIds.clear() - } - - @Override - void stopServer(Tomcat server) { - server.stop() - server.destroy() - } - - @Override - String getContextPath() { - return "/tomcat-context" - } - - @Override - void addServlet(Context servletContext, String path, Class servlet) { - String name = UUID.randomUUID() - Tomcat.addServlet(servletContext, name, servlet.newInstance()) - servletContext.addServletMappingDecoded(path, name) - } - - def "access log has ids for #count requests"() { - given: - def request = request(ACCESS_LOG_SUCCESS, method) - - when: - List responses = (1..count).collect { - return client.execute(request).aggregate().join() - } - - then: - responses.each { response -> - assert response.status().code() == ACCESS_LOG_SUCCESS.status - assert response.contentUtf8() == ACCESS_LOG_SUCCESS.body - } - - and: - assertTraces(count) { - accessLogValue.waitForLoggedIds(count) - assert accessLogValue.loggedIds.size() == count - def loggedTraces = accessLogValue.loggedIds*.first - def loggedSpans = accessLogValue.loggedIds*.second - - (0..count - 1).each { - trace(it, 2) { - serverSpan(it, 0, null, null, "GET", ACCESS_LOG_SUCCESS) - controllerSpan(it, 1, span(0)) - } - - assert loggedTraces.contains(traces[it][0].traceId) - assert loggedSpans.contains(traces[it][0].spanId) - } - } - - where: - method = "GET" - count << [1, 4] // make multiple requests. - } - - def "access log has ids for error request"() { - setup: - assumeTrue(testError()) - - def request = request(ACCESS_LOG_ERROR, method) - def response = client.execute(request).aggregate().join() - - expect: - response.status().code() == ACCESS_LOG_ERROR.status - response.contentUtf8() == ACCESS_LOG_ERROR.body - - and: - def spanCount = 2 - if (errorEndpointUsesSendError()) { - spanCount++ - } - assertTraces(1) { - trace(0, spanCount) { - serverSpan(it, 0, null, null, method, ACCESS_LOG_ERROR) - def spanIndex = 1 - controllerSpan(it, spanIndex, span(spanIndex - 1)) - spanIndex++ - if (errorEndpointUsesSendError()) { - sendErrorSpan(it, spanIndex, span(spanIndex - 1)) - spanIndex++ - } - } - - accessLogValue.waitForLoggedIds(1) - def (String traceId, String spanId) = accessLogValue.loggedIds[0] - assert traces[0][0].traceId == traceId - assert traces[0][0].spanId == spanId - } - - where: - method = "GET" - } - - // FIXME: Add authentication tests back in... -// private setupAuthentication(Tomcat server, Context servletContext) { -// // Login Config -// LoginConfig authConfig = new LoginConfig() -// authConfig.setAuthMethod("BASIC") -// -// // adding constraint with role "test" -// SecurityConstraint constraint = new SecurityConstraint() -// constraint.addAuthRole("role") -// -// // add constraint to a collection with pattern /second -// SecurityCollection collection = new SecurityCollection() -// collection.addPattern("/auth/*") -// constraint.addCollection(collection) -// -// servletContext.setLoginConfig(authConfig) -// // does the context need a auth role too? -// servletContext.addSecurityRole("role") -// servletContext.addConstraint(constraint) -// -// // add tomcat users to realm -// MemoryRealm realm = new MemoryRealm() { -// protected void startInternal() { -// credentialHandler = new MessageDigestCredentialHandler() -// setState(LifecycleState.STARTING) -// } -// } -// realm.addUser(user, pass, "role") -// server.getEngine().setRealm(realm) -// -// servletContext.setLoginConfig(authConfig) -// } -} - -class ErrorHandlerValve extends ErrorReportValve { - @Override - protected void report(Request request, Response response, Throwable t) { - if (response.getStatus() < 400 || response.getContentWritten() > 0 || !response.isError()) { - return - } - try { - response.writer.print(t ? t.cause.message : response.message) - } catch (IOException e) { - e.printStackTrace() - } - } -} - -class TestAccessLogValve extends ValveBase implements AccessLog { - final List> loggedIds = [] - - TestAccessLogValve() { - super(true) - } - - void log(Request request, Response response, long time) { - if (request.getParameter("access-log") == null) { - return - } - - synchronized (loggedIds) { - loggedIds.add(new Tuple2(request.getAttribute("trace_id"), - request.getAttribute("span_id"))) - loggedIds.notifyAll() - } - } - - void waitForLoggedIds(int expected) { - def timeout = TimeUnit.SECONDS.toMillis(20) - def startTime = System.currentTimeMillis() - def endTime = startTime + timeout - def toWait = timeout - synchronized (loggedIds) { - while (loggedIds.size() < expected && toWait > 0) { - loggedIds.wait(toWait) - toWait = endTime - System.currentTimeMillis() - } - if (toWait <= 0) { - throw new TimeoutException("Timeout waiting for " + expected + " access log ids, got " + loggedIds.size()) - } - } - } - - @Override - void setRequestAttributesEnabled(boolean requestAttributesEnabled) { - } - - @Override - boolean getRequestAttributesEnabled() { - return false - } - - @Override - void invoke(Request request, Response response) throws IOException, ServletException { - getNext().invoke(request, response) - } -} - -class TomcatServlet3TestSync extends TomcatServlet3Test { - - @Override - Class servlet() { - TestServlet3.Sync - } -} - -class TomcatServlet3TestAsync extends TomcatServlet3Test { - - @Override - Class servlet() { - TestServlet3.Async - } - - @Override - boolean errorEndpointUsesSendError() { - false - } -} - -class TomcatServlet3TestFakeAsync extends TomcatServlet3Test { - - @Override - Class servlet() { - TestServlet3.FakeAsync - } -} - -class TomcatServlet3TestForward extends TomcatDispatchTest { - @Override - Class servlet() { - TestServlet3.Sync // dispatch to sync servlet - } - - @Override - boolean testNotFound() { - false - } - - @Override - protected void setupServlets(Context context) { - super.setupServlets(context) - - addServlet(context, "/dispatch" + SUCCESS.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + QUERY_PARAM.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + REDIRECT.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + ERROR.path, RequestDispatcherServlet.Forward) - 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" + CAPTURE_PARAMETERS.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + HTML_PRINT_WRITER.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.path, RequestDispatcherServlet.Forward) - } -} - -class TomcatServlet3TestInclude extends TomcatDispatchTest { - @Override - Class servlet() { - TestServlet3.Sync // dispatch to sync servlet - } - - @Override - boolean testNotFound() { - false - } - - @Override - boolean testRedirect() { - false - } - - @Override - boolean testCapturedHttpHeaders() { - false - } - - @Override - boolean testError() { - false - } - - @Override - protected void setupServlets(Context context) { - super.setupServlets(context) - - addServlet(context, "/dispatch" + SUCCESS.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + QUERY_PARAM.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + REDIRECT.path, RequestDispatcherServlet.Include) - 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" + CAPTURE_PARAMETERS.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + HTML_PRINT_WRITER.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.path, RequestDispatcherServlet.Include) - } -} - -class TomcatServlet3TestDispatchImmediate extends TomcatDispatchTest { - @Override - Class servlet() { - TestServlet3.Sync - } - - @Override - boolean testNotFound() { - false - } - - @Override - protected void setupServlets(Context context) { - super.setupServlets(context) - - addServlet(context, "/dispatch" + SUCCESS.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + QUERY_PARAM.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + ERROR.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + EXCEPTION.path, TestServlet3.DispatchImmediate) - 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" + CAPTURE_PARAMETERS.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + HTML_PRINT_WRITER.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive) - } -} - -class TomcatServlet3TestDispatchAsync extends TomcatDispatchTest { - @Override - Class servlet() { - TestServlet3.Async - } - - @Override - protected void setupServlets(Context context) { - super.setupServlets(context) - - addServlet(context, "/dispatch" + SUCCESS.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + QUERY_PARAM.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + ERROR.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + EXCEPTION.path, TestServlet3.DispatchAsync) - 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" + CAPTURE_PARAMETERS.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + HTML_PRINT_WRITER.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive) - } - - @Override - boolean errorEndpointUsesSendError() { - false - } -} - -abstract class TomcatDispatchTest extends TomcatServlet3Test { - @Override - URI buildAddress() { - return new URI("http://localhost:$port$contextPath/dispatch/") - } -} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java new file mode 100644 index 000000000000..da2a685625c2 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -0,0 +1,214 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; + +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.api.internal.HttpConstants; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; +import io.opentelemetry.javaagent.bootstrap.servlet.ExperimentalSnippetHolder; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpRequest; +import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; +import javax.servlet.Servlet; +import org.codehaus.groovy.runtime.DefaultGroovyMethods; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +public abstract class AbstractServlet3Test extends AbstractHttpServerTest { + + public static final ServerEndpoint HTML_PRINT_WRITER = + new ServerEndpoint( + "HTML_PRINT_WRITER", + "htmlPrintWriter", + 200, + "\n" + + "\n" + + "\n" + + " \n" + + " Title\n" + + "\n" + + "\n" + + "

test works

\n" + + "\n" + + ""); + public static final ServerEndpoint HTML_SERVLET_OUTPUT_STREAM = + new ServerEndpoint( + "HTML_SERVLET_OUTPUT_STREAM", + "htmlServletOutputStream", + 200, + "\n" + + "\n" + + "\n" + + " \n" + + " Title\n" + + "\n" + + "\n" + + "

test works

\n" + + "\n" + + ""); + + @RegisterExtension + protected static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setTestCaptureRequestParameters(true); + options.setHasResponseCustomizer(e -> true); + options.setHasResponseSpan( + endpoint -> + endpoint.equals(REDIRECT) || (endpoint.equals(ERROR) && errorEndpointUsesSendError())); + } + + public abstract Class servlet(); + + public abstract void addServlet(CONTEXT context, String path, Class servlet); + + protected void setupServlets(CONTEXT context) { + Class servlet = servlet(); + + addServlet(context, SUCCESS.getPath(), servlet); + addServlet(context, QUERY_PARAM.getPath(), servlet); + addServlet(context, ERROR.getPath(), servlet); + addServlet(context, EXCEPTION.getPath(), servlet); + addServlet(context, REDIRECT.getPath(), servlet); + addServlet(context, AUTH_REQUIRED.getPath(), servlet); + addServlet(context, INDEXED_CHILD.getPath(), servlet); + addServlet(context, CAPTURE_HEADERS.getPath(), servlet); + addServlet(context, CAPTURE_PARAMETERS.getPath(), servlet); + addServlet(context, HTML_PRINT_WRITER.getPath(), servlet); + addServlet(context, HTML_SERVLET_OUTPUT_STREAM.getPath(), servlet); + } + + @Override + public String expectedHttpRoute(ServerEndpoint endpoint, String method) { + if (method.equals(HttpConstants._OTHER)) { + return endpoint.getPath(); + } + + if (DefaultGroovyMethods.isCase(NOT_FOUND, endpoint)) { + return getContextPath() + "/*"; + } else { + return super.expectedHttpRoute(endpoint, method); + } + } + + public boolean errorEndpointUsesSendError() { + return true; + } + + @Override + protected SpanDataAssert assertResponseSpan( + SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { + if (DefaultGroovyMethods.isCase(REDIRECT, endpoint)) { + return span.satisfies(s -> assertThat(s.getName()).matches("\\.sendRedirect$")) + .hasKind(SpanKind.INTERNAL) + .hasParent(parentSpan); + } else if (DefaultGroovyMethods.isCase(ERROR, endpoint)) { + return span.satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) + .hasKind(SpanKind.INTERNAL) + .hasParent(parentSpan); + } + return super.assertResponseSpan(span, parentSpan, method, endpoint); + } + + @Test + void snippet_injection_with_ServletOutputStream() { + ExperimentalSnippetHolder.setSnippet( + "\n "); + AggregatedHttpRequest request = request(HTML_SERVLET_OUTPUT_STREAM, "GET"); + AggregatedHttpResponse response = client.execute(request).aggregate().join(); + + assertThat(response.status().code()).isEqualTo(HTML_SERVLET_OUTPUT_STREAM.getStatus()); + String result = + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " Title\n" + + "\n" + + "\n" + + "

test works

\n" + + "\n" + + ""; + assertThat(response.contentUtf8()).isEqualTo(result); + assertThat(response.headers().contentLength()).isEqualTo(result.length()); + + ExperimentalSnippetHolder.setSnippet(""); + + String expectedRoute = expectedHttpRoute(HTML_SERVLET_OUTPUT_STREAM, "GET"); + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("GET " + (expectedRoute != null ? expectedRoute : "")) + .hasKind(SpanKind.SERVER) + .hasNoParent(), + span -> + span.hasName("controller") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)))); + } + + @Test + void snippet_injection_with_PrintWriter() { + setup: + ExperimentalSnippetHolder.setSnippet("\n "); + AggregatedHttpRequest request = request(HTML_PRINT_WRITER, "GET"); + AggregatedHttpResponse response = client.execute(request).aggregate().join(); + + assertThat(response.status().code()).isEqualTo(HTML_PRINT_WRITER.getStatus()); + String result = + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " Title\n" + + "\n" + + "\n" + + "

test works

\n" + + "\n" + + ""; + + assertThat(response.contentUtf8()).isEqualTo(result); + assertThat(response.headers().contentLength()).isEqualTo(result.length()); + + ExperimentalSnippetHolder.setSnippet(""); + + String expectedRoute = expectedHttpRoute(HTML_PRINT_WRITER, "GET"); + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("GET " + (expectedRoute != null ? expectedRoute : "")) + .hasKind(SpanKind.SERVER) + .hasNoParent(), + span -> + span.hasName("controller") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)))); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/ErrorHandlerValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/ErrorHandlerValve.java new file mode 100644 index 000000000000..3b5f66eff24b --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/ErrorHandlerValve.java @@ -0,0 +1,32 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; + +import java.io.IOException; +import org.apache.catalina.connector.Request; +import org.apache.catalina.connector.Response; +import org.apache.catalina.valves.ErrorReportValve; +import org.codehaus.groovy.runtime.DefaultGroovyMethods; + +public class ErrorHandlerValve extends ErrorReportValve { + @Override + protected void report(Request request, Response response, Throwable t) { + if (response.getStatus() < 400 || response.getContentWritten() > 0 || !response.isError()) { + return; + } + + try { + response + .getWriter() + .print( + DefaultGroovyMethods.asBoolean(t) + ? t.getCause().getMessage() + : response.getMessage()); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/RequestDispatcherServlet.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/RequestDispatcherServlet.java similarity index 92% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/RequestDispatcherServlet.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/RequestDispatcherServlet.java index 63391a170868..9e2aa0bd471d 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/RequestDispatcherServlet.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/RequestDispatcherServlet.java @@ -1,3 +1,10 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; + /* * Copyright The OpenTelemetry Authors * SPDX-License-Identifier: Apache-2.0 @@ -13,9 +20,6 @@ import javax.servlet.http.HttpServletResponse; public class RequestDispatcherServlet { - /* There's something about the getRequestDispatcher call that breaks horribly when these classes - * are written in groovy. - */ @WebServlet(asyncSupported = true) public static class Forward extends HttpServlet { diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TestAccessLogValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TestAccessLogValve.java new file mode 100644 index 000000000000..823cd8de553a --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TestAccessLogValve.java @@ -0,0 +1,79 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; + +import java.io.IOException; +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.servlet.ServletException; +import org.apache.catalina.AccessLog; +import org.apache.catalina.connector.Request; +import org.apache.catalina.connector.Response; +import org.apache.catalina.valves.ValveBase; + +public class TestAccessLogValve extends ValveBase implements AccessLog { + public TestAccessLogValve() { + super(true); + } + + public void log(Request request, Response response, long time) { + if (request.getParameter("access-log") == null) { + return; + } + + synchronized (loggedIds) { + loggedIds.add( + new AbstractMap.SimpleEntry<>( + request.getAttribute("trace_id").toString(), + request.getAttribute("span_id").toString())); + loggedIds.notifyAll(); + } + } + + public void waitForLoggedIds(int expected) { + long timeout = TimeUnit.SECONDS.toMillis(20); + long startTime = System.currentTimeMillis(); + long endTime = startTime + timeout; + long toWait = timeout; + synchronized (loggedIds) { + while (loggedIds.size() < expected && toWait > 0) { + try { + loggedIds.wait(toWait); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + toWait = endTime - System.currentTimeMillis(); + } + + if (toWait <= 0) { + throw new RuntimeException( + "Timeout waiting for " + expected + " access log ids, got " + loggedIds.size()); + } + } + } + + @Override + public void setRequestAttributesEnabled(boolean requestAttributesEnabled) {} + + @Override + public boolean getRequestAttributesEnabled() { + return false; + } + + @Override + public void invoke(Request request, Response response) throws IOException, ServletException { + getNext().invoke(request, response); + } + + public final List> getLoggedIds() { + return loggedIds; + } + + private final List> loggedIds = new ArrayList<>(); +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3SyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3SyncTest.java new file mode 100644 index 000000000000..718b5bb0c47c --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3SyncTest.java @@ -0,0 +1,15 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; + +import javax.servlet.Servlet; + +public class TomcatServlet3SyncTest extends TomcatServlet3Test { + @Override + public Class servlet() { + return TestServlet3.Sync.class; + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3Test.java new file mode 100644 index 000000000000..618f5a5482c5 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3Test.java @@ -0,0 +1,232 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; +import io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil; +import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpRequest; +import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; +import java.io.File; +import java.nio.file.Files; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import org.apache.catalina.Context; +import org.apache.catalina.LifecycleException; +import org.apache.catalina.core.StandardHost; +import org.apache.catalina.startup.Tomcat; +import org.apache.tomcat.JarScanFilter; +import org.apache.tomcat.JarScanType; +import org.codehaus.groovy.runtime.DefaultGroovyMethods; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import spock.lang.Unroll; + +@Unroll +public abstract class TomcatServlet3Test extends AbstractServlet3Test { + + private static final ServerEndpoint ACCESS_LOG_SUCCESS = + new ServerEndpoint( + "ACCESS_LOG_SUCCESS", + "success?access-log=true", + SUCCESS.getStatus(), + SUCCESS.getBody(), + false); + private static final ServerEndpoint ACCESS_LOG_ERROR = + new ServerEndpoint( + "ACCESS_LOG_ERROR", + "error-status?access-log=true", + ERROR.getStatus(), + ERROR.getBody(), + false); + private static final TestAccessLogValve accessLogValue = new TestAccessLogValve(); + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setExpectedException(new ServletException(EXCEPTION.getBody())); + options.setHasResponseSpan(e -> e.equals(NOT_FOUND)); + options.setContextPath("/tomcat-context"); + options.setTestError(testError()); + } + + public boolean testError() { + return false; + } + + @Override + protected SpanDataAssert assertResponseSpan( + SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { + if (DefaultGroovyMethods.isCase(NOT_FOUND, endpoint)) { + span.satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) + .hasKind(SpanKind.INTERNAL) + .hasParent(parentSpan); + } + return super.assertResponseSpan(span, parentSpan, method, endpoint); + } + + @Override + protected Tomcat setupServer() throws Exception { + Tomcat tomcatServer = new Tomcat(); + + File baseDir = Files.createTempDirectory("tomcat").toFile(); + baseDir.deleteOnExit(); + tomcatServer.setBaseDir(baseDir.getAbsolutePath()); + + tomcatServer.setPort(port); + tomcatServer.getConnector().setEnableLookups(true); // get localhost instead of 127.0.0.1 + + File applicationDir = new File(baseDir, "/webapps/ROOT"); + if (!applicationDir.exists()) { + applicationDir.mkdirs(); + applicationDir.deleteOnExit(); + } + + Context servletContext = + tomcatServer.addWebapp(getContextPath(), applicationDir.getAbsolutePath()); + // Speed up startup by disabling jar scanning: + servletContext + .getJarScanner() + .setJarScanFilter( + new JarScanFilter() { + @Override + public boolean check(JarScanType jarScanType, String jarName) { + return false; + } + }); + + // setupAuthentication(tomcatServer, servletContext) + setupServlets(servletContext); + + (DefaultGroovyMethods.asType(tomcatServer.getHost(), StandardHost.class)) + .setErrorReportValveClass(ErrorHandlerValve.class.getName()); + (DefaultGroovyMethods.asType(tomcatServer.getHost(), StandardHost.class)) + .getPipeline() + .addValve(accessLogValue); + + tomcatServer.start(); + + return tomcatServer; + } + + public void setup() { + accessLogValue.getLoggedIds().clear(); + } + + @Override + public void stopServer(Tomcat server) { + try { + server.stop(); + server.destroy(); + } catch (LifecycleException e) { + throw new RuntimeException(e); + } + } + + @Override + public void addServlet(Context servletContext, String path, Class servlet) { + String name = UUID.randomUUID().toString(); + try { + Tomcat.addServlet(servletContext, name, servlet.newInstance()); + } catch (Exception e) { + throw new RuntimeException(e); + } + servletContext.addServletMappingDecoded(path, name); + } + + @ParameterizedTest + @CsvSource({"1", "4"}) + void access_log_has_ids_for__count_requests(int count) { + AggregatedHttpRequest request = request(ACCESS_LOG_SUCCESS, "GET"); + + IntStream.range(0, count) + .mapToObj(i -> client.execute(request).aggregate().join()) + .forEach( + response -> { + assertThat(response.status().code()).isEqualTo(ACCESS_LOG_SUCCESS.getStatus()); + assertThat(response.contentUtf8()).isEqualTo(ACCESS_LOG_SUCCESS.getBody()); + }); + + accessLogValue.waitForLoggedIds(count); + assertThat(accessLogValue.getLoggedIds().size()).isEqualTo(count); + List loggedTraces = + accessLogValue.getLoggedIds().stream().map(Map.Entry::getKey).collect(Collectors.toList()); + List loggedSpans = + accessLogValue.getLoggedIds().stream() + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + + IntStream.range(0, count) + .forEach( + i -> { + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + assertServerSpan( + span, "GET", ACCESS_LOG_SUCCESS, SUCCESS.getStatus()), + span -> assertControllerSpan(span, null))); + + List> traces = TelemetryDataUtil.groupTraces(testing.spans()); + assertThat(loggedTraces).contains(traces.get(i).get(0).getTraceId()); + assertThat(loggedSpans).contains(traces.get(i).get(0).getSpanId()); + }); + } + + @Test + void access_log_has_ids_for_error_request() { + Assumptions.assumeTrue(testError()); + + AggregatedHttpRequest request = request(ACCESS_LOG_ERROR, "GET"); + AggregatedHttpResponse response = client.execute(request).aggregate().join(); + + assertThat(response.status().code()).isEqualTo(ACCESS_LOG_ERROR.getStatus()); + assertThat(response.contentUtf8()).isEqualTo(ACCESS_LOG_ERROR.getBody()); + + int spanCount = 2; + if (errorEndpointUsesSendError()) { + spanCount++; + } + + List spanData = TelemetryDataUtil.groupTraces(testing.spans()).get(0); + List spans = + spanData.stream().map(OpenTelemetryAssertions::assertThat).collect(Collectors.toList()); + assertThat(spans).hasSize(spanCount); + + assertServerSpan(spans.get(0), "GET", ACCESS_LOG_ERROR, ERROR.getStatus()); + assertControllerSpan(spans.get(1), null); + if (errorEndpointUsesSendError()) { + spans + .get(2) + .satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) + .hasKind(SpanKind.INTERNAL) + .hasParent(spanData.get(1)); + } + + accessLogValue.waitForLoggedIds(1); + Map.Entry entry = accessLogValue.getLoggedIds().get(0); + + assertThat(spanData.get(0).getTraceId()).isEqualTo(entry.getKey()); + assertThat(spanData.get(0).getSpanId()).isEqualTo(entry.getValue()); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestAsyncTest.java new file mode 100644 index 000000000000..1fc3b8b2f8ce --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestAsyncTest.java @@ -0,0 +1,20 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; + +import javax.servlet.Servlet; + +public class TomcatServlet3TestAsyncTest extends TomcatServlet3Test { + @Override + public Class servlet() { + return TestServlet3.Async.class; + } + + @Override + public boolean errorEndpointUsesSendError() { + return false; + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestFakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestFakeAsyncTest.java new file mode 100644 index 000000000000..ad042cfbd62b --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestFakeAsyncTest.java @@ -0,0 +1,15 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; + +import javax.servlet.Servlet; + +public class TomcatServlet3TestFakeAsyncTest extends TomcatServlet3Test { + @Override + public Class servlet() { + return TestServlet3.FakeAsync.class; + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatDispatchTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatDispatchTest.java new file mode 100644 index 000000000000..2b7f89fc0062 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatDispatchTest.java @@ -0,0 +1,18 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; + +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.TomcatServlet3Test; + +public abstract class TomcatDispatchTest extends TomcatServlet3Test { + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setContextPath(getContextPath() + "/dispatch"); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchAsync.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchAsync.java new file mode 100644 index 000000000000..08fa510d0dce --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchAsync.java @@ -0,0 +1,54 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import javax.servlet.Servlet; +import org.apache.catalina.Context; + +public class TomcatServlet3TestDispatchAsync extends TomcatDispatchTest { + @Override + public Class servlet() { + return TestServlet3.Async.class; + } + + @Override + protected void setupServlets(Context context) { + super.setupServlets(context); + + addServlet(context, "/dispatch" + SUCCESS.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + QUERY_PARAM.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + ERROR.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + EXCEPTION.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + REDIRECT.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + AUTH_REQUIRED.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + CAPTURE_HEADERS.getPath(), TestServlet3.DispatchAsync.class); + addServlet( + context, "/dispatch" + CAPTURE_PARAMETERS.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + INDEXED_CHILD.getPath(), TestServlet3.DispatchAsync.class); + addServlet( + context, "/dispatch" + HTML_PRINT_WRITER.getPath(), TestServlet3.DispatchAsync.class); + addServlet( + context, + "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.getPath(), + TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive.class); + } + + @Override + public boolean errorEndpointUsesSendError() { + return false; + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchImmediate.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchImmediate.java new file mode 100644 index 000000000000..ebc28b27f925 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchImmediate.java @@ -0,0 +1,59 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import javax.servlet.Servlet; +import org.apache.catalina.Context; + +public class TomcatServlet3TestDispatchImmediate extends TomcatDispatchTest { + @Override + public Class servlet() { + return TestServlet3.Sync.class; + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setTestNotFound(false); + } + + @Override + protected void setupServlets(Context context) { + super.setupServlets(context); + + addServlet(context, "/dispatch" + SUCCESS.getPath(), TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch" + QUERY_PARAM.getPath(), TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch" + ERROR.getPath(), TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch" + EXCEPTION.getPath(), TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch" + REDIRECT.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, "/dispatch" + AUTH_REQUIRED.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, "/dispatch" + CAPTURE_HEADERS.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, "/dispatch" + CAPTURE_PARAMETERS.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, "/dispatch" + INDEXED_CHILD.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, "/dispatch" + HTML_PRINT_WRITER.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, + "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.getPath(), + TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive.class); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestForward.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestForward.java new file mode 100644 index 000000000000..8dc4c85b9aed --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestForward.java @@ -0,0 +1,62 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.RequestDispatcherServlet; +import javax.servlet.Servlet; +import org.apache.catalina.Context; + +public class TomcatServlet3TestForward extends TomcatDispatchTest { + @Override + public Class servlet() { + return TestServlet3.Sync.class; // dispatch to sync servlet + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setTestNotFound(false); + } + + @Override + protected void setupServlets(Context context) { + super.setupServlets(context); + + addServlet(context, "/dispatch" + SUCCESS.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + QUERY_PARAM.getPath(), RequestDispatcherServlet.Forward.class); + addServlet(context, "/dispatch" + REDIRECT.getPath(), RequestDispatcherServlet.Forward.class); + addServlet(context, "/dispatch" + ERROR.getPath(), RequestDispatcherServlet.Forward.class); + addServlet(context, "/dispatch" + EXCEPTION.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + AUTH_REQUIRED.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + CAPTURE_HEADERS.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, + "/dispatch" + CAPTURE_PARAMETERS.getPath(), + RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + INDEXED_CHILD.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + HTML_PRINT_WRITER.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, + "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.getPath(), + RequestDispatcherServlet.Forward.class); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestInclude.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestInclude.java new file mode 100644 index 000000000000..808e4edf4e15 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestInclude.java @@ -0,0 +1,62 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.RequestDispatcherServlet; +import javax.servlet.Servlet; +import org.apache.catalina.Context; + +public class TomcatServlet3TestInclude extends TomcatDispatchTest { + @Override + public Class servlet() { + return TestServlet3.Sync.class; // dispatch to sync servlet + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setTestNotFound(false); + options.setTestRedirect(false); + options.setTestCaptureHttpHeaders(false); + options.setTestError(false); + } + + @Override + protected void setupServlets(Context context) { + super.setupServlets(context); + + addServlet(context, "/dispatch" + SUCCESS.getPath(), RequestDispatcherServlet.Include.class); + addServlet( + context, "/dispatch" + QUERY_PARAM.getPath(), RequestDispatcherServlet.Include.class); + addServlet(context, "/dispatch" + REDIRECT.getPath(), RequestDispatcherServlet.Include.class); + addServlet(context, "/dispatch" + ERROR.getPath(), RequestDispatcherServlet.Include.class); + addServlet(context, "/dispatch" + EXCEPTION.getPath(), RequestDispatcherServlet.Include.class); + addServlet( + context, "/dispatch" + AUTH_REQUIRED.getPath(), RequestDispatcherServlet.Include.class); + addServlet( + context, + "/dispatch" + CAPTURE_PARAMETERS.getPath(), + RequestDispatcherServlet.Include.class); + addServlet( + context, "/dispatch" + INDEXED_CHILD.getPath(), RequestDispatcherServlet.Include.class); + addServlet( + context, "/dispatch" + HTML_PRINT_WRITER.getPath(), RequestDispatcherServlet.Include.class); + addServlet( + context, + "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.getPath(), + RequestDispatcherServlet.Include.class); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java new file mode 100644 index 000000000000..f38c8b0867a8 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java @@ -0,0 +1,100 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.mapping; + +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; + +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerUsingTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.sdk.trace.data.StatusData; +import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; +import java.io.IOException; +import javax.servlet.Servlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import spock.lang.Unroll; + +public abstract class AbstractServlet3MappingTest + extends AbstractHttpServerUsingTest { + + @RegisterExtension + private static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + @BeforeAll + void setup() { + startServer(); + } + + @AfterAll + void cleanup() { + cleanupServer(); + } + + public abstract void addServlet(CONTEXT context, String path, Class servlet); + + protected void setupServlets(CONTEXT context) { + addServlet(context, "/prefix/*", TestServlet.class); + addServlet(context, "*.suffix", TestServlet.class); + } + + @ParameterizedTest + @CsvSource({ + "prefix, /prefix/*, true", + "prefix/, /prefix/*, true", + "prefix/a, /prefix/*, true", + "prefixa, /*, false", + "a.suffix, /*.suffix, true", + ".suffix, /*.suffix, true", + "suffix, /*, false", + }) + @Unroll + public void test_path__path(String path, String route, boolean success) { + + final AggregatedHttpResponse response = + client.get(address.resolve(path).toString()).aggregate().join(); + + assertThat(response.status().code()).isEqualTo(success ? 200 : 404); + + if (success) { + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("GET " + getContextPath() + route) + .hasKind(SpanKind.SERVER) + .hasStatus(StatusData.unset()))); + } else { + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("GET " + getContextPath() + route) + .hasKind(SpanKind.SERVER) + .hasStatus( + response.status().code() >= 500 + ? StatusData.error() + : StatusData.unset()), + span -> {})); + } + } + + public static class TestServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws IOException { + response.getWriter().write("Ok"); + } + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java new file mode 100644 index 000000000000..a644faacf851 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java @@ -0,0 +1,68 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.mapping; + +import java.io.IOException; +import javax.servlet.Servlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; + +public class JettyServlet3MappingTest + extends AbstractServlet3MappingTest { + + @Override + protected Server setupServer() { + Server server = new Server(port); + ServletContextHandler handler = new ServletContextHandler(null, getContextPath()); + setupServlets(handler); + server.setHandler(handler); + try { + server.start(); + } catch (Exception e) { + throw new RuntimeException(e); + } + return server; + } + + @Override + public void stopServer(Server server) { + try { + server.stop(); + } catch (Exception e) { + throw new RuntimeException(e); + } + server.destroy(); + } + + @Override + protected void setupServlets(ServletContextHandler handler) { + super.setupServlets(handler); + + addServlet(handler, "/", DefaultServlet.class); + } + + @Override + public void addServlet( + ServletContextHandler servletContextHandler, String path, Class servlet) { + servletContextHandler.addServlet(servlet, path); + } + + @Override + public String getContextPath() { + return "/jetty-context"; + } + + public static class DefaultServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws IOException { + response.sendError(404); + } + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java new file mode 100644 index 000000000000..1af6c8181146 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java @@ -0,0 +1,120 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.mapping; + +import java.io.IOException; +import java.util.UUID; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.catalina.Context; +import org.apache.tomcat.util.descriptor.web.FilterDef; +import org.apache.tomcat.util.descriptor.web.FilterMap; + +public abstract class TomcatServlet3FilterMappingTest extends TomcatServlet3MappingTest { + public void addFilter(Context servletContext, String path, Class filter) { + String name = UUID.randomUUID().toString(); + FilterDef filterDef = new FilterDef(); + try { + filterDef.setFilter(filter.newInstance()); + } catch (Exception e) { + throw new RuntimeException(e); + } + filterDef.setFilterName(name); + servletContext.addFilterDef(filterDef); + FilterMap filterMap = new FilterMap(); + filterMap.setFilterName(name); + filterMap.addURLPattern(path); + servletContext.addFilterMap(filterMap); + } + + public void addFilterWithServletName( + Context servletContext, String servletName, Class filter) { + String name = UUID.randomUUID().toString(); + FilterDef filterDef = new FilterDef(); + try { + filterDef.setFilter(filter.newInstance()); + } catch (Exception e) { + throw new RuntimeException(e); + } + filterDef.setFilterName(name); + servletContext.addFilterDef(filterDef); + FilterMap filterMap = new FilterMap(); + filterMap.setFilterName(name); + filterMap.addServletName(servletName); + servletContext.addFilterMap(filterMap); + } + + public static class TestFilter implements Filter { + @Override + public void init(FilterConfig filterConfig) {} + + @Override + public void doFilter( + ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + if (servletRequest.getAttribute("firstFilterCalled") != null) { + servletRequest.setAttribute("testFilterCalled", Boolean.TRUE); + filterChain.doFilter(servletRequest, servletResponse); + } else { + throw new IllegalStateException("First filter should have been called."); + } + } + + @Override + public void destroy() {} + } + + public static class FirstFilter implements Filter { + @Override + public void init(FilterConfig filterConfig) {} + + @Override + public void doFilter( + ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + servletRequest.setAttribute("firstFilterCalled", Boolean.TRUE); + filterChain.doFilter(servletRequest, servletResponse); + } + + @Override + public void destroy() {} + } + + public static class LastFilter implements Filter { + @Override + public void init(FilterConfig filterConfig) {} + + @Override + public void doFilter( + ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + if (servletRequest.getAttribute("testFilterCalled") != null) { + HttpServletResponse response = (HttpServletResponse) servletResponse; + response.getWriter().write("Ok"); + response.setStatus(HttpServletResponse.SC_OK); + } else { + filterChain.doFilter(servletRequest, servletResponse); + } + } + + @Override + public void destroy() {} + } + + public static class DefaultServlet extends HttpServlet { + protected void service(HttpServletRequest req, HttpServletResponse resp) { + throw new IllegalStateException( + "Servlet should not have been called, filter should have handled the request."); + } + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java new file mode 100644 index 000000000000..d04f7e1cc4a7 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.mapping; + +import org.apache.catalina.Context; +import org.apache.catalina.startup.Tomcat; + +public class TomcatServlet3FilterServletNameMappingTest extends TomcatServlet3FilterMappingTest { + @Override + protected void setupServlets(Context context) { + Tomcat.addServlet(context, "prefix-servlet", new DefaultServlet()); + context.addServletMappingDecoded("/prefix/*", "prefix-servlet"); + Tomcat.addServlet(context, "suffix-servlet", new DefaultServlet()); + context.addServletMappingDecoded("*.suffix", "suffix-servlet"); + + addFilter(context, "/*", FirstFilter.class); + addFilterWithServletName(context, "prefix-servlet", TestFilter.class); + addFilterWithServletName(context, "suffix-servlet", TestFilter.class); + addFilterWithServletName(context, "prefix-servlet", LastFilter.class); + addFilterWithServletName(context, "suffix-servlet", LastFilter.class); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java new file mode 100644 index 000000000000..3a86e38b1e70 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java @@ -0,0 +1,18 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.mapping; + +import org.apache.catalina.Context; + +public class TomcatServlet3FilterUrlPatternMappingTest extends TomcatServlet3FilterMappingTest { + @Override + protected void setupServlets(Context context) { + addFilter(context, "/*", FirstFilter.class); + addFilter(context, "/prefix/*", TestFilter.class); + addFilter(context, "*.suffix", TestFilter.class); + addFilter(context, "/*", LastFilter.class); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java new file mode 100644 index 000000000000..3bb95bef9490 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java @@ -0,0 +1,85 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.mapping; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.UUID; +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import org.apache.catalina.Context; +import org.apache.catalina.LifecycleException; +import org.apache.catalina.startup.Tomcat; + +public class TomcatServlet3MappingTest extends AbstractServlet3MappingTest { + @Override + protected Tomcat setupServer() throws Exception { + Tomcat tomcatServer = new Tomcat(); + + File baseDir; + try { + baseDir = Files.createTempDirectory("tomcat").toFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + baseDir.deleteOnExit(); + tomcatServer.setBaseDir(baseDir.getAbsolutePath()); + + tomcatServer.setPort(port); + tomcatServer.getConnector().setEnableLookups(true); // get localhost instead of 127.0.0.1 + + File applicationDir = new File(baseDir, "/webapps/ROOT"); + if (!applicationDir.exists()) { + applicationDir.mkdirs(); + applicationDir.deleteOnExit(); + } + + Context servletContext; + try { + servletContext = tomcatServer.addWebapp(getContextPath(), applicationDir.getAbsolutePath()); + } catch (ServletException e) { + throw new RuntimeException(e); + } + // Speed up startup by disabling jar scanning: + servletContext.getJarScanner().setJarScanFilter((jarScanType, jarName) -> false); + + setupServlets(servletContext); + + try { + tomcatServer.start(); + } catch (LifecycleException e) { + throw new RuntimeException(e); + } + return tomcatServer; + } + + @Override + public void stopServer(Tomcat server) { + try { + server.stop(); + server.destroy(); + } catch (LifecycleException e) { + throw new RuntimeException(e); + } + } + + @Override + public void addServlet(Context context, String path, Class servlet) { + String name = UUID.randomUUID().toString(); + try { + Tomcat.addServlet(context, name, servlet.newInstance()); + } catch (Exception e) { + throw new RuntimeException(e); + } + context.addServletMappingDecoded(path, name); + } + + @Override + public String getContextPath() { + return "/tomcat-context"; + } +} From ebf8cfd9c1cfad3fc14677fd63c965a86730663e Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 15 Aug 2024 08:55:42 +0200 Subject: [PATCH 04/43] convert servlet 3.0 tests to java --- .../servlet/v3_0/{ => tomcat}/ErrorHandlerValve.java | 2 +- .../servlet/v3_0/{ => tomcat}/RequestDispatcherServlet.java | 2 +- .../servlet/v3_0/{ => tomcat}/TestAccessLogValve.java | 2 +- .../servlet/v3_0/{ => tomcat}/TomcatServlet3SyncTest.java | 2 +- .../servlet/v3_0/{ => tomcat}/TomcatServlet3Test.java | 3 ++- .../v3_0/{ => tomcat}/TomcatServlet3TestAsyncTest.java | 2 +- .../v3_0/{ => tomcat}/TomcatServlet3TestFakeAsyncTest.java | 2 +- .../v3_0/{ => tomcat}/dispatch/TomcatDispatchTest.java | 4 ++-- .../dispatch/TomcatServlet3TestDispatchAsyncTest.java} | 4 ++-- .../dispatch/TomcatServlet3TestDispatchImmediateTest.java} | 4 ++-- .../dispatch/TomcatServlet3TestForwardTest.java} | 6 +++--- .../dispatch/TomcatServlet3TestIncludeTest.java} | 6 +++--- 12 files changed, 20 insertions(+), 19 deletions(-) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{ => tomcat}/ErrorHandlerValve.java (92%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{ => tomcat}/RequestDispatcherServlet.java (96%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{ => tomcat}/TestAccessLogValve.java (96%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{ => tomcat}/TomcatServlet3SyncTest.java (79%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{ => tomcat}/TomcatServlet3Test.java (98%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{ => tomcat}/TomcatServlet3TestAsyncTest.java (83%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{ => tomcat}/TomcatServlet3TestFakeAsyncTest.java (80%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{ => tomcat}/dispatch/TomcatDispatchTest.java (81%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{dispatch/TomcatServlet3TestDispatchAsync.java => tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java} (96%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{dispatch/TomcatServlet3TestDispatchImmediate.java => tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java} (96%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{dispatch/TomcatServlet3TestForward.java => tomcat/dispatch/TomcatServlet3TestForwardTest.java} (93%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/{dispatch/TomcatServlet3TestInclude.java => tomcat/dispatch/TomcatServlet3TestIncludeTest.java} (93%) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/ErrorHandlerValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java similarity index 92% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/ErrorHandlerValve.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java index 3b5f66eff24b..189d639e7410 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/ErrorHandlerValve.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; import java.io.IOException; import org.apache.catalina.connector.Request; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/RequestDispatcherServlet.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java similarity index 96% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/RequestDispatcherServlet.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java index 9e2aa0bd471d..2c7499b8a4f0 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/RequestDispatcherServlet.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; /* * Copyright The OpenTelemetry Authors diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TestAccessLogValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java similarity index 96% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TestAccessLogValve.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java index 823cd8de553a..12e5543ddf08 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TestAccessLogValve.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; import java.io.IOException; import java.util.AbstractMap; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3SyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java similarity index 79% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3SyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java index 718b5bb0c47c..81f22c978e7a 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3SyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; import javax.servlet.Servlet; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java similarity index 98% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3Test.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index 618f5a5482c5..0c9a2a12a26f 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; @@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test; import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.sdk.trace.data.SpanData; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestAsyncTest.java similarity index 83% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestAsyncTest.java index 1fc3b8b2f8ce..01f2b4643064 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestAsyncTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; import javax.servlet.Servlet; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestFakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestFakeAsyncTest.java similarity index 80% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestFakeAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestFakeAsyncTest.java index ad042cfbd62b..a4c619d7e5d5 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/TomcatServlet3TestFakeAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestFakeAsyncTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; import javax.servlet.Servlet; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatDispatchTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java similarity index 81% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatDispatchTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java index 2b7f89fc0062..1ea11c1c4123 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatDispatchTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.dispatch; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; -import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.TomcatServlet3Test; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TomcatServlet3Test; public abstract class TomcatDispatchTest extends TomcatServlet3Test { diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchAsync.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java similarity index 96% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchAsync.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java index 08fa510d0dce..14e6bfb58482 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchAsync.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.dispatch; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; @@ -18,7 +18,7 @@ import javax.servlet.Servlet; import org.apache.catalina.Context; -public class TomcatServlet3TestDispatchAsync extends TomcatDispatchTest { +public class TomcatServlet3TestDispatchAsyncTest extends TomcatDispatchTest { @Override public Class servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchImmediate.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java similarity index 96% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchImmediate.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java index ebc28b27f925..ca8f215beb28 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestDispatchImmediate.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.dispatch; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; @@ -19,7 +19,7 @@ import javax.servlet.Servlet; import org.apache.catalina.Context; -public class TomcatServlet3TestDispatchImmediate extends TomcatDispatchTest { +public class TomcatServlet3TestDispatchImmediateTest extends TomcatDispatchTest { @Override public Class servlet() { return TestServlet3.Sync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestForward.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java similarity index 93% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestForward.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java index 8dc4c85b9aed..b0ddaa33c08d 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestForward.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.dispatch; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; @@ -16,11 +16,11 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; -import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.RequestDispatcherServlet; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.RequestDispatcherServlet; import javax.servlet.Servlet; import org.apache.catalina.Context; -public class TomcatServlet3TestForward extends TomcatDispatchTest { +public class TomcatServlet3TestForwardTest extends TomcatDispatchTest { @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestInclude.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java similarity index 93% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestInclude.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java index 808e4edf4e15..7de8e1e52629 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/dispatch/TomcatServlet3TestInclude.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.dispatch; +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.dispatch; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; @@ -15,11 +15,11 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; -import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.RequestDispatcherServlet; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.RequestDispatcherServlet; import javax.servlet.Servlet; import org.apache.catalina.Context; -public class TomcatServlet3TestInclude extends TomcatDispatchTest { +public class TomcatServlet3TestIncludeTest extends TomcatDispatchTest { @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet From 39d794830e1e8afdb4e501ca5687a29ed94de377 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 15 Aug 2024 10:42:27 +0200 Subject: [PATCH 05/43] convert servlet 3.0 tests to java --- .../groovy/HttpServletResponseTest.groovy | 324 ------------------ .../src/test/groovy/JettyServlet3Test.groovy | 294 ---------------- .../groovy/JettyServletHandlerTest.groovy | 98 ------ .../src/test/groovy/TestServlet3.groovy | 292 ---------------- .../servlet/v3_0/AbstractServlet3Test.java | 8 +- .../servlet/v3_0/HttpServletResponseTest.java | 297 ++++++++++++++++ .../servlet/v3_0/jetty/JettyServlet3Test.java | 107 ++++++ .../jetty/JettyServlet3TestAsyncTest.java | 26 ++ .../jetty/JettyServlet3TestFakeAsyncTest.java | 16 + .../v3_0/jetty/JettyServlet3TestSyncTest.java | 16 + .../v3_0/jetty/JettyServletHandlerTest.java | 103 ++++++ .../jetty/dispatch/JettyDispatchTest.java | 18 + .../JettyServlet3TestDispatchAsyncTest.java | 59 ++++ ...ettyServlet3TestDispatchImmediateTest.java | 57 +++ .../JettyServlet3TestForwardTest.java | 56 +++ .../JettyServlet3TestIncludeTest.java | 62 ++++ .../servlet/v3_0/tomcat/TestServlet3.java | 314 +++++++++++++++++ .../v3_0/tomcat/TomcatServlet3Test.java | 6 +- ...mcatServlet3TestDispatchImmediateTest.java | 1 + 19 files changed, 1142 insertions(+), 1012 deletions(-) delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/HttpServletResponseTest.groovy delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3Test.groovy delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServletHandlerTest.groovy delete mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TestServlet3.groovy create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestAsyncTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestFakeAsyncTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestSyncTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchAsyncTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchImmediateTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestForwardTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestIncludeTest.java create mode 100644 instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/HttpServletResponseTest.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/HttpServletResponseTest.groovy deleted file mode 100644 index bb5f494a35e7..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/HttpServletResponseTest.groovy +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.api.trace.SpanKind -import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification -import io.opentelemetry.semconv.incubating.CodeIncubatingAttributes - -import javax.servlet.http.HttpServlet -import spock.lang.Subject - -import javax.servlet.ServletOutputStream -import javax.servlet.ServletRequest -import javax.servlet.ServletResponse -import javax.servlet.http.Cookie -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse - -import static io.opentelemetry.api.trace.StatusCode.ERROR -import static java.util.Collections.emptyEnumeration - -class HttpServletResponseTest extends AgentInstrumentationSpecification { - - @Subject - def response = new TestResponse() - def request = Mock(HttpServletRequest) { - getMethod() >> "GET" - getProtocol() >> "TEST" - getHeaderNames() >> emptyEnumeration() - getAttributeNames() >> emptyEnumeration() - } - - def setup() { - def servlet = new HttpServlet() {} - // We need to call service so HttpServletAdvice can link the request to the response. - servlet.service((ServletRequest) request, (ServletResponse) response) - clearExportedData() - } - - def "test send no-parent"() { - when: - response.sendError(0) - response.sendError(0, "") - response.sendRedirect("") - - then: - assertTraces(0) {} - } - - def "test send with parent"() { - when: - runWithSpan("parent") { - response.sendError(0) - response.sendError(0, "") - response.sendRedirect("") - } - - then: - assertTraces(1) { - trace(0, 4) { - span(0) { - name "parent" - kind SpanKind.INTERNAL - hasNoParent() - } - span(1) { - name "TestResponse.sendError" - childOf span(0) - attributes { - "$CodeIncubatingAttributes.CODE_NAMESPACE" TestResponse.name - "$CodeIncubatingAttributes.CODE_FUNCTION" "sendError" - } - } - span(2) { - name "TestResponse.sendError" - childOf span(0) - attributes { - "$CodeIncubatingAttributes.CODE_NAMESPACE" TestResponse.name - "$CodeIncubatingAttributes.CODE_FUNCTION" "sendError" - } - } - span(3) { - name "TestResponse.sendRedirect" - childOf span(0) - attributes { - "$CodeIncubatingAttributes.CODE_NAMESPACE" TestResponse.name - "$CodeIncubatingAttributes.CODE_FUNCTION" "sendRedirect" - } - } - } - } - } - - def "test send with exception"() { - setup: - def ex = new Exception("some error") - def response = new TestResponse() { - @Override - void sendRedirect(String s) { - throw ex - } - } - def servlet = new HttpServlet() {} - // We need to call service so HttpServletAdvice can link the request to the response. - servlet.service((ServletRequest) request, (ServletResponse) response) - clearExportedData() - - when: - runWithSpan("parent") { - response.sendRedirect("") - } - - then: - def th = thrown(Exception) - th == ex - - assertTraces(1) { - trace(0, 2) { - span(0) { - name "parent" - kind SpanKind.INTERNAL - hasNoParent() - status ERROR - errorEvent(ex.class, ex.message) - } - span(1) { - name 'HttpServletResponseTest$2.sendRedirect' - childOf span(0) - status ERROR - errorEvent(ex.class, ex.message) - } - } - } - } - - static class TestResponse implements HttpServletResponse { - - @Override - void addCookie(Cookie cookie) { - - } - - @Override - boolean containsHeader(String s) { - return false - } - - @Override - String encodeURL(String s) { - return null - } - - @Override - String encodeRedirectURL(String s) { - return null - } - - @Override - String encodeUrl(String s) { - return null - } - - @Override - String encodeRedirectUrl(String s) { - return null - } - - @Override - void sendError(int i, String s) throws IOException { - - } - - @Override - void sendError(int i) throws IOException { - - } - - @Override - void sendRedirect(String s) throws IOException { - - } - - @Override - void setDateHeader(String s, long l) { - - } - - @Override - void addDateHeader(String s, long l) { - - } - - @Override - void setHeader(String s, String s1) { - - } - - @Override - void addHeader(String s, String s1) { - - } - - @Override - void setIntHeader(String s, int i) { - - } - - @Override - void addIntHeader(String s, int i) { - - } - - @Override - void setStatus(int i) { - - } - - @Override - void setStatus(int i, String s) { - - } - - @Override - int getStatus() { - return 0 - } - - @Override - String getHeader(String s) { - return null - } - - @Override - Collection getHeaders(String s) { - return null - } - - @Override - Collection getHeaderNames() { - return null - } - - @Override - String getCharacterEncoding() { - return null - } - - @Override - String getContentType() { - return null - } - - @Override - ServletOutputStream getOutputStream() throws IOException { - return null - } - - @Override - PrintWriter getWriter() throws IOException { - return null - } - - @Override - void setCharacterEncoding(String charset) { - - } - - @Override - void setContentLength(int i) { - - } - - @Override - void setContentLengthLong(long l) { - - } - - @Override - void setContentType(String s) { - - } - - @Override - void setBufferSize(int i) { - - } - - @Override - int getBufferSize() { - return 0 - } - - @Override - void flushBuffer() throws IOException { - - } - - @Override - void resetBuffer() { - - } - - @Override - boolean isCommitted() { - return false - } - - @Override - void reset() { - - } - - @Override - void setLocale(Locale locale) { - - } - - @Override - Locale getLocale() { - return null - } - } -} 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 deleted file mode 100644 index 514ee11a1637..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServlet3Test.groovy +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.instrumentation.test.asserts.TraceAssert -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint -import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test -import org.eclipse.jetty.server.Server -import org.eclipse.jetty.server.handler.ErrorHandler -import org.eclipse.jetty.servlet.ServletContextHandler - -import javax.servlet.Servlet -import javax.servlet.ServletException -import javax.servlet.http.HttpServletRequest - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS - -abstract class JettyServlet3Test extends AbstractServlet3Test { - - private static final boolean IS_BEFORE_94 = isBefore94() - - static isBefore94() { - def version = Server.getVersion().split("\\.") - def major = Integer.parseInt(version[0]) - def minor = Integer.parseInt(version[1]) - return major < 9 || (major == 9 && minor < 4) - } - - @Override - boolean testNotFound() { - false - } - - @Override - Throwable expectedException() { - new ServletException(EXCEPTION.body) - } - - boolean isAsyncTest() { - false - } - - @Override - boolean hasResponseSpan(ServerEndpoint endpoint) { - return (IS_BEFORE_94 && endpoint == EXCEPTION && !isAsyncTest()) || super.hasResponseSpan(endpoint) - } - - @Override - void responseSpan(TraceAssert trace, int index, Object controllerSpan, Object handlerSpan, String method, ServerEndpoint endpoint) { - if (IS_BEFORE_94 && endpoint == EXCEPTION) { - sendErrorSpan(trace, index, handlerSpan) - } - super.responseSpan(trace, index, controllerSpan, handlerSpan, method, endpoint) - } - - @Override - Server startServer(int port) { - def jettyServer = new Server(port) - jettyServer.connectors.each { - it.setHost('localhost') - } - - ServletContextHandler servletContext = new ServletContextHandler(null, contextPath) - servletContext.errorHandler = new ErrorHandler() { - protected void handleErrorPage(HttpServletRequest request, Writer writer, int code, String message) throws IOException { - Throwable th = (Throwable) request.getAttribute("javax.servlet.error.exception") - writer.write(th ? th.message : message) - } - } -// setupAuthentication(jettyServer, servletContext) - setupServlets(servletContext) - jettyServer.setHandler(servletContext) - - jettyServer.start() - - return jettyServer - } - - @Override - void stopServer(Server server) { - server.stop() - server.destroy() - } - - @Override - String getContextPath() { - return "/jetty-context" - } - - @Override - void addServlet(ServletContextHandler servletContext, String path, Class servlet) { - servletContext.addServlet(servlet, path) - } - - // FIXME: Add authentication tests back in... -// static setupAuthentication(Server jettyServer, ServletContextHandler servletContext) { -// ConstraintSecurityHandler authConfig = new ConstraintSecurityHandler() -// -// Constraint constraint = new Constraint() -// constraint.setName("auth") -// constraint.setAuthenticate(true) -// constraint.setRoles("role") -// -// ConstraintMapping mapping = new ConstraintMapping() -// mapping.setPathSpec("/auth/*") -// mapping.setConstraint(constraint) -// -// authConfig.setConstraintMappings(mapping) -// authConfig.setAuthenticator(new BasicAuthenticator()) -// -// LoginService loginService = new HashLoginService("TestRealm", -// "src/test/resources/realm.properties") -// authConfig.setLoginService(loginService) -// jettyServer.addBean(loginService) -// -// servletContext.setSecurityHandler(authConfig) -// } -} - -class JettyServlet3TestSync extends JettyServlet3Test { - - @Override - Class servlet() { - TestServlet3.Sync - } -} - -class JettyServlet3TestAsync extends JettyServlet3Test { - - @Override - Class servlet() { - TestServlet3.Async - } - - @Override - boolean errorEndpointUsesSendError() { - false - } - - @Override - boolean isAsyncTest() { - true - } -} - -class JettyServlet3TestFakeAsync extends JettyServlet3Test { - - @Override - Class servlet() { - TestServlet3.FakeAsync - } -} - -class JettyServlet3TestForward extends JettyDispatchTest { - @Override - Class servlet() { - TestServlet3.Sync // dispatch to sync servlet - } - - @Override - protected void setupServlets(ServletContextHandler context) { - super.setupServlets(context) - - addServlet(context, "/dispatch" + SUCCESS.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + HTML_PRINT_WRITER.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + QUERY_PARAM.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + REDIRECT.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + ERROR.path, RequestDispatcherServlet.Forward) - 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" + CAPTURE_PARAMETERS.path, RequestDispatcherServlet.Forward) - addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Forward) - } -} - -class JettyServlet3TestInclude extends JettyDispatchTest { - @Override - Class servlet() { - TestServlet3.Sync // dispatch to sync servlet - } - - @Override - boolean testRedirect() { - false - } - - @Override - boolean testCapturedHttpHeaders() { - false - } - - @Override - boolean testError() { - false - } - - @Override - protected void setupServlets(ServletContextHandler context) { - super.setupServlets(context) - - addServlet(context, "/dispatch" + SUCCESS.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + HTML_PRINT_WRITER.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + QUERY_PARAM.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + REDIRECT.path, RequestDispatcherServlet.Include) - 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" + CAPTURE_PARAMETERS.path, RequestDispatcherServlet.Include) - addServlet(context, "/dispatch" + INDEXED_CHILD.path, RequestDispatcherServlet.Include) - } -} - - -class JettyServlet3TestDispatchImmediate extends JettyDispatchTest { - @Override - Class servlet() { - TestServlet3.Sync - } - - @Override - boolean isAsyncTest() { - true - } - - @Override - protected void setupServlets(ServletContextHandler context) { - super.setupServlets(context) - addServlet(context, "/dispatch" + HTML_PRINT_WRITER.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + SUCCESS.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + QUERY_PARAM.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + ERROR.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + EXCEPTION.path, TestServlet3.DispatchImmediate) - 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" + CAPTURE_PARAMETERS.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet3.DispatchImmediate) - addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive) - } -} - -class JettyServlet3TestDispatchAsync extends JettyDispatchTest { - @Override - Class servlet() { - TestServlet3.Async - } - - @Override - boolean isAsyncTest() { - true - } - - @Override - protected void setupServlets(ServletContextHandler context) { - super.setupServlets(context) - addServlet(context, "/dispatch" + HTML_PRINT_WRITER.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + SUCCESS.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + QUERY_PARAM.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + ERROR.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + EXCEPTION.path, TestServlet3.DispatchAsync) - 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" + CAPTURE_PARAMETERS.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch" + INDEXED_CHILD.path, TestServlet3.DispatchAsync) - addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive) - } - - @Override - boolean errorEndpointUsesSendError() { - false - } -} - -abstract class JettyDispatchTest extends JettyServlet3Test { - @Override - URI buildAddress() { - return new URI("http://localhost:$port$contextPath/dispatch/") - } -} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServletHandlerTest.groovy b/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServletHandlerTest.groovy deleted file mode 100644 index 63c5aa4eefdc..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/JettyServletHandlerTest.groovy +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.api.common.AttributeKey -import io.opentelemetry.instrumentation.test.asserts.TraceAssert -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint -import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test -import io.opentelemetry.semconv.HttpAttributes -import org.eclipse.jetty.server.Server -import org.eclipse.jetty.server.handler.ErrorHandler -import org.eclipse.jetty.servlet.ServletHandler - -import javax.servlet.Servlet -import javax.servlet.ServletException -import javax.servlet.http.HttpServletRequest - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION - -class JettyServletHandlerTest extends AbstractServlet3Test { - - private static final boolean IS_BEFORE_94 = isBefore94() - - static isBefore94() { - def version = Server.getVersion().split("\\.") - def major = Integer.parseInt(version[0]) - def minor = Integer.parseInt(version[1]) - return major < 9 || (major == 9 && minor < 4) - } - - @Override - boolean hasResponseSpan(ServerEndpoint endpoint) { - return (IS_BEFORE_94 && endpoint == EXCEPTION) || super.hasResponseSpan(endpoint) - } - - @Override - void responseSpan(TraceAssert trace, int index, Object controllerSpan, Object handlerSpan, String method, ServerEndpoint endpoint) { - if (IS_BEFORE_94 && endpoint == EXCEPTION) { - sendErrorSpan(trace, index, handlerSpan) - } - super.responseSpan(trace, index, controllerSpan, handlerSpan, method, endpoint) - } - - @Override - Set> httpAttributes(ServerEndpoint endpoint) { - def attributes = super.httpAttributes(endpoint) - attributes.remove(HttpAttributes.HTTP_ROUTE) - attributes - } - - @Override - Server startServer(int port) { - Server server = new Server(port) - ServletHandler handler = new ServletHandler() - server.setHandler(handler) - setupServlets(handler) - server.addBean(new ErrorHandler() { - protected void handleErrorPage(HttpServletRequest request, Writer writer, int code, String message) throws IOException { - Throwable th = (Throwable) request.getAttribute("javax.servlet.error.exception") - writer.write(th ? th.message : message) - } - }) - server.start() - return server - } - - @Override - void addServlet(ServletHandler servletHandler, String path, Class servlet) { - servletHandler.addServletWithMapping(servlet, path) - } - - @Override - void stopServer(Server server) { - server.stop() - server.destroy() - } - - @Override - String getContextPath() { - "" - } - - @Override - Class servlet() { - TestServlet3.Sync - } - - @Override - boolean testNotFound() { - false - } - - @Override - Throwable expectedException() { - new ServletException(EXCEPTION.body) - } -} 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 deleted file mode 100644 index 9183dbfb5b2e..000000000000 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/groovy/TestServlet3.groovy +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.instrumentation.test.base.HttpServerTest -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint -import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test - -import javax.servlet.RequestDispatcher -import javax.servlet.ServletException -import javax.servlet.annotation.WebServlet -import javax.servlet.http.HttpServlet -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse -import java.util.concurrent.CountDownLatch - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS - -class TestServlet3 { - - @WebServlet - static class Sync extends HttpServlet { - @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) { - String servletPath = req.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH) - if (servletPath == null) { - servletPath = req.servletPath - } - ServerEndpoint endpoint = ServerEndpoint.forPath(servletPath) - HttpServerTest.controller(endpoint) { - resp.contentType = "text/plain" - switch (endpoint) { - case SUCCESS: - resp.status = endpoint.status - resp.writer.print(endpoint.body) - break - case INDEXED_CHILD: - resp.status = endpoint.status - endpoint.collectSpanAttributes { req.getParameter(it) } - break - case QUERY_PARAM: - resp.status = endpoint.status - resp.writer.print(req.queryString) - break - case REDIRECT: - resp.sendRedirect(endpoint.body) - break - case CAPTURE_HEADERS: - resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")) - resp.status = endpoint.status - resp.writer.print(endpoint.body) - break - case CAPTURE_PARAMETERS: - req.setCharacterEncoding("UTF8") - def value = req.getParameter("test-parameter") - if (value != "test value õäöü") { - throw new ServletException("request parameter does not have expected value " + value) - } - resp.status = endpoint.status - resp.writer.print(endpoint.body) - break - case ERROR: - resp.sendError(endpoint.status, endpoint.body) - break - case EXCEPTION: - throw new ServletException(endpoint.body) - case AbstractServlet3Test.HTML_PRINT_WRITER: - resp.contentType = "text/html" - resp.status = endpoint.status - resp.setContentLengthLong(endpoint.body.length()) - resp.writer.print(endpoint.body) - break - case AbstractServlet3Test.HTML_SERVLET_OUTPUT_STREAM: - resp.contentType = "text/html" - resp.status = endpoint.status - resp.setContentLength(endpoint.body.length()) - byte[] body = endpoint.body.getBytes() - resp.getOutputStream().write(body, 0, body.length) - break - } - } - } - } - - @WebServlet(asyncSupported = true) - static class Async extends HttpServlet { - @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) { - ServerEndpoint endpoint = ServerEndpoint.forPath(req.servletPath) - def latch = new CountDownLatch(1) - def context = req.startAsync() - if (endpoint == EXCEPTION) { - context.setTimeout(5000) - } - context.start { - try { - HttpServerTest.controller(endpoint) { - resp.contentType = "text/plain" - switch (endpoint) { - case SUCCESS: - resp.status = endpoint.status - resp.writer.print(endpoint.body) - context.complete() - break - case INDEXED_CHILD: - endpoint.collectSpanAttributes { req.getParameter(it) } - resp.status = endpoint.status - context.complete() - break - case QUERY_PARAM: - resp.status = endpoint.status - resp.writer.print(req.queryString) - context.complete() - break - case REDIRECT: - resp.sendRedirect(endpoint.body) - context.complete() - break - case CAPTURE_HEADERS: - resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")) - resp.status = endpoint.status - resp.writer.print(endpoint.body) - context.complete() - break - case CAPTURE_PARAMETERS: - req.setCharacterEncoding("UTF8") - def value = req.getParameter("test-parameter") - if (value != "test value õäöü") { - throw new ServletException("request parameter does not have expected value " + value) - } - resp.status = endpoint.status - resp.writer.print(endpoint.body) - context.complete() - break - case ERROR: - resp.status = endpoint.status - resp.writer.print(endpoint.body) -// resp.sendError(endpoint.status, endpoint.body) - context.complete() - break - case EXCEPTION: - resp.status = endpoint.status - def writer = resp.writer - writer.print(endpoint.body) - if (req.getClass().getName().contains("catalina")) { - // on tomcat close the writer to ensure response is sent immediately, otherwise - // there is a chance that tomcat resets the connection before the response is sent - writer.close() - } - throw new ServletException(endpoint.body) - break - case AbstractServlet3Test.HTML_PRINT_WRITER: - resp.contentType = "text/html" - resp.status = endpoint.status - resp.setContentLength(endpoint.body.length()) - resp.writer.print(endpoint.body) - context.complete() - break - case AbstractServlet3Test.HTML_SERVLET_OUTPUT_STREAM: - resp.contentType = "text/html" - resp.status = endpoint.status - resp.getOutputStream().print(endpoint.body) - context.complete() - break - } - } - } finally { - latch.countDown() - } - } - latch.await() - } - } - - @WebServlet(asyncSupported = true) - static class FakeAsync extends HttpServlet { - @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) { - def context = req.startAsync() - try { - ServerEndpoint endpoint = ServerEndpoint.forPath(req.servletPath) - HttpServerTest.controller(endpoint) { - resp.contentType = "text/plain" - switch (endpoint) { - case SUCCESS: - resp.status = endpoint.status - resp.writer.print(endpoint.body) - break - case INDEXED_CHILD: - endpoint.collectSpanAttributes { req.getParameter(it) } - resp.status = endpoint.status - break - case QUERY_PARAM: - resp.status = endpoint.status - resp.writer.print(req.queryString) - break - case REDIRECT: - resp.sendRedirect(endpoint.body) - break - case CAPTURE_HEADERS: - resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")) - resp.status = endpoint.status - resp.writer.print(endpoint.body) - break - case CAPTURE_PARAMETERS: - req.setCharacterEncoding("UTF8") - def value = req.getParameter("test-parameter") - if (value != "test value õäöü") { - throw new ServletException("request parameter does not have expected value " + value) - } - resp.status = endpoint.status - resp.writer.print(endpoint.body) - break - case ERROR: - resp.sendError(endpoint.status, endpoint.body) - break - case EXCEPTION: - resp.status = endpoint.status - resp.writer.print(endpoint.body) - throw new ServletException(endpoint.body) - case AbstractServlet3Test.HTML_PRINT_WRITER: - // intentionally testing setting status before contentType here to cover that case somewhere - resp.status = endpoint.status - resp.contentType = "text/html" - resp.writer.print(endpoint.body) - break - case AbstractServlet3Test.HTML_SERVLET_OUTPUT_STREAM: - resp.contentType = "text/html" - resp.status = endpoint.status - resp.getOutputStream().print(endpoint.body) - break - } - } - } finally { - context.complete() - } - } - } - - @WebServlet(asyncSupported = true) - static class DispatchImmediate extends HttpServlet { - @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) - } - } - - @WebServlet(asyncSupported = true) - static class DispatchAsync extends HttpServlet { - @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) - } - } - } - - // TODO: Add tests for this! - @WebServlet(asyncSupported = true) - static class DispatchRecursive extends HttpServlet { - @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) { - if (req.servletPath.equals("/recursive")) { - resp.writer.print("Hello Recursive") - return - } - def depth = Integer.parseInt(req.getParameter("depth")) - if (depth > 0) { - req.startAsync().dispatch("/dispatch/recursive?depth=" + (depth - 1)) - } else { - req.startAsync().dispatch("/recursive") - } - } - } -} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index da2a685625c2..7e186b914f31 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -76,9 +76,11 @@ protected void configure(HttpServerTestOptions options) { super.configure(options); options.setTestCaptureRequestParameters(true); options.setHasResponseCustomizer(e -> true); - options.setHasResponseSpan( - endpoint -> - endpoint.equals(REDIRECT) || (endpoint.equals(ERROR) && errorEndpointUsesSendError())); + options.setHasResponseSpan(this::hasResponseSpan); + } + + protected boolean hasResponseSpan(ServerEndpoint endpoint) { + return endpoint.equals(REDIRECT) || (endpoint.equals(ERROR) && errorEndpointUsesSendError()); } public abstract Class servlet(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java new file mode 100644 index 000000000000..583f88b38eb8 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java @@ -0,0 +1,297 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0; + +import static io.opentelemetry.instrumentation.testing.GlobalTraceUtil.runWithSpan; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.sdk.trace.data.StatusData; +import io.opentelemetry.semconv.incubating.CodeIncubatingAttributes; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Collection; +import java.util.Collections; +import java.util.Locale; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +public class HttpServletResponseTest { + + @RegisterExtension + static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); + + private final TestResponse response = new TestResponse(); + private final HttpServletRequest request = mock(HttpServletRequest.class); + + @BeforeEach + void setUp() throws ServletException, IOException { + when(request.getMethod()).thenReturn("GET"); + when(request.getProtocol()).thenReturn("TEST"); + when(request.getHeaderNames()).thenReturn(Collections.emptyEnumeration()); + when(request.getAttributeNames()).thenReturn(Collections.emptyEnumeration()); + + HttpServlet servlet = new HttpServlet() {}; + // We need to call service so HttpServletAdvice can link the request to the response. + servlet.service(request, response); + testing.clearData(); + } + + @Test + void test_send_no_parent() throws IOException { + response.sendError(0); + response.sendError(0, ""); + response.sendRedirect(""); + + assertThat(testing.spans()).isEmpty(); + } + + @Test + void test_send_with_parent() throws IOException { + runWithSpan( + "parent", + () -> { + response.sendError(0); + response.sendError(0, ""); + response.sendRedirect(""); + }); + + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> span.hasName("parent").hasKind(SpanKind.INTERNAL).hasNoParent(), + span -> + span.hasName("TestResponse.sendError") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + CodeIncubatingAttributes.CODE_NAMESPACE, + TestResponse.class.getName()), + equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "sendError")), + span -> + span.hasName("TestResponse.sendError") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + CodeIncubatingAttributes.CODE_NAMESPACE, + TestResponse.class.getName()), + equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "sendError")), + span -> + span.hasName("TestResponse.sendRedirect") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + CodeIncubatingAttributes.CODE_NAMESPACE, + TestResponse.class.getName()), + equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "sendRedirect")))); + } + + @Test + void test_send_with_exception() throws ServletException, IOException { + RuntimeException ex = new RuntimeException("some error"); + TestResponse response = + new TestResponse() { + @Override + public void sendRedirect(String s) { + throw ex; + } + }; + HttpServlet servlet = new HttpServlet() {}; + // We need to call service so HttpServletAdvice can link the request to the response. + servlet.service(request, response); + testing.clearData(); + + assertThatCode( + () -> + runWithSpan( + "parent", + () -> { + try { + response.sendRedirect(""); + } catch (IOException e) { + throw new RuntimeException(e); + } + })) + .hasRootCause(ex); + + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("parent") + .hasKind(SpanKind.INTERNAL) + .hasNoParent() + .hasStatus(StatusData.error()) + .hasException(ex), + span -> + span.hasName("HttpServletResponseTest$2.sendRedirect") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)) + .hasStatus(StatusData.error()) + .hasException(ex))); + } + + public static class TestResponse implements HttpServletResponse { + @Override + public void addCookie(Cookie cookie) {} + + @Override + public boolean containsHeader(String s) { + return false; + } + + @Override + public String encodeURL(String s) { + return null; + } + + @Override + public String encodeRedirectURL(String s) { + return null; + } + + @Override + public String encodeUrl(String s) { + return null; + } + + @Override + public String encodeRedirectUrl(String s) { + return null; + } + + @Override + public void sendError(int i, String s) {} + + @Override + public void sendError(int i) {} + + @Override + public void sendRedirect(String s) throws IOException {} + + @Override + public void setDateHeader(String s, long l) {} + + @Override + public void addDateHeader(String s, long l) {} + + @Override + public void setHeader(String s, String s1) {} + + @Override + public void addHeader(String s, String s1) {} + + @Override + public void setIntHeader(String s, int i) {} + + @Override + public void addIntHeader(String s, int i) {} + + @Override + public void setStatus(int i) {} + + @Override + public void setStatus(int i, String s) {} + + @Override + public int getStatus() { + return 0; + } + + @Override + public String getHeader(String s) { + return null; + } + + @Override + public Collection getHeaders(String s) { + return null; + } + + @Override + public Collection getHeaderNames() { + return null; + } + + @Override + public String getCharacterEncoding() { + return null; + } + + @Override + public String getContentType() { + return null; + } + + @Override + public ServletOutputStream getOutputStream() { + return null; + } + + @Override + public PrintWriter getWriter() { + return null; + } + + @Override + public void setCharacterEncoding(String charset) {} + + @Override + public void setContentLength(int i) {} + + @Override + public void setContentLengthLong(long l) {} + + @Override + public void setContentType(String s) {} + + @Override + public void setBufferSize(int i) {} + + @Override + public int getBufferSize() { + return 0; + } + + @Override + public void flushBuffer() {} + + @Override + public void resetBuffer() {} + + @Override + public boolean isCommitted() { + return false; + } + + @Override + public void reset() {} + + @Override + public void setLocale(Locale locale) {} + + @Override + public Locale getLocale() { + return null; + } + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java new file mode 100644 index 000000000000..acca01945af3 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -0,0 +1,107 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; + +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; +import io.opentelemetry.sdk.trace.data.SpanData; +import java.io.IOException; +import java.io.Writer; +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import org.codehaus.groovy.runtime.DefaultGroovyMethods; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.ErrorHandler; +import org.eclipse.jetty.servlet.ServletContextHandler; + +public abstract class JettyServlet3Test + extends AbstractServlet3Test { + + static final boolean IS_BEFORE_94 = isBefore94(); + + public static boolean isBefore94() { + String[] version = Server.getVersion().split("\\."); + int major = Integer.parseInt(version[0]); + int minor = Integer.parseInt(version[1]); + return major < 9 || (major == 9 && minor < 4); + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setTestNotFound(false); + options.setExpectedException(new ServletException(EXCEPTION.getBody())); + options.setContextPath("/jetty-context"); + } + + @Override + protected boolean hasResponseSpan(ServerEndpoint endpoint) { + return (IS_BEFORE_94 && endpoint == EXCEPTION && !isAsyncTest()) + || super.hasResponseSpan(endpoint); + } + + public boolean isAsyncTest() { + return false; + } + + @Override + protected SpanDataAssert assertResponseSpan( + SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { + if (IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { + span.satisfies(it -> assertThat(it.getName()).matches("\\.sendError$")) + .hasKind(SpanKind.INTERNAL) + .hasParent(parentSpan); + } + + return super.assertResponseSpan(span, parentSpan, method, endpoint); + } + + @Override + protected Server setupServer() throws Exception { + Server jettyServer = new Server(port); + + for (Connector connector : jettyServer.getConnectors()) { + connector.setHost("localhost"); + } + + ServletContextHandler servletContext = new ServletContextHandler(null, getContextPath()); + servletContext.setErrorHandler( + new ErrorHandler() { + protected void handleErrorPage( + HttpServletRequest request, Writer writer, int code, String message) + throws IOException { + Throwable th = (Throwable) request.getAttribute("javax.servlet.error.exception"); + writer.write(DefaultGroovyMethods.asBoolean(th) ? th.getMessage() : message); + } + }); + setupServlets(servletContext); + jettyServer.setHandler(servletContext); + + jettyServer.start(); + + return jettyServer; + } + + @Override + public void stopServer(Server server) throws Exception { + server.stop(); + server.destroy(); + } + + @Override + public void addServlet( + ServletContextHandler servletContext, String path, Class servlet) { + servletContext.addServlet(servlet, path); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestAsyncTest.java new file mode 100644 index 000000000000..745dcc331f3e --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestAsyncTest.java @@ -0,0 +1,26 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty; + +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; +import javax.servlet.Servlet; + +public class JettyServlet3TestAsyncTest extends JettyServlet3Test { + @Override + public Class servlet() { + return TestServlet3.Async.class; + } + + @Override + public boolean errorEndpointUsesSendError() { + return false; + } + + @Override + public boolean isAsyncTest() { + return true; + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestFakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestFakeAsyncTest.java new file mode 100644 index 000000000000..802f42f2a981 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestFakeAsyncTest.java @@ -0,0 +1,16 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty; + +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; +import javax.servlet.Servlet; + +public class JettyServlet3TestFakeAsyncTest extends JettyServlet3Test { + @Override + public Class servlet() { + return TestServlet3.FakeAsync.class; + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestSyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestSyncTest.java new file mode 100644 index 000000000000..a3b1aeb95078 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestSyncTest.java @@ -0,0 +1,16 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty; + +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; +import javax.servlet.Servlet; + +public class JettyServlet3TestSyncTest extends JettyServlet3Test { + @Override + public Class servlet() { + return TestServlet3.Sync.class; + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java new file mode 100644 index 000000000000..d5a25152320a --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -0,0 +1,103 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.semconv.HttpAttributes; +import java.io.IOException; +import java.io.Writer; +import java.util.HashSet; +import java.util.Set; +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import org.codehaus.groovy.runtime.DefaultGroovyMethods; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.ErrorHandler; +import org.eclipse.jetty.servlet.ServletHandler; + +public class JettyServletHandlerTest extends AbstractServlet3Test { + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setHttpAttributes( + serverEndpoint -> { + Set> attributes = + new HashSet<>(HttpServerTestOptions.DEFAULT_HTTP_ATTRIBUTES); + attributes.remove(HttpAttributes.HTTP_ROUTE); + return attributes; + }); + options.setContextPath(""); + options.setTestNotFound(false); + options.setExpectedException(new ServletException(EXCEPTION.getBody())); + } + + @Override + public boolean hasResponseSpan(ServerEndpoint endpoint) { + return (JettyServlet3Test.IS_BEFORE_94 && endpoint.equals(EXCEPTION)) + || super.hasResponseSpan(endpoint); + } + + @Override + protected SpanDataAssert assertResponseSpan( + SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { + + if (JettyServlet3Test.IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { + span.satisfies(it -> assertThat(it.getName()).matches("\\.sendError$")) + .hasKind(SpanKind.INTERNAL) + .hasParent(parentSpan); + } + + return super.assertResponseSpan(span, parentSpan, method, endpoint); + } + + @Override + protected Server setupServer() throws Exception { + Server server = new Server(port); + ServletHandler handler = new ServletHandler(); + server.setHandler(handler); + setupServlets(handler); + server.addBean( + new ErrorHandler() { + protected void handleErrorPage( + HttpServletRequest request, Writer writer, int code, String message) + throws IOException { + Throwable th = (Throwable) request.getAttribute("javax.servlet.error.exception"); + writer.write(DefaultGroovyMethods.asBoolean(th) ? th.getMessage() : message); + } + }); + server.start(); + return server; + } + + @Override + public void addServlet( + ServletHandler servletHandler, String path, Class servlet) { + servletHandler.addServletWithMapping(servlet, path); + } + + @Override + public void stopServer(Server server) throws Exception { + server.stop(); + server.destroy(); + } + + @Override + public Class servlet() { + return TestServlet3.Sync.class; + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java new file mode 100644 index 000000000000..c32d0dc0f3f7 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java @@ -0,0 +1,18 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty.dispatch; + +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty.JettyServlet3Test; + +public abstract class JettyDispatchTest extends JettyServlet3Test { + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setContextPath(getContextPath() + "/dispatch/"); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchAsyncTest.java new file mode 100644 index 000000000000..2d36786e5e87 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchAsyncTest.java @@ -0,0 +1,59 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty.dispatch; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; +import javax.servlet.Servlet; +import org.eclipse.jetty.servlet.ServletContextHandler; + +public class JettyServlet3TestDispatchAsyncTest extends JettyDispatchTest { + @Override + public Class servlet() { + return TestServlet3.Async.class; + } + + @Override + public boolean isAsyncTest() { + return true; + } + + @Override + protected void setupServlets(ServletContextHandler context) { + super.setupServlets(context); + addServlet( + context, "/dispatch" + HTML_PRINT_WRITER.getPath(), TestServlet3.DispatchAsync.class); + addServlet( + context, + "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.getPath(), + TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + SUCCESS.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + QUERY_PARAM.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + ERROR.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + EXCEPTION.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + REDIRECT.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + AUTH_REQUIRED.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + CAPTURE_HEADERS.getPath(), TestServlet3.DispatchAsync.class); + addServlet( + context, "/dispatch" + CAPTURE_PARAMETERS.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch" + INDEXED_CHILD.getPath(), TestServlet3.DispatchAsync.class); + addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive.class); + } + + @Override + public boolean errorEndpointUsesSendError() { + return false; + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchImmediateTest.java new file mode 100644 index 000000000000..5939f179c3ab --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchImmediateTest.java @@ -0,0 +1,57 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty.dispatch; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; +import javax.servlet.Servlet; +import org.eclipse.jetty.servlet.ServletContextHandler; + +public class JettyServlet3TestDispatchImmediateTest extends JettyDispatchTest { + @Override + public Class servlet() { + return TestServlet3.Async.class; + } + + @Override + public boolean isAsyncTest() { + return true; + } + + @Override + protected void setupServlets(ServletContextHandler context) { + super.setupServlets(context); + addServlet( + context, "/dispatch" + HTML_PRINT_WRITER.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, + "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.getPath(), + TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch" + SUCCESS.getPath(), TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch" + QUERY_PARAM.getPath(), TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch" + ERROR.getPath(), TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch" + EXCEPTION.getPath(), TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch" + REDIRECT.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, "/dispatch" + AUTH_REQUIRED.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, "/dispatch" + CAPTURE_HEADERS.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, "/dispatch" + CAPTURE_PARAMETERS.getPath(), TestServlet3.DispatchImmediate.class); + addServlet( + context, "/dispatch" + INDEXED_CHILD.getPath(), TestServlet3.DispatchImmediate.class); + addServlet(context, "/dispatch/recursive", TestServlet3.DispatchRecursive.class); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestForwardTest.java new file mode 100644 index 000000000000..2ac1bc618497 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestForwardTest.java @@ -0,0 +1,56 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty.dispatch; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.RequestDispatcherServlet; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; +import javax.servlet.Servlet; +import org.eclipse.jetty.servlet.ServletContextHandler; + +public class JettyServlet3TestForwardTest extends JettyDispatchTest { + @Override + public Class servlet() { + return TestServlet3.Sync.class; // dispatch to sync servlet + } + + @Override + protected void setupServlets(ServletContextHandler context) { + super.setupServlets(context); + + addServlet(context, "/dispatch" + SUCCESS.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + HTML_PRINT_WRITER.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, + "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.getPath(), + RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + QUERY_PARAM.getPath(), RequestDispatcherServlet.Forward.class); + addServlet(context, "/dispatch" + REDIRECT.getPath(), RequestDispatcherServlet.Forward.class); + addServlet(context, "/dispatch" + ERROR.getPath(), RequestDispatcherServlet.Forward.class); + addServlet(context, "/dispatch" + EXCEPTION.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + AUTH_REQUIRED.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + CAPTURE_HEADERS.getPath(), RequestDispatcherServlet.Forward.class); + addServlet( + context, + "/dispatch" + CAPTURE_PARAMETERS.getPath(), + RequestDispatcherServlet.Forward.class); + addServlet( + context, "/dispatch" + INDEXED_CHILD.getPath(), RequestDispatcherServlet.Forward.class); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestIncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestIncludeTest.java new file mode 100644 index 000000000000..643165a4ed07 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestIncludeTest.java @@ -0,0 +1,62 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty.dispatch; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.AUTH_REQUIRED; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.RequestDispatcherServlet; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; +import javax.servlet.Servlet; +import org.eclipse.jetty.servlet.ServletContextHandler; + +public class JettyServlet3TestIncludeTest extends JettyDispatchTest { + @Override + public Class servlet() { + return TestServlet3.Sync.class; // dispatch to sync servlet + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setTestRedirect(false); + options.setTestCaptureHttpHeaders(false); + options.setTestError(false); + } + + @Override + protected void setupServlets(ServletContextHandler context) { + super.setupServlets(context); + + addServlet(context, "/dispatch" + SUCCESS.getPath(), RequestDispatcherServlet.Include.class); + addServlet( + context, "/dispatch" + HTML_PRINT_WRITER.getPath(), RequestDispatcherServlet.Include.class); + addServlet( + context, + "/dispatch" + HTML_SERVLET_OUTPUT_STREAM.getPath(), + RequestDispatcherServlet.Include.class); + addServlet( + context, "/dispatch" + QUERY_PARAM.getPath(), RequestDispatcherServlet.Include.class); + addServlet(context, "/dispatch" + REDIRECT.getPath(), RequestDispatcherServlet.Include.class); + addServlet(context, "/dispatch" + ERROR.getPath(), RequestDispatcherServlet.Include.class); + addServlet(context, "/dispatch" + EXCEPTION.getPath(), RequestDispatcherServlet.Include.class); + addServlet( + context, "/dispatch" + AUTH_REQUIRED.getPath(), RequestDispatcherServlet.Include.class); + addServlet( + context, + "/dispatch" + CAPTURE_PARAMETERS.getPath(), + RequestDispatcherServlet.Include.class); + addServlet( + context, "/dispatch" + INDEXED_CHILD.getPath(), RequestDispatcherServlet.Include.class); + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java new file mode 100644 index 000000000000..03a7863de10f --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java @@ -0,0 +1,314 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; + +import groovy.lang.Reference; +import io.opentelemetry.instrumentation.test.base.HttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.concurrent.CountDownLatch; +import javax.servlet.AsyncContext; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class TestServlet3 { + @WebServlet + public static class Sync extends HttpServlet { + @Override + protected void service(final HttpServletRequest req, final HttpServletResponse resp) { + String servletPath = (String) req.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH); + if (servletPath == null) { + servletPath = req.getServletPath(); + } + + final ServerEndpoint endpoint = ServerEndpoint.forPath(servletPath); + HttpServerTest.controller( + endpoint, + () -> { + resp.setContentType("text/plain"); + switch (endpoint.name()) { + case "SUCCESS": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + break; + case "INDEXED_CHILD": + endpoint.collectSpanAttributes(req::getParameter); + resp.setStatus(endpoint.getStatus()); + break; + case "QUERY_PARAM": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(req.getQueryString()); + break; + case "REDIRECT": + resp.sendRedirect(endpoint.getBody()); + break; + case "CAPTURE_HEADERS": + resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + break; + case "CAPTURE_PARAMETERS": + req.setCharacterEncoding("UTF8"); + String value = req.getParameter("test-parameter"); + if (!value.equals("test value õäöü")) { + throw new ServletException( + "request parameter does not have expected value " + value); + } + + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + break; + case "ERROR": + resp.sendError(endpoint.getStatus(), endpoint.getBody()); + break; + case "EXCEPTION": + throw new ServletException(endpoint.getBody()); + case "HTML_PRINT_WRITER": + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.setContentLength(endpoint.getBody().length()); + resp.getWriter().print(endpoint.getBody()); + break; + case "HTML_SERVLET_OUTPUT_STREAM": + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.setContentLength(endpoint.getBody().length()); + resp.getOutputStream().print(endpoint.getBody()); + break; + default: + break; + } + return null; + }); + } + } + + @WebServlet(asyncSupported = true) + public static class Async extends HttpServlet { + @Override + protected void service(final HttpServletRequest req, final HttpServletResponse resp) { + final ServerEndpoint endpoint = ServerEndpoint.forPath(req.getServletPath()); + final CountDownLatch latch = new CountDownLatch(1); + final AsyncContext context = req.startAsync(); + if (endpoint.equals(EXCEPTION)) { + context.setTimeout(5000); + } + + context.start( + () -> { + try { + HttpServerTest.controller( + endpoint, + () -> { + resp.setContentType("text/plain"); + switch (endpoint.name()) { + case "SUCCESS": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + context.complete(); + break; + case "INDEXED_CHILD": + endpoint.collectSpanAttributes(req::getParameter); + resp.setStatus(endpoint.getStatus()); + context.complete(); + break; + case "QUERY_PARAM": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(req.getQueryString()); + context.complete(); + break; + case "REDIRECT": + resp.sendRedirect(endpoint.getBody()); + context.complete(); + break; + case "CAPTURE_HEADERS": + resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + context.complete(); + break; + case "CAPTURE_PARAMETERS": + req.setCharacterEncoding("UTF8"); + String value = req.getParameter("test-parameter"); + if (!value.equals("test value õäöü")) { + throw new ServletException( + "request parameter does not have expected value " + value); + } + + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + context.complete(); + break; + case "ERROR": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + context.complete(); + break; + case "EXCEPTION": + resp.setStatus(endpoint.getStatus()); + PrintWriter writer = resp.getWriter(); + writer.print(endpoint.getBody()); + if (req.getClass().getName().contains("catalina")) { + writer.close(); + } + + throw new ServletException(endpoint.getBody()); + case "HTML_PRINT_WRITER": + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.setContentLength(endpoint.getBody().length()); + resp.getWriter().print(endpoint.getBody()); + context.complete(); + break; + case "HTML_SERVLET_OUTPUT_STREAM": + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.getOutputStream().print(endpoint.getBody()); + context.complete(); + break; + default: + break; + } + return null; + }); + } finally { + latch.countDown(); + } + }); + } + } + + @WebServlet(asyncSupported = true) + public static class FakeAsync extends HttpServlet { + @Override + protected void service(final HttpServletRequest req, final HttpServletResponse resp) { + AsyncContext context = req.startAsync(); + try { + ServerEndpoint endpoint = ServerEndpoint.forPath(req.getServletPath()); + + HttpServerTest.controller( + endpoint, + () -> { + resp.setContentType("text/plain"); + switch (endpoint.name()) { + case "SUCCESS": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + break; + case "INDEXED_CHILD": + endpoint.collectSpanAttributes(req::getParameter); + resp.setStatus(endpoint.getStatus()); + break; + case "QUERY_PARAM": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(req.getQueryString()); + break; + case "REDIRECT": + resp.sendRedirect(endpoint.getBody()); + break; + case "CAPTURE_HEADERS": + resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + break; + case "CAPTURE_PARAMETERS": + req.setCharacterEncoding("UTF8"); + String value = req.getParameter("test-parameter"); + if (!value.equals("test value õäöü")) { + throw new ServletException( + "request parameter does not have expected value " + value); + } + + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + break; + case "ERROR": + resp.sendError(endpoint.getStatus(), endpoint.getBody()); + break; + case "EXCEPTION": + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + throw new ServletException(endpoint.getBody()); + case "HTML_PRINT_WRITER": + // intentionally testing setting status before contentType here to cover that case + // somewhere + resp.setStatus(endpoint.getStatus()); + resp.setContentType("text/html"); + resp.getWriter().print(endpoint.getBody()); + break; + case "HTML_SERVLET_OUTPUT_STREAM": + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.getOutputStream().print(endpoint.getBody()); + break; + } + return null; + }); + } finally { + context.complete(); + } + } + } + + @WebServlet(asyncSupported = true) + public static class DispatchImmediate extends HttpServlet { + @Override + protected void service(HttpServletRequest req, HttpServletResponse resp) { + String target = req.getServletPath().replace("/dispatch", ""); + if (req.getQueryString() != null) { + target += "?" + req.getQueryString(); + } + + req.startAsync().dispatch(target); + } + } + + @WebServlet(asyncSupported = true) + public static class DispatchAsync extends HttpServlet { + @Override + protected void service(HttpServletRequest req, HttpServletResponse resp) { + Reference target = + new Reference(req.getServletPath().replace("/dispatch", "")); + if (req.getQueryString() != null) { + target.set(target.get() + "?" + req.getQueryString()); + } + + AsyncContext context = req.startAsync(); + context.start( + () -> { + context.dispatch(target.get()); + }); + } + } + + @WebServlet(asyncSupported = true) + public static class DispatchRecursive extends HttpServlet { + @Override + protected void service(HttpServletRequest req, HttpServletResponse resp) { + if (req.getServletPath().equals("/recursive")) { + try { + resp.getWriter().print("Hello Recursive"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + int depth = Integer.parseInt(req.getParameter("depth")); + if (depth > 0) { + req.startAsync().dispatch("/dispatch/recursive?depth=" + (depth - 1)); + } else { + req.startAsync().dispatch("/recursive"); + } + } + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index 0c9a2a12a26f..45e63f08d329 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -66,7 +66,6 @@ public abstract class TomcatServlet3Test extends AbstractServlet3Test e.equals(NOT_FOUND)); options.setContextPath("/tomcat-context"); options.setTestError(testError()); } @@ -86,6 +85,11 @@ protected SpanDataAssert assertResponseSpan( return super.assertResponseSpan(span, parentSpan, method, endpoint); } + @Override + protected boolean hasResponseSpan(ServerEndpoint endpoint) { + return endpoint == NOT_FOUND || super.hasResponseSpan(endpoint); + } + @Override protected Tomcat setupServer() throws Exception { Tomcat tomcatServer = new Tomcat(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java index ca8f215beb28..8cfeba82bb8b 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java @@ -16,6 +16,7 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; import org.apache.catalina.Context; From 4809e5e2f6ec724d5c9f89105f894f770bbe6e7a Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 15 Aug 2024 10:53:39 +0200 Subject: [PATCH 06/43] convert servlet 3.0 tests to java --- .../servlet/v2_2/JettyServlet2Test.java | 18 +++++++--------- .../servlet/v3_0/AbstractServlet3Test.java | 21 +++++++++---------- .../servlet/v3_0/HttpServletResponseTest.java | 2 ++ .../servlet/v3_0/jetty/JettyServlet3Test.java | 3 +-- .../v3_0/jetty/JettyServletHandlerTest.java | 3 +-- .../v3_0/tomcat/ErrorHandlerValve.java | 8 +------ .../servlet/v3_0/tomcat/TestServlet3.java | 8 +++---- .../v3_0/tomcat/TomcatServlet3Test.java | 9 +++----- .../TomcatServlet3TestDispatchAsyncTest.java | 1 + .../TomcatServlet3TestForwardTest.java | 1 + .../TomcatServlet3TestIncludeTest.java | 1 + 11 files changed, 32 insertions(+), 43 deletions(-) diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java index 9d20865be132..67a5e8bd0464 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java @@ -10,8 +10,6 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND; -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.PATH_PARAM; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; @@ -31,7 +29,6 @@ import java.util.HashSet; import javax.annotation.Nullable; import javax.servlet.http.HttpServletRequest; -import org.codehaus.groovy.runtime.DefaultGroovyMethods; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Response; import org.eclipse.jetty.server.Server; @@ -61,7 +58,7 @@ protected void handleErrorPage( HttpServletRequest request, Writer writer, int code, String message) throws IOException { Throwable th = (Throwable) request.getAttribute("javax.servlet.error.exception"); - writer.write(DefaultGroovyMethods.asBoolean(th) ? th.getMessage() : message); + writer.write(th != null ? th.getMessage() : message); } }); @@ -108,12 +105,13 @@ public String expectedServerSpanName( return "HTTP " + getContextPath() + endpoint.getPath(); } - if (DefaultGroovyMethods.isCase(NOT_FOUND, endpoint)) { - return method; - } else if (DefaultGroovyMethods.isCase(PATH_PARAM, endpoint)) { - return method + " " + getContextPath() + "/path/:id/param"; - } else { - return method + " " + getContextPath() + endpoint.getPath(); + switch (endpoint.name()) { + case "NOT_FOUND": + return method; + case "PATH_PARAM": + return "HTTP " + getContextPath() + "/path/:id/param"; + default: + return "HTTP " + getContextPath() + endpoint.getPath(); } } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index 7e186b914f31..9e69aa14266b 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -30,7 +30,6 @@ import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpRequest; import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; import javax.servlet.Servlet; -import org.codehaus.groovy.runtime.DefaultGroovyMethods; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -109,7 +108,7 @@ public String expectedHttpRoute(ServerEndpoint endpoint, String method) { return endpoint.getPath(); } - if (DefaultGroovyMethods.isCase(NOT_FOUND, endpoint)) { + if (NOT_FOUND.equals(endpoint)) { return getContextPath() + "/*"; } else { return super.expectedHttpRoute(endpoint, method); @@ -123,14 +122,15 @@ public boolean errorEndpointUsesSendError() { @Override protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { - if (DefaultGroovyMethods.isCase(REDIRECT, endpoint)) { - return span.satisfies(s -> assertThat(s.getName()).matches("\\.sendRedirect$")) - .hasKind(SpanKind.INTERNAL) - .hasParent(parentSpan); - } else if (DefaultGroovyMethods.isCase(ERROR, endpoint)) { - return span.satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) - .hasKind(SpanKind.INTERNAL) - .hasParent(parentSpan); + switch (endpoint.name()) { + case "REDIRECT": + return span.satisfies(s -> assertThat(s.getName()).matches("\\.sendRedirect$")) + .hasKind(SpanKind.INTERNAL) + .hasParent(parentSpan); + case "ERROR": + return span.satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) + .hasKind(SpanKind.INTERNAL) + .hasParent(parentSpan); } return super.assertResponseSpan(span, parentSpan, method, endpoint); } @@ -176,7 +176,6 @@ void snippet_injection_with_ServletOutputStream() { @Test void snippet_injection_with_PrintWriter() { - setup: ExperimentalSnippetHolder.setSnippet("\n "); AggregatedHttpRequest request = request(HTML_PRINT_WRITER, "GET"); AggregatedHttpResponse response = client.execute(request).aggregate().join(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java index 583f88b38eb8..c1084b5b01a1 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java @@ -150,6 +150,8 @@ public void sendRedirect(String s) { .hasException(ex))); } + /** Tests deprecated methods */ + @SuppressWarnings("deprecation") public static class TestResponse implements HttpServletResponse { @Override public void addCookie(Cookie cookie) {} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index acca01945af3..b3c0b662666a 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -19,7 +19,6 @@ import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; -import org.codehaus.groovy.runtime.DefaultGroovyMethods; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ErrorHandler; @@ -82,7 +81,7 @@ protected void handleErrorPage( HttpServletRequest request, Writer writer, int code, String message) throws IOException { Throwable th = (Throwable) request.getAttribute("javax.servlet.error.exception"); - writer.write(DefaultGroovyMethods.asBoolean(th) ? th.getMessage() : message); + writer.write(th != null ? th.getMessage() : message); } }); setupServlets(servletContext); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index d5a25152320a..185d18b367bc 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -24,7 +24,6 @@ import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; -import org.codehaus.groovy.runtime.DefaultGroovyMethods; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ErrorHandler; import org.eclipse.jetty.servlet.ServletHandler; @@ -77,7 +76,7 @@ protected void handleErrorPage( HttpServletRequest request, Writer writer, int code, String message) throws IOException { Throwable th = (Throwable) request.getAttribute("javax.servlet.error.exception"); - writer.write(DefaultGroovyMethods.asBoolean(th) ? th.getMessage() : message); + writer.write(th != null ? th.getMessage() : message); } }); server.start(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java index 189d639e7410..1304bbac7143 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java @@ -9,7 +9,6 @@ import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.valves.ErrorReportValve; -import org.codehaus.groovy.runtime.DefaultGroovyMethods; public class ErrorHandlerValve extends ErrorReportValve { @Override @@ -19,12 +18,7 @@ protected void report(Request request, Response response, Throwable t) { } try { - response - .getWriter() - .print( - DefaultGroovyMethods.asBoolean(t) - ? t.getCause().getMessage() - : response.getMessage()); + response.getWriter().print(t != null ? t.getCause().getMessage() : response.getMessage()); } catch (IOException e) { e.printStackTrace(); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java index 03a7863de10f..b0003871a696 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java @@ -7,7 +7,6 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; -import groovy.lang.Reference; import io.opentelemetry.instrumentation.test.base.HttpServerTest; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import java.io.IOException; @@ -277,16 +276,15 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { public static class DispatchAsync extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) { - Reference target = - new Reference(req.getServletPath().replace("/dispatch", "")); + String target = req.getServletPath().replace("/dispatch", ""); if (req.getQueryString() != null) { - target.set(target.get() + "?" + req.getQueryString()); + target += "?" + req.getQueryString(); } AsyncContext context = req.startAsync(); context.start( () -> { - context.dispatch(target.get()); + context.dispatch(target); }); } } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index 45e63f08d329..a6fd626d4f36 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -36,7 +36,6 @@ import org.apache.catalina.startup.Tomcat; import org.apache.tomcat.JarScanFilter; import org.apache.tomcat.JarScanType; -import org.codehaus.groovy.runtime.DefaultGroovyMethods; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -77,7 +76,7 @@ public boolean testError() { @Override protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { - if (DefaultGroovyMethods.isCase(NOT_FOUND, endpoint)) { + if (NOT_FOUND.equals(endpoint)) { span.satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) .hasKind(SpanKind.INTERNAL) .hasParent(parentSpan); @@ -123,11 +122,9 @@ public boolean check(JarScanType jarScanType, String jarName) { // setupAuthentication(tomcatServer, servletContext) setupServlets(servletContext); - (DefaultGroovyMethods.asType(tomcatServer.getHost(), StandardHost.class)) + ((StandardHost) tomcatServer.getHost()) .setErrorReportValveClass(ErrorHandlerValve.class.getName()); - (DefaultGroovyMethods.asType(tomcatServer.getHost(), StandardHost.class)) - .getPipeline() - .addValve(accessLogValue); + tomcatServer.getHost().getPipeline().addValve(accessLogValue); tomcatServer.start(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java index 14e6bfb58482..eb1206673aa7 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java @@ -15,6 +15,7 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; import org.apache.catalina.Context; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java index b0ddaa33c08d..6aeb421614b9 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java @@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.RequestDispatcherServlet; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; import org.apache.catalina.Context; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java index 7de8e1e52629..bf4db2ff1f29 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java @@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.RequestDispatcherServlet; +import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; import org.apache.catalina.Context; From b9770be2dc3d8acc2a50786eb86bbcef85e608db Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 15 Aug 2024 11:05:46 +0200 Subject: [PATCH 07/43] convert servlet 3.0 tests to java --- .../servlet/v3_0/AbstractServlet3Test.java | 2 ++ .../servlet/v3_0/jetty/JettyServlet3Test.java | 1 + .../v3_0/jetty/JettyServletHandlerTest.java | 1 + .../TomcatServlet3FilterMappingTest.java | 3 ++ .../mapping/TomcatServlet3MappingTest.java | 1 + .../v3_0/tomcat/TestAccessLogValve.java | 1 + .../servlet/v3_0/tomcat/TestServlet3.java | 28 +++++++++++-------- .../v3_0/tomcat/TomcatServlet3Test.java | 1 + 8 files changed, 26 insertions(+), 12 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index 9e69aa14266b..fd3876cc600c 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -131,6 +131,8 @@ protected SpanDataAssert assertResponseSpan( return span.satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) .hasKind(SpanKind.INTERNAL) .hasParent(parentSpan); + default: + break; } return super.assertResponseSpan(span, parentSpan, method, endpoint); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index b3c0b662666a..e24d746dca0a 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -77,6 +77,7 @@ protected Server setupServer() throws Exception { ServletContextHandler servletContext = new ServletContextHandler(null, getContextPath()); servletContext.setErrorHandler( new ErrorHandler() { + @Override protected void handleErrorPage( HttpServletRequest request, Writer writer, int code, String message) throws IOException { diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 185d18b367bc..1e8382066467 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -72,6 +72,7 @@ protected Server setupServer() throws Exception { setupServlets(handler); server.addBean( new ErrorHandler() { + @Override protected void handleErrorPage( HttpServletRequest request, Writer writer, int code, String message) throws IOException { diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java index 1af6c8181146..0a2dd6457c8a 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java @@ -21,6 +21,7 @@ import org.apache.tomcat.util.descriptor.web.FilterMap; public abstract class TomcatServlet3FilterMappingTest extends TomcatServlet3MappingTest { + @SuppressWarnings("ClassNewInstance") public void addFilter(Context servletContext, String path, Class filter) { String name = UUID.randomUUID().toString(); FilterDef filterDef = new FilterDef(); @@ -37,6 +38,7 @@ public void addFilter(Context servletContext, String path, Class filter) { String name = UUID.randomUUID().toString(); @@ -112,6 +114,7 @@ public void destroy() {} } public static class DefaultServlet extends HttpServlet { + @Override protected void service(HttpServletRequest req, HttpServletResponse resp) { throw new IllegalStateException( "Servlet should not have been called, filter should have handled the request."); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java index 3bb95bef9490..495576093cf6 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java @@ -67,6 +67,7 @@ public void stopServer(Tomcat server) { } } + @SuppressWarnings("ClassNewInstance") @Override public void addServlet(Context context, String path, Class servlet) { String name = UUID.randomUUID().toString(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java index 12e5543ddf08..6581be7d5f6d 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java @@ -22,6 +22,7 @@ public TestAccessLogValve() { super(true); } + @Override public void log(Request request, Response response, long time) { if (request.getParameter("access-log") == null) { return; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java index b0003871a696..5279f52e3ba7 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java @@ -21,16 +21,19 @@ import javax.servlet.http.HttpServletResponse; public class TestServlet3 { + + private TestServlet3() {} + @WebServlet public static class Sync extends HttpServlet { @Override - protected void service(final HttpServletRequest req, final HttpServletResponse resp) { + protected void service(HttpServletRequest req, HttpServletResponse resp) { String servletPath = (String) req.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH); if (servletPath == null) { servletPath = req.getServletPath(); } - final ServerEndpoint endpoint = ServerEndpoint.forPath(servletPath); + ServerEndpoint endpoint = ServerEndpoint.forPath(servletPath); HttpServerTest.controller( endpoint, () -> { @@ -95,10 +98,10 @@ protected void service(final HttpServletRequest req, final HttpServletResponse r @WebServlet(asyncSupported = true) public static class Async extends HttpServlet { @Override - protected void service(final HttpServletRequest req, final HttpServletResponse resp) { - final ServerEndpoint endpoint = ServerEndpoint.forPath(req.getServletPath()); - final CountDownLatch latch = new CountDownLatch(1); - final AsyncContext context = req.startAsync(); + protected void service(HttpServletRequest req, HttpServletResponse resp) { + ServerEndpoint endpoint = ServerEndpoint.forPath(req.getServletPath()); + CountDownLatch latch = new CountDownLatch(1); + AsyncContext context = req.startAsync(); if (endpoint.equals(EXCEPTION)) { context.setTimeout(5000); } @@ -190,7 +193,7 @@ protected void service(final HttpServletRequest req, final HttpServletResponse r @WebServlet(asyncSupported = true) public static class FakeAsync extends HttpServlet { @Override - protected void service(final HttpServletRequest req, final HttpServletResponse resp) { + protected void service(HttpServletRequest req, HttpServletResponse resp) { AsyncContext context = req.startAsync(); try { ServerEndpoint endpoint = ServerEndpoint.forPath(req.getServletPath()); @@ -250,6 +253,8 @@ protected void service(final HttpServletRequest req, final HttpServletResponse r resp.setStatus(endpoint.getStatus()); resp.getOutputStream().print(endpoint.getBody()); break; + default: + break; } return null; }); @@ -276,14 +281,13 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { public static class DispatchAsync extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) { - String target = req.getServletPath().replace("/dispatch", ""); - if (req.getQueryString() != null) { - target += "?" + req.getQueryString(); - } - AsyncContext context = req.startAsync(); context.start( () -> { + String target = req.getServletPath().replace("/dispatch", ""); + if (req.getQueryString() != null) { + target += "?" + req.getQueryString(); + } context.dispatch(target); }); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index a6fd626d4f36..66f144575540 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -145,6 +145,7 @@ public void stopServer(Tomcat server) { } } + @SuppressWarnings("ClassNewInstance") @Override public void addServlet(Context servletContext, String path, Class servlet) { String name = UUID.randomUUID().toString(); From 6d41ab1496713d23f5db32956c0fa61477d80ff8 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 15 Aug 2024 18:04:55 +0200 Subject: [PATCH 08/43] convert servlet 3.0 tests to java --- .../servlet/v3_0/AbstractServlet3Test.java | 8 ++++---- .../servlet/v3_0/HttpServletResponseTest.java | 10 +++++----- ...3TestAsyncTest.java => JettyServlet3AsyncTest.java} | 2 +- ...eAsyncTest.java => JettyServlet3FakeAsyncTest.java} | 2 +- ...et3TestSyncTest.java => JettyServlet3SyncTest.java} | 2 +- .../servlet/v3_0/jetty/JettyServlet3Test.java | 2 +- .../servlet/v3_0/jetty/JettyServletHandlerTest.java | 2 +- .../servlet/v3_0/jetty/dispatch/JettyDispatchTest.java | 2 +- ...ncTest.java => JettyServlet3DispatchAsyncTest.java} | 2 +- ...st.java => JettyServlet3DispatchImmediateTest.java} | 2 +- ...tForwardTest.java => JettyServlet3ForwardTest.java} | 2 +- ...tIncludeTest.java => JettyServlet3IncludeTest.java} | 2 +- ...TestAsyncTest.java => TomcatServlet3AsyncTest.java} | 2 +- ...AsyncTest.java => TomcatServlet3FakeAsyncTest.java} | 2 +- .../servlet/v3_0/tomcat/TomcatServlet3Test.java | 4 ++-- ...cTest.java => TomcatServlet3DispatchAsyncTest.java} | 2 +- ...t.java => TomcatServlet3DispatchImmediateTest.java} | 2 +- ...ForwardTest.java => TomcatServlet3ForwardTest.java} | 2 +- ...IncludeTest.java => TomcatServlet3IncludeTest.java} | 2 +- 19 files changed, 27 insertions(+), 27 deletions(-) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/{JettyServlet3TestAsyncTest.java => JettyServlet3AsyncTest.java} (88%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/{JettyServlet3TestFakeAsyncTest.java => JettyServlet3FakeAsyncTest.java} (84%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/{JettyServlet3TestSyncTest.java => JettyServlet3SyncTest.java} (84%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/{JettyServlet3TestDispatchAsyncTest.java => JettyServlet3DispatchAsyncTest.java} (97%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/{JettyServlet3TestDispatchImmediateTest.java => JettyServlet3DispatchImmediateTest.java} (97%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/{JettyServlet3TestForwardTest.java => JettyServlet3ForwardTest.java} (97%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/{JettyServlet3TestIncludeTest.java => JettyServlet3IncludeTest.java} (97%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/{TomcatServlet3TestAsyncTest.java => TomcatServlet3AsyncTest.java} (84%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/{TomcatServlet3TestFakeAsyncTest.java => TomcatServlet3FakeAsyncTest.java} (79%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/{TomcatServlet3TestDispatchAsyncTest.java => TomcatServlet3DispatchAsyncTest.java} (97%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/{TomcatServlet3TestDispatchImmediateTest.java => TomcatServlet3DispatchImmediateTest.java} (97%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/{TomcatServlet3TestForwardTest.java => TomcatServlet3ForwardTest.java} (97%) rename instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/{TomcatServlet3TestIncludeTest.java => TomcatServlet3IncludeTest.java} (97%) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index fd3876cc600c..4b101e5a5f63 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -124,17 +124,17 @@ protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { switch (endpoint.name()) { case "REDIRECT": - return span.satisfies(s -> assertThat(s.getName()).matches("\\.sendRedirect$")) + return span.satisfies(s -> assertThat(s.getName()).matches(".*\\.sendRedirect")) .hasKind(SpanKind.INTERNAL) .hasParent(parentSpan); case "ERROR": - return span.satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) + return span.satisfies(s -> assertThat(s.getName()).matches(".*\\.sendError")) .hasKind(SpanKind.INTERNAL) .hasParent(parentSpan); default: break; } - return super.assertResponseSpan(span, parentSpan, method, endpoint); + return span; } @Test @@ -206,7 +206,7 @@ void snippet_injection_with_PrintWriter() { trace -> trace.hasSpansSatisfyingExactly( span -> - span.hasName("GET " + (expectedRoute != null ? expectedRoute : "")) + span.hasName("GET" + (expectedRoute != null ? " " + expectedRoute : "")) .hasKind(SpanKind.SERVER) .hasNoParent(), span -> diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java index c1084b5b01a1..9183230dcfad 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java @@ -107,12 +107,11 @@ void test_send_with_parent() throws IOException { @Test void test_send_with_exception() throws ServletException, IOException { - RuntimeException ex = new RuntimeException("some error"); TestResponse response = new TestResponse() { @Override public void sendRedirect(String s) { - throw ex; + throw new RuntimeException("some error"); } }; HttpServlet servlet = new HttpServlet() {}; @@ -131,7 +130,8 @@ public void sendRedirect(String s) { throw new RuntimeException(e); } })) - .hasRootCause(ex); + .isInstanceOf(RuntimeException.class) + .hasMessage("some error"); testing.waitAndAssertTraces( trace -> @@ -141,13 +141,13 @@ public void sendRedirect(String s) { .hasKind(SpanKind.INTERNAL) .hasNoParent() .hasStatus(StatusData.error()) - .hasException(ex), + .hasException(new RuntimeException("some error")), span -> span.hasName("HttpServletResponseTest$2.sendRedirect") .hasKind(SpanKind.INTERNAL) .hasParent(trace.getSpan(0)) .hasStatus(StatusData.error()) - .hasException(ex))); + .hasException(new RuntimeException("some error")))); } /** Tests deprecated methods */ diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java similarity index 88% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java index 745dcc331f3e..8aa6d3f79b08 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java @@ -8,7 +8,7 @@ import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; -public class JettyServlet3TestAsyncTest extends JettyServlet3Test { +public class JettyServlet3AsyncTest extends JettyServlet3Test { @Override public Class servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestFakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java similarity index 84% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestFakeAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java index 802f42f2a981..4db579066e5e 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestFakeAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java @@ -8,7 +8,7 @@ import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; -public class JettyServlet3TestFakeAsyncTest extends JettyServlet3Test { +public class JettyServlet3FakeAsyncTest extends JettyServlet3Test { @Override public Class servlet() { return TestServlet3.FakeAsync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestSyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java similarity index 84% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestSyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java index a3b1aeb95078..9052044c42b5 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3TestSyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java @@ -8,7 +8,7 @@ import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; -public class JettyServlet3TestSyncTest extends JettyServlet3Test { +public class JettyServlet3SyncTest extends JettyServlet3Test { @Override public Class servlet() { return TestServlet3.Sync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index e24d746dca0a..b7cbc19e9e21 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -58,7 +58,7 @@ public boolean isAsyncTest() { protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { if (IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { - span.satisfies(it -> assertThat(it.getName()).matches("\\.sendError$")) + span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) .hasKind(SpanKind.INTERNAL) .hasParent(parentSpan); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 1e8382066467..54d6cecce003 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -56,7 +56,7 @@ protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { if (JettyServlet3Test.IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { - span.satisfies(it -> assertThat(it.getName()).matches("\\.sendError$")) + span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) .hasKind(SpanKind.INTERNAL) .hasParent(parentSpan); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java index c32d0dc0f3f7..d55549190cb7 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java @@ -13,6 +13,6 @@ public abstract class JettyDispatchTest extends JettyServlet3Test { @Override protected void configure(HttpServerTestOptions options) { super.configure(options); - options.setContextPath(getContextPath() + "/dispatch/"); + options.setContextPath(getContextPath() + "/dispatch"); } } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java similarity index 97% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java index 2d36786e5e87..80b7f2ac6cf6 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java @@ -19,7 +19,7 @@ import javax.servlet.Servlet; import org.eclipse.jetty.servlet.ServletContextHandler; -public class JettyServlet3TestDispatchAsyncTest extends JettyDispatchTest { +public class JettyServlet3DispatchAsyncTest extends JettyDispatchTest { @Override public Class servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java similarity index 97% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchImmediateTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java index 5939f179c3ab..471f371ec697 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestDispatchImmediateTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java @@ -19,7 +19,7 @@ import javax.servlet.Servlet; import org.eclipse.jetty.servlet.ServletContextHandler; -public class JettyServlet3TestDispatchImmediateTest extends JettyDispatchTest { +public class JettyServlet3DispatchImmediateTest extends JettyDispatchTest { @Override public Class servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java similarity index 97% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestForwardTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java index 2ac1bc618497..a84d796a8e0b 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestForwardTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java @@ -20,7 +20,7 @@ import javax.servlet.Servlet; import org.eclipse.jetty.servlet.ServletContextHandler; -public class JettyServlet3TestForwardTest extends JettyDispatchTest { +public class JettyServlet3ForwardTest extends JettyDispatchTest { @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestIncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java similarity index 97% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestIncludeTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java index 643165a4ed07..821cdef09c21 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3TestIncludeTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java @@ -20,7 +20,7 @@ import javax.servlet.Servlet; import org.eclipse.jetty.servlet.ServletContextHandler; -public class JettyServlet3TestIncludeTest extends JettyDispatchTest { +public class JettyServlet3IncludeTest extends JettyDispatchTest { @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java similarity index 84% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java index 01f2b4643064..42957f2b8ec1 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java @@ -7,7 +7,7 @@ import javax.servlet.Servlet; -public class TomcatServlet3TestAsyncTest extends TomcatServlet3Test { +public class TomcatServlet3AsyncTest extends TomcatServlet3Test { @Override public Class servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestFakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java similarity index 79% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestFakeAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java index a4c619d7e5d5..326295ad2f7e 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3TestFakeAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java @@ -7,7 +7,7 @@ import javax.servlet.Servlet; -public class TomcatServlet3TestFakeAsyncTest extends TomcatServlet3Test { +public class TomcatServlet3FakeAsyncTest extends TomcatServlet3Test { @Override public Class servlet() { return TestServlet3.FakeAsync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index 66f144575540..c90deb323a8f 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -77,7 +77,7 @@ public boolean testError() { protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { if (NOT_FOUND.equals(endpoint)) { - span.satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) + span.satisfies(s -> assertThat(s.getName()).matches(".*\\.sendError")) .hasKind(SpanKind.INTERNAL) .hasParent(parentSpan); } @@ -221,7 +221,7 @@ void access_log_has_ids_for_error_request() { if (errorEndpointUsesSendError()) { spans .get(2) - .satisfies(s -> assertThat(s.getName()).matches("\\.sendError$")) + .satisfies(s -> assertThat(s.getName()).matches(".*\\.sendError")) .hasKind(SpanKind.INTERNAL) .hasParent(spanData.get(1)); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java similarity index 97% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java index eb1206673aa7..03eecbab5ee4 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java @@ -19,7 +19,7 @@ import javax.servlet.Servlet; import org.apache.catalina.Context; -public class TomcatServlet3TestDispatchAsyncTest extends TomcatDispatchTest { +public class TomcatServlet3DispatchAsyncTest extends TomcatDispatchTest { @Override public Class servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java similarity index 97% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java index 8cfeba82bb8b..602a0f345f77 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestDispatchImmediateTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java @@ -20,7 +20,7 @@ import javax.servlet.Servlet; import org.apache.catalina.Context; -public class TomcatServlet3TestDispatchImmediateTest extends TomcatDispatchTest { +public class TomcatServlet3DispatchImmediateTest extends TomcatDispatchTest { @Override public Class servlet() { return TestServlet3.Sync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java similarity index 97% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java index 6aeb421614b9..33ad43772784 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestForwardTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java @@ -21,7 +21,7 @@ import javax.servlet.Servlet; import org.apache.catalina.Context; -public class TomcatServlet3TestForwardTest extends TomcatDispatchTest { +public class TomcatServlet3ForwardTest extends TomcatDispatchTest { @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java similarity index 97% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java rename to instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java index bf4db2ff1f29..a1a39e434334 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3TestIncludeTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java @@ -20,7 +20,7 @@ import javax.servlet.Servlet; import org.apache.catalina.Context; -public class TomcatServlet3TestIncludeTest extends TomcatDispatchTest { +public class TomcatServlet3IncludeTest extends TomcatDispatchTest { @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet From fe4f48c53f3c5d0adb2a40b3dcdc07e62e1c4523 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 16 Aug 2024 12:20:57 +0200 Subject: [PATCH 09/43] convert servlet 3.0 tests to java --- .../servlet/v3_0/AbstractServlet3Test.java | 6 +-- .../servlet/v3_0/jetty/JettyServlet3Test.java | 22 ++++++++- .../v3_0/jetty/JettyServletHandlerTest.java | 15 +++++- .../JettyServlet3DispatchImmediateTest.java | 5 ++ .../v3_0/tomcat/TomcatServlet3Test.java | 48 +++++++++---------- 5 files changed, 63 insertions(+), 33 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index 4b101e5a5f63..3af3f2cbdc20 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -19,7 +19,6 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.HttpConstants; -import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; @@ -31,7 +30,6 @@ import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; import javax.servlet.Servlet; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; public abstract class AbstractServlet3Test extends AbstractHttpServerTest { @@ -105,7 +103,7 @@ protected void setupServlets(CONTEXT context) { @Override public String expectedHttpRoute(ServerEndpoint endpoint, String method) { if (method.equals(HttpConstants._OTHER)) { - return endpoint.getPath(); + return getContextPath() + endpoint.getPath(); } if (NOT_FOUND.equals(endpoint)) { @@ -167,7 +165,7 @@ void snippet_injection_with_ServletOutputStream() { trace -> trace.hasSpansSatisfyingExactly( span -> - span.hasName("GET " + (expectedRoute != null ? expectedRoute : "")) + span.hasName("GET" + (expectedRoute != null ? " " + expectedRoute : "")) .hasKind(SpanKind.SERVER) .hasNoParent(), span -> diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index b7cbc19e9e21..3fb973e357fe 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -9,6 +9,7 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test; @@ -16,6 +17,7 @@ import io.opentelemetry.sdk.trace.data.SpanData; import java.io.IOException; import java.io.Writer; +import javax.annotation.Nullable; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -59,13 +61,29 @@ protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { if (IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL) - .hasParent(parentSpan); + .hasKind(SpanKind.INTERNAL); } return super.assertResponseSpan(span, parentSpan, method, endpoint); } + @Override + public String expectedServerSpanName( + ServerEndpoint endpoint, String method, @Nullable String route) { + if (method.equals(HttpConstants._OTHER)) { + return "HTTP " + getContextPath() + endpoint.getPath(); + } + + switch (endpoint.name()) { + case "NOT_FOUND": + return method; + case "PATH_PARAM": + return method + " " + getContextPath() + "/path/:id/param"; + default: + return method + " " + getContextPath() + endpoint.getPath(); + } + } + @Override protected Server setupServer() throws Exception { Server jettyServer = new Server(port); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 54d6cecce003..499f95b617ca 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -10,6 +10,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test; @@ -21,6 +22,7 @@ import java.io.Writer; import java.util.HashSet; import java.util.Set; +import javax.annotation.Nullable; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -57,13 +59,22 @@ protected SpanDataAssert assertResponseSpan( if (JettyServlet3Test.IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL) - .hasParent(parentSpan); + .hasKind(SpanKind.INTERNAL); } return super.assertResponseSpan(span, parentSpan, method, endpoint); } + + @Override + public String expectedServerSpanName( + ServerEndpoint endpoint, String method, @Nullable String route) { + if (method.equals(HttpConstants._OTHER)) { + return "HTTP"; + } +return super.expectedServerSpanName(endpoint, method, route); + } + @Override protected Server setupServer() throws Exception { Server server = new Server(port); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java index 471f371ec697..cefa1da33946 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java @@ -30,6 +30,11 @@ public boolean isAsyncTest() { return true; } + @Override + public boolean errorEndpointUsesSendError() { + return false; + } + @Override protected void setupServlets(ServletContextHandler context) { super.setupServlets(context); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index c90deb323a8f..d0f5b86c08f2 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -18,6 +18,7 @@ import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test; import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; +import io.opentelemetry.sdk.testing.assertj.TraceAssert; import io.opentelemetry.sdk.trace.data.SpanData; import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpRequest; import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; @@ -26,6 +27,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.IntStream; import javax.servlet.Servlet; @@ -34,9 +36,8 @@ import org.apache.catalina.LifecycleException; import org.apache.catalina.core.StandardHost; import org.apache.catalina.startup.Tomcat; -import org.apache.tomcat.JarScanFilter; -import org.apache.tomcat.JarScanType; import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; @@ -112,12 +113,7 @@ protected Tomcat setupServer() throws Exception { servletContext .getJarScanner() .setJarScanFilter( - new JarScanFilter() { - @Override - public boolean check(JarScanType jarScanType, String jarName) { - return false; - } - }); + (jarScanType, jarName) -> false); // setupAuthentication(tomcatServer, servletContext) setupServlets(servletContext); @@ -131,8 +127,10 @@ public boolean check(JarScanType jarScanType, String jarName) { return tomcatServer; } - public void setup() { - accessLogValue.getLoggedIds().clear(); + @BeforeEach + void setUp() { + accessLogValue.getLoggedIds().clear(); + testing.clearData(); } @Override @@ -160,6 +158,7 @@ public void addServlet(Context servletContext, String path, Class { - testing.waitAndAssertTraces( - trace -> - trace.hasSpansSatisfyingExactly( - span -> - assertServerSpan( - span, "GET", ACCESS_LOG_SUCCESS, SUCCESS.getStatus()), - span -> assertControllerSpan(span, null))); - - List> traces = TelemetryDataUtil.groupTraces(testing.spans()); - assertThat(loggedTraces).contains(traces.get(i).get(0).getTraceId()); - assertThat(loggedSpans).contains(traces.get(i).get(0).getSpanId()); - }); + Consumer check = trace -> + trace.hasSpansSatisfyingExactly( + span -> + assertServerSpan( + span, "GET", ACCESS_LOG_SUCCESS, SUCCESS.getStatus()), + span -> assertControllerSpan(span, null)); + testing.waitAndAssertTraces(IntStream.range(0, count).mapToObj(i -> check).collect(Collectors.toList())); + + List> traces = TelemetryDataUtil.groupTraces(testing.spans()); + + for (int i = 0; i < count; i++) { + assertThat(loggedTraces).contains(traces.get(i).get(0).getTraceId()); + assertThat(loggedSpans).contains(traces.get(i).get(0).getSpanId()); + } } @Test From ac88eedd1b02623e2c44313a64bbfce1c1337c27 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 16 Aug 2024 15:37:48 +0200 Subject: [PATCH 10/43] convert servlet 3.0 tests to java --- .../servlet/v3_0/AbstractServlet3Test.java | 14 +++++++++++--- .../servlet/v3_0/HttpServletResponseTest.java | 9 ++++++++- .../v3_0/mapping/AbstractServlet3MappingTest.java | 2 +- .../servlet/v3_0/tomcat/ErrorHandlerValve.java | 1 + .../dispatch/TomcatServlet3DispatchAsyncTest.java | 5 +++++ 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index 3af3f2cbdc20..4017d401cf5a 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -122,9 +122,13 @@ protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { switch (endpoint.name()) { case "REDIRECT": - return span.satisfies(s -> assertThat(s.getName()).matches(".*\\.sendRedirect")) - .hasKind(SpanKind.INTERNAL) - .hasParent(parentSpan); + SpanDataAssert spanDataAssert = + span.satisfies(s -> assertThat(s.getName()).matches(".*\\.sendRedirect")) + .hasKind(SpanKind.INTERNAL); + if (assertParentOnRedirect()) { + return spanDataAssert.hasParent(parentSpan); + } + return spanDataAssert; case "ERROR": return span.satisfies(s -> assertThat(s.getName()).matches(".*\\.sendError")) .hasKind(SpanKind.INTERNAL) @@ -135,6 +139,10 @@ protected SpanDataAssert assertResponseSpan( return span; } + protected boolean assertParentOnRedirect() { + return true; + } + @Test void snippet_injection_with_ServletOutputStream() { ExperimentalSnippetHolder.setSnippet( diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java index 9183230dcfad..6a767a18f0ae 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java @@ -151,7 +151,6 @@ public void sendRedirect(String s) { } /** Tests deprecated methods */ - @SuppressWarnings("deprecation") public static class TestResponse implements HttpServletResponse { @Override public void addCookie(Cookie cookie) {} @@ -171,11 +170,15 @@ public String encodeRedirectURL(String s) { return null; } + // test deprecated methods + @SuppressWarnings("deprecation") @Override public String encodeUrl(String s) { return null; } + // test deprecated methods + @SuppressWarnings("deprecation") @Override public String encodeRedirectUrl(String s) { return null; @@ -211,6 +214,8 @@ public void addIntHeader(String s, int i) {} @Override public void setStatus(int i) {} + // test deprecated methods + @SuppressWarnings("deprecation") @Override public void setStatus(int i, String s) {} @@ -224,11 +229,13 @@ public String getHeader(String s) { return null; } + @SuppressWarnings("ReturnsNullCollection") @Override public Collection getHeaders(String s) { return null; } + @SuppressWarnings("ReturnsNullCollection") @Override public Collection getHeaderNames() { return null; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java index f38c8b0867a8..aab560aab361 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java @@ -62,7 +62,7 @@ protected void setupServlets(CONTEXT context) { @Unroll public void test_path__path(String path, String route, boolean success) { - final AggregatedHttpResponse response = + AggregatedHttpResponse response = client.get(address.resolve(path).toString()).aggregate().join(); assertThat(response.status().code()).isEqualTo(success ? 200 : 404); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java index 1304bbac7143..fa2b3de1aea7 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java @@ -11,6 +11,7 @@ import org.apache.catalina.valves.ErrorReportValve; public class ErrorHandlerValve extends ErrorReportValve { + @SuppressWarnings("CatchAndPrintStackTrace") @Override protected void report(Request request, Response response, Throwable t) { if (response.getStatus() < 400 || response.getContentWritten() > 0 || !response.isError()) { diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java index 03eecbab5ee4..dac22814b18d 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java @@ -52,4 +52,9 @@ protected void setupServlets(Context context) { public boolean errorEndpointUsesSendError() { return false; } + + @Override + protected boolean assertParentOnRedirect() { + return false; + } } From 1192e68be607ecfc4631365e75dc02b937f620bf Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 16 Aug 2024 15:51:30 +0200 Subject: [PATCH 11/43] convert servlet 3.0 tests to java --- .../servlet/v3_0/AbstractServlet3Test.java | 2 ++ .../v3_0/jetty/JettyServletHandlerTest.java | 3 +-- .../v3_0/tomcat/TomcatServlet3Test.java | 23 ++++++++----------- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index 4017d401cf5a..3bd7ebc11051 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -19,6 +19,7 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.HttpConstants; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; @@ -30,6 +31,7 @@ import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; import javax.servlet.Servlet; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; public abstract class AbstractServlet3Test extends AbstractHttpServerTest { diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 499f95b617ca..b4a137ca0f59 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -65,14 +65,13 @@ protected SpanDataAssert assertResponseSpan( return super.assertResponseSpan(span, parentSpan, method, endpoint); } - @Override public String expectedServerSpanName( ServerEndpoint endpoint, String method, @Nullable String route) { if (method.equals(HttpConstants._OTHER)) { return "HTTP"; } -return super.expectedServerSpanName(endpoint, method, route); + return super.expectedServerSpanName(endpoint, method, route); } @Override diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index d0f5b86c08f2..c7d25f6a0711 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -110,10 +110,7 @@ protected Tomcat setupServer() throws Exception { Context servletContext = tomcatServer.addWebapp(getContextPath(), applicationDir.getAbsolutePath()); // Speed up startup by disabling jar scanning: - servletContext - .getJarScanner() - .setJarScanFilter( - (jarScanType, jarName) -> false); + servletContext.getJarScanner().setJarScanFilter((jarScanType, jarName) -> false); // setupAuthentication(tomcatServer, servletContext) setupServlets(servletContext); @@ -129,7 +126,7 @@ protected Tomcat setupServer() throws Exception { @BeforeEach void setUp() { - accessLogValue.getLoggedIds().clear(); + accessLogValue.getLoggedIds().clear(); testing.clearData(); } @@ -158,7 +155,7 @@ public void addServlet(Context servletContext, String path, Class check = trace -> - trace.hasSpansSatisfyingExactly( - span -> - assertServerSpan( - span, "GET", ACCESS_LOG_SUCCESS, SUCCESS.getStatus()), - span -> assertControllerSpan(span, null)); - testing.waitAndAssertTraces(IntStream.range(0, count).mapToObj(i -> check).collect(Collectors.toList())); + Consumer check = + trace -> + trace.hasSpansSatisfyingExactly( + span -> assertServerSpan(span, "GET", ACCESS_LOG_SUCCESS, SUCCESS.getStatus()), + span -> assertControllerSpan(span, null)); + testing.waitAndAssertTraces( + IntStream.range(0, count).mapToObj(i -> check).collect(Collectors.toList())); List> traces = TelemetryDataUtil.groupTraces(testing.spans()); From 009b5c4247d2196baeb2d64befe07eddf970df0a Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 16 Aug 2024 16:12:18 +0200 Subject: [PATCH 12/43] convert servlet 3.0 tests to java --- .../servlet/v3_0/jetty/JettyServlet3AsyncTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java index 8aa6d3f79b08..2d6960762828 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java @@ -5,10 +5,18 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; public class JettyServlet3AsyncTest extends JettyServlet3Test { + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setVerifyServerSpanEndTime(false); + } + @Override public Class servlet() { return TestServlet3.Async.class; From b8eefd4ea7a40d82f63251630c0b545f73571a7c Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 16 Aug 2024 16:23:17 +0200 Subject: [PATCH 13/43] convert servlet 3.0 tests to java --- .../servlet/v3_0/AbstractServlet3Test.java | 12 ++++++------ .../servlet/v3_0/jetty/JettyServlet3Test.java | 11 +++++++++++ .../servlet/v3_0/jetty/JettyServletHandlerTest.java | 11 +++++++++++ .../servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java | 12 ++++++++++++ .../v3_0/tomcat/TomcatServlet3FakeAsyncTest.java | 12 ++++++++++++ .../servlet/v3_0/tomcat/TomcatServlet3SyncTest.java | 12 ++++++++++++ .../servlet/v3_0/tomcat/TomcatServlet3Test.java | 7 ++++++- .../v3_0/tomcat/dispatch/TomcatDispatchTest.java | 5 +++++ .../dispatch/TomcatServlet3DispatchAsyncTest.java | 12 ++++++++++++ .../TomcatServlet3DispatchImmediateTest.java | 12 ++++++++++++ .../tomcat/dispatch/TomcatServlet3ForwardTest.java | 12 ++++++++++++ .../tomcat/dispatch/TomcatServlet3IncludeTest.java | 12 ++++++++++++ 12 files changed, 123 insertions(+), 7 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index 3bd7ebc11051..4d438d0378b5 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -21,7 +21,6 @@ import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; -import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import io.opentelemetry.javaagent.bootstrap.servlet.ExperimentalSnippetHolder; @@ -31,10 +30,15 @@ import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; import javax.servlet.Servlet; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; public abstract class AbstractServlet3Test extends AbstractHttpServerTest { + protected final InstrumentationExtension testing; + + public AbstractServlet3Test(InstrumentationExtension testing) { + this.testing = testing; + } + public static final ServerEndpoint HTML_PRINT_WRITER = new ServerEndpoint( "HTML_PRINT_WRITER", @@ -66,10 +70,6 @@ public abstract class AbstractServlet3Test extends AbstractHttp + "\n" + ""); - @RegisterExtension - protected static final InstrumentationExtension testing = - HttpServerInstrumentationExtension.forAgent(); - @Override protected void configure(HttpServerTestOptions options) { super.configure(options); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index 3fb973e357fe..07e62e22de3d 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -10,6 +10,8 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.HttpConstants; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test; @@ -25,10 +27,19 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ErrorHandler; import org.eclipse.jetty.servlet.ServletContextHandler; +import org.junit.jupiter.api.extension.RegisterExtension; public abstract class JettyServlet3Test extends AbstractServlet3Test { + @RegisterExtension + protected static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + public JettyServlet3Test() { + super(testing); + } + static final boolean IS_BEFORE_94 = isBefore94(); public static boolean isBefore94() { diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index b4a137ca0f59..91d5e9ed23f2 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -11,6 +11,8 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.HttpConstants; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test; @@ -29,9 +31,18 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ErrorHandler; import org.eclipse.jetty.servlet.ServletHandler; +import org.junit.jupiter.api.extension.RegisterExtension; public class JettyServletHandlerTest extends AbstractServlet3Test { + @RegisterExtension + protected static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + public JettyServletHandlerTest() { + super(testing); + } + @Override protected void configure(HttpServerTestOptions options) { super.configure(options); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java index 42957f2b8ec1..0cc9d58685cb 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java @@ -5,9 +5,21 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import javax.servlet.Servlet; +import org.junit.jupiter.api.extension.RegisterExtension; public class TomcatServlet3AsyncTest extends TomcatServlet3Test { + + @RegisterExtension + protected static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + public TomcatServlet3AsyncTest() { + super(testing); + } + @Override public Class servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java index 326295ad2f7e..c5be49dbd476 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java @@ -5,9 +5,21 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import javax.servlet.Servlet; +import org.junit.jupiter.api.extension.RegisterExtension; public class TomcatServlet3FakeAsyncTest extends TomcatServlet3Test { + + @RegisterExtension + protected static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + public TomcatServlet3FakeAsyncTest() { + super(testing); + } + @Override public Class servlet() { return TestServlet3.FakeAsync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java index 81f22c978e7a..8c43d60efb65 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java @@ -5,9 +5,21 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import javax.servlet.Servlet; +import org.junit.jupiter.api.extension.RegisterExtension; public class TomcatServlet3SyncTest extends TomcatServlet3Test { + + @RegisterExtension + protected static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + public TomcatServlet3SyncTest() { + super(testing); + } + @Override public Class servlet() { return TestServlet3.Sync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index c7d25f6a0711..72063a923c8a 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -12,6 +12,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil; @@ -60,7 +61,11 @@ public abstract class TomcatServlet3Test extends AbstractServlet3Test servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java index 602a0f345f77..f6065f992b7b 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java @@ -15,12 +15,24 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; import org.apache.catalina.Context; +import org.junit.jupiter.api.extension.RegisterExtension; public class TomcatServlet3DispatchImmediateTest extends TomcatDispatchTest { + + @RegisterExtension + protected static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + public TomcatServlet3DispatchImmediateTest() { + super(testing); + } + @Override public Class servlet() { return TestServlet3.Sync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java index 33ad43772784..3939ce63ff75 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java @@ -15,13 +15,25 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.RequestDispatcherServlet; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; import org.apache.catalina.Context; +import org.junit.jupiter.api.extension.RegisterExtension; public class TomcatServlet3ForwardTest extends TomcatDispatchTest { + + @RegisterExtension + protected static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + public TomcatServlet3ForwardTest() { + super(testing); + } + @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java index a1a39e434334..4c00e72218f0 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java @@ -14,13 +14,25 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.RequestDispatcherServlet; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; import org.apache.catalina.Context; +import org.junit.jupiter.api.extension.RegisterExtension; public class TomcatServlet3IncludeTest extends TomcatDispatchTest { + + @RegisterExtension + protected static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forAgent(); + + public TomcatServlet3IncludeTest() { + super(testing); + } + @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet From ae2d5752db48a6e90fbd399febc1b05ce67b338a Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 16 Aug 2024 18:25:43 +0200 Subject: [PATCH 14/43] Update instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java Co-authored-by: Steve Rao --- .../instrumentation/servlet/v2_2/HttpServletResponseTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java index 42ccc5f72c5d..4b3992650cdb 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java @@ -33,7 +33,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -public class HttpServletResponseTest { +class HttpServletResponseTest { @RegisterExtension static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); From 758bc9d6f4d8fa11c9702e2e12724f05de4dcfba Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 16 Aug 2024 18:25:12 +0200 Subject: [PATCH 15/43] pr review --- .../servlet/v3_0/mapping/AbstractServlet3MappingTest.java | 2 -- .../servlet/v3_0/tomcat/ErrorHandlerValve.java | 8 ++++++-- .../servlet/v3_0/tomcat/TomcatServlet3Test.java | 2 -- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java index aab560aab361..06bfcf0e5064 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java @@ -23,7 +23,6 @@ import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; -import spock.lang.Unroll; public abstract class AbstractServlet3MappingTest extends AbstractHttpServerUsingTest { @@ -59,7 +58,6 @@ protected void setupServlets(CONTEXT context) { ".suffix, /*.suffix, true", "suffix, /*, false", }) - @Unroll public void test_path__path(String path, String route, boolean success) { AggregatedHttpResponse response = diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java index fa2b3de1aea7..08ea4ceb9663 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java @@ -9,9 +9,13 @@ import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.valves.ErrorReportValve; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ErrorHandlerValve extends ErrorReportValve { - @SuppressWarnings("CatchAndPrintStackTrace") + + private static final Logger logger = LoggerFactory.getLogger(ErrorHandlerValve.class); + @Override protected void report(Request request, Response response, Throwable t) { if (response.getStatus() < 400 || response.getContentWritten() > 0 || !response.isError()) { @@ -21,7 +25,7 @@ protected void report(Request request, Response response, Throwable t) { try { response.getWriter().print(t != null ? t.getCause().getMessage() : response.getMessage()); } catch (IOException e) { - e.printStackTrace(); + logger.error("Failed to write error response", e); } } } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index 72063a923c8a..760e79e13c1b 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -42,9 +42,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; -import spock.lang.Unroll; -@Unroll public abstract class TomcatServlet3Test extends AbstractServlet3Test { private static final ServerEndpoint ACCESS_LOG_SUCCESS = From 4e931a95edc26c77097fa77268e8411265d64e84 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 16 Aug 2024 18:31:47 +0200 Subject: [PATCH 16/43] pr review --- .../instrumentation/servlet/v2_2/JettyServlet2Test.java | 9 ++------- .../servlet/v3_0/HttpServletResponseTest.java | 2 +- .../v3_0/mapping/AbstractServlet3MappingTest.java | 4 ++-- .../servlet/v3_0/mapping/JettyServlet3MappingTest.java | 3 +-- .../v3_0/mapping/TomcatServlet3FilterMappingTest.java | 2 +- .../TomcatServlet3FilterServletNameMappingTest.java | 2 +- .../TomcatServlet3FilterUrlPatternMappingTest.java | 2 +- .../servlet/v3_0/mapping/TomcatServlet3MappingTest.java | 2 +- .../servlet/v3_0/tomcat/ErrorHandlerValve.java | 2 +- .../servlet/v3_0/tomcat/RequestDispatcherServlet.java | 5 ----- .../servlet/v3_0/tomcat/TestAccessLogValve.java | 2 +- .../servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java | 2 +- .../servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java | 2 +- .../servlet/v3_0/tomcat/TomcatServlet3SyncTest.java | 2 +- .../servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java | 2 +- .../tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java | 2 +- .../dispatch/TomcatServlet3DispatchImmediateTest.java | 2 +- .../v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java | 2 +- .../v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java | 2 +- 19 files changed, 20 insertions(+), 31 deletions(-) diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java index 67a5e8bd0464..54545ab624e1 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java @@ -36,11 +36,10 @@ import org.eclipse.jetty.servlet.ServletContextHandler; import org.junit.jupiter.api.extension.RegisterExtension; -public class JettyServlet2Test extends AbstractHttpServerTest { +class JettyServlet2Test extends AbstractHttpServerTest { @RegisterExtension - public static final InstrumentationExtension testing = - HttpServerInstrumentationExtension.forAgent(); + static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); private static final String CONTEXT = "ctx"; @@ -62,10 +61,6 @@ protected void handleErrorPage( } }); - // FIXME: Add tests for security/authentication. - // ConstraintSecurityHandler security = setupAuthentication(jettyServer) - // servletContext.setSecurityHandler(security) - servletContext.addServlet(TestServlet2.Sync.class, SUCCESS.getPath()); servletContext.addServlet(TestServlet2.Sync.class, QUERY_PARAM.getPath()); servletContext.addServlet(TestServlet2.Sync.class, REDIRECT.getPath()); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java index 6a767a18f0ae..d8a6ec35c635 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java @@ -32,7 +32,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -public class HttpServletResponseTest { +class HttpServletResponseTest { @RegisterExtension static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java index 06bfcf0e5064..b0f0429afcc5 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; -public abstract class AbstractServlet3MappingTest +abstract class AbstractServlet3MappingTest extends AbstractHttpServerUsingTest { @RegisterExtension @@ -58,7 +58,7 @@ protected void setupServlets(CONTEXT context) { ".suffix, /*.suffix, true", "suffix, /*, false", }) - public void test_path__path(String path, String route, boolean success) { + void test_path__path(String path, String route, boolean success) { AggregatedHttpResponse response = client.get(address.resolve(path).toString()).aggregate().join(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java index a644faacf851..1422e9a05066 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java @@ -13,8 +13,7 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; -public class JettyServlet3MappingTest - extends AbstractServlet3MappingTest { +class JettyServlet3MappingTest extends AbstractServlet3MappingTest { @Override protected Server setupServer() { diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java index 0a2dd6457c8a..4c6a77b87375 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java @@ -20,7 +20,7 @@ import org.apache.tomcat.util.descriptor.web.FilterDef; import org.apache.tomcat.util.descriptor.web.FilterMap; -public abstract class TomcatServlet3FilterMappingTest extends TomcatServlet3MappingTest { +abstract class TomcatServlet3FilterMappingTest extends TomcatServlet3MappingTest { @SuppressWarnings("ClassNewInstance") public void addFilter(Context servletContext, String path, Class filter) { String name = UUID.randomUUID().toString(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java index d04f7e1cc4a7..9e50c23bce72 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java @@ -8,7 +8,7 @@ import org.apache.catalina.Context; import org.apache.catalina.startup.Tomcat; -public class TomcatServlet3FilterServletNameMappingTest extends TomcatServlet3FilterMappingTest { +class TomcatServlet3FilterServletNameMappingTest extends TomcatServlet3FilterMappingTest { @Override protected void setupServlets(Context context) { Tomcat.addServlet(context, "prefix-servlet", new DefaultServlet()); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java index 3a86e38b1e70..641849c9c4f7 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java @@ -7,7 +7,7 @@ import org.apache.catalina.Context; -public class TomcatServlet3FilterUrlPatternMappingTest extends TomcatServlet3FilterMappingTest { +class TomcatServlet3FilterUrlPatternMappingTest extends TomcatServlet3FilterMappingTest { @Override protected void setupServlets(Context context) { addFilter(context, "/*", FirstFilter.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java index 495576093cf6..562e63611c8e 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java @@ -15,7 +15,7 @@ import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; -public class TomcatServlet3MappingTest extends AbstractServlet3MappingTest { +class TomcatServlet3MappingTest extends AbstractServlet3MappingTest { @Override protected Tomcat setupServer() throws Exception { Tomcat tomcatServer = new Tomcat(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java index 08ea4ceb9663..e65e08c1e6e5 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java @@ -12,7 +12,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ErrorHandlerValve extends ErrorReportValve { +class ErrorHandlerValve extends ErrorReportValve { private static final Logger logger = LoggerFactory.getLogger(ErrorHandlerValve.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java index 2c7499b8a4f0..27a1973d28b8 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java @@ -5,11 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java index 6581be7d5f6d..e724cc4d67af 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java @@ -17,7 +17,7 @@ import org.apache.catalina.connector.Response; import org.apache.catalina.valves.ValveBase; -public class TestAccessLogValve extends ValveBase implements AccessLog { +class TestAccessLogValve extends ValveBase implements AccessLog { public TestAccessLogValve() { super(true); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java index 0cc9d58685cb..a659a30c9f00 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java @@ -10,7 +10,7 @@ import javax.servlet.Servlet; import org.junit.jupiter.api.extension.RegisterExtension; -public class TomcatServlet3AsyncTest extends TomcatServlet3Test { +class TomcatServlet3AsyncTest extends TomcatServlet3Test { @RegisterExtension protected static final InstrumentationExtension testing = diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java index c5be49dbd476..1625759009ef 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java @@ -10,7 +10,7 @@ import javax.servlet.Servlet; import org.junit.jupiter.api.extension.RegisterExtension; -public class TomcatServlet3FakeAsyncTest extends TomcatServlet3Test { +class TomcatServlet3FakeAsyncTest extends TomcatServlet3Test { @RegisterExtension protected static final InstrumentationExtension testing = diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java index 8c43d60efb65..924500cb38f1 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java @@ -10,7 +10,7 @@ import javax.servlet.Servlet; import org.junit.jupiter.api.extension.RegisterExtension; -public class TomcatServlet3SyncTest extends TomcatServlet3Test { +class TomcatServlet3SyncTest extends TomcatServlet3Test { @RegisterExtension protected static final InstrumentationExtension testing = diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java index 3a89d0fd8c53..aa9ce8cf7fd1 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java @@ -9,7 +9,7 @@ import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TomcatServlet3Test; -public abstract class TomcatDispatchTest extends TomcatServlet3Test { +abstract class TomcatDispatchTest extends TomcatServlet3Test { public TomcatDispatchTest(InstrumentationExtension testing) { super(testing); diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java index 9a102bb48cf9..3385485767e8 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java @@ -22,7 +22,7 @@ import org.apache.catalina.Context; import org.junit.jupiter.api.extension.RegisterExtension; -public class TomcatServlet3DispatchAsyncTest extends TomcatDispatchTest { +class TomcatServlet3DispatchAsyncTest extends TomcatDispatchTest { @RegisterExtension protected static final InstrumentationExtension testing = diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java index f6065f992b7b..25dbd3db2dd8 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java @@ -23,7 +23,7 @@ import org.apache.catalina.Context; import org.junit.jupiter.api.extension.RegisterExtension; -public class TomcatServlet3DispatchImmediateTest extends TomcatDispatchTest { +class TomcatServlet3DispatchImmediateTest extends TomcatDispatchTest { @RegisterExtension protected static final InstrumentationExtension testing = diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java index 3939ce63ff75..9552fcbf3089 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java @@ -24,7 +24,7 @@ import org.apache.catalina.Context; import org.junit.jupiter.api.extension.RegisterExtension; -public class TomcatServlet3ForwardTest extends TomcatDispatchTest { +class TomcatServlet3ForwardTest extends TomcatDispatchTest { @RegisterExtension protected static final InstrumentationExtension testing = diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java index 4c00e72218f0..ea392d84312e 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java @@ -23,7 +23,7 @@ import org.apache.catalina.Context; import org.junit.jupiter.api.extension.RegisterExtension; -public class TomcatServlet3IncludeTest extends TomcatDispatchTest { +class TomcatServlet3IncludeTest extends TomcatDispatchTest { @RegisterExtension protected static final InstrumentationExtension testing = From a24f3e2c3c3d41e3579fabbdff171edf264bb9ee Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 19 Aug 2024 16:37:01 +0200 Subject: [PATCH 17/43] fix test --- .../instrumentation/servlet/v2_2/JettyServlet2Test.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java index 54545ab624e1..69c0afee57e7 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java @@ -104,9 +104,9 @@ public String expectedServerSpanName( case "NOT_FOUND": return method; case "PATH_PARAM": - return "HTTP " + getContextPath() + "/path/:id/param"; + return method + " " + getContextPath() + "/path/:id/param"; default: - return "HTTP " + getContextPath() + endpoint.getPath(); + return method + " " + getContextPath() + endpoint.getPath(); } } From eb7908e748cec79e3c9707a3bdd6a6bf3477d4ae Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 22 Aug 2024 08:52:56 +0200 Subject: [PATCH 18/43] fix latest --- .../servlet/v3_0/jetty/JettyServlet3AsyncTest.java | 7 ------- .../servlet/v3_0/jetty/JettyServlet3Test.java | 9 +++------ .../servlet/v3_0/mapping/TomcatServlet3MappingTest.java | 9 ++------- 3 files changed, 5 insertions(+), 20 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java index 2d6960762828..64f2fe68f1ad 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java @@ -5,18 +5,11 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.jetty; -import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; public class JettyServlet3AsyncTest extends JettyServlet3Test { - @Override - protected void configure(HttpServerTestOptions options) { - super.configure(options); - options.setVerifyServerSpanEndTime(false); - } - @Override public Class servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index 07e62e22de3d..da7d40d6f5ea 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -19,11 +19,11 @@ import io.opentelemetry.sdk.trace.data.SpanData; import java.io.IOException; import java.io.Writer; +import java.net.InetSocketAddress; import javax.annotation.Nullable; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; -import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ErrorHandler; import org.eclipse.jetty.servlet.ServletContextHandler; @@ -55,6 +55,7 @@ protected void configure(HttpServerTestOptions options) { options.setTestNotFound(false); options.setExpectedException(new ServletException(EXCEPTION.getBody())); options.setContextPath("/jetty-context"); + options.setVerifyServerSpanEndTime(!isAsyncTest()); } @Override @@ -97,11 +98,7 @@ public String expectedServerSpanName( @Override protected Server setupServer() throws Exception { - Server jettyServer = new Server(port); - - for (Connector connector : jettyServer.getConnectors()) { - connector.setHost("localhost"); - } + Server jettyServer = new Server(new InetSocketAddress("localhost", port)); ServletContextHandler servletContext = new ServletContextHandler(null, getContextPath()); servletContext.setErrorHandler( diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java index 562e63611c8e..cb7ed483c34a 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java @@ -10,7 +10,6 @@ import java.nio.file.Files; import java.util.UUID; import javax.servlet.Servlet; -import javax.servlet.ServletException; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; @@ -38,12 +37,8 @@ protected Tomcat setupServer() throws Exception { applicationDir.deleteOnExit(); } - Context servletContext; - try { - servletContext = tomcatServer.addWebapp(getContextPath(), applicationDir.getAbsolutePath()); - } catch (ServletException e) { - throw new RuntimeException(e); - } + Context servletContext = + tomcatServer.addWebapp(getContextPath(), applicationDir.getAbsolutePath()); // Speed up startup by disabling jar scanning: servletContext.getJarScanner().setJarScanFilter((jarScanType, jarName) -> false); From 077a536a0ba8188e1c954a72b256c757e13e1bba Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 22 Aug 2024 11:51:59 +0200 Subject: [PATCH 19/43] avoid /org/eclipse/jetty/server/Request.class): warning: Cannot find annotation method 'since()' in type 'Deprecated' --- .../servlet/servlet-3.0/javaagent/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts b/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts index 7b6bafd9de42..605baed904be 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts +++ b/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts @@ -30,8 +30,8 @@ dependencies { testLibrary("org.apache.tomcat.embed:tomcat-embed-core:8.0.41") testLibrary("org.apache.tomcat.embed:tomcat-embed-jasper:8.0.41") - latestDepTestLibrary("org.eclipse.jetty:jetty-server:10.+") // see servlet-5.0 module - latestDepTestLibrary("org.eclipse.jetty:jetty-servlet:10.+") // see servlet-5.0 module + latestDepTestLibrary("org.eclipse.jetty:jetty-server:11.+") // see servlet-5.0 module + latestDepTestLibrary("org.eclipse.jetty:jetty-servlet:11.+") // see servlet-5.0 module latestDepTestLibrary("org.apache.tomcat.embed:tomcat-embed-core:9.+") // see servlet-5.0 module latestDepTestLibrary("org.apache.tomcat.embed:tomcat-embed-jasper:9.+") // see servlet-5.0 module From a01d7c1fcf174f47153ced82e4cc5f3b340802fb Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 22 Aug 2024 12:39:11 +0200 Subject: [PATCH 20/43] avoid /org/eclipse/jetty/server/Request.class): warning: Cannot find annotation method 'since()' in type 'Deprecated' --- .../servlet/servlet-3.0/javaagent/build.gradle.kts | 12 ++++++++++-- .../dispatch/TomcatServlet3DispatchAsyncTest.java | 7 +++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts b/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts index 605baed904be..639bdac3624b 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts +++ b/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts @@ -30,8 +30,8 @@ dependencies { testLibrary("org.apache.tomcat.embed:tomcat-embed-core:8.0.41") testLibrary("org.apache.tomcat.embed:tomcat-embed-jasper:8.0.41") - latestDepTestLibrary("org.eclipse.jetty:jetty-server:11.+") // see servlet-5.0 module - latestDepTestLibrary("org.eclipse.jetty:jetty-servlet:11.+") // see servlet-5.0 module + latestDepTestLibrary("org.eclipse.jetty:jetty-server:10.+") // see servlet-5.0 module + latestDepTestLibrary("org.eclipse.jetty:jetty-servlet:10.+") // see servlet-5.0 module latestDepTestLibrary("org.apache.tomcat.embed:tomcat-embed-core:9.+") // see servlet-5.0 module latestDepTestLibrary("org.apache.tomcat.embed:tomcat-embed-jasper:9.+") // see servlet-5.0 module @@ -45,3 +45,11 @@ tasks { jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") } } + +val latestDepTest = findProperty("testLatestDeps") as Boolean + +if (latestDepTest) { + otelJava { + minJavaVersionSupported.set(JavaVersion.VERSION_11) + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java index 3385485767e8..e0aa26201af7 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java @@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import javax.servlet.Servlet; import org.apache.catalina.Context; @@ -32,6 +33,12 @@ public TomcatServlet3DispatchAsyncTest() { super(testing); } + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setVerifyServerSpanEndTime(false); + } + @Override public Class servlet() { return TestServlet3.Async.class; From 417f45d9d72ecd2a40d0d8b4a8ca48541d9e077c Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 22 Aug 2024 15:45:41 +0200 Subject: [PATCH 21/43] fix --- instrumentation/tapestry-5.4/javaagent/build.gradle.kts | 2 -- 1 file changed, 2 deletions(-) diff --git a/instrumentation/tapestry-5.4/javaagent/build.gradle.kts b/instrumentation/tapestry-5.4/javaagent/build.gradle.kts index 65f356fda056..a2d48db05826 100644 --- a/instrumentation/tapestry-5.4/javaagent/build.gradle.kts +++ b/instrumentation/tapestry-5.4/javaagent/build.gradle.kts @@ -25,8 +25,6 @@ dependencies { testImplementation("javax.annotation:javax.annotation-api:1.3.2") testInstrumentation(project(":instrumentation:jetty:jetty-8.0:javaagent")) - testInstrumentation(project(":instrumentation:servlet:servlet-3.0:javaagent")) - testInstrumentation(project(":instrumentation:servlet:servlet-javax-common:javaagent")) } tasks.withType().configureEach { From 7763530340e1f74779d89b984105108ee8b0a8c2 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 22 Aug 2024 18:38:01 +0200 Subject: [PATCH 22/43] fix --- instrumentation/tapestry-5.4/javaagent/build.gradle.kts | 2 ++ .../javaagent/instrumentation/tapestry/TapestryTest.java | 8 ++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/instrumentation/tapestry-5.4/javaagent/build.gradle.kts b/instrumentation/tapestry-5.4/javaagent/build.gradle.kts index a2d48db05826..65f356fda056 100644 --- a/instrumentation/tapestry-5.4/javaagent/build.gradle.kts +++ b/instrumentation/tapestry-5.4/javaagent/build.gradle.kts @@ -25,6 +25,8 @@ dependencies { testImplementation("javax.annotation:javax.annotation-api:1.3.2") testInstrumentation(project(":instrumentation:jetty:jetty-8.0:javaagent")) + testInstrumentation(project(":instrumentation:servlet:servlet-3.0:javaagent")) + testInstrumentation(project(":instrumentation:servlet:servlet-javax-common:javaagent")) } tasks.withType().configureEach { diff --git a/instrumentation/tapestry-5.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/tapestry/TapestryTest.java b/instrumentation/tapestry-5.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/tapestry/TapestryTest.java index 05d4d0209ee5..bb83079938d5 100644 --- a/instrumentation/tapestry-5.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/tapestry/TapestryTest.java +++ b/instrumentation/tapestry-5.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/tapestry/TapestryTest.java @@ -14,7 +14,7 @@ import io.opentelemetry.sdk.trace.data.StatusData; import io.opentelemetry.testing.internal.armeria.client.WebClient; import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; -import org.eclipse.jetty.server.Connector; +import java.net.InetSocketAddress; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.util.resource.Resource; import org.eclipse.jetty.webapp.WebAppContext; @@ -36,14 +36,10 @@ class TapestryTest extends AbstractHttpServerUsingTest { protected Server setupServer() throws Exception { WebAppContext webAppContext = new WebAppContext(); webAppContext.setContextPath(getContextPath()); - Server jettyServer = new Server(port); + Server jettyServer = new Server(new InetSocketAddress("localhost", port)); // set up test application webAppContext.setBaseResource(Resource.newResource("src/test/webapp")); - for (Connector connector : jettyServer.getConnectors()) { - connector.setHost("localhost"); - } - jettyServer.setHandler(webAppContext); jettyServer.start(); From 84039bec93a4650963bf5bda788cfa50b7ebe588 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 23 Aug 2024 14:48:17 +0200 Subject: [PATCH 23/43] separate tests that need java 11 in latestDep --- .../javaagent-tests/build.gradle.kts | 53 +++++++++++++++++++ .../servlet/v3_0/AbstractServlet3Test.java | 0 .../servlet/v3_0/HttpServletResponseTest.java | 0 .../v3_0/jetty/JettyServlet3AsyncTest.java | 0 .../jetty/JettyServlet3FakeAsyncTest.java | 0 .../v3_0/jetty/JettyServlet3SyncTest.java | 0 .../servlet/v3_0/jetty/JettyServlet3Test.java | 0 .../v3_0/jetty/JettyServletHandlerTest.java | 0 .../jetty/dispatch/JettyDispatchTest.java | 0 .../JettyServlet3DispatchAsyncTest.java | 0 .../JettyServlet3DispatchImmediateTest.java | 0 .../dispatch/JettyServlet3ForwardTest.java | 0 .../dispatch/JettyServlet3IncludeTest.java | 0 .../mapping/AbstractServlet3MappingTest.java | 0 .../mapping/JettyServlet3MappingTest.java | 0 .../TomcatServlet3FilterMappingTest.java | 0 ...tServlet3FilterServletNameMappingTest.java | 0 ...atServlet3FilterUrlPatternMappingTest.java | 0 .../mapping/TomcatServlet3MappingTest.java | 0 .../v3_0/tomcat/ErrorHandlerValve.java | 0 .../v3_0/tomcat/RequestDispatcherServlet.java | 0 .../v3_0/tomcat/TestAccessLogValve.java | 0 .../servlet/v3_0/tomcat/TestServlet3.java | 0 .../v3_0/tomcat/TomcatServlet3AsyncTest.java | 0 .../tomcat/TomcatServlet3FakeAsyncTest.java | 0 .../v3_0/tomcat/TomcatServlet3SyncTest.java | 0 .../v3_0/tomcat/TomcatServlet3Test.java | 0 .../tomcat/dispatch/TomcatDispatchTest.java | 0 .../TomcatServlet3DispatchAsyncTest.java | 0 .../TomcatServlet3DispatchImmediateTest.java | 0 .../dispatch/TomcatServlet3ForwardTest.java | 0 .../dispatch/TomcatServlet3IncludeTest.java | 0 .../src/test/resources/realm.properties | 0 .../servlet-3.0/javaagent/build.gradle.kts | 8 --- settings.gradle.kts | 1 + 35 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent => javaagent-tests}/src/test/resources/realm.properties (100%) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts b/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts new file mode 100644 index 000000000000..bbf8d3231797 --- /dev/null +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts @@ -0,0 +1,53 @@ +plugins { + id("otel.javaagent-instrumentation") +} +muzzle { + pass { + group.set("javax.servlet") + module.set("javax.servlet-api") + versions.set("[3.0,)") + assertInverse.set(true) + } + fail { + group.set("javax.servlet") + module.set("servlet-api") + versions.set("(,)") + } +} + +dependencies { + testImplementation(project(":instrumentation:servlet:servlet-3.0:javaagent")) + + compileOnly("javax.servlet:javax.servlet-api:3.0.1") + + testInstrumentation(project(":instrumentation:jetty:jetty-8.0:javaagent")) + testImplementation(project(":instrumentation:servlet:servlet-common:bootstrap")) + + testLibrary("org.eclipse.jetty:jetty-server:8.0.0.v20110901") + testLibrary("org.eclipse.jetty:jetty-servlet:8.0.0.v20110901") + testLibrary("org.apache.tomcat.embed:tomcat-embed-core:8.0.41") + testLibrary("org.apache.tomcat.embed:tomcat-embed-jasper:8.0.41") + + latestDepTestLibrary("org.eclipse.jetty:jetty-server:10.+") // see servlet-5.0 module + latestDepTestLibrary("org.eclipse.jetty:jetty-servlet:10.+") // see servlet-5.0 module + + latestDepTestLibrary("org.apache.tomcat.embed:tomcat-embed-core:9.+") // see servlet-5.0 module + latestDepTestLibrary("org.apache.tomcat.embed:tomcat-embed-jasper:9.+") // see servlet-5.0 module +} + +tasks { + withType().configureEach { + jvmArgs("-Dotel.instrumentation.servlet.experimental.capture-request-parameters=test-parameter") + // required on jdk17 + jvmArgs("--add-opens=java.base/java.util=ALL-UNNAMED") + jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") + } +} + +val latestDepTest = findProperty("testLatestDeps") as Boolean + +if (latestDepTest) { + otelJava { + minJavaVersionSupported.set(JavaVersion.VERSION_11) + } +} diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent/src/test/resources/realm.properties b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/resources/realm.properties similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent/src/test/resources/realm.properties rename to instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/resources/realm.properties diff --git a/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts b/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts index 639bdac3624b..7b6bafd9de42 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts +++ b/instrumentation/servlet/servlet-3.0/javaagent/build.gradle.kts @@ -45,11 +45,3 @@ tasks { jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") } } - -val latestDepTest = findProperty("testLatestDeps") as Boolean - -if (latestDepTest) { - otelJava { - minJavaVersionSupported.set(JavaVersion.VERSION_11) - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index b5a17c333e59..8672bddf189e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -541,6 +541,7 @@ include(":instrumentation:rxjava:rxjava-3-common:testing") include(":instrumentation:scala-fork-join-2.8:javaagent") include(":instrumentation:servlet:servlet-2.2:javaagent") include(":instrumentation:servlet:servlet-3.0:javaagent") +include(":instrumentation:servlet:servlet-3.0:javaagent-tests") include(":instrumentation:servlet:servlet-3.0:javaagent-unit-tests") include(":instrumentation:servlet:servlet-5.0:javaagent") include(":instrumentation:servlet:servlet-5.0:javaagent-unit-tests") From cc2e9dd6d6a295ccbabd6e0d59e82c2acd3b2d39 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 23 Aug 2024 14:51:39 +0200 Subject: [PATCH 24/43] separate tests that need java 11 in latestDep --- .../servlet-3.0/javaagent-tests/build.gradle.kts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts b/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts index bbf8d3231797..8a22d1319cdd 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts @@ -1,19 +1,6 @@ plugins { id("otel.javaagent-instrumentation") } -muzzle { - pass { - group.set("javax.servlet") - module.set("javax.servlet-api") - versions.set("[3.0,)") - assertInverse.set(true) - } - fail { - group.set("javax.servlet") - module.set("servlet-api") - versions.set("(,)") - } -} dependencies { testImplementation(project(":instrumentation:servlet:servlet-3.0:javaagent")) From 0295fe3f46c896a1a98f35ba4ca997ede72018fc Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 23 Aug 2024 15:42:18 +0200 Subject: [PATCH 25/43] separate tests that need java 11 in latestDep --- .../servlet/servlet-3.0/javaagent-tests/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts b/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts index 8a22d1319cdd..1b64c1aec3a6 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("otel.javaagent-instrumentation") + id("otel.javaagent-testing") } dependencies { From 4363f63cdb469c5f460cc421e69735203276f7b4 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 23 Aug 2024 16:21:35 +0200 Subject: [PATCH 26/43] use camel case --- .../servlet/v2_2/HttpServletResponseTest.java | 6 +++--- .../instrumentation/servlet/v3_0/AbstractServlet3Test.java | 4 ++-- .../servlet/v3_0/HttpServletResponseTest.java | 6 +++--- .../servlet/v3_0/tomcat/TomcatServlet3Test.java | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java index 4b3992650cdb..e828eb0a42e6 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java @@ -55,7 +55,7 @@ void setUp() throws ServletException, IOException { } @Test - void test_send_no_parent() { + void testSendNoParent() { response.sendError(0); response.sendError(0, ""); response.sendRedirect(""); @@ -64,7 +64,7 @@ void test_send_no_parent() { } @Test - void test_send_with_parent() { + void testSendWithParent() { runWithSpan( "parent", () -> { @@ -107,7 +107,7 @@ void test_send_with_parent() { } @Test - void test_send_with_exception() throws ServletException, IOException { + void testSendWithException() throws ServletException, IOException { RuntimeException ex = new RuntimeException("some error"); TestResponse response = new TestResponse() { diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index 4d438d0378b5..c5dbdeee8543 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -146,7 +146,7 @@ protected boolean assertParentOnRedirect() { } @Test - void snippet_injection_with_ServletOutputStream() { + void snippetInjectionWithServletOutputStream() { ExperimentalSnippetHolder.setSnippet( "\n "); AggregatedHttpRequest request = request(HTML_SERVLET_OUTPUT_STREAM, "GET"); @@ -185,7 +185,7 @@ void snippet_injection_with_ServletOutputStream() { } @Test - void snippet_injection_with_PrintWriter() { + void snippetInjectionWithPrintWriter() { ExperimentalSnippetHolder.setSnippet("\n "); AggregatedHttpRequest request = request(HTML_PRINT_WRITER, "GET"); AggregatedHttpResponse response = client.execute(request).aggregate().join(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java index d8a6ec35c635..e579ebf8ac54 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java @@ -54,7 +54,7 @@ void setUp() throws ServletException, IOException { } @Test - void test_send_no_parent() throws IOException { + void testSendNoParent() throws IOException { response.sendError(0); response.sendError(0, ""); response.sendRedirect(""); @@ -63,7 +63,7 @@ void test_send_no_parent() throws IOException { } @Test - void test_send_with_parent() throws IOException { + void testSendWithParent() throws IOException { runWithSpan( "parent", () -> { @@ -106,7 +106,7 @@ void test_send_with_parent() throws IOException { } @Test - void test_send_with_exception() throws ServletException, IOException { + void testSendWithException() throws ServletException, IOException { TestResponse response = new TestResponse() { @Override diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index 760e79e13c1b..30147e49c5f4 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -195,7 +195,7 @@ void access_log_has_ids_for__count_requests(int count) { } @Test - void access_log_has_ids_for_error_request() { + void accessLogHasIdsForErrorRequest() { Assumptions.assumeTrue(testError()); AggregatedHttpRequest request = request(ACCESS_LOG_ERROR, "GET"); From 11663e4ddfe966f7f27e2adc3b9f872dc1d50557 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 26 Aug 2024 09:48:00 +0200 Subject: [PATCH 27/43] no need to pass around testing --- .../servlet/v3_0/AbstractServlet3Test.java | 53 +++++++++---------- .../servlet/v3_0/jetty/JettyServlet3Test.java | 4 -- .../v3_0/jetty/JettyServletHandlerTest.java | 4 -- .../v3_0/tomcat/TomcatServlet3AsyncTest.java | 4 -- .../tomcat/TomcatServlet3FakeAsyncTest.java | 4 -- .../v3_0/tomcat/TomcatServlet3SyncTest.java | 4 -- .../v3_0/tomcat/TomcatServlet3Test.java | 16 +++--- .../tomcat/dispatch/TomcatDispatchTest.java | 5 -- .../TomcatServlet3DispatchAsyncTest.java | 4 -- .../TomcatServlet3DispatchImmediateTest.java | 4 -- .../dispatch/TomcatServlet3ForwardTest.java | 4 -- .../dispatch/TomcatServlet3IncludeTest.java | 4 -- 12 files changed, 30 insertions(+), 80 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index c5dbdeee8543..ab29dbd9613b 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -19,7 +19,6 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.HttpConstants; -import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; @@ -33,12 +32,6 @@ public abstract class AbstractServlet3Test extends AbstractHttpServerTest { - protected final InstrumentationExtension testing; - - public AbstractServlet3Test(InstrumentationExtension testing) { - this.testing = testing; - } - public static final ServerEndpoint HTML_PRINT_WRITER = new ServerEndpoint( "HTML_PRINT_WRITER", @@ -171,17 +164,18 @@ void snippetInjectionWithServletOutputStream() { ExperimentalSnippetHolder.setSnippet(""); String expectedRoute = expectedHttpRoute(HTML_SERVLET_OUTPUT_STREAM, "GET"); - testing.waitAndAssertTraces( - trace -> - trace.hasSpansSatisfyingExactly( - span -> - span.hasName("GET" + (expectedRoute != null ? " " + expectedRoute : "")) - .hasKind(SpanKind.SERVER) - .hasNoParent(), - span -> - span.hasName("controller") - .hasKind(SpanKind.INTERNAL) - .hasParent(trace.getSpan(0)))); + testing() + .waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("GET" + (expectedRoute != null ? " " + expectedRoute : "")) + .hasKind(SpanKind.SERVER) + .hasNoParent(), + span -> + span.hasName("controller") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)))); } @Test @@ -210,16 +204,17 @@ void snippetInjectionWithPrintWriter() { ExperimentalSnippetHolder.setSnippet(""); String expectedRoute = expectedHttpRoute(HTML_PRINT_WRITER, "GET"); - testing.waitAndAssertTraces( - trace -> - trace.hasSpansSatisfyingExactly( - span -> - span.hasName("GET" + (expectedRoute != null ? " " + expectedRoute : "")) - .hasKind(SpanKind.SERVER) - .hasNoParent(), - span -> - span.hasName("controller") - .hasKind(SpanKind.INTERNAL) - .hasParent(trace.getSpan(0)))); + testing() + .waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("GET" + (expectedRoute != null ? " " + expectedRoute : "")) + .hasKind(SpanKind.SERVER) + .hasNoParent(), + span -> + span.hasName("controller") + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(0)))); } } diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index da7d40d6f5ea..48a540b922bb 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -36,10 +36,6 @@ public abstract class JettyServlet3Test protected static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); - public JettyServlet3Test() { - super(testing); - } - static final boolean IS_BEFORE_94 = isBefore94(); public static boolean isBefore94() { diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 91d5e9ed23f2..49b72bda72e0 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -39,10 +39,6 @@ public class JettyServletHandlerTest extends AbstractServlet3Test servlet() { return TestServlet3.Async.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java index 1625759009ef..de245fc837ab 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java @@ -16,10 +16,6 @@ class TomcatServlet3FakeAsyncTest extends TomcatServlet3Test { protected static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); - public TomcatServlet3FakeAsyncTest() { - super(testing); - } - @Override public Class servlet() { return TestServlet3.FakeAsync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java index 924500cb38f1..b15b04d4153c 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java @@ -16,10 +16,6 @@ class TomcatServlet3SyncTest extends TomcatServlet3Test { protected static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); - public TomcatServlet3SyncTest() { - super(testing); - } - @Override public Class servlet() { return TestServlet3.Sync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index 30147e49c5f4..70170cbf8552 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -12,7 +12,6 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; -import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil; @@ -61,10 +60,6 @@ public abstract class TomcatServlet3Test extends AbstractServlet3Test assertServerSpan(span, "GET", ACCESS_LOG_SUCCESS, SUCCESS.getStatus()), span -> assertControllerSpan(span, null)); - testing.waitAndAssertTraces( - IntStream.range(0, count).mapToObj(i -> check).collect(Collectors.toList())); + testing() + .waitAndAssertTraces( + IntStream.range(0, count).mapToObj(i -> check).collect(Collectors.toList())); - List> traces = TelemetryDataUtil.groupTraces(testing.spans()); + List> traces = TelemetryDataUtil.groupTraces(testing().getExportedSpans()); for (int i = 0; i < count; i++) { assertThat(loggedTraces).contains(traces.get(i).get(0).getTraceId()); @@ -209,7 +205,7 @@ void accessLogHasIdsForErrorRequest() { spanCount++; } - List spanData = TelemetryDataUtil.groupTraces(testing.spans()).get(0); + List spanData = TelemetryDataUtil.groupTraces(testing().getExportedSpans()).get(0); List spans = spanData.stream().map(OpenTelemetryAssertions::assertThat).collect(Collectors.toList()); assertThat(spans).hasSize(spanCount); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java index aa9ce8cf7fd1..bbcf1374133c 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java @@ -5,16 +5,11 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.dispatch; -import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TomcatServlet3Test; abstract class TomcatDispatchTest extends TomcatServlet3Test { - public TomcatDispatchTest(InstrumentationExtension testing) { - super(testing); - } - @Override protected void configure(HttpServerTestOptions options) { super.configure(options); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java index e0aa26201af7..932b0240c7c9 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java @@ -29,10 +29,6 @@ class TomcatServlet3DispatchAsyncTest extends TomcatDispatchTest { protected static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); - public TomcatServlet3DispatchAsyncTest() { - super(testing); - } - @Override protected void configure(HttpServerTestOptions options) { super.configure(options); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java index 25dbd3db2dd8..394b22efe1b9 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java @@ -29,10 +29,6 @@ class TomcatServlet3DispatchImmediateTest extends TomcatDispatchTest { protected static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); - public TomcatServlet3DispatchImmediateTest() { - super(testing); - } - @Override public Class servlet() { return TestServlet3.Sync.class; diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java index 9552fcbf3089..3c66be4068a4 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java @@ -30,10 +30,6 @@ class TomcatServlet3ForwardTest extends TomcatDispatchTest { protected static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); - public TomcatServlet3ForwardTest() { - super(testing); - } - @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java index ea392d84312e..e6d76ac0c0e4 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java @@ -29,10 +29,6 @@ class TomcatServlet3IncludeTest extends TomcatDispatchTest { protected static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); - public TomcatServlet3IncludeTest() { - super(testing); - } - @Override public Class servlet() { return TestServlet3.Sync.class; // dispatch to sync servlet From 4210eb1978a7a2eff01263ad632e4b72c82c389b Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 27 Aug 2024 14:12:24 +0200 Subject: [PATCH 28/43] use hasException --- .../servlet/v2_2/HttpServletResponseTest.java | 28 ++----------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java index e828eb0a42e6..0bf2090b6e17 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/HttpServletResponseTest.java @@ -8,7 +8,6 @@ import static io.opentelemetry.instrumentation.testing.GlobalTraceUtil.runWithSpan; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; -import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static org.assertj.core.api.Assertions.assertThatCode; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -17,7 +16,6 @@ import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.sdk.trace.data.StatusData; -import io.opentelemetry.semconv.ExceptionAttributes; import io.opentelemetry.semconv.incubating.CodeIncubatingAttributes; import java.io.IOException; import java.io.PrintWriter; @@ -133,35 +131,13 @@ public void sendRedirect(String s) { .hasKind(SpanKind.INTERNAL) .hasNoParent() .hasStatus(StatusData.error()) - .hasEventsSatisfyingExactly( - event -> - event.hasAttributesSatisfyingExactly( - equalTo( - ExceptionAttributes.EXCEPTION_TYPE, - "java.lang.RuntimeException"), - satisfies( - ExceptionAttributes.EXCEPTION_MESSAGE, - message -> message.startsWith("some error")), - satisfies( - ExceptionAttributes.EXCEPTION_STACKTRACE, - val -> val.isInstanceOf(String.class)))), + .hasException(ex), span -> span.hasName("HttpServletResponseTest$2.sendRedirect") .hasKind(SpanKind.INTERNAL) .hasParent(trace.getSpan(0)) .hasStatus(StatusData.error()) - .hasEventsSatisfyingExactly( - event -> - event.hasAttributesSatisfyingExactly( - equalTo( - ExceptionAttributes.EXCEPTION_TYPE, - "java.lang.RuntimeException"), - satisfies( - ExceptionAttributes.EXCEPTION_MESSAGE, - message -> message.startsWith("some error")), - satisfies( - ExceptionAttributes.EXCEPTION_STACKTRACE, - val -> val.isInstanceOf(String.class)))))); + .hasException(ex))); } /** Tests deprecated methods */ From 40fd910c0d32d77b14485a7812c106b1f6e18866 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 29 Aug 2024 14:26:08 +0200 Subject: [PATCH 29/43] switch to enum --- .../servlet/v2_2/JettyServlet2Test.java | 15 ++++--- .../servlet/v2_2/TestServlet2.java | 45 +++++++++---------- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java index 69c0afee57e7..07ac818be6ed 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/JettyServlet2Test.java @@ -10,6 +10,8 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.PATH_PARAM; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; @@ -100,13 +102,12 @@ public String expectedServerSpanName( return "HTTP " + getContextPath() + endpoint.getPath(); } - switch (endpoint.name()) { - case "NOT_FOUND": - return method; - case "PATH_PARAM": - return method + " " + getContextPath() + "/path/:id/param"; - default: - return method + " " + getContextPath() + endpoint.getPath(); + if (NOT_FOUND.equals(endpoint)) { + return method; + } else if (PATH_PARAM.equals(endpoint)) { + return method + " " + getContextPath() + "/path/:id/param"; + } else { + return method + " " + getContextPath() + endpoint.getPath(); } } diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java index c5c7cf3b4286..e886697e4951 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java @@ -5,7 +5,12 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v2_2; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; import io.opentelemetry.instrumentation.test.base.HttpServerTest; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; @@ -26,30 +31,22 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { endpoint, () -> { resp.setContentType("text/plain"); - switch (endpoint.name()) { - case "SUCCESS": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - break; - case "QUERY_PARAM": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(req.getQueryString()); - break; - case "REDIRECT": - resp.sendRedirect(endpoint.getBody()); - break; - case "ERROR": - resp.sendError(endpoint.getStatus(), endpoint.getBody()); - break; - case "EXCEPTION": - throw new Exception(endpoint.getBody()); - case "INDEXED_CHILD": - INDEXED_CHILD.collectSpanAttributes(req::getParameter); - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - break; - default: - break; + if (SUCCESS.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + } else if (QUERY_PARAM.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(req.getQueryString()); + } else if (REDIRECT.equals(endpoint)) { + resp.sendRedirect(endpoint.getBody()); + } else if (ERROR.equals(endpoint)) { + resp.sendError(endpoint.getStatus(), endpoint.getBody()); + } else if (EXCEPTION.equals(endpoint)) { + throw new Exception(endpoint.getBody()); + } else if (INDEXED_CHILD.equals(endpoint)) { + INDEXED_CHILD.collectSpanAttributes(req::getParameter); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); } return null; }); From 49ac4fcda8fee3ddbbd917da110cf3cd93faea3f Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 29 Aug 2024 14:30:46 +0200 Subject: [PATCH 30/43] explain why we have the project --- .../servlet/servlet-3.0/javaagent-tests/build.gradle.kts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts b/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts index 1b64c1aec3a6..012f2f49ca0d 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts @@ -31,6 +31,9 @@ tasks { } } +// Servlet 3.0 in latest Jetty versions requires Java 11 +// However, projects that depend on this module are still be using Java 8 in testLatestDeps mode +// Therefore, we need a separate project for servlet 3.0 tests val latestDepTest = findProperty("testLatestDeps") as Boolean if (latestDepTest) { From b21971f06a85ba6ad3980395559867317c430979 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 29 Aug 2024 15:52:20 +0200 Subject: [PATCH 31/43] pr review --- .../servlet/v2_2/TestServlet2.java | 2 +- .../servlet/v3_0/AbstractServlet3Test.java | 5 +-- .../servlet/v3_0/HttpServletResponseTest.java | 12 +------ .../servlet/v3_0/jetty/JettyServlet3Test.java | 3 +- .../v3_0/jetty/JettyServletHandlerTest.java | 3 +- .../JettyServlet3DispatchAsyncTest.java | 2 +- .../JettyServlet3DispatchImmediateTest.java | 2 +- .../dispatch/JettyServlet3ForwardTest.java | 2 +- .../dispatch/JettyServlet3IncludeTest.java | 2 +- .../mapping/AbstractServlet3MappingTest.java | 7 ++-- .../mapping/JettyServlet3MappingTest.java | 18 +++------- .../TomcatServlet3FilterMappingTest.java | 19 +++-------- ...tServlet3FilterServletNameMappingTest.java | 2 +- ...atServlet3FilterUrlPatternMappingTest.java | 2 +- .../mapping/TomcatServlet3MappingTest.java | 34 +++++-------------- .../v3_0/tomcat/TestAccessLogValve.java | 13 +++---- .../servlet/v3_0/tomcat/TestServlet3.java | 8 ++--- .../v3_0/tomcat/TomcatServlet3Test.java | 21 ++++-------- .../TomcatServlet3DispatchAsyncTest.java | 2 +- .../TomcatServlet3DispatchImmediateTest.java | 2 +- .../dispatch/TomcatServlet3ForwardTest.java | 2 +- .../dispatch/TomcatServlet3IncludeTest.java | 2 +- .../src/test/groovy/TomcatServlet5Test.groovy | 1 - 23 files changed, 56 insertions(+), 110 deletions(-) diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java index e886697e4951..8890b0dd91b4 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/TestServlet2.java @@ -33,7 +33,7 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { resp.setContentType("text/plain"); if (SUCCESS.equals(endpoint)) { resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); + resp.getWriter().print(endpoint.getBody()); } else if (QUERY_PARAM.equals(endpoint)) { resp.setStatus(endpoint.getStatus()); resp.getWriter().print(req.getQueryString()); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index ab29dbd9613b..4d27cbc42d5f 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -77,9 +77,10 @@ protected boolean hasResponseSpan(ServerEndpoint endpoint) { public abstract Class servlet(); - public abstract void addServlet(CONTEXT context, String path, Class servlet); + public abstract void addServlet(CONTEXT context, String path, Class servlet) + throws Exception; - protected void setupServlets(CONTEXT context) { + protected void setupServlets(CONTEXT context) throws Exception { Class servlet = servlet(); addServlet(context, SUCCESS.getPath(), servlet); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java index e579ebf8ac54..a71c4a239768 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java @@ -119,17 +119,7 @@ public void sendRedirect(String s) { servlet.service(request, response); testing.clearData(); - assertThatCode( - () -> - runWithSpan( - "parent", - () -> { - try { - response.sendRedirect(""); - } catch (IOException e) { - throw new RuntimeException(e); - } - })) + assertThatCode(() -> runWithSpan("parent", () -> response.sendRedirect(""))) .isInstanceOf(RuntimeException.class) .hasMessage("some error"); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index 48a540b922bb..e4c2bb6a1656 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -123,7 +123,8 @@ public void stopServer(Server server) throws Exception { @Override public void addServlet( - ServletContextHandler servletContext, String path, Class servlet) { + ServletContextHandler servletContext, String path, Class servlet) + throws Exception { servletContext.addServlet(servlet, path); } } diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 49b72bda72e0..5e33b20807e0 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -103,7 +103,8 @@ protected void handleErrorPage( @Override public void addServlet( - ServletHandler servletHandler, String path, Class servlet) { + ServletHandler servletHandler, String path, Class servlet) + throws Exception { servletHandler.addServletWithMapping(servlet, path); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java index 80b7f2ac6cf6..bfa2548a1080 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java @@ -31,7 +31,7 @@ public boolean isAsyncTest() { } @Override - protected void setupServlets(ServletContextHandler context) { + protected void setupServlets(ServletContextHandler context) throws Exception { super.setupServlets(context); addServlet( context, "/dispatch" + HTML_PRINT_WRITER.getPath(), TestServlet3.DispatchAsync.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java index cefa1da33946..1255096e526e 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java @@ -36,7 +36,7 @@ public boolean errorEndpointUsesSendError() { } @Override - protected void setupServlets(ServletContextHandler context) { + protected void setupServlets(ServletContextHandler context) throws Exception { super.setupServlets(context); addServlet( context, "/dispatch" + HTML_PRINT_WRITER.getPath(), TestServlet3.DispatchImmediate.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java index a84d796a8e0b..f526519127c6 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java @@ -27,7 +27,7 @@ public Class servlet() { } @Override - protected void setupServlets(ServletContextHandler context) { + protected void setupServlets(ServletContextHandler context) throws Exception { super.setupServlets(context); addServlet(context, "/dispatch" + SUCCESS.getPath(), RequestDispatcherServlet.Forward.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java index 821cdef09c21..d30b5e8fd636 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java @@ -35,7 +35,7 @@ protected void configure(HttpServerTestOptions options) { } @Override - protected void setupServlets(ServletContextHandler context) { + protected void setupServlets(ServletContextHandler context) throws Exception { super.setupServlets(context); addServlet(context, "/dispatch" + SUCCESS.getPath(), RequestDispatcherServlet.Include.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java index b0f0429afcc5..39e05d8d8402 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java @@ -41,9 +41,10 @@ void cleanup() { cleanupServer(); } - public abstract void addServlet(CONTEXT context, String path, Class servlet); + public abstract void addServlet(CONTEXT context, String path, Class servlet) + throws Exception; - protected void setupServlets(CONTEXT context) { + protected void setupServlets(CONTEXT context) throws Exception { addServlet(context, "/prefix/*", TestServlet.class); addServlet(context, "*.suffix", TestServlet.class); } @@ -58,7 +59,7 @@ protected void setupServlets(CONTEXT context) { ".suffix, /*.suffix, true", "suffix, /*, false", }) - void test_path__path(String path, String route, boolean success) { + void testPath(String path, String route, boolean success) { AggregatedHttpResponse response = client.get(address.resolve(path).toString()).aggregate().join(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java index 1422e9a05066..5cfc4b2ecbed 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java @@ -16,31 +16,23 @@ class JettyServlet3MappingTest extends AbstractServlet3MappingTest { @Override - protected Server setupServer() { + protected Server setupServer() throws Exception { Server server = new Server(port); ServletContextHandler handler = new ServletContextHandler(null, getContextPath()); setupServlets(handler); server.setHandler(handler); - try { - server.start(); - } catch (Exception e) { - throw new RuntimeException(e); - } + server.start(); return server; } @Override - public void stopServer(Server server) { - try { - server.stop(); - } catch (Exception e) { - throw new RuntimeException(e); - } + public void stopServer(Server server) throws Exception { + server.stop(); server.destroy(); } @Override - protected void setupServlets(ServletContextHandler handler) { + protected void setupServlets(ServletContextHandler handler) throws Exception { super.setupServlets(handler); addServlet(handler, "/", DefaultServlet.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java index 4c6a77b87375..75b8969f533b 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java @@ -21,15 +21,11 @@ import org.apache.tomcat.util.descriptor.web.FilterMap; abstract class TomcatServlet3FilterMappingTest extends TomcatServlet3MappingTest { - @SuppressWarnings("ClassNewInstance") - public void addFilter(Context servletContext, String path, Class filter) { + public void addFilter(Context servletContext, String path, Class filter) + throws Exception { String name = UUID.randomUUID().toString(); FilterDef filterDef = new FilterDef(); - try { - filterDef.setFilter(filter.newInstance()); - } catch (Exception e) { - throw new RuntimeException(e); - } + filterDef.setFilter(filter.getConstructor().newInstance()); filterDef.setFilterName(name); servletContext.addFilterDef(filterDef); FilterMap filterMap = new FilterMap(); @@ -38,16 +34,11 @@ public void addFilter(Context servletContext, String path, Class filter) { + Context servletContext, String servletName, Class filter) throws Exception { String name = UUID.randomUUID().toString(); FilterDef filterDef = new FilterDef(); - try { - filterDef.setFilter(filter.newInstance()); - } catch (Exception e) { - throw new RuntimeException(e); - } + filterDef.setFilter(filter.getConstructor().newInstance()); filterDef.setFilterName(name); servletContext.addFilterDef(filterDef); FilterMap filterMap = new FilterMap(); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java index 9e50c23bce72..fc66fb4f69df 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java @@ -10,7 +10,7 @@ class TomcatServlet3FilterServletNameMappingTest extends TomcatServlet3FilterMappingTest { @Override - protected void setupServlets(Context context) { + protected void setupServlets(Context context) throws Exception { Tomcat.addServlet(context, "prefix-servlet", new DefaultServlet()); context.addServletMappingDecoded("/prefix/*", "prefix-servlet"); Tomcat.addServlet(context, "suffix-servlet", new DefaultServlet()); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java index 641849c9c4f7..1ede84cb6337 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java @@ -9,7 +9,7 @@ class TomcatServlet3FilterUrlPatternMappingTest extends TomcatServlet3FilterMappingTest { @Override - protected void setupServlets(Context context) { + protected void setupServlets(Context context) throws Exception { addFilter(context, "/*", FirstFilter.class); addFilter(context, "/prefix/*", TestFilter.class); addFilter(context, "*.suffix", TestFilter.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java index cb7ed483c34a..400877d8a1ea 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.mapping; import java.io.File; -import java.io.IOException; import java.nio.file.Files; import java.util.UUID; import javax.servlet.Servlet; @@ -19,12 +18,7 @@ class TomcatServlet3MappingTest extends AbstractServlet3MappingTest servlet) { + public void addServlet(Context context, String path, Class servlet) + throws Exception { String name = UUID.randomUUID().toString(); - try { - Tomcat.addServlet(context, name, servlet.newInstance()); - } catch (Exception e) { - throw new RuntimeException(e); - } + Tomcat.addServlet(context, name, servlet.getConstructor().newInstance()); context.addServletMappingDecoded(path, name); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java index e724cc4d67af..176a19c7df80 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java @@ -18,6 +18,13 @@ import org.apache.catalina.valves.ValveBase; class TestAccessLogValve extends ValveBase implements AccessLog { + + public final List> getLoggedIds() { + return loggedIds; + } + + private final List> loggedIds = new ArrayList<>(); + public TestAccessLogValve() { super(true); } @@ -71,10 +78,4 @@ public boolean getRequestAttributesEnabled() { public void invoke(Request request, Response response) throws IOException, ServletException { getNext().invoke(request, response); } - - public final List> getLoggedIds() { - return loggedIds; - } - - private final List> loggedIds = new ArrayList<>(); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java index 5279f52e3ba7..0028a2381706 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java @@ -296,13 +296,9 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { @WebServlet(asyncSupported = true) public static class DispatchRecursive extends HttpServlet { @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) { + protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException { if (req.getServletPath().equals("/recursive")) { - try { - resp.getWriter().print("Hello Recursive"); - } catch (IOException e) { - throw new RuntimeException(e); - } + resp.getWriter().print("Hello Recursive"); } int depth = Integer.parseInt(req.getParameter("depth")); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index 70170cbf8552..3798ce604c04 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -110,7 +110,6 @@ protected Tomcat setupServer() throws Exception { // Speed up startup by disabling jar scanning: servletContext.getJarScanner().setJarScanFilter((jarScanType, jarName) -> false); - // setupAuthentication(tomcatServer, servletContext) setupServlets(servletContext); ((StandardHost) tomcatServer.getHost()) @@ -129,24 +128,16 @@ void setUp() { } @Override - public void stopServer(Tomcat server) { - try { - server.stop(); - server.destroy(); - } catch (LifecycleException e) { - throw new RuntimeException(e); - } + public void stopServer(Tomcat server) throws LifecycleException { + server.stop(); + server.destroy(); } - @SuppressWarnings("ClassNewInstance") @Override - public void addServlet(Context servletContext, String path, Class servlet) { + public void addServlet(Context servletContext, String path, Class servlet) + throws Exception { String name = UUID.randomUUID().toString(); - try { - Tomcat.addServlet(servletContext, name, servlet.newInstance()); - } catch (Exception e) { - throw new RuntimeException(e); - } + Tomcat.addServlet(servletContext, name, servlet.getConstructor().newInstance()); servletContext.addServletMappingDecoded(path, name); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java index 932b0240c7c9..ec0be95b5b83 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java @@ -41,7 +41,7 @@ public Class servlet() { } @Override - protected void setupServlets(Context context) { + protected void setupServlets(Context context) throws Exception { super.setupServlets(context); addServlet(context, "/dispatch" + SUCCESS.getPath(), TestServlet3.DispatchAsync.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java index 394b22efe1b9..b4600339542f 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java @@ -41,7 +41,7 @@ protected void configure(HttpServerTestOptions options) { } @Override - protected void setupServlets(Context context) { + protected void setupServlets(Context context) throws Exception { super.setupServlets(context); addServlet(context, "/dispatch" + SUCCESS.getPath(), TestServlet3.DispatchImmediate.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java index 3c66be4068a4..d3b5dc869fe9 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java @@ -42,7 +42,7 @@ protected void configure(HttpServerTestOptions options) { } @Override - protected void setupServlets(Context context) { + protected void setupServlets(Context context) throws Exception { super.setupServlets(context); addServlet(context, "/dispatch" + SUCCESS.getPath(), RequestDispatcherServlet.Forward.class); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java index e6d76ac0c0e4..d8ac0758f79d 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java @@ -44,7 +44,7 @@ protected void configure(HttpServerTestOptions options) { } @Override - protected void setupServlets(Context context) { + protected void setupServlets(Context context) throws Exception { super.setupServlets(context); addServlet(context, "/dispatch" + SUCCESS.getPath(), RequestDispatcherServlet.Include.class); 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 51375320b93e..ecd73205b8b8 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 @@ -96,7 +96,6 @@ abstract class TomcatServlet5Test extends AbstractServlet5Test } }) -// setupAuthentication(tomcatServer, servletContext) setupServlets(servletContext) (tomcatServer.host as StandardHost).errorReportValveClass = ErrorHandlerValve.name From 0d4f9e10ab316fa8d9ed8245b6ce5c9ffac3be9a Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 30 Aug 2024 17:34:49 +0200 Subject: [PATCH 32/43] switch to if --- .../servlet/v3_0/tomcat/TestServlet3.java | 98 +++++++++---------- 1 file changed, 48 insertions(+), 50 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java index 0028a2381706..385e3145d5e6 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java @@ -5,7 +5,16 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_PARAMETERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; +import static io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test.HTML_PRINT_WRITER; +import static io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test.HTML_SERVLET_OUTPUT_STREAM; import io.opentelemetry.instrumentation.test.base.HttpServerTest; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; @@ -38,57 +47,44 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { endpoint, () -> { resp.setContentType("text/plain"); - switch (endpoint.name()) { - case "SUCCESS": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - break; - case "INDEXED_CHILD": - endpoint.collectSpanAttributes(req::getParameter); - resp.setStatus(endpoint.getStatus()); - break; - case "QUERY_PARAM": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(req.getQueryString()); - break; - case "REDIRECT": - resp.sendRedirect(endpoint.getBody()); - break; - case "CAPTURE_HEADERS": - resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - break; - case "CAPTURE_PARAMETERS": - req.setCharacterEncoding("UTF8"); - String value = req.getParameter("test-parameter"); - if (!value.equals("test value õäöü")) { - throw new ServletException( - "request parameter does not have expected value " + value); - } + if (SUCCESS.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + } else if (INDEXED_CHILD.equals(endpoint)) { + endpoint.collectSpanAttributes(req::getParameter); + resp.setStatus(endpoint.getStatus()); + } else if (QUERY_PARAM.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(req.getQueryString()); + } else if (REDIRECT.equals(endpoint)) { + resp.sendRedirect(endpoint.getBody()); + } else if (CAPTURE_HEADERS.equals(endpoint)) { + resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + } else if (CAPTURE_PARAMETERS.equals(endpoint)) { + req.setCharacterEncoding("UTF8"); + String value = req.getParameter("test-parameter"); + if (!value.equals("test value õäöü")) { + throw new ServletException("request parameter does not have expected value " + value); + } - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - break; - case "ERROR": - resp.sendError(endpoint.getStatus(), endpoint.getBody()); - break; - case "EXCEPTION": - throw new ServletException(endpoint.getBody()); - case "HTML_PRINT_WRITER": - resp.setContentType("text/html"); - resp.setStatus(endpoint.getStatus()); - resp.setContentLength(endpoint.getBody().length()); - resp.getWriter().print(endpoint.getBody()); - break; - case "HTML_SERVLET_OUTPUT_STREAM": - resp.setContentType("text/html"); - resp.setStatus(endpoint.getStatus()); - resp.setContentLength(endpoint.getBody().length()); - resp.getOutputStream().print(endpoint.getBody()); - break; - default: - break; + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + } else if (ERROR.equals(endpoint)) { + resp.sendError(endpoint.getStatus(), endpoint.getBody()); + } else if (EXCEPTION.equals(endpoint)) { + throw new ServletException(endpoint.getBody()); + } else if (HTML_PRINT_WRITER.equals(endpoint)) { + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.setContentLength(endpoint.getBody().length()); + resp.getWriter().print(endpoint.getBody()); + } else if (HTML_SERVLET_OUTPUT_STREAM.equals(endpoint)) { + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.setContentLength(endpoint.getBody().length()); + resp.getOutputStream().print(endpoint.getBody()); } return null; }); @@ -114,6 +110,7 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { () -> { resp.setContentType("text/plain"); switch (endpoint.name()) { + //todo case "SUCCESS": resp.setStatus(endpoint.getStatus()); resp.getWriter().print(endpoint.getBody()); @@ -202,6 +199,7 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { endpoint, () -> { resp.setContentType("text/plain"); + //todo switch (endpoint.name()) { case "SUCCESS": resp.setStatus(endpoint.getStatus()); From 00d5b85970c0bd7eebde2f58e44feb214a0e12cf Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 30 Aug 2024 18:47:49 +0200 Subject: [PATCH 33/43] switch to if --- .../servlet/v3_0/tomcat/TestServlet3.java | 206 ++++++++---------- 1 file changed, 89 insertions(+), 117 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java index 385e3145d5e6..9de164e5ccee 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java @@ -109,74 +109,60 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { endpoint, () -> { resp.setContentType("text/plain"); - switch (endpoint.name()) { - //todo - case "SUCCESS": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - context.complete(); - break; - case "INDEXED_CHILD": - endpoint.collectSpanAttributes(req::getParameter); - resp.setStatus(endpoint.getStatus()); - context.complete(); - break; - case "QUERY_PARAM": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(req.getQueryString()); - context.complete(); - break; - case "REDIRECT": - resp.sendRedirect(endpoint.getBody()); - context.complete(); - break; - case "CAPTURE_HEADERS": - resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - context.complete(); - break; - case "CAPTURE_PARAMETERS": - req.setCharacterEncoding("UTF8"); - String value = req.getParameter("test-parameter"); - if (!value.equals("test value õäöü")) { - throw new ServletException( - "request parameter does not have expected value " + value); - } - - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - context.complete(); - break; - case "ERROR": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - context.complete(); - break; - case "EXCEPTION": - resp.setStatus(endpoint.getStatus()); - PrintWriter writer = resp.getWriter(); - writer.print(endpoint.getBody()); - if (req.getClass().getName().contains("catalina")) { - writer.close(); - } + if (SUCCESS.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + context.complete(); + } else if (INDEXED_CHILD.equals(endpoint)) { + endpoint.collectSpanAttributes(req::getParameter); + resp.setStatus(endpoint.getStatus()); + context.complete(); + } else if (QUERY_PARAM.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(req.getQueryString()); + context.complete(); + } else if (REDIRECT.equals(endpoint)) { + resp.sendRedirect(endpoint.getBody()); + context.complete(); + } else if (CAPTURE_HEADERS.equals(endpoint)) { + resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + context.complete(); + } else if (CAPTURE_PARAMETERS.equals(endpoint)) { + req.setCharacterEncoding("UTF8"); + String value = req.getParameter("test-parameter"); + if (!value.equals("test value õäöü")) { + throw new ServletException( + "request parameter does not have expected value " + value); + } - throw new ServletException(endpoint.getBody()); - case "HTML_PRINT_WRITER": - resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + context.complete(); + } else if (ERROR.equals(endpoint)) { resp.setStatus(endpoint.getStatus()); - resp.setContentLength(endpoint.getBody().length()); resp.getWriter().print(endpoint.getBody()); - context.complete(); - break; - case "HTML_SERVLET_OUTPUT_STREAM": - resp.setContentType("text/html"); - resp.setStatus(endpoint.getStatus()); - resp.getOutputStream().print(endpoint.getBody()); - context.complete(); - break; - default: - break; + context.complete(); + } else if (EXCEPTION.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + PrintWriter writer = resp.getWriter(); + writer.print(endpoint.getBody()); + if (req.getClass().getName().contains("catalina")) { + writer.close(); + } + throw new ServletException(endpoint.getBody()); + } else if (HTML_PRINT_WRITER.equals(endpoint)) { + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.setContentLength(endpoint.getBody().length()); + resp.getWriter().print(endpoint.getBody()); + context.complete(); + } else if (HTML_SERVLET_OUTPUT_STREAM.equals(endpoint)) { + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.getOutputStream().print(endpoint.getBody()); + context.complete(); } return null; }); @@ -199,60 +185,46 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { endpoint, () -> { resp.setContentType("text/plain"); - //todo - switch (endpoint.name()) { - case "SUCCESS": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - break; - case "INDEXED_CHILD": - endpoint.collectSpanAttributes(req::getParameter); - resp.setStatus(endpoint.getStatus()); - break; - case "QUERY_PARAM": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(req.getQueryString()); - break; - case "REDIRECT": - resp.sendRedirect(endpoint.getBody()); - break; - case "CAPTURE_HEADERS": - resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - break; - case "CAPTURE_PARAMETERS": - req.setCharacterEncoding("UTF8"); - String value = req.getParameter("test-parameter"); - if (!value.equals("test value õäöü")) { - throw new ServletException( - "request parameter does not have expected value " + value); - } + if (SUCCESS.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + } else if (INDEXED_CHILD.equals(endpoint)) { + endpoint.collectSpanAttributes(req::getParameter); + resp.setStatus(endpoint.getStatus()); + } else if (QUERY_PARAM.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(req.getQueryString()); + } else if (REDIRECT.equals(endpoint)) { + resp.sendRedirect(endpoint.getBody()); + } else if (CAPTURE_HEADERS.equals(endpoint)) { + resp.setHeader("X-Test-Response", req.getHeader("X-Test-Request")); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + } else if (CAPTURE_PARAMETERS.equals(endpoint)) { + req.setCharacterEncoding("UTF8"); + String value = req.getParameter("test-parameter"); + if (!value.equals("test value õäöü")) { + throw new ServletException("request parameter does not have expected value " + value); + } + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + } else if (ERROR.equals(endpoint)) { + resp.sendError(endpoint.getStatus(), endpoint.getBody()); + } else if (EXCEPTION.equals(endpoint)) { + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); + throw new ServletException(endpoint.getBody()); + } else if (HTML_PRINT_WRITER.equals(endpoint)) { + // intentionally testing setting status before contentType here to cover that case + // somewhere resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - break; - case "ERROR": - resp.sendError(endpoint.getStatus(), endpoint.getBody()); - break; - case "EXCEPTION": - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); - throw new ServletException(endpoint.getBody()); - case "HTML_PRINT_WRITER": - // intentionally testing setting status before contentType here to cover that case - // somewhere - resp.setStatus(endpoint.getStatus()); - resp.setContentType("text/html"); - resp.getWriter().print(endpoint.getBody()); - break; - case "HTML_SERVLET_OUTPUT_STREAM": - resp.setContentType("text/html"); - resp.setStatus(endpoint.getStatus()); - resp.getOutputStream().print(endpoint.getBody()); - break; - default: - break; + resp.setContentType("text/html"); + resp.getWriter().print(endpoint.getBody()); + } else if (HTML_SERVLET_OUTPUT_STREAM.equals(endpoint)) { + resp.setContentType("text/html"); + resp.setStatus(endpoint.getStatus()); + resp.getOutputStream().print(endpoint.getBody()); } return null; }); From 66e150fb5e4fa9596605505b1862ca770ac0c655 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 2 Sep 2024 17:19:39 +0200 Subject: [PATCH 34/43] format --- .../servlet/v3_0/tomcat/TestServlet3.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java index 9de164e5ccee..8a3ac8327281 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java @@ -66,7 +66,8 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { req.setCharacterEncoding("UTF8"); String value = req.getParameter("test-parameter"); if (!value.equals("test value õäöü")) { - throw new ServletException("request parameter does not have expected value " + value); + throw new ServletException( + "request parameter does not have expected value " + value); } resp.setStatus(endpoint.getStatus()); @@ -141,16 +142,16 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { resp.getWriter().print(endpoint.getBody()); context.complete(); } else if (ERROR.equals(endpoint)) { - resp.setStatus(endpoint.getStatus()); - resp.getWriter().print(endpoint.getBody()); + resp.setStatus(endpoint.getStatus()); + resp.getWriter().print(endpoint.getBody()); context.complete(); } else if (EXCEPTION.equals(endpoint)) { resp.setStatus(endpoint.getStatus()); - PrintWriter writer = resp.getWriter(); - writer.print(endpoint.getBody()); - if (req.getClass().getName().contains("catalina")) { - writer.close(); - } + PrintWriter writer = resp.getWriter(); + writer.print(endpoint.getBody()); + if (req.getClass().getName().contains("catalina")) { + writer.close(); + } throw new ServletException(endpoint.getBody()); } else if (HTML_PRINT_WRITER.equals(endpoint)) { resp.setContentType("text/html"); @@ -204,7 +205,8 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { req.setCharacterEncoding("UTF8"); String value = req.getParameter("test-parameter"); if (!value.equals("test value õäöü")) { - throw new ServletException("request parameter does not have expected value " + value); + throw new ServletException( + "request parameter does not have expected value " + value); } resp.setStatus(endpoint.getStatus()); @@ -217,8 +219,8 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { throw new ServletException(endpoint.getBody()); } else if (HTML_PRINT_WRITER.equals(endpoint)) { // intentionally testing setting status before contentType here to cover that case - // somewhere - resp.setStatus(endpoint.getStatus()); + // somewhere + resp.setStatus(endpoint.getStatus()); resp.setContentType("text/html"); resp.getWriter().print(endpoint.getBody()); } else if (HTML_SERVLET_OUTPUT_STREAM.equals(endpoint)) { From c89a8fce14535a77d7744170dd0cd29c78e8abe6 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 3 Sep 2024 14:36:57 +0200 Subject: [PATCH 35/43] pr review --- .../mapping/AbstractServlet3MappingTest.java | 42 +++++----- .../v3_0/tomcat/TomcatServlet3Test.java | 77 ++++++++++--------- 2 files changed, 60 insertions(+), 59 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java index 39e05d8d8402..15860e9d026f 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java @@ -11,9 +11,13 @@ import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerUsingTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.sdk.trace.data.StatusData; import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; import javax.servlet.Servlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -66,27 +70,23 @@ void testPath(String path, String route, boolean success) { assertThat(response.status().code()).isEqualTo(success ? 200 : 404); - if (success) { - testing.waitAndAssertTraces( - trace -> - trace.hasSpansSatisfyingExactly( - span -> - span.hasName("GET " + getContextPath() + route) - .hasKind(SpanKind.SERVER) - .hasStatus(StatusData.unset()))); - } else { - testing.waitAndAssertTraces( - trace -> - trace.hasSpansSatisfyingExactly( - span -> - span.hasName("GET " + getContextPath() + route) - .hasKind(SpanKind.SERVER) - .hasStatus( - response.status().code() >= 500 - ? StatusData.error() - : StatusData.unset()), - span -> {})); - } + testing.waitAndAssertTraces( + trace -> { + List> assertions = new ArrayList<>(); + assertions.add( + span -> + span.hasName("GET " + getContextPath() + route) + .hasKind(SpanKind.SERVER) + .hasStatus( + !success && response.status().code() >= 500 + ? StatusData.error() + : StatusData.unset())); + if (!success) { + assertions.add(span -> {}); + } + + trace.hasSpansSatisfyingExactly(assertions); + }); } public static class TestServlet extends HttpServlet { diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java index 3798ce604c04..13baeb0777c8 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java @@ -14,9 +14,7 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; -import io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil; import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.AbstractServlet3Test; -import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.sdk.testing.assertj.TraceAssert; import io.opentelemetry.sdk.trace.data.SpanData; @@ -24,9 +22,11 @@ import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; import java.io.File; import java.nio.file.Files; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -143,8 +143,7 @@ public void addServlet(Context servletContext, String path, Class check = - trace -> - trace.hasSpansSatisfyingExactly( - span -> assertServerSpan(span, "GET", ACCESS_LOG_SUCCESS, SUCCESS.getStatus()), - span -> assertControllerSpan(span, null)); testing() .waitAndAssertTraces( - IntStream.range(0, count).mapToObj(i -> check).collect(Collectors.toList())); - - List> traces = TelemetryDataUtil.groupTraces(testing().getExportedSpans()); - - for (int i = 0; i < count; i++) { - assertThat(loggedTraces).contains(traces.get(i).get(0).getTraceId()); - assertThat(loggedSpans).contains(traces.get(i).get(0).getSpanId()); - } + IntStream.range(0, count) + .mapToObj( + i -> + (Consumer) + trace -> { + trace.hasSpansSatisfyingExactly( + span -> + assertServerSpan( + span, "GET", ACCESS_LOG_SUCCESS, SUCCESS.getStatus()), + span -> assertControllerSpan(span, null)); + SpanData span = trace.getSpan(0); + assertThat(loggedTraces).contains(span.getTraceId()); + assertThat(loggedSpans).contains(span.getSpanId()); + }) + .collect(Collectors.toList())); } @Test @@ -191,30 +192,30 @@ void accessLogHasIdsForErrorRequest() { assertThat(response.status().code()).isEqualTo(ACCESS_LOG_ERROR.getStatus()); assertThat(response.contentUtf8()).isEqualTo(ACCESS_LOG_ERROR.getBody()); - int spanCount = 2; - if (errorEndpointUsesSendError()) { - spanCount++; - } - - List spanData = TelemetryDataUtil.groupTraces(testing().getExportedSpans()).get(0); - List spans = - spanData.stream().map(OpenTelemetryAssertions::assertThat).collect(Collectors.toList()); - assertThat(spans).hasSize(spanCount); - - assertServerSpan(spans.get(0), "GET", ACCESS_LOG_ERROR, ERROR.getStatus()); - assertControllerSpan(spans.get(1), null); + List> spanDataAsserts = new ArrayList<>(); + spanDataAsserts.add( + (span, trace) -> assertServerSpan(span, "GET", ACCESS_LOG_ERROR, ERROR.getStatus())); + spanDataAsserts.add((span, trace) -> assertControllerSpan(span, null)); if (errorEndpointUsesSendError()) { - spans - .get(2) - .satisfies(s -> assertThat(s.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL) - .hasParent(spanData.get(1)); + spanDataAsserts.add( + (span, trace) -> + span.satisfies(s -> assertThat(s.getName()).matches(".*\\.sendError")) + .hasKind(SpanKind.INTERNAL) + .hasParent(trace.getSpan(1))); } accessLogValue.waitForLoggedIds(1); - Map.Entry entry = accessLogValue.getLoggedIds().get(0); - - assertThat(spanData.get(0).getTraceId()).isEqualTo(entry.getKey()); - assertThat(spanData.get(0).getSpanId()).isEqualTo(entry.getValue()); + testing() + .waitAndAssertTraces( + trace -> { + trace.hasSpansSatisfyingExactly( + spanDataAsserts.stream() + .map(e -> (Consumer) span -> e.accept(span, trace)) + .collect(Collectors.toList())); + SpanData span = trace.getSpan(0); + Map.Entry entry = accessLogValue.getLoggedIds().get(0); + assertThat(entry.getKey()).isEqualTo(span.getTraceId()); + assertThat(entry.getValue()).isEqualTo(span.getSpanId()); + }); } } From 6af71e1dc700f10ab741a5ee583caf7fb9115fb4 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 3 Sep 2024 14:40:48 +0200 Subject: [PATCH 36/43] pr review --- .../servlet/v3_0/jetty/JettyServlet3Test.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index e4c2bb6a1656..b70d0fa53eed 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -82,13 +82,12 @@ public String expectedServerSpanName( return "HTTP " + getContextPath() + endpoint.getPath(); } - switch (endpoint.name()) { - case "NOT_FOUND": - return method; - case "PATH_PARAM": - return method + " " + getContextPath() + "/path/:id/param"; - default: - return method + " " + getContextPath() + endpoint.getPath(); + if (ServerEndpoint.NOT_FOUND.equals(endpoint)) { + return method; + } else if (ServerEndpoint.PATH_PARAM.equals(endpoint)) { + return method + " " + getContextPath() + "/path/:id/param"; + } else { + return method + " " + getContextPath() + endpoint.getPath(); } } From e0d46eb76f2d198d8934060c2dd82383f503182f Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 4 Sep 2024 12:09:58 +0200 Subject: [PATCH 37/43] pr review --- .../instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java | 2 +- .../servlet/v3_0/jetty/JettyServletHandlerTest.java | 3 +-- .../instrumentation/servlet/v3_0/tomcat/TestServlet3.java | 4 +++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index b70d0fa53eed..98b6249872c2 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -69,7 +69,7 @@ protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { if (IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL); + .hasKind(SpanKind.INTERNAL).hasParent(parentSpan); } return super.assertResponseSpan(span, parentSpan, method, endpoint); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 5e33b20807e0..2500f1b58d72 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -10,7 +10,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; -import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; @@ -66,7 +65,7 @@ protected SpanDataAssert assertResponseSpan( if (JettyServlet3Test.IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL); + .hasKind(SpanKind.INTERNAL).hasParent(parentSpan); } return super.assertResponseSpan(span, parentSpan, method, endpoint); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java index 8a3ac8327281..e53b7f47a7ed 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java @@ -20,6 +20,7 @@ import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; import java.io.IOException; import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; import java.util.concurrent.CountDownLatch; import javax.servlet.AsyncContext; import javax.servlet.RequestDispatcher; @@ -85,7 +86,8 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { resp.setContentType("text/html"); resp.setStatus(endpoint.getStatus()); resp.setContentLength(endpoint.getBody().length()); - resp.getOutputStream().print(endpoint.getBody()); + byte[] body = endpoint.getBody().getBytes(StandardCharsets.UTF_8); + resp.getOutputStream().write(body, 0, body.length); } return null; }); From 145e845abfbbc88a10f6917d71320d40f5ef0489 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 6 Sep 2024 14:18:28 +0200 Subject: [PATCH 38/43] pr review --- .../servlet/v3_0/AbstractServlet3Test.java | 23 +++++++++++++++ .../servlet/v3_0/jetty/JettyServlet3Test.java | 3 +- .../v3_0/jetty/JettyServletHandlerTest.java | 29 +++++-------------- .../servlet/v3_0/tomcat/TestServlet3.java | 3 ++ 4 files changed, 35 insertions(+), 23 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index 4d27cbc42d5f..5e69c5a40e1d 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -17,6 +17,7 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; @@ -25,8 +26,11 @@ import io.opentelemetry.javaagent.bootstrap.servlet.ExperimentalSnippetHolder; import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.semconv.HttpAttributes; import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpRequest; import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; +import java.util.HashSet; +import java.util.Set; import javax.servlet.Servlet; import org.junit.jupiter.api.Test; @@ -69,6 +73,20 @@ protected void configure(HttpServerTestOptions options) { options.setTestCaptureRequestParameters(true); options.setHasResponseCustomizer(e -> true); options.setHasResponseSpan(this::hasResponseSpan); + + if (!testRoute()) { + options.setHttpAttributes( + serverEndpoint -> { + Set> attributes = + new HashSet<>(HttpServerTestOptions.DEFAULT_HTTP_ATTRIBUTES); + attributes.add(HttpAttributes.HTTP_ROUTE); + return attributes; + }); + } + } + + protected boolean testRoute() { + return true; } protected boolean hasResponseSpan(ServerEndpoint endpoint) { @@ -98,6 +116,11 @@ protected void setupServlets(CONTEXT context) throws Exception { @Override public String expectedHttpRoute(ServerEndpoint endpoint, String method) { + // no need to compute route if we're not expecting it + if (!testRoute()) { + return null; + } + if (method.equals(HttpConstants._OTHER)) { return getContextPath() + endpoint.getPath(); } diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index 98b6249872c2..059bcc0768a5 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -69,7 +69,8 @@ protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { if (IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL).hasParent(parentSpan); + .hasKind(SpanKind.INTERNAL) + .hasParent(parentSpan); } return super.assertResponseSpan(span, parentSpan, method, endpoint); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 2500f1b58d72..71f8851ce23b 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -8,7 +8,6 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; import static org.assertj.core.api.Assertions.assertThat; -import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; @@ -18,12 +17,8 @@ import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.sdk.trace.data.SpanData; -import io.opentelemetry.semconv.HttpAttributes; import java.io.IOException; import java.io.Writer; -import java.util.HashSet; -import java.util.Set; -import javax.annotation.Nullable; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -41,18 +36,16 @@ public class JettyServletHandlerTest extends AbstractServlet3Test { - Set> attributes = - new HashSet<>(HttpServerTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.remove(HttpAttributes.HTTP_ROUTE); - return attributes; - }); options.setContextPath(""); options.setTestNotFound(false); options.setExpectedException(new ServletException(EXCEPTION.getBody())); } + @Override + protected boolean testRoute() { + return false; + } + @Override public boolean hasResponseSpan(ServerEndpoint endpoint) { return (JettyServlet3Test.IS_BEFORE_94 && endpoint.equals(EXCEPTION)) @@ -65,21 +58,13 @@ protected SpanDataAssert assertResponseSpan( if (JettyServlet3Test.IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL).hasParent(parentSpan); + .hasKind(SpanKind.INTERNAL) + .hasParent(parentSpan); } return super.assertResponseSpan(span, parentSpan, method, endpoint); } - @Override - public String expectedServerSpanName( - ServerEndpoint endpoint, String method, @Nullable String route) { - if (method.equals(HttpConstants._OTHER)) { - return "HTTP"; - } - return super.expectedServerSpanName(endpoint, method, route); - } - @Override protected Server setupServer() throws Exception { Server server = new Server(port); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java index e53b7f47a7ed..a2d2065752dd 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java @@ -152,6 +152,9 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) { PrintWriter writer = resp.getWriter(); writer.print(endpoint.getBody()); if (req.getClass().getName().contains("catalina")) { + // on tomcat close the writer to ensure response is sent immediately, + // otherwise there is a chance that tomcat resets the connection before the + // response is sent writer.close(); } throw new ServletException(endpoint.getBody()); From 98442f665b4a127f7e3e777eec5caebce02ffb92 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 6 Sep 2024 19:28:59 +0200 Subject: [PATCH 39/43] pr review --- .../instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index 059bcc0768a5..b70d0fa53eed 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -69,8 +69,7 @@ protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { if (IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL) - .hasParent(parentSpan); + .hasKind(SpanKind.INTERNAL); } return super.assertResponseSpan(span, parentSpan, method, endpoint); From dfebe0ef67df02fc8b6f826257532b7a94e697d8 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 6 Sep 2024 19:35:15 +0200 Subject: [PATCH 40/43] pr review --- .../servlet/v3_0/jetty/JettyServletHandlerTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 71f8851ce23b..478bd9013a39 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -58,8 +58,7 @@ protected SpanDataAssert assertResponseSpan( if (JettyServlet3Test.IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL) - .hasParent(parentSpan); + .hasKind(SpanKind.INTERNAL); } return super.assertResponseSpan(span, parentSpan, method, endpoint); From c034eb2cf9cfa960c81323fc69a5aedebe6c77ba Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Fri, 13 Sep 2024 13:16:17 +0300 Subject: [PATCH 41/43] add back parent span assertion to jetty exception endpoint test --- .../servlet/v3_0/jetty/JettyServlet3Test.java | 11 ++++++++--- .../v3_0/jetty/JettyServletHandlerTest.java | 11 ++++++++--- .../testing/junit/http/AbstractHttpServerTest.java | 14 +++++++++++++- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index b70d0fa53eed..1b38c2300f62 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -66,13 +66,18 @@ public boolean isAsyncTest() { @Override protected SpanDataAssert assertResponseSpan( - SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { + SpanDataAssert span, + SpanData controllerSpan, + SpanData handlerSpan, + String method, + ServerEndpoint endpoint) { if (IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL); + .hasKind(SpanKind.INTERNAL) + .hasParent(handlerSpan); } - return super.assertResponseSpan(span, parentSpan, method, endpoint); + return super.assertResponseSpan(span, controllerSpan, handlerSpan, method, endpoint); } @Override diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 478bd9013a39..2ee3c3b82344 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -54,14 +54,19 @@ public boolean hasResponseSpan(ServerEndpoint endpoint) { @Override protected SpanDataAssert assertResponseSpan( - SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { + SpanDataAssert span, + SpanData controllerSpan, + SpanData handlerSpan, + String method, + ServerEndpoint endpoint) { if (JettyServlet3Test.IS_BEFORE_94 && endpoint.equals(EXCEPTION)) { span.satisfies(it -> assertThat(it.getName()).matches(".*\\.sendError")) - .hasKind(SpanKind.INTERNAL); + .hasKind(SpanKind.INTERNAL) + .hasParent(handlerSpan); } - return super.assertResponseSpan(span, parentSpan, method, endpoint); + return super.assertResponseSpan(span, controllerSpan, handlerSpan, method, endpoint); } @Override diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java index 74c9e6c67af2..f160d1095a02 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java @@ -665,7 +665,9 @@ protected void assertTheTraces( if (options.hasResponseSpan.test(endpoint)) { int parentIndex = spanAssertions.size() - 1; spanAssertions.add( - span -> assertResponseSpan(span, trace.getSpan(parentIndex), method, endpoint)); + span -> + assertResponseSpan( + span, trace.getSpan(parentIndex), trace.getSpan(0), method, endpoint)); } if (options.hasErrorPageSpans.test(endpoint)) { @@ -706,6 +708,16 @@ protected SpanDataAssert assertHandlerSpan( "assertHandlerSpan not implemented in " + getClass().getName()); } + @CanIgnoreReturnValue + protected SpanDataAssert assertResponseSpan( + SpanDataAssert span, + SpanData controllerSpan, + SpanData handlerSpan, + String method, + ServerEndpoint endpoint) { + return assertResponseSpan(span, controllerSpan, method, endpoint); + } + @CanIgnoreReturnValue protected SpanDataAssert assertResponseSpan( SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) { From a6cc886d18ee16e80877365d55ae0deabb29ec29 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Fri, 13 Sep 2024 14:59:01 +0300 Subject: [PATCH 42/43] simplify expected route handling --- .../servlet/v3_0/AbstractServlet3Test.java | 20 +------------------ .../servlet/v3_0/jetty/JettyServlet3Test.java | 18 ----------------- .../v3_0/jetty/JettyServletHandlerTest.java | 16 ++++++++++----- .../junit/http/AbstractHttpServerTest.java | 6 +++++- 4 files changed, 17 insertions(+), 43 deletions(-) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java index 5e69c5a40e1d..882ec82e6c39 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java @@ -17,7 +17,6 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; -import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; @@ -26,11 +25,8 @@ import io.opentelemetry.javaagent.bootstrap.servlet.ExperimentalSnippetHolder; import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.sdk.trace.data.SpanData; -import io.opentelemetry.semconv.HttpAttributes; import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpRequest; import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse; -import java.util.HashSet; -import java.util.Set; import javax.servlet.Servlet; import org.junit.jupiter.api.Test; @@ -73,20 +69,6 @@ protected void configure(HttpServerTestOptions options) { options.setTestCaptureRequestParameters(true); options.setHasResponseCustomizer(e -> true); options.setHasResponseSpan(this::hasResponseSpan); - - if (!testRoute()) { - options.setHttpAttributes( - serverEndpoint -> { - Set> attributes = - new HashSet<>(HttpServerTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.add(HttpAttributes.HTTP_ROUTE); - return attributes; - }); - } - } - - protected boolean testRoute() { - return true; } protected boolean hasResponseSpan(ServerEndpoint endpoint) { @@ -117,7 +99,7 @@ protected void setupServlets(CONTEXT context) throws Exception { @Override public String expectedHttpRoute(ServerEndpoint endpoint, String method) { // no need to compute route if we're not expecting it - if (!testRoute()) { + if (!hasHttpRouteAttribute(endpoint)) { return null; } diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java index 1b38c2300f62..f6679c940f8c 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java @@ -9,7 +9,6 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import io.opentelemetry.api.trace.SpanKind; -import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; @@ -20,7 +19,6 @@ import java.io.IOException; import java.io.Writer; import java.net.InetSocketAddress; -import javax.annotation.Nullable; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -80,22 +78,6 @@ protected SpanDataAssert assertResponseSpan( return super.assertResponseSpan(span, controllerSpan, handlerSpan, method, endpoint); } - @Override - public String expectedServerSpanName( - ServerEndpoint endpoint, String method, @Nullable String route) { - if (method.equals(HttpConstants._OTHER)) { - return "HTTP " + getContextPath() + endpoint.getPath(); - } - - if (ServerEndpoint.NOT_FOUND.equals(endpoint)) { - return method; - } else if (ServerEndpoint.PATH_PARAM.equals(endpoint)) { - return method + " " + getContextPath() + "/path/:id/param"; - } else { - return method + " " + getContextPath() + endpoint.getPath(); - } - } - @Override protected Server setupServer() throws Exception { Server jettyServer = new Server(new InetSocketAddress("localhost", port)); diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java index 2ee3c3b82344..2f8d5591c66c 100644 --- a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java +++ b/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java @@ -8,6 +8,7 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; import static org.assertj.core.api.Assertions.assertThat; +import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; @@ -17,8 +18,11 @@ import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.tomcat.TestServlet3; import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.semconv.HttpAttributes; import java.io.IOException; import java.io.Writer; +import java.util.HashSet; +import java.util.Set; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -39,11 +43,13 @@ protected void configure(HttpServerTestOptions options) { options.setContextPath(""); options.setTestNotFound(false); options.setExpectedException(new ServletException(EXCEPTION.getBody())); - } - - @Override - protected boolean testRoute() { - return false; + options.setHttpAttributes( + serverEndpoint -> { + Set> attributes = + new HashSet<>(HttpServerTestOptions.DEFAULT_HTTP_ATTRIBUTES); + attributes.remove(HttpAttributes.HTTP_ROUTE); + return attributes; + }); } @Override diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java index f160d1095a02..6f9bb4c077d3 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java @@ -863,9 +863,13 @@ public String expectedServerSpanName( endpoint, method, route); } + public final boolean hasHttpRouteAttribute(ServerEndpoint endpoint) { + return options.httpAttributes.apply(endpoint).contains(HttpAttributes.HTTP_ROUTE); + } + public String expectedHttpRoute(ServerEndpoint endpoint, String method) { // no need to compute route if we're not expecting it - if (!options.httpAttributes.apply(endpoint).contains(HttpAttributes.HTTP_ROUTE)) { + if (!hasHttpRouteAttribute(endpoint)) { return null; } From e91e2a3a607313bcb86a1eb067d0526868936459 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Fri, 13 Sep 2024 15:02:38 +0300 Subject: [PATCH 43/43] rename module --- .../servlet-3.0/{javaagent-tests => testing}/build.gradle.kts | 0 .../instrumentation/servlet/v3_0/AbstractServlet3Test.java | 0 .../instrumentation/servlet/v3_0/HttpServletResponseTest.java | 0 .../servlet/v3_0/jetty/JettyServlet3AsyncTest.java | 0 .../servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java | 0 .../servlet/v3_0/jetty/JettyServlet3SyncTest.java | 0 .../instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java | 0 .../servlet/v3_0/jetty/JettyServletHandlerTest.java | 0 .../servlet/v3_0/jetty/dispatch/JettyDispatchTest.java | 0 .../v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java | 0 .../v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java | 0 .../servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java | 0 .../servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java | 0 .../servlet/v3_0/mapping/AbstractServlet3MappingTest.java | 0 .../servlet/v3_0/mapping/JettyServlet3MappingTest.java | 0 .../servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java | 0 .../mapping/TomcatServlet3FilterServletNameMappingTest.java | 0 .../v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java | 0 .../servlet/v3_0/mapping/TomcatServlet3MappingTest.java | 0 .../instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java | 0 .../servlet/v3_0/tomcat/RequestDispatcherServlet.java | 0 .../instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java | 0 .../instrumentation/servlet/v3_0/tomcat/TestServlet3.java | 0 .../servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java | 0 .../servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java | 0 .../servlet/v3_0/tomcat/TomcatServlet3SyncTest.java | 0 .../instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java | 0 .../servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java | 0 .../v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java | 0 .../tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java | 0 .../servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java | 0 .../servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java | 0 .../src/test/resources/realm.properties | 0 settings.gradle.kts | 2 +- 34 files changed, 1 insertion(+), 1 deletion(-) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/build.gradle.kts (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java (100%) rename instrumentation/servlet/servlet-3.0/{javaagent-tests => testing}/src/test/resources/realm.properties (100%) diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts b/instrumentation/servlet/servlet-3.0/testing/build.gradle.kts similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/build.gradle.kts rename to instrumentation/servlet/servlet-3.0/testing/build.gradle.kts diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/AbstractServlet3Test.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/HttpServletResponseTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3AsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3FakeAsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3SyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServlet3Test.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/JettyServletHandlerTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyDispatchTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchAsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3DispatchImmediateTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3ForwardTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/jetty/dispatch/JettyServlet3IncludeTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/AbstractServlet3MappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/JettyServlet3MappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterMappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterServletNameMappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3FilterUrlPatternMappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/mapping/TomcatServlet3MappingTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/ErrorHandlerValve.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/RequestDispatcherServlet.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestAccessLogValve.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TestServlet3.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3AsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3FakeAsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3SyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/TomcatServlet3Test.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatDispatchTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchAsyncTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3DispatchImmediateTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3ForwardTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java b/instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java rename to instrumentation/servlet/servlet-3.0/testing/src/test/java/io/opentelemetry/javaagent/instrumentation/servlet/v3_0/tomcat/dispatch/TomcatServlet3IncludeTest.java diff --git a/instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/resources/realm.properties b/instrumentation/servlet/servlet-3.0/testing/src/test/resources/realm.properties similarity index 100% rename from instrumentation/servlet/servlet-3.0/javaagent-tests/src/test/resources/realm.properties rename to instrumentation/servlet/servlet-3.0/testing/src/test/resources/realm.properties diff --git a/settings.gradle.kts b/settings.gradle.kts index 8672bddf189e..43162e3d47a3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -541,8 +541,8 @@ include(":instrumentation:rxjava:rxjava-3-common:testing") include(":instrumentation:scala-fork-join-2.8:javaagent") include(":instrumentation:servlet:servlet-2.2:javaagent") include(":instrumentation:servlet:servlet-3.0:javaagent") -include(":instrumentation:servlet:servlet-3.0:javaagent-tests") include(":instrumentation:servlet:servlet-3.0:javaagent-unit-tests") +include(":instrumentation:servlet:servlet-3.0:testing") include(":instrumentation:servlet:servlet-5.0:javaagent") include(":instrumentation:servlet:servlet-5.0:javaagent-unit-tests") include(":instrumentation:servlet:servlet-5.0:jetty12-testing")