-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for Restlet Servlet extension (open-telemetry#4428)
* test servlet * delete unused web.xml
- Loading branch information
Showing
11 changed files
with
306 additions
and
179 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 14 additions & 0 deletions
14
...t/groovy/io/opentelemetry/javaagent/instrumentation/restlet/v1_0/ServletServerTest.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
/* | ||
* Copyright The OpenTelemetry Authors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
package io.opentelemetry.javaagent.instrumentation.restlet.v1_0 | ||
|
||
|
||
import io.opentelemetry.instrumentation.restlet.v1_0.AbstractServletServerTest | ||
import io.opentelemetry.instrumentation.test.AgentTestTrait | ||
|
||
class ServletServerTest extends AbstractServletServerTest implements AgentTestTrait { | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
110 changes: 110 additions & 0 deletions
110
...ain/groovy/io/opentelemetry/instrumentation/restlet/v1_0/AbstractServletServerTest.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
/* | ||
* Copyright The OpenTelemetry Authors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
package io.opentelemetry.instrumentation.restlet.v1_0 | ||
|
||
import io.opentelemetry.api.common.AttributeKey | ||
import io.opentelemetry.instrumentation.test.base.HttpServerTest | ||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes | ||
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.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.ERROR | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.EXCEPTION | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.INDEXED_CHILD | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS | ||
|
||
abstract class AbstractServletServerTest extends HttpServerTest<Server> { | ||
|
||
@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 | ||
List<AttributeKey<?>> extraAttributes() { | ||
[ | ||
SemanticAttributes.NET_TRANSPORT, | ||
SemanticAttributes.HTTP_SERVER_NAME | ||
] | ||
} | ||
|
||
@Override | ||
void stopServer(Server server) { | ||
server.stop() | ||
server.destroy() | ||
} | ||
|
||
@Override | ||
boolean testException() { | ||
false | ||
} | ||
|
||
@Override | ||
boolean testPathParam() { | ||
true | ||
} | ||
|
||
@Override | ||
boolean testConcurrency() { | ||
true | ||
} | ||
|
||
@Override | ||
String expectedServerSpanName(ServerEndpoint endpoint) { | ||
switch (endpoint) { | ||
case PATH_PARAM: | ||
return getContextPath() + "/path/{id}/param" | ||
case NOT_FOUND: | ||
return getContextPath() + "/*" | ||
default: | ||
return endpoint.resolvePath(address).path | ||
} | ||
} | ||
|
||
|
||
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 | ||
} | ||
|
||
} | ||
} |
129 changes: 129 additions & 0 deletions
129
...g/src/main/groovy/io/opentelemetry/instrumentation/restlet/v1_0/RestletAppTestBase.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
/* | ||
* Copyright The OpenTelemetry Authors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
package io.opentelemetry.instrumentation.restlet.v1_0 | ||
|
||
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.test.base.HttpServerTest.ServerEndpoint.CAPTURE_HEADERS | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.ERROR | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.EXCEPTION | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.INDEXED_CHILD | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.REDIRECT | ||
import static io.opentelemetry.instrumentation.test.base.HttpServerTest.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()) | ||
} | ||
} | ||
} | ||
|
||
} |
Oops, something went wrong.