diff --git a/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/SetContextPathAdvice.java b/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/SetContextPathAdvice.java index 40621b0c98a3..d954023d95d1 100644 --- a/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/SetContextPathAdvice.java +++ b/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/SetContextPathAdvice.java @@ -43,7 +43,7 @@ public static void updateContextPath( pathInContext.startsWith(servletContext) ? pathInContext.substring(servletContext.length()) : pathInContext; - if (!relativePath.isEmpty() && relativePath.charAt(0) != '/') { + if (relativePath.isEmpty() || relativePath.charAt(0) != '/') { relativePath = "/" + relativePath; } ((AgentSpan) span).setTag(SERVLET_PATH, relativePath); diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy index c16796163aad..54cc2e1a0d05 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy @@ -1,44 +1,5 @@ package datadog.trace.agent.test.base -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.BODY_JSON -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.BODY_MULTIPART -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.BODY_URLENCODED -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.CREATED -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.CREATED_IS -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.CUSTOM_EXCEPTION -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.ERROR -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.EXCEPTION -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.FORWARDED -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.QUERY_ENCODED_BOTH -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.QUERY_ENCODED_QUERY -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.REDIRECT -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.SESSION_ID -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.SUCCESS -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.TIMEOUT -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.TIMEOUT_ERROR -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.UNKNOWN -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.USER_BLOCK -import static datadog.trace.agent.test.utils.TraceUtils.basicSpan -import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace -import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_SERVER_RAW_QUERY_STRING -import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_SERVER_RAW_RESOURCE -import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_SERVER_TAG_QUERY_STRING -import static datadog.trace.api.config.TraceInstrumentationConfig.SERVLET_ASYNC_TIMEOUT_ERROR -import static datadog.trace.api.config.TracerConfig.HEADER_TAGS -import static datadog.trace.api.config.TracerConfig.REQUEST_HEADER_TAGS -import static datadog.trace.api.config.TracerConfig.RESPONSE_HEADER_TAGS -import static datadog.trace.bootstrap.blocking.BlockingActionHelper.TemplateType.JSON -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.get -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan -import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.SERVER_PATHWAY_EDGE_TAGS -import static java.nio.charset.StandardCharsets.UTF_8 -import static org.junit.Assume.assumeTrue - import ch.qos.logback.classic.Level import datadog.appsec.api.blocking.Blocking import datadog.appsec.api.blocking.BlockingContentType @@ -90,6 +51,45 @@ import java.util.function.BiFunction import java.util.function.Function import java.util.function.Supplier +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.BODY_JSON +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.BODY_MULTIPART +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.BODY_URLENCODED +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.CREATED +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.CREATED_IS +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.CUSTOM_EXCEPTION +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.ERROR +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.EXCEPTION +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.FORWARDED +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.QUERY_ENCODED_BOTH +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.QUERY_ENCODED_QUERY +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.REDIRECT +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.SESSION_ID +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.SUCCESS +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.TIMEOUT +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.TIMEOUT_ERROR +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.UNKNOWN +import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.USER_BLOCK +import static datadog.trace.agent.test.utils.TraceUtils.basicSpan +import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace +import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_SERVER_RAW_QUERY_STRING +import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_SERVER_RAW_RESOURCE +import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_SERVER_TAG_QUERY_STRING +import static datadog.trace.api.config.TraceInstrumentationConfig.SERVLET_ASYNC_TIMEOUT_ERROR +import static datadog.trace.api.config.TracerConfig.HEADER_TAGS +import static datadog.trace.api.config.TracerConfig.REQUEST_HEADER_TAGS +import static datadog.trace.api.config.TracerConfig.RESPONSE_HEADER_TAGS +import static datadog.trace.bootstrap.blocking.BlockingActionHelper.TemplateType.JSON +import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope +import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan +import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.get +import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan +import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.SERVER_PATHWAY_EDGE_TAGS +import static java.nio.charset.StandardCharsets.UTF_8 +import static org.junit.Assume.assumeTrue + abstract class HttpServerTest extends WithHttpServer { public static final Logger SERVER_LOGGER = LoggerFactory.getLogger("http-server") @@ -209,9 +209,9 @@ abstract class HttpServerTest extends WithHttpServer { // Only used if hasExtraErrorInformation is true Map expectedExtraErrorInformation(ServerEndpoint endpoint) { if (endpoint.errored) { - ["error.message": { it == null || it == EXCEPTION.body }, - "error.type" : { it == null || it == Exception.name }, - "error.stack" : { it == null || it instanceof String }] + ["error.message" : { it == null || it == EXCEPTION.body }, + "error.type" : { it == null || it == Exception.name }, + "error.stack": { it == null || it instanceof String }] } else { Collections.emptyMap() } @@ -493,8 +493,8 @@ abstract class HttpServerTest extends WithHttpServer { } private static final Map PATH_MAP = { - Map map = values().collectEntries { [it.path, it] } - map.putAll(values().collectEntries { [it.rawPath, it] }) + Map map = values().collectEntries { [it.path, it]} + map.putAll(values().collectEntries { [it.rawPath, it]}) map }.call() @@ -702,9 +702,9 @@ abstract class HttpServerTest extends WithHttpServer { } where: - method | body | header | value | tags - 'GET' | null | 'x-datadog-test-both-header' | 'foo' | ['both_header_tag': 'foo'] - 'GET' | null | 'x-datadog-test-request-header' | 'bar' | ['request_header_tag': 'bar'] + method | body | header | value | tags + 'GET' | null | 'x-datadog-test-both-header' | 'foo' | [ 'both_header_tag': 'foo' ] + 'GET' | null | 'x-datadog-test-request-header' | 'bar' | [ 'request_header_tag': 'bar' ] } @Flaky(value = "https://github.com/DataDog/dd-trace-java/issues/4690", suites = ["MuleHttpServerForkedTest"]) @@ -716,7 +716,7 @@ abstract class HttpServerTest extends WithHttpServer { def body = null def header = IG_RESPONSE_HEADER def mapping = 'mapped_response_header_tag' - def tags = ['mapped_response_header_tag': "$IG_RESPONSE_HEADER_VALUE"] + def tags = ['mapped_response_header_tag': "$IG_RESPONSE_HEADER_VALUE" ] injectSysConfig(HTTP_SERVER_TAG_QUERY_STRING, "true") injectSysConfig(RESPONSE_HEADER_TAGS, "$header:$mapping") @@ -799,13 +799,13 @@ abstract class HttpServerTest extends WithHttpServer { } where: - rawQuery | endpoint | encoded - true | SUCCESS | false - true | QUERY_PARAM | false - true | QUERY_ENCODED_QUERY | true - false | SUCCESS | false - false | QUERY_PARAM | false - false | QUERY_ENCODED_QUERY | true + rawQuery | endpoint | encoded + true | SUCCESS | false + true | QUERY_PARAM | false + true | QUERY_ENCODED_QUERY | true + false | SUCCESS | false + false | QUERY_PARAM | false + false | QUERY_ENCODED_QUERY | true method = "GET" body = null @@ -918,7 +918,7 @@ abstract class HttpServerTest extends WithHttpServer { } then: - DDSpan span = TEST_WRITER.flatten().find { it.operationName == 'appsec-span' } + DDSpan span = TEST_WRITER.flatten().find {it.operationName =='appsec-span' } span.getTag(IG_PATH_PARAMS_TAG) == expectedIGPathParams() and: @@ -1612,7 +1612,7 @@ abstract class HttpServerTest extends WithHttpServer { then: TEST_WRITER.waitForTraces(1) def trace = TEST_WRITER.get(0) - assert trace.find { it.isError() } == null + assert trace.find {it.isError() } == null } def 'test blocking of request for path parameters'() { @@ -1693,8 +1693,7 @@ abstract class HttpServerTest extends WithHttpServer { spans.find { it.tags['appsec.blocked'] == 'true' } != null spans.find { it.error && - it.tags['error.type'] == BlockingException.name - } != null + it.tags['error.type'] == BlockingException.name } != null and: if (isDataStreamsEnabled()) { @@ -1874,7 +1873,7 @@ abstract class HttpServerTest extends WithHttpServer { if (isDataStreamsEnabled()) { TEST_DATA_STREAMS_WRITER.waitForGroups(1) } - DDSpan span = TEST_WRITER.flatten().find { it.operationName == 'appsec-span' } + DDSpan span = TEST_WRITER.flatten().find {it.operationName =='appsec-span' } span != null final sessionId = span.tags[IG_SESSION_ID_TAG] sessionId != null