From 7cd14bdd8c0e4783955f892a9d7b3fcae62a9992 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Thu, 26 Sep 2024 16:33:35 +0300 Subject: [PATCH 1/2] Convert restlet 1.1 tests from groovy to java --- .../restlet/v1_1/RestletServerTest.groovy | 31 --- .../restlet/v1_1/ServletServerTest.groovy | 20 -- .../v1_1/spring/SpringBeanRouterTest.groovy | 23 -- .../v1_1/spring/SpringRouterTest.groovy | 23 -- .../restlet/v1_1/RestletServerTest.java | 29 +++ .../restlet/v1_1/ServletServerTest.java | 24 ++ .../v1_1/spring/SpringBeanRouterTest.java | 29 +++ .../restlet/v1_1/spring/SpringRouterTest.java | 29 +++ .../restlet/v1_1/RestletServerTest.groovy | 33 --- .../AbstractSpringServerLibraryTest.groovy | 46 ---- .../restlet/v1_1/RestletServerTest.java | 41 ++++ .../AbstractSpringServerLibraryTest.java | 59 +++++ .../v1_1/spring/SpringBeanRouterTest.java} | 8 +- .../v1_1/spring/SpringRouterTest.java} | 7 +- .../v1_1/AbstractRestletServerTest.groovy | 189 --------------- .../v1_1/AbstractServletServerTest.groovy | 104 -------- .../restlet/v1_1/RestletAppTestBase.groovy | 129 ---------- .../spring/AbstractSpringServerTest.groovy | 38 --- .../v1_1/AbstractRestletServerTest.java | 223 ++++++++++++++++++ .../v1_1/AbstractServletServerTest.java | 91 +++++++ .../restlet/v1_1/RestletAppTestBase.java | 138 +++++++++++ .../v1_1/spring/AbstractSpringServerTest.java | 40 ++++ .../junit/http/AbstractHttpServerTest.java | 11 +- 23 files changed, 720 insertions(+), 645 deletions(-) delete mode 100644 instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/RestletServerTest.groovy delete mode 100644 instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/ServletServerTest.groovy delete mode 100644 instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.groovy delete mode 100644 instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringRouterTest.groovy create mode 100644 instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/RestletServerTest.java create mode 100644 instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/ServletServerTest.java create mode 100644 instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.java create mode 100644 instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringRouterTest.java delete mode 100644 instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/RestletServerTest.groovy delete mode 100644 instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerLibraryTest.groovy create mode 100644 instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/RestletServerTest.java create mode 100644 instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerLibraryTest.java rename instrumentation/restlet/restlet-1.1/library/src/test/{groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.groovy => java/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.java} (54%) rename instrumentation/restlet/restlet-1.1/library/src/test/{groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringRouterTest.groovy => java/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringRouterTest.java} (54%) delete mode 100644 instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.groovy delete mode 100644 instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/AbstractServletServerTest.groovy delete mode 100644 instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/RestletAppTestBase.groovy delete mode 100644 instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerTest.groovy create mode 100644 instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.java create mode 100644 instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractServletServerTest.java create mode 100644 instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/RestletAppTestBase.java create mode 100644 instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerTest.java diff --git a/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/RestletServerTest.groovy b/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/RestletServerTest.groovy deleted file mode 100644 index 76aff28f054b..000000000000 --- a/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/RestletServerTest.groovy +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.restlet.v1_1 - -import io.opentelemetry.instrumentation.restlet.v1_1.AbstractRestletServerTest -import io.opentelemetry.instrumentation.test.AgentTestTrait -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND - -class RestletServerTest extends AbstractRestletServerTest implements AgentTestTrait { - - @Override - String expectedHttpRoute(ServerEndpoint endpoint, String method) { - switch (endpoint) { - case NOT_FOUND: - return getContextPath() + "/" - default: - return super.expectedHttpRoute(endpoint, method) - } - } - - @Override - boolean hasResponseCustomizer(ServerEndpoint endpoint) { - return true - } - -} diff --git a/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/ServletServerTest.groovy b/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/ServletServerTest.groovy deleted file mode 100644 index 61e5276e4173..000000000000 --- a/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/ServletServerTest.groovy +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.restlet.v1_1 - - -import io.opentelemetry.instrumentation.restlet.v1_1.AbstractServletServerTest -import io.opentelemetry.instrumentation.test.AgentTestTrait -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint - -class ServletServerTest extends AbstractServletServerTest implements AgentTestTrait { - - @Override - boolean hasResponseCustomizer(ServerEndpoint endpoint) { - return true - } - -} diff --git a/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.groovy b/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.groovy deleted file mode 100644 index d28c1a17e91a..000000000000 --- a/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.groovy +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.restlet.v1_1.spring - -import io.opentelemetry.instrumentation.restlet.v1_1.spring.AbstractSpringServerTest -import io.opentelemetry.instrumentation.test.AgentTestTrait -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint - -class SpringBeanRouterTest extends AbstractSpringServerTest implements AgentTestTrait { - @Override - String getConfigurationName() { - return "springBeanRouterConf.xml" - } - - @Override - boolean hasResponseCustomizer(ServerEndpoint endpoint) { - return true - } - -} diff --git a/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringRouterTest.groovy b/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringRouterTest.groovy deleted file mode 100644 index b1b2aacf65b3..000000000000 --- a/instrumentation/restlet/restlet-1.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringRouterTest.groovy +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.restlet.v1_1.spring - -import io.opentelemetry.instrumentation.restlet.v1_1.spring.AbstractSpringServerTest -import io.opentelemetry.instrumentation.test.AgentTestTrait -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint - -class SpringRouterTest extends AbstractSpringServerTest implements AgentTestTrait { - @Override - String getConfigurationName() { - return "springRouterConf.xml" - } - - @Override - boolean hasResponseCustomizer(ServerEndpoint endpoint) { - return true - } - -} diff --git a/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/RestletServerTest.java b/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/RestletServerTest.java new file mode 100644 index 000000000000..d0317ec725c2 --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/RestletServerTest.java @@ -0,0 +1,29 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.restlet.v1_1; + +import io.opentelemetry.instrumentation.restlet.v1_1.AbstractRestletServerTest; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import org.junit.jupiter.api.extension.RegisterExtension; + +class RestletServerTest extends AbstractRestletServerTest { + + @RegisterExtension + static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setHasResponseCustomizer((endpoint) -> true); + } + + @Override + protected String notFoundRoute() { + return "/"; + } +} diff --git a/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/ServletServerTest.java b/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/ServletServerTest.java new file mode 100644 index 000000000000..2214a7fe3aa8 --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/ServletServerTest.java @@ -0,0 +1,24 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.restlet.v1_1; + +import io.opentelemetry.instrumentation.restlet.v1_1.AbstractServletServerTest; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import org.junit.jupiter.api.extension.RegisterExtension; + +class ServletServerTest extends AbstractServletServerTest { + + @RegisterExtension + static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setHasResponseCustomizer((endpoint) -> true); + } +} diff --git a/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.java b/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.java new file mode 100644 index 000000000000..d9fdd90e5274 --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.java @@ -0,0 +1,29 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.restlet.v1_1.spring; + +import io.opentelemetry.instrumentation.restlet.v1_1.spring.AbstractSpringServerTest; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import org.junit.jupiter.api.extension.RegisterExtension; + +class SpringBeanRouterTest extends AbstractSpringServerTest { + + @RegisterExtension + static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setHasResponseCustomizer((endpoint) -> true); + } + + @Override + protected String getConfigurationName() { + return "springBeanRouterConf.xml"; + } +} diff --git a/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringRouterTest.java b/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringRouterTest.java new file mode 100644 index 000000000000..ffa8299ece83 --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/restlet/v1_1/spring/SpringRouterTest.java @@ -0,0 +1,29 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.restlet.v1_1.spring; + +import io.opentelemetry.instrumentation.restlet.v1_1.spring.AbstractSpringServerTest; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import org.junit.jupiter.api.extension.RegisterExtension; + +class SpringRouterTest extends AbstractSpringServerTest { + + @RegisterExtension + static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setHasResponseCustomizer((endpoint) -> true); + } + + @Override + protected String getConfigurationName() { + return "springRouterConf.xml"; + } +} diff --git a/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/RestletServerTest.groovy b/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/RestletServerTest.groovy deleted file mode 100644 index 7a2eb0b27a1a..000000000000 --- a/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/RestletServerTest.groovy +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opententelemetry.instrumentation.restlet.v1_1 - -import com.noelios.restlet.StatusFilter -import io.opentelemetry.instrumentation.restlet.v1_1.AbstractRestletServerTest -import io.opentelemetry.instrumentation.restlet.v1_1.RestletTelemetry -import io.opentelemetry.instrumentation.test.LibraryTestTrait -import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest -import org.restlet.Restlet - -class RestletServerTest extends AbstractRestletServerTest implements LibraryTestTrait { - - @Override - Restlet wrapRestlet(Restlet restlet, String path) { - RestletTelemetry telemetry = RestletTelemetry.builder(openTelemetry) - .setCapturedRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER]) - .setCapturedResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER]) - .build() - - def tracingFilter = telemetry.newFilter(path) - def statusFilter = new StatusFilter(component.getContext(), false, null, null) - - tracingFilter.setNext(statusFilter) - statusFilter.setNext(restlet) - - return tracingFilter - } - -} diff --git a/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerLibraryTest.groovy b/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerLibraryTest.groovy deleted file mode 100644 index 0ae770fb3b0a..000000000000 --- a/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerLibraryTest.groovy +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opententelemetry.instrumentation.restlet.v1_1.spring - -import com.noelios.restlet.StatusFilter -import io.opentelemetry.instrumentation.restlet.v1_1.RestletTelemetry -import io.opentelemetry.instrumentation.restlet.v1_1.spring.AbstractSpringServerTest -import io.opentelemetry.instrumentation.test.LibraryTestTrait -import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest -import org.restlet.Restlet -import org.restlet.Route -import org.restlet.Router -import org.restlet.util.RouteList - -abstract class AbstractSpringServerLibraryTest extends AbstractSpringServerTest implements LibraryTestTrait { - @Override - Restlet wrapRestlet(Restlet restlet, String path) { - RestletTelemetry telemetry = RestletTelemetry.builder(openTelemetry) - .setCapturedRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER]) - .setCapturedResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER]) - .build() - - def tracingFilter = telemetry.newFilter(path) - def statusFilter = new StatusFilter(component.getContext(), false, null, null) - - tracingFilter.setNext(statusFilter) - statusFilter.setNext(restlet) - - return tracingFilter - } - - @Override - void setupRouting() { - List routes = [] - for (Route route : router.getRoutes()) { - def pattern = route.getTemplate().getPattern() - routes.add(new Route(router, pattern, wrapRestlet(route.getNext(), pattern))) - } - router.setRoutes(new RouteList(routes)) - router.setDefaultRoute(new Route(router, "/", wrapRestlet(new Router(host.getContext()), "/*"))) - host.attach(router) - } -} diff --git a/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/RestletServerTest.java b/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/RestletServerTest.java new file mode 100644 index 000000000000..91b08ea700fc --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/RestletServerTest.java @@ -0,0 +1,41 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opententelemetry.instrumentation.restlet.v1_1; + +import static java.util.Collections.singletonList; + +import com.noelios.restlet.StatusFilter; +import io.opentelemetry.instrumentation.restlet.v1_1.AbstractRestletServerTest; +import io.opentelemetry.instrumentation.restlet.v1_1.RestletTelemetry; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.restlet.Filter; +import org.restlet.Restlet; + +class RestletServerTest extends AbstractRestletServerTest { + + @RegisterExtension + static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forLibrary(); + + @Override + protected Restlet wrapRestlet(Restlet restlet, String path) { + RestletTelemetry telemetry = + RestletTelemetry.builder(testing.getOpenTelemetry()) + .setCapturedRequestHeaders(singletonList(AbstractHttpServerTest.TEST_REQUEST_HEADER)) + .setCapturedResponseHeaders(singletonList(AbstractHttpServerTest.TEST_RESPONSE_HEADER)) + .build(); + + Filter tracingFilter = telemetry.newFilter(path); + Filter statusFilter = new StatusFilter(component.getContext(), false, null, null); + + tracingFilter.setNext(statusFilter); + statusFilter.setNext(restlet); + + return tracingFilter; + } +} diff --git a/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerLibraryTest.java b/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerLibraryTest.java new file mode 100644 index 000000000000..560eb3e27137 --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerLibraryTest.java @@ -0,0 +1,59 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opententelemetry.instrumentation.restlet.v1_1.spring; + +import static java.util.Collections.singletonList; + +import com.noelios.restlet.StatusFilter; +import io.opentelemetry.instrumentation.restlet.v1_1.RestletTelemetry; +import io.opentelemetry.instrumentation.restlet.v1_1.spring.AbstractSpringServerTest; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.restlet.Filter; +import org.restlet.Restlet; +import org.restlet.Route; +import org.restlet.Router; +import org.restlet.util.RouteList; + +abstract class AbstractSpringServerLibraryTest extends AbstractSpringServerTest { + + @RegisterExtension + static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forLibrary(); + + @Override + protected Restlet wrapRestlet(Restlet restlet, String path) { + RestletTelemetry telemetry = + RestletTelemetry.builder(testing.getOpenTelemetry()) + .setCapturedRequestHeaders(singletonList(AbstractHttpServerTest.TEST_REQUEST_HEADER)) + .setCapturedResponseHeaders(singletonList(AbstractHttpServerTest.TEST_RESPONSE_HEADER)) + .build(); + + Filter tracingFilter = telemetry.newFilter(path); + Filter statusFilter = new StatusFilter(component.getContext(), false, null, null); + + tracingFilter.setNext(statusFilter); + statusFilter.setNext(restlet); + + return tracingFilter; + } + + @Override + protected void setupRouting() { + List routes = new ArrayList<>(); + for (Route route : router.getRoutes()) { + String pattern = route.getTemplate().getPattern(); + routes.add(new Route(router, pattern, wrapRestlet(route.getNext(), pattern))); + } + router.setRoutes(new RouteList(routes)); + router.setDefaultRoute( + new Route(router, "/", wrapRestlet(new Router(host.getContext()), "/*"))); + host.attach(router); + } +} diff --git a/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.groovy b/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.java similarity index 54% rename from instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.groovy rename to instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.java index 86eebd6ba125..7e703526613b 100644 --- a/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.groovy +++ b/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringBeanRouterTest.java @@ -3,12 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opententelemetry.instrumentation.restlet.v1_1.spring +package io.opententelemetry.instrumentation.restlet.v1_1.spring; class SpringBeanRouterTest extends AbstractSpringServerLibraryTest { + @Override - String getConfigurationName() { - return "springBeanRouterConf.xml" + protected String getConfigurationName() { + return "springBeanRouterConf.xml"; } - } diff --git a/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringRouterTest.groovy b/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringRouterTest.java similarity index 54% rename from instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringRouterTest.groovy rename to instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringRouterTest.java index 1e124b351cfd..b3bea6a7d8c8 100644 --- a/instrumentation/restlet/restlet-1.1/library/src/test/groovy/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringRouterTest.groovy +++ b/instrumentation/restlet/restlet-1.1/library/src/test/java/io/opententelemetry/instrumentation/restlet/v1_1/spring/SpringRouterTest.java @@ -3,13 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opententelemetry.instrumentation.restlet.v1_1.spring +package io.opententelemetry.instrumentation.restlet.v1_1.spring; class SpringRouterTest extends AbstractSpringServerLibraryTest { @Override - String getConfigurationName() { - return "springRouterConf.xml" + protected String getConfigurationName() { + return "springRouterConf.xml"; } - } diff --git a/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.groovy b/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.groovy deleted file mode 100644 index d92f0f07c6c3..000000000000 --- a/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.groovy +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.restlet.v1_1 - -import io.opentelemetry.instrumentation.api.internal.HttpConstants -import io.opentelemetry.instrumentation.test.base.HttpServerTest -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint -import org.restlet.Component -import org.restlet.Context -import org.restlet.Redirector -import org.restlet.Restlet -import org.restlet.Router -import org.restlet.Server -import org.restlet.VirtualHost -import org.restlet.data.Form -import org.restlet.data.MediaType -import org.restlet.data.Protocol -import org.restlet.data.Request -import org.restlet.data.Response -import org.restlet.data.Status -import org.restlet.util.Template - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS -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 - -abstract class AbstractRestletServerTest extends HttpServerTest { - - Component component - VirtualHost host - - @Override - Server startServer(int port) { - - component = new Component() - host = component.getDefaultHost() - def server = setupServer(component) - setupRouting() - - component.start() - - return server - } - - @Override - void stopServer(Server server) { - component.stop() - } - - def attachAndWrap(path, restlet) { - host.attach(path, wrapRestlet(restlet, path)) - } - - Server setupServer(Component component) { - return component.getServers().add(Protocol.HTTP, port) - } - - void setupRouting() { - - def defaultRouter = wrapRestlet(new Router(host.getContext()), "/*") - host.attach("/", defaultRouter).setMatchingMode(Template.MODE_STARTS_WITH) - - attachAndWrap(SUCCESS.path, new Restlet() { - @Override - void handle(Request request, Response response) { - controller(SUCCESS) { - response.setEntity(SUCCESS.body, MediaType.TEXT_PLAIN) - response.setStatus(Status.valueOf(SUCCESS.status), SUCCESS.body) - } - } - }) - - attachAndWrap(REDIRECT.path, new Redirector(Context.getCurrent(), REDIRECT.body, Redirector.MODE_CLIENT_FOUND) { - @Override - void handle(Request request, Response response) { - super.handle(request, response) - controller(REDIRECT) { - } //TODO: check why handle fails inside controller - } - }) - - attachAndWrap(ERROR.path, new Restlet() { - @Override - void handle(Request request, Response response) { - controller(ERROR) { - response.setStatus(Status.valueOf(ERROR.getStatus()), ERROR.getBody()) - } - } - }) - - attachAndWrap(EXCEPTION.path, new Restlet() { - @Override - void handle(Request request, Response response) { - controller(EXCEPTION) { - throw new Exception(EXCEPTION.getBody()) - } - } - }) - - attachAndWrap(QUERY_PARAM.path, new Restlet() { - @Override - void handle(Request request, Response response) { - controller(QUERY_PARAM) { - response.setEntity(QUERY_PARAM.getBody(), MediaType.TEXT_PLAIN) - response.setStatus(Status.valueOf(QUERY_PARAM.getStatus()), QUERY_PARAM.getBody()) - } - } - }) - - attachAndWrap("/path/{id}/param", new Restlet() { - @Override - void handle(Request request, Response response) { - controller(PATH_PARAM) { - response.setEntity(PATH_PARAM.getBody(), MediaType.TEXT_PLAIN) - response.setStatus(Status.valueOf(PATH_PARAM.getStatus()), PATH_PARAM.getBody()) - } - } - }) - - attachAndWrap("/captureHeaders", new Restlet() { - @Override - void handle(Request request, Response response) { - controller(CAPTURE_HEADERS) { - Form requestHeaders = request.getAttributes().get("org.restlet.http.headers") - Form responseHeaders = response.getAttributes().computeIfAbsent("org.restlet.http.headers", { new Form() }) - responseHeaders.add("X-Test-Response", requestHeaders.getValues("X-Test-Request")) - - response.setEntity(CAPTURE_HEADERS.getBody(), MediaType.TEXT_PLAIN) - response.setStatus(Status.valueOf(CAPTURE_HEADERS.getStatus()), CAPTURE_HEADERS.getBody()) - } - } - }) - - attachAndWrap(INDEXED_CHILD.path, new Restlet() { - @Override - void handle(Request request, Response response) { - controller(INDEXED_CHILD) { - INDEXED_CHILD.collectSpanAttributes { request.getOriginalRef().getQueryAsForm().getFirst(it).getValue() } - response.setStatus(Status.valueOf(INDEXED_CHILD.status)) - } - } - }) - - } - - @Override - boolean testPathParam() { - true - } - - @Override - boolean testErrorBody() { - false - } - - @Override - boolean testHttpPipelining() { - false - } - - @Override - String expectedHttpRoute(ServerEndpoint endpoint, String method) { - if (method == HttpConstants._OTHER) { - return getContextPath() + endpoint.path - } - switch (endpoint) { - case PATH_PARAM: - return getContextPath() + "/path/{id}/param" - case NOT_FOUND: - return getContextPath() + "/*" - default: - return super.expectedHttpRoute(endpoint, method) - } - } - - Restlet wrapRestlet(Restlet restlet, String path) { - return restlet - } - -} diff --git a/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/AbstractServletServerTest.groovy b/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/AbstractServletServerTest.groovy deleted file mode 100644 index d6655ab173db..000000000000 --- a/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/AbstractServletServerTest.groovy +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.restlet.v1_1 - -import io.opentelemetry.instrumentation.api.internal.HttpConstants -import io.opentelemetry.instrumentation.test.base.HttpServerTest -import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint -import org.eclipse.jetty.server.Server -import org.eclipse.jetty.util.resource.Resource -import org.eclipse.jetty.webapp.WebAppContext -import org.restlet.Application -import org.restlet.Restlet -import org.restlet.Router - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS -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 - -abstract class AbstractServletServerTest extends HttpServerTest { - - @Override - Server startServer(int port) { - - def webAppContext = new WebAppContext() - webAppContext.setContextPath(getContextPath()) - - webAppContext.setBaseResource(Resource.newSystemResource("servlet-ext-app")) - - def jettyServer = new Server(port) - jettyServer.connectors.each { - it.setHost('localhost') - } - - jettyServer.setHandler(webAppContext) - jettyServer.start() - - return jettyServer - } - - @Override - void stopServer(Server server) { - server.stop() - server.destroy() - } - - @Override - boolean testException() { - false - } - - @Override - boolean testPathParam() { - true - } - - @Override - String expectedHttpRoute(ServerEndpoint endpoint, String method) { - if (method == HttpConstants._OTHER) { - return getContextPath() + endpoint.path - } - switch (endpoint) { - case PATH_PARAM: - return getContextPath() + "/path/{id}/param" - case NOT_FOUND: - return getContextPath() + "/*" - default: - return super.expectedHttpRoute(endpoint, method) - } - } - - @Override - int getResponseCodeOnNonStandardHttpMethod() { - 405 - } - - static class TestApp extends Application { - - @Override - Restlet createRoot() { - def router = new Router(getContext()) - - router.attach(SUCCESS.path, RestletAppTestBase.SuccessResource) - router.attach(REDIRECT.path, RestletAppTestBase.RedirectResource) - router.attach(ERROR.path, RestletAppTestBase.ErrorResource) - router.attach(EXCEPTION.path, RestletAppTestBase.ExceptionResource) - router.attach("/path/{id}/param", RestletAppTestBase.PathParamResource) - router.attach(QUERY_PARAM.path, RestletAppTestBase.QueryParamResource) - router.attach(CAPTURE_HEADERS.path, RestletAppTestBase.CaptureHeadersResource) - router.attach(INDEXED_CHILD.path, RestletAppTestBase.IndexedChildResource) - - return router - } - - } -} diff --git a/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/RestletAppTestBase.groovy b/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/RestletAppTestBase.groovy deleted file mode 100644 index 299fc09f75da..000000000000 --- a/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/RestletAppTestBase.groovy +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.restlet.v1_1 - -import org.restlet.Context -import org.restlet.data.Form -import org.restlet.data.MediaType -import org.restlet.data.Reference -import org.restlet.data.Request -import org.restlet.data.Response -import org.restlet.data.Status -import org.restlet.resource.Representation -import org.restlet.resource.Resource -import org.restlet.resource.StringRepresentation -import org.restlet.resource.Variant - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS -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.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.instrumentation.test.base.HttpServerTest.controller - -class RestletAppTestBase { - - static abstract class BaseResource extends Resource { - - @Override - void init(Context context, Request request, Response response) { - super.init(context, request, response) - getVariants().add(new Variant(MediaType.TEXT_PLAIN)) - } - } - - static class SuccessResource extends BaseResource { - - @Override - Representation represent(Variant variant) { - controller(SUCCESS) { - return new StringRepresentation(SUCCESS.body) - } - } - } - - static class ErrorResource extends BaseResource { - - @Override - Representation represent(Variant variant) { - controller(ERROR) { - getResponse().setStatus(Status.valueOf(ERROR.getStatus()), ERROR.getBody()) - return new StringRepresentation(ERROR.body) - } - } - } - - static class ExceptionResource extends BaseResource { - - @Override - Representation represent(Variant variant) { - controller(EXCEPTION) { - throw new Exception(EXCEPTION.body) - } - } - } - - static class QueryParamResource extends BaseResource { - - @Override - Representation represent(Variant variant) { - controller(QUERY_PARAM) { - return new StringRepresentation(QUERY_PARAM.getBody()) - } - } - } - - static class PathParamResource extends BaseResource { - - @Override - Representation represent(Variant variant) { - controller(PATH_PARAM) { - return new StringRepresentation(PATH_PARAM.getBody()) - } - } - } - - static class RedirectResource extends BaseResource { - - @Override - Representation represent(Variant variant) { - controller(REDIRECT) { - response.setLocationRef(new Reference(REDIRECT.getBody())) - response.setStatus(Status.valueOf(REDIRECT.status)) - return new StringRepresentation(REDIRECT.getBody()) - } - } - } - - static class CaptureHeadersResource extends BaseResource { - - @Override - Representation represent(Variant variant) { - controller(CAPTURE_HEADERS) { - Form requestHeaders = request.getAttributes().get("org.restlet.http.headers") - Form responseHeaders = response.getAttributes().computeIfAbsent("org.restlet.http.headers", { new Form() }) - responseHeaders.add("X-Test-Response", requestHeaders.getValues("X-Test-Request")) - return new StringRepresentation(CAPTURE_HEADERS.getBody()) - } - } - } - - - static class IndexedChildResource extends BaseResource { - - @Override - Representation represent(Variant variant) { - controller(INDEXED_CHILD) { - INDEXED_CHILD.collectSpanAttributes { request.getOriginalRef().getQueryAsForm().getFirst(it).getValue() } - return new StringRepresentation(INDEXED_CHILD.getBody()) - } - } - } - -} diff --git a/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerTest.groovy b/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerTest.groovy deleted file mode 100644 index 4c87a3a57cec..000000000000 --- a/instrumentation/restlet/restlet-1.1/testing/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerTest.groovy +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.restlet.v1_1.spring - -import io.opentelemetry.instrumentation.restlet.v1_1.AbstractRestletServerTest -import org.restlet.Component -import org.restlet.Router -import org.restlet.Server -import org.springframework.context.support.ClassPathXmlApplicationContext - -abstract class AbstractSpringServerTest extends AbstractRestletServerTest { - - Router router - - abstract String getConfigurationName() - - @Override - Server setupServer(Component component) { - def context = new ClassPathXmlApplicationContext(getConfigurationName()) - router = (Router) context.getBean("testRouter") - def server = (Server) context.getBean("testServer", "http", port) - component.getServers().add(server) - return server - } - - @Override - void setupRouting() { - host.attach(router) - } - - @Override - int getResponseCodeOnNonStandardHttpMethod() { - 405 - } -} diff --git a/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.java b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.java new file mode 100644 index 000000000000..a6a3c3ce5f28 --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.java @@ -0,0 +1,223 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.restlet.v1_1; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +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 io.opentelemetry.instrumentation.api.internal.HttpConstants; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint; +import org.restlet.Component; +import org.restlet.Context; +import org.restlet.Redirector; +import org.restlet.Restlet; +import org.restlet.Router; +import org.restlet.VirtualHost; +import org.restlet.data.Form; +import org.restlet.data.MediaType; +import org.restlet.data.Protocol; +import org.restlet.data.Request; +import org.restlet.data.Response; +import org.restlet.data.Status; +import org.restlet.util.Template; + +public class AbstractRestletServerTest extends AbstractHttpServerTest { + + protected Component component; + protected VirtualHost host; + + @Override + protected Component setupServer() throws Exception { + component = new Component(); + host = component.getDefaultHost(); + setupServer(component); + setupRouting(); + + component.start(); + + return component; + } + + protected void setupServer(Component component) { + component.getServers().add(Protocol.HTTP, port); + } + + @Override + protected void stopServer(Component component) throws Exception { + component.stop(); + } + + private void attachAndWrap(ServerEndpoint endpoint, Restlet restlet) { + attachAndWrap(endpoint.getPath(), restlet); + } + + private void attachAndWrap(String path, Restlet restlet) { + host.attach(path, wrapRestlet(restlet, path)); + } + + protected void setupRouting() { + Restlet defaultRouter = wrapRestlet(new Router(host.getContext()), "/*"); + host.attach("/", defaultRouter).setMatchingMode(Template.MODE_STARTS_WITH); + + attachAndWrap( + SUCCESS, + new Restlet() { + @Override + public void handle(Request request, Response response) { + controller( + SUCCESS, + () -> { + response.setEntity(SUCCESS.getBody(), MediaType.TEXT_PLAIN); + response.setStatus(Status.valueOf(SUCCESS.getStatus()), SUCCESS.getBody()); + }); + } + }); + + attachAndWrap( + REDIRECT, + new Redirector(Context.getCurrent(), REDIRECT.getBody(), Redirector.MODE_CLIENT_FOUND) { + @Override + public void handle(Request request, Response response) { + controller(REDIRECT, () -> { + super.handle(request, response); + }); + } + }); + + attachAndWrap( + ERROR, + new Restlet() { + @Override + public void handle(Request request, Response response) { + controller( + ERROR, + () -> response.setStatus(Status.valueOf(ERROR.getStatus()), ERROR.getBody())); + } + }); + + attachAndWrap( + EXCEPTION, + new Restlet() { + @Override + public void handle(Request request, Response response) { + controller( + EXCEPTION, + () -> { + throw new IllegalStateException(EXCEPTION.getBody()); + }); + } + }); + + attachAndWrap( + QUERY_PARAM, + new Restlet() { + @Override + public void handle(Request request, Response response) { + controller( + QUERY_PARAM, + () -> { + response.setEntity(QUERY_PARAM.getBody(), MediaType.TEXT_PLAIN); + response.setStatus( + Status.valueOf(QUERY_PARAM.getStatus()), QUERY_PARAM.getBody()); + }); + } + }); + + attachAndWrap( + "/path/{id}/param", + new Restlet() { + @Override + public void handle(Request request, Response response) { + controller( + PATH_PARAM, + () -> { + response.setEntity(PATH_PARAM.getBody(), MediaType.TEXT_PLAIN); + response.setStatus(Status.valueOf(PATH_PARAM.getStatus()), PATH_PARAM.getBody()); + }); + } + }); + + attachAndWrap( + "/captureHeaders", + new Restlet() { + @Override + public void handle(Request request, Response response) { + controller( + CAPTURE_HEADERS, + () -> { + Form requestHeaders = + (Form) request.getAttributes().get("org.restlet.http.headers"); + Form responseHeaders = + (Form) + response + .getAttributes() + .computeIfAbsent("org.restlet.http.headers", (key) -> new Form()); + responseHeaders.add( + "X-Test-Response", requestHeaders.getValues("X-Test-Request")); + + response.setEntity(CAPTURE_HEADERS.getBody(), MediaType.TEXT_PLAIN); + response.setStatus( + Status.valueOf(CAPTURE_HEADERS.getStatus()), CAPTURE_HEADERS.getBody()); + }); + } + }); + + attachAndWrap( + INDEXED_CHILD, + new Restlet() { + @Override + public void handle(Request request, Response response) { + controller( + INDEXED_CHILD, + () -> { + INDEXED_CHILD.collectSpanAttributes( + name -> request.getOriginalRef().getQueryAsForm().getFirst(name).getValue()); + response.setStatus(Status.valueOf(INDEXED_CHILD.getStatus())); + }); + } + }); + } + + protected Restlet wrapRestlet(Restlet restlet, String path) { + return restlet; + } + + protected String notFoundRoute() { + return "/*"; + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setTestPathParam(true); + options.setTestErrorBody(false); + options.setTestHttpPipelining(false); + options.setExpectedException(new IllegalStateException(EXCEPTION.getBody())); + options.setExpectedHttpRoute( + (endpoint, method) -> { + if (HttpConstants._OTHER.equals(method)) { + return getContextPath() + endpoint.getPath(); + } + + if (PATH_PARAM.equals(endpoint)) { + return getContextPath() + "/path/{id}/param"; + } else if (NOT_FOUND.equals(endpoint)) { + return getContextPath() + notFoundRoute(); + } + + return expectedHttpRoute(endpoint, method); + }); + } +} diff --git a/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractServletServerTest.java b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractServletServerTest.java new file mode 100644 index 000000000000..bb8b19d0783b --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractServletServerTest.java @@ -0,0 +1,91 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.restlet.v1_1; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +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 io.opentelemetry.instrumentation.api.internal.HttpConstants; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.util.resource.Resource; +import org.eclipse.jetty.webapp.WebAppContext; +import org.restlet.Application; +import org.restlet.Restlet; +import org.restlet.Router; + +public class AbstractServletServerTest extends AbstractHttpServerTest { + + @Override + protected Server setupServer() throws Exception { + WebAppContext webAppContext = new WebAppContext(); + webAppContext.setContextPath(getContextPath()); + + webAppContext.setBaseResource(Resource.newSystemResource("servlet-ext-app")); + + Server jettyServer = new Server(port); + jettyServer.setHandler(webAppContext); + jettyServer.start(); + + return jettyServer; + } + + @Override + protected void stopServer(Server server) throws Exception { + server.stop(); + server.destroy(); + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setTestException(false); + options.setTestPathParam(true); + options.setResponseCodeOnNonStandardHttpMethod(405); + options.setExpectedHttpRoute( + (endpoint, method) -> { + if (HttpConstants._OTHER.equals(method)) { + return getContextPath() + endpoint.getPath(); + } + + if (PATH_PARAM.equals(endpoint)) { + return getContextPath() + "/path/{id}/param"; + } else if (NOT_FOUND.equals(endpoint)) { + return getContextPath() + "/*"; + } + + return expectedHttpRoute(endpoint, method); + }); + } + + // used from web.xml + public static class TestApp extends Application { + + @Override + public Restlet createRoot() { + Router router = new Router(getContext()); + + router.attach(SUCCESS.getPath(), RestletAppTestBase.SuccessResource.class); + router.attach(REDIRECT.getPath(), RestletAppTestBase.RedirectResource.class); + router.attach(ERROR.getPath(), RestletAppTestBase.ErrorResource.class); + router.attach(EXCEPTION.getPath(), RestletAppTestBase.ExceptionResource.class); + router.attach("/path/{id}/param", RestletAppTestBase.PathParamResource.class); + router.attach(QUERY_PARAM.getPath(), RestletAppTestBase.QueryParamResource.class); + router.attach(CAPTURE_HEADERS.getPath(), RestletAppTestBase.CaptureHeadersResource.class); + router.attach(INDEXED_CHILD.getPath(), RestletAppTestBase.IndexedChildResource.class); + + return router; + } + } +} diff --git a/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/RestletAppTestBase.java b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/RestletAppTestBase.java new file mode 100644 index 000000000000..af51cfb6487c --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/RestletAppTestBase.java @@ -0,0 +1,138 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.restlet.v1_1; + +import static io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest.controller; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +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.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 org.restlet.Context; +import org.restlet.data.Form; +import org.restlet.data.MediaType; +import org.restlet.data.Reference; +import org.restlet.data.Request; +import org.restlet.data.Response; +import org.restlet.data.Status; +import org.restlet.resource.Representation; +import org.restlet.resource.Resource; +import org.restlet.resource.StringRepresentation; +import org.restlet.resource.Variant; + +public class RestletAppTestBase { + abstract static class BaseResource extends Resource { + + @Override + public void init(Context context, Request request, Response response) { + super.init(context, request, response); + getVariants().add(new Variant(MediaType.TEXT_PLAIN)); + } + } + + public static class SuccessResource extends BaseResource { + + @Override + public Representation represent(Variant variant) { + return controller(SUCCESS, () -> new StringRepresentation(SUCCESS.getBody())); + } + } + + public static class ErrorResource extends BaseResource { + + @Override + public Representation represent(Variant variant) { + return controller( + ERROR, + () -> { + getResponse().setStatus(Status.valueOf(ERROR.getStatus()), ERROR.getBody()); + return new StringRepresentation(ERROR.getBody()); + }); + } + } + + public static class ExceptionResource extends BaseResource { + + @Override + public Representation represent(Variant variant) { + return controller( + EXCEPTION, + () -> { + throw new IllegalStateException(EXCEPTION.getBody()); + }); + } + } + + public static class QueryParamResource extends BaseResource { + + @Override + public Representation represent(Variant variant) { + return controller(QUERY_PARAM, () -> new StringRepresentation(QUERY_PARAM.getBody())); + } + } + + public static class PathParamResource extends BaseResource { + + @Override + public Representation represent(Variant variant) { + return controller(PATH_PARAM, () -> new StringRepresentation(PATH_PARAM.getBody())); + } + } + + public static class RedirectResource extends BaseResource { + + @Override + public Representation represent(Variant variant) { + return controller( + REDIRECT, + () -> { + getResponse().setLocationRef(new Reference(REDIRECT.getBody())); + getResponse().setStatus(Status.valueOf(REDIRECT.getStatus())); + return new StringRepresentation(REDIRECT.getBody()); + }); + } + } + + public static class CaptureHeadersResource extends BaseResource { + + @Override + public Representation represent(Variant variant) { + return controller( + CAPTURE_HEADERS, + () -> { + Form requestHeaders = + (Form) getRequest().getAttributes().get("org.restlet.http.headers"); + Form responseHeaders = + (Form) + getResponse() + .getAttributes() + .computeIfAbsent("org.restlet.http.headers", (key) -> new Form()); + responseHeaders.add("X-Test-Response", requestHeaders.getValues("X-Test-Request")); + return new StringRepresentation(CAPTURE_HEADERS.getBody()); + }); + } + } + + public static class IndexedChildResource extends BaseResource { + + @Override + public Representation represent(Variant variant) { + return controller( + INDEXED_CHILD, + () -> { + INDEXED_CHILD.collectSpanAttributes( + name -> getRequest().getOriginalRef().getQueryAsForm().getFirst(name).getValue()); + return new StringRepresentation(INDEXED_CHILD.getBody()); + }); + } + } + + private RestletAppTestBase() {} +} diff --git a/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerTest.java b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerTest.java new file mode 100644 index 000000000000..83e7ea4a8e39 --- /dev/null +++ b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/spring/AbstractSpringServerTest.java @@ -0,0 +1,40 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.restlet.v1_1.spring; + +import io.opentelemetry.instrumentation.restlet.v1_1.AbstractRestletServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import org.restlet.Component; +import org.restlet.Router; +import org.restlet.Server; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public abstract class AbstractSpringServerTest extends AbstractRestletServerTest { + + protected Router router; + + protected abstract String getConfigurationName(); + + @Override + protected void setupServer(Component component) { + ApplicationContext context = new ClassPathXmlApplicationContext(getConfigurationName()); + router = (Router) context.getBean("testRouter"); + Server server = (Server) context.getBean("testServer", new Object[] {"http", port}); + component.getServers().add(server); + } + + @Override + protected void setupRouting() { + host.attach(router); + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + options.setResponseCodeOnNonStandardHttpMethod(405); + } +} 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 6f9bb4c077d3..eeb1d4c4ba6f 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 @@ -120,7 +120,16 @@ public static T controller(ServerEndpoint endpoint, Supplier closure) { if (endpoint == NOT_FOUND) { return closure.get(); } - return GlobalTraceUtil.runWithSpan("controller", () -> closure.get()); + return GlobalTraceUtil.runWithSpan("controller", closure::get); + } + + public static void controller(ServerEndpoint endpoint, Runnable closure) { + controller( + endpoint, + () -> { + closure.run(); + return null; + }); } protected AggregatedHttpRequest request(ServerEndpoint uri, String method) { From 6de1d1b45cfacfe940353050ea15589f01945d31 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Thu, 26 Sep 2024 18:53:29 +0300 Subject: [PATCH 2/2] spotless --- .../restlet/v1_1/AbstractRestletServerTest.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.java b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.java index a6a3c3ce5f28..721f709753b4 100644 --- a/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.java +++ b/instrumentation/restlet/restlet-1.1/testing/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/AbstractRestletServerTest.java @@ -90,9 +90,11 @@ public void handle(Request request, Response response) { new Redirector(Context.getCurrent(), REDIRECT.getBody(), Redirector.MODE_CLIENT_FOUND) { @Override public void handle(Request request, Response response) { - controller(REDIRECT, () -> { - super.handle(request, response); - }); + controller( + REDIRECT, + () -> { + super.handle(request, response); + }); } });