From b8470e9fd13c618ef58e240346c90e3dd40f6aab Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 1 Oct 2026 13:41:41 -0700 Subject: [PATCH 01/12] Remove the span.flags checks in OTel HTTP Semantics. By definition, if a span is exported it is sampled. For completeness, we should set the 32-bit flags field to match the value of the W3C traceparent flags field, but we don't need/use it right now. --- tests/test_otel_http_semantics.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/tests/test_otel_http_semantics.py b/tests/test_otel_http_semantics.py index 48981baa240..580a4b82276 100644 --- a/tests/test_otel_http_semantics.py +++ b/tests/test_otel_http_semantics.py @@ -184,10 +184,6 @@ def _span_is_error(span: HttpSpan) -> bool: return _status_code(status.get("code", StatusCode.STATUS_CODE_UNSET.value)) == StatusCode.STATUS_CODE_ERROR.value -def _span_is_sampled(span: HttpSpan) -> bool: - return bool(int(span.get("flags", 0)) & 1) - - def _iter_otlp_spans(request: HttpResponse) -> Iterator[dict[str, Any]]: """Yield every span in the OTLP payloads associated with ``request``, each one once. @@ -785,9 +781,6 @@ def test_otel_span_name_is_available_to_sampling_rules(self) -> None: assert trace_id, "the request-correlated matched span carries no traceId" matched_trace = [span for span in _iter_otlp_spans(self.matched_response) if span.get("traceId") == trace_id] assert matched_trace, "the matched trace must contain at least one exported span" - assert all(_span_is_sampled(span) for span in matched_trace), ( - "every span in the trace kept by the HTTP* resource rule must carry the sampled flag" - ) def setup_server_span_name_is_available_before_client_sampling(self) -> None: self.distant_call_response = _distant_call() @@ -800,5 +793,3 @@ def test_server_span_name_is_available_before_client_sampling(self) -> None: assert _attributes(server_span).get("_dd.rule_psr") == 1, ( "the GET* rule must keep the server trace whether or not the route was resolved before client sampling" ) - assert _span_is_sampled(server_span) - assert _span_is_sampled(client_span), "sampling the server trace must keep its outbound HTTP client span" From 579eeb4172659ccdeb7f1fd80da3b72be7e62cee Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 1 Oct 2026 13:53:43 -0700 Subject: [PATCH 02/12] Update the make_distant_call endpoints in Java weblogs applications to accept an optional method argument, needed for OTel HTTP semantics --- .../datadoghq/akka_http/AppSecRoutes.scala | 11 ++++--- .../java/com/datadoghq/jersey/MyResource.java | 31 +++++++++---------- .../app/controllers/AppSecController.scala | 10 +++--- utils/build/docker/java/play/conf/routes | 2 +- .../main/java/com/datadoghq/ratpack/Main.java | 30 ++++++++---------- .../com/datadoghq/resteasy/MyResource.java | 31 +++++++++---------- .../springbootnative/WebController.java | 31 +++++++++---------- .../system_tests/springboot/App.java | 11 +++++-- .../main/java/com/datadoghq/vertx3/Main.java | 6 +++- .../main/java/com/datadoghq/vertx4/Main.java | 6 +++- 10 files changed, 85 insertions(+), 84 deletions(-) diff --git a/utils/build/docker/java/akka-http/src/main/scala/com/datadoghq/akka_http/AppSecRoutes.scala b/utils/build/docker/java/akka-http/src/main/scala/com/datadoghq/akka_http/AppSecRoutes.scala index ea99380aaca..9871ce69d6c 100644 --- a/utils/build/docker/java/akka-http/src/main/scala/com/datadoghq/akka_http/AppSecRoutes.scala +++ b/utils/build/docker/java/akka-http/src/main/scala/com/datadoghq/akka_http/AppSecRoutes.scala @@ -208,15 +208,15 @@ object AppSecRoutes { span.setTag(if (decision == "keep") DDTags.MANUAL_KEEP else DDTags.MANUAL_DROP, true) } // Call downstream so that tests can assert on the sampling decision that gets propagated - complete(StatusCodes.OK, makeDistantCall("http://localhost:7777/"))(Marshaller.futureMarshaller(jsonMarshaller)) + complete(StatusCodes.OK, makeDistantCall("http://localhost:7777/", "GET"))(Marshaller.futureMarshaller(jsonMarshaller)) } } } } ~ path("make_distant_call") { get { - parameter("url") { url => - complete(StatusCodes.OK, makeDistantCall(url))(Marshaller.futureMarshaller(jsonMarshaller)) + parameters("url", "method".withDefault("GET")) { (url, method) => + complete(StatusCodes.OK, makeDistantCall(url, method))(Marshaller.futureMarshaller(jsonMarshaller)) } } } ~ @@ -365,8 +365,9 @@ object AppSecRoutes { response_headers: Map[String, String] ) - private def makeDistantCall(url: String): Future[DistantCallResponse] = { - val request = HttpRequest(uri = url) + private def makeDistantCall(url: String, method: String): Future[DistantCallResponse] = { + val httpMethod = HttpMethods.getForKey(method).getOrElse(HttpMethod.custom(method)) + val request = HttpRequest(method = httpMethod, uri = url) val requestHeaders = request.headers.map(h => (h.name(), h.value())).toMap Http().singleRequest(request).map { response => diff --git a/utils/build/docker/java/jersey-grizzly2/src/main/java/com/datadoghq/jersey/MyResource.java b/utils/build/docker/java/jersey-grizzly2/src/main/java/com/datadoghq/jersey/MyResource.java index d0e04e564de..b685a7d160b 100644 --- a/utils/build/docker/java/jersey-grizzly2/src/main/java/com/datadoghq/jersey/MyResource.java +++ b/utils/build/docker/java/jersey-grizzly2/src/main/java/com/datadoghq/jersey/MyResource.java @@ -413,37 +413,34 @@ public Response traceManualKeepDrop(@QueryParam("decision") String decision) thr } // Call downstream so that tests can assert on the sampling decision that gets propagated - String result = new ObjectMapper().writeValueAsString(make_distant_call("http://localhost:7777/")); + String result = new ObjectMapper().writeValueAsString(make_distant_call("http://localhost:7777/", "GET")); return Response.ok(result).type(MediaType.APPLICATION_JSON).build(); } @GET @Path("/make_distant_call") - public DistantCallResponse make_distant_call(@QueryParam("url") String url) throws Exception { - URL urlObject = new URL(url); - - HttpURLConnection con = (HttpURLConnection) urlObject.openConnection(); - con.setRequestMethod("GET"); + public DistantCallResponse make_distant_call( + @QueryParam("url") String url, + @DefaultValue("GET") @QueryParam("method") String method) throws Exception { + java.net.http.HttpRequest request = java.net.http.HttpRequest.newBuilder() + .uri(java.net.URI.create(url)) + .method(method, java.net.http.HttpRequest.BodyPublishers.noBody()) + .build(); + java.net.http.HttpResponse response = java.net.http.HttpClient.newHttpClient().send( + request, + java.net.http.HttpResponse.BodyHandlers.discarding()); // Save request headers HashMap request_headers = new HashMap(); - for (Map.Entry> header: con.getRequestProperties().entrySet()) { - if (header.getKey() == null) { - continue; - } - + for (Map.Entry> header: request.headers().map().entrySet()) { request_headers.put(header.getKey(), header.getValue().get(0)); } // Save response headers and status code - int status_code = con.getResponseCode(); + int status_code = response.statusCode(); HashMap response_headers = new HashMap(); - for (Map.Entry> header: con.getHeaderFields().entrySet()) { - if (header.getKey() == null) { - continue; - } - + for (Map.Entry> header: response.headers().map().entrySet()) { response_headers.put(header.getKey(), header.getValue().get(0)); } diff --git a/utils/build/docker/java/play/app/controllers/AppSecController.scala b/utils/build/docker/java/play/app/controllers/AppSecController.scala index 6d6ba328a12..9c22817c735 100644 --- a/utils/build/docker/java/play/app/controllers/AppSecController.scala +++ b/utils/build/docker/java/play/app/controllers/AppSecController.scala @@ -193,16 +193,16 @@ class AppSecController @Inject()(cc: MessagesControllerComponents, ws: WSClient, span.setTag(if (decision == "keep") DDTags.MANUAL_KEEP else DDTags.MANUAL_DROP, true) } // Call downstream so that tests can assert on the sampling decision that gets propagated - makeDistantCall("http://localhost:7777/") + makeDistantCall("http://localhost:7777/", "GET") } } - def distantCall(url: String) = Action.async { - makeDistantCall(url) + def distantCall(url: String, method: String) = Action.async { + makeDistantCall(url, method) } - private def makeDistantCall(url: String): Future[Result] = { - val remoteReq: WSRequest = ws.url(url).withMethod("GET") + private def makeDistantCall(url: String, method: String): Future[Result] = { + val remoteReq: WSRequest = ws.url(url).withMethod(method) // we need to break the abstraction to be able to get to the request headers val ahcRequest: AHCRequest = remoteReq.asInstanceOf[AhcWSRequest].underlying.buildRequest() diff --git a/utils/build/docker/java/play/conf/routes b/utils/build/docker/java/play/conf/routes index 2585aabdba6..1ea3dfa9d4f 100644 --- a/utils/build/docker/java/play/conf/routes +++ b/utils/build/docker/java/play/conf/routes @@ -13,7 +13,7 @@ GET /waf/ controllers.AppSecController.waf GET /waf/*segments controllers.AppSecController.params(segments: Seq[String]) POST /waf controllers.AppSecController.wafPost GET /trace/manual_keep_drop controllers.AppSecController.traceManualKeepDrop(decision: String) -GET /make_distant_call controllers.AppSecController.distantCall(url: String) +GET /make_distant_call controllers.AppSecController.distantCall(url: String, method: String ?= "GET") GET /status controllers.AppSecController.status(code: Int) GET /stats-unique controllers.AppSecController.statsUnique(code: Option[Int]) GET /users controllers.AppSecController.users(user: String) diff --git a/utils/build/docker/java/ratpack/src/main/java/com/datadoghq/ratpack/Main.java b/utils/build/docker/java/ratpack/src/main/java/com/datadoghq/ratpack/Main.java index ba4cdd67434..07bbc54bfc6 100644 --- a/utils/build/docker/java/ratpack/src/main/java/com/datadoghq/ratpack/Main.java +++ b/utils/build/docker/java/ratpack/src/main/java/com/datadoghq/ratpack/Main.java @@ -231,30 +231,27 @@ public static void main(String[] args) throws Exception { .get("make_distant_call", ctx -> { final Promise res = Blocking.get(() -> { String url = ctx.getRequest().getQueryParams().get("url"); - - URL urlObject = new URL(url); - - HttpURLConnection con = (HttpURLConnection) urlObject.openConnection(); - con.setRequestMethod("GET"); + String method = Optional.ofNullable( + ctx.getRequest().getQueryParams().get("method")) + .orElse("GET"); + java.net.http.HttpRequest request = java.net.http.HttpRequest.newBuilder() + .uri(java.net.URI.create(url)) + .method(method, java.net.http.HttpRequest.BodyPublishers.noBody()) + .build(); + java.net.http.HttpResponse response = java.net.http.HttpClient + .newHttpClient() + .send(request, java.net.http.HttpResponse.BodyHandlers.discarding()); // Save request headers HashMap request_headers = new HashMap(); - for (Map.Entry> header : con.getRequestProperties().entrySet()) { - if (header.getKey() == null) { - continue; - } - + for (Map.Entry> header : request.headers().map().entrySet()) { request_headers.put(header.getKey(), header.getValue().get(0)); } // Save response headers and status code - int status_code = con.getResponseCode(); + int status_code = response.statusCode(); HashMap response_headers = new HashMap(); - for (Map.Entry> header : con.getHeaderFields().entrySet()) { - if (header.getKey() == null) { - continue; - } - + for (Map.Entry> header : response.headers().map().entrySet()) { response_headers.put(header.getKey(), header.getValue().get(0)); } @@ -483,4 +480,3 @@ public static final class DistantCallResponse { public static final DataSource DATA_SOURCE = new SqlServer().start(); } - diff --git a/utils/build/docker/java/resteasy-netty3/src/main/java/com/datadoghq/resteasy/MyResource.java b/utils/build/docker/java/resteasy-netty3/src/main/java/com/datadoghq/resteasy/MyResource.java index 67057ebb985..f96fa87e8c4 100644 --- a/utils/build/docker/java/resteasy-netty3/src/main/java/com/datadoghq/resteasy/MyResource.java +++ b/utils/build/docker/java/resteasy-netty3/src/main/java/com/datadoghq/resteasy/MyResource.java @@ -482,37 +482,34 @@ public Response traceManualKeepDrop(@QueryParam("decision") String decision) thr } // Call downstream so that tests can assert on the sampling decision that gets propagated - String result = new ObjectMapper().writeValueAsString(make_distant_call("http://localhost:7777/")); + String result = new ObjectMapper().writeValueAsString(make_distant_call("http://localhost:7777/", "GET")); return Response.ok(result).type(MediaType.APPLICATION_JSON).build(); } @GET @Path("/make_distant_call") - public DistantCallResponse make_distant_call(@QueryParam("url") String url) throws Exception { - URL urlObject = new URL(url); - - HttpURLConnection con = (HttpURLConnection) urlObject.openConnection(); - con.setRequestMethod("GET"); + public DistantCallResponse make_distant_call( + @QueryParam("url") String url, + @DefaultValue("GET") @QueryParam("method") String method) throws Exception { + java.net.http.HttpRequest request = java.net.http.HttpRequest.newBuilder() + .uri(java.net.URI.create(url)) + .method(method, java.net.http.HttpRequest.BodyPublishers.noBody()) + .build(); + java.net.http.HttpResponse response = java.net.http.HttpClient.newHttpClient().send( + request, + java.net.http.HttpResponse.BodyHandlers.discarding()); // Save request headers HashMap request_headers = new HashMap(); - for (Map.Entry> header: con.getRequestProperties().entrySet()) { - if (header.getKey() == null) { - continue; - } - + for (Map.Entry> header: request.headers().map().entrySet()) { request_headers.put(header.getKey(), header.getValue().get(0)); } // Save response headers and status code - int status_code = con.getResponseCode(); + int status_code = response.statusCode(); HashMap response_headers = new HashMap(); - for (Map.Entry> header: con.getHeaderFields().entrySet()) { - if (header.getKey() == null) { - continue; - } - + for (Map.Entry> header: response.headers().map().entrySet()) { response_headers.put(header.getKey(), header.getValue().get(0)); } diff --git a/utils/build/docker/java/spring-boot-3-native/src/main/java/com/datadoghq/springbootnative/WebController.java b/utils/build/docker/java/spring-boot-3-native/src/main/java/com/datadoghq/springbootnative/WebController.java index cb6a6456886..9d7ec201b40 100644 --- a/utils/build/docker/java/spring-boot-3-native/src/main/java/com/datadoghq/springbootnative/WebController.java +++ b/utils/build/docker/java/spring-boot-3-native/src/main/java/com/datadoghq/springbootnative/WebController.java @@ -189,34 +189,31 @@ ResponseEntity traceManualKeepDrop(@RequestParam String decision) throws Exce } // Call downstream so that tests can assert on the sampling decision that gets propagated - return ResponseEntity.ok(make_distant_call("http://localhost:7777/")); + return ResponseEntity.ok(make_distant_call("http://localhost:7777/", "GET")); } @RequestMapping("/make_distant_call") - DistantCallResponse make_distant_call(@RequestParam String url) throws Exception { - URL urlObject = new URL(url); - - HttpURLConnection con = (HttpURLConnection) urlObject.openConnection(); - con.setRequestMethod("GET"); + DistantCallResponse make_distant_call( + @RequestParam String url, + @RequestParam(defaultValue = "GET") String method) throws Exception { + java.net.http.HttpRequest request = java.net.http.HttpRequest.newBuilder() + .uri(java.net.URI.create(url)) + .method(method, java.net.http.HttpRequest.BodyPublishers.noBody()) + .build(); + java.net.http.HttpResponse response = java.net.http.HttpClient.newHttpClient().send( + request, + java.net.http.HttpResponse.BodyHandlers.discarding()); // Save request headers HashMap request_headers = new HashMap(); - for (Map.Entry> header: con.getRequestProperties().entrySet()) { - if (header.getKey() == null) { - continue; - } - + for (Map.Entry> header: request.headers().map().entrySet()) { request_headers.put(header.getKey(), header.getValue().get(0)); } // Save response headers and status code - int status_code = con.getResponseCode(); + int status_code = response.statusCode(); HashMap response_headers = new HashMap(); - for (Map.Entry> header: con.getHeaderFields().entrySet()) { - if (header.getKey() == null) { - continue; - } - + for (Map.Entry> header: response.headers().map().entrySet()) { response_headers.put(header.getKey(), header.getValue().get(0)); } diff --git a/utils/build/docker/java/spring-boot/src/main/java/com/datadoghq/system_tests/springboot/App.java b/utils/build/docker/java/spring-boot/src/main/java/com/datadoghq/system_tests/springboot/App.java index 373ca0aea42..415ed53e736 100644 --- a/utils/build/docker/java/spring-boot/src/main/java/com/datadoghq/system_tests/springboot/App.java +++ b/utils/build/docker/java/spring-boot/src/main/java/com/datadoghq/system_tests/springboot/App.java @@ -1095,11 +1095,13 @@ ResponseEntity traceManualKeepDrop(@RequestParam String decision) throws Exce } // Call downstream so that tests can assert on the sampling decision that gets propagated - return ResponseEntity.ok(make_distant_call("http://localhost:7777/")); + return ResponseEntity.ok(make_distant_call("http://localhost:7777/", "GET")); } @RequestMapping("/make_distant_call") - DistantCallResponse make_distant_call(@RequestParam String url) throws Exception { + DistantCallResponse make_distant_call( + @RequestParam String url, + @RequestParam(defaultValue = "GET") String method) throws Exception { HashMap request_headers = new HashMap<>(); OkHttpClient client = new OkHttpClient.Builder() @@ -1115,9 +1117,12 @@ DistantCallResponse make_distant_call(@RequestParam String url) throws Exception }) .build(); + okhttp3.RequestBody requestBody = ("GET".equals(method) || "HEAD".equals(method)) + ? null + : okhttp3.RequestBody.create(null, new byte[0]); Request request = new Request.Builder() .url(url) - .get() + .method(method, requestBody) .build(); Response response = client.newCall(request).execute(); diff --git a/utils/build/docker/java/vertx3/src/main/java/com/datadoghq/vertx3/Main.java b/utils/build/docker/java/vertx3/src/main/java/com/datadoghq/vertx3/Main.java index 39fa1ac7da9..f54c2a90f81 100644 --- a/utils/build/docker/java/vertx3/src/main/java/com/datadoghq/vertx3/Main.java +++ b/utils/build/docker/java/vertx3/src/main/java/com/datadoghq/vertx3/Main.java @@ -465,6 +465,7 @@ public void onResponse(Call call, Response response) throws IOException { }); router.get("/make_distant_call").handler(ctx -> { String url = ctx.request().getParam("url"); + String method = Optional.ofNullable(ctx.request().getParam("method")).orElse("GET"); JsonObject requestHeaders = new JsonObject(); OkHttpClient client = new OkHttpClient.Builder() @@ -480,9 +481,12 @@ public void onResponse(Call call, Response response) throws IOException { }) .build(); + RequestBody requestBody = ("GET".equals(method) || "HEAD".equals(method)) + ? null + : RequestBody.create(null, new byte[0]); Request request = new Request.Builder() .url(url) - .get() + .method(method, requestBody) .build(); client.newCall(request).enqueue(new Callback() { diff --git a/utils/build/docker/java/vertx4/src/main/java/com/datadoghq/vertx4/Main.java b/utils/build/docker/java/vertx4/src/main/java/com/datadoghq/vertx4/Main.java index 09f7965ff37..1ae99b67e9b 100644 --- a/utils/build/docker/java/vertx4/src/main/java/com/datadoghq/vertx4/Main.java +++ b/utils/build/docker/java/vertx4/src/main/java/com/datadoghq/vertx4/Main.java @@ -465,6 +465,7 @@ public void onResponse(Call call, Response response) throws IOException { router.get("/make_distant_call").handler(ctx -> { String url = ctx.request().getParam("url"); + String method = Optional.ofNullable(ctx.request().getParam("method")).orElse("GET"); JsonObject requestHeaders = new JsonObject(); OkHttpClient client = new OkHttpClient.Builder() @@ -480,9 +481,12 @@ public void onResponse(Call call, Response response) throws IOException { }) .build(); + RequestBody requestBody = ("GET".equals(method) || "HEAD".equals(method)) + ? null + : RequestBody.create(null, new byte[0]); Request request = new Request.Builder() .url(url) - .get() + .method(method, requestBody) .build(); client.newCall(request).enqueue(new Callback() { From edb762579357387115892fb2f1f28279fc786c1f Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 1 Oct 2026 14:28:27 -0700 Subject: [PATCH 03/12] Fix: For testing the OTEL_SEMANTICS_OTLP_TRACE_METRICS scenario, also set DD_METRICS_OTEL_ENABLED=true because we are configuring the metrics export with the OTEL_EXPORTER_OTLP_* environment variables --- utils/_context/_scenarios/otel_semantics.py | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/_context/_scenarios/otel_semantics.py b/utils/_context/_scenarios/otel_semantics.py index fcdd9904318..62dd594a134 100644 --- a/utils/_context/_scenarios/otel_semantics.py +++ b/utils/_context/_scenarios/otel_semantics.py @@ -102,6 +102,7 @@ def __init__(self) -> None: weblog_env={ "DD_TRACE_OTEL_SEMANTICS_ENABLED": "true", "DD_TRACE_OTEL_ENABLED": "true", + "DD_METRICS_OTEL_ENABLED": "true", "OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf", "OTEL_TRACES_EXPORTER": "otlp", "OTEL_TRACES_SPAN_METRICS_ENABLED": "true", From 56e2e0bf5a6bfc7f7be57dd6fdce57beb908ab83 Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 1 Oct 2026 14:29:12 -0700 Subject: [PATCH 04/12] Enable the tests in test_otel_http_semantics.py for java --- manifests/java.yml | 272 +-------------------------------------------- 1 file changed, 5 insertions(+), 267 deletions(-) diff --git a/manifests/java.yml b/manifests/java.yml index 0efcd7fa6be..e996057e55b 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -4985,274 +4985,12 @@ manifest: akka-http: irrelevant (integration injects Date header after bytecode injection occurs) play: irrelevant (integration injects Date header after bytecode injection occurs) tests/test_library_logs.py::Test_NoExceptions::test_dotnet: irrelevant (only for .NET) - tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_Spans_Http_ErrorStatusConfiguration: missing_feature (OTLP export of OTel HTTP semantics not implemented) - tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_TraceMetrics: missing_feature (OTLP export of OTel HTTP semantics not implemented) - tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules: missing_feature (OTLP export of OTel HTTP semantics not implemented) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: # TODO: a lower version might be supported - - declaration: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - component_version: <1.65.1 - weblog: [spring-boot-openliberty, spring-boot-wildfly, spring-boot-jetty, vertx4, akka-http, ratpack, resteasy-netty3, spring-boot, jersey-grizzly2, vertx3, spring-boot-payara, play, spring-boot-undertow, uds-spring-boot] - - declaration: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - excluded_weblog: [spring-boot-openliberty, spring-boot-wildfly, spring-boot-jetty, vertx4, akka-http, ratpack, resteasy-netty3, spring-boot, jersey-grizzly2, vertx3, spring-boot-payara, play, spring-boot-undertow, uds-spring-boot] - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_client_address: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_datadog_attributes_absent: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) + tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_Spans_Http_ErrorStatusConfiguration: v1.66.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_TraceMetrics: v1.66.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules: v1.66.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client: v1.66.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_http_endpoint_retained_from_appsec: irrelevant (The AppSec endpoint retention request is specific to .NET) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_network_peer_address: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_otel_attributes_present: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_server_address: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_server_port: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_route_invariance: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_unknown_method: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_with_route: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_without_route: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_status_3xx_is_not_error: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_status_400_is_not_error: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_status_500_no_exception_is_status_code_error: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_url_query_obfuscation: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_url_query_present_with_query_string: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_user_agent: - - weblog_declaration: - ratpack: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-payara: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-jetty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - jersey-grizzly2: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-openliberty: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-wildfly: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - resteasy-netty3: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot-undertow: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - vertx4: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - akka-http: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - play: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - uds-spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - spring-boot: missing_feature (OTel HTTP semantics not implemented over both Agent and OTLP export paths) - tests/test_otel_startup_logs.py::Test_OTEL_Startup_Logs: missing_feature tests/test_otel_tracestate_sampling.py::Test_EmitOtOnProbabilityDecision_Rate0_5: - weblog_declaration: "*": v1.67.0-SNAPSHOT From e35a62f4c1fb0b7427f439f7b623ebaec8359eae Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 15 Oct 2026 13:21:19 -0700 Subject: [PATCH 05/12] First actually update the manifest based on only the product changes in https://github.com/DataDog/dd-trace-java/pull/12765 --- manifests/java.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/manifests/java.yml b/manifests/java.yml index e996057e55b..21baddda96f 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -4988,9 +4988,27 @@ manifest: tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_Spans_Http_ErrorStatusConfiguration: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_TraceMetrics: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules: v1.66.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules::test_otel_span_name_is_available_to_sampling_rules: + - declaration: incomplete_test_app (The HTTP parser rejects PROPFIND before request instrumentation) + weblog: [akka-http, play] + tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules::test_server_span_name_is_available_before_client_sampling: + - declaration: missing_feature (AppSec or IAST trace retention bypasses OTel sampling rule evaluation) + weblog: [play, vertx3, vertx4] tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client: v1.66.0 - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: v1.66.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client::test_status_3xx_not_error: + - declaration: incomplete_test_app (The client follows a 302 response without a Location header and throws an exception) + weblog: [play] + tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_http_endpoint_retained_from_appsec: irrelevant (The AppSec endpoint retention request is specific to .NET) + tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_route_invariance: + - declaration: missing_feature (The root HTTP server span does not capture the route template) + weblog: [akka-http, play] + tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_unknown_method: + - declaration: incomplete_test_app (The HTTP parser rejects PROPFIND before request instrumentation) + weblog: [akka-http, play] + tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_with_route: + - declaration: missing_feature (The root HTTP server span does not capture the route template) + weblog: [akka-http, play] tests/test_otel_tracestate_sampling.py::Test_EmitOtOnProbabilityDecision_Rate0_5: - weblog_declaration: "*": v1.67.0-SNAPSHOT From 3ea7f047b2ebbe1f925baaedc1b45651c7fa523a Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 15 Oct 2026 13:37:09 -0700 Subject: [PATCH 06/12] Update the test_status_3xx_not_error test to use a 304 which doesn't fail due to a redirect --- manifests/java.yml | 3 --- tests/test_otel_http_semantics.py | 6 +++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/manifests/java.yml b/manifests/java.yml index 21baddda96f..d2259df7454 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -4995,9 +4995,6 @@ manifest: - declaration: missing_feature (AppSec or IAST trace retention bypasses OTel sampling rule evaluation) weblog: [play, vertx3, vertx4] tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client: v1.66.0 - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client::test_status_3xx_not_error: - - declaration: incomplete_test_app (The client follows a 302 response without a Location header and throws an exception) - weblog: [play] tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_http_endpoint_retained_from_appsec: irrelevant (The AppSec endpoint retention request is specific to .NET) tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_route_invariance: diff --git a/tests/test_otel_http_semantics.py b/tests/test_otel_http_semantics.py index 580a4b82276..68dc9ce708c 100644 --- a/tests/test_otel_http_semantics.py +++ b/tests/test_otel_http_semantics.py @@ -621,12 +621,12 @@ def test_status_500_is_error(self) -> None: ) def setup_status_3xx_not_error(self) -> None: - self.response = _distant_call("http://weblog:7777/status?code=302") + self.response = _distant_call("http://weblog:7777/status?code=304") def test_status_3xx_not_error(self) -> None: span = _client_span(self.response) - _assert_int_attribute(span, "http.response.status_code", 302) - assert not _span_is_error(span), "HTTP 302 span must not be marked as an error" + _assert_int_attribute(span, "http.response.status_code", 304) + assert not _span_is_error(span), "HTTP 304 span must not be marked as an error" assert "error.type" not in _attributes(span) def setup_url_full_credential_redaction(self) -> None: From 2c07b2dc5e5094716323431133dcf41ab524a7d8 Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 15 Oct 2026 14:01:04 -0700 Subject: [PATCH 07/12] Update akka-http and play weblog apps to accept the PROPFIND http method, to test a non-default OpenTelemetry HTTP method, and update the java manifest accordingly --- manifests/java.yml | 9 ++++----- .../main/scala/com/datadoghq/akka_http/Main.scala | 7 ++++++- .../play/app/SystemTestsAkkaHttpServerProvider.scala | 12 ++++++++++++ utils/build/docker/java/play/conf/application.conf | 1 + utils/build/docker/java/play/pom.xml | 1 - 5 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 utils/build/docker/java/play/app/SystemTestsAkkaHttpServerProvider.scala diff --git a/manifests/java.yml b/manifests/java.yml index d2259df7454..cd62010d290 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -4990,19 +4990,18 @@ manifest: tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules::test_otel_span_name_is_available_to_sampling_rules: - declaration: incomplete_test_app (The HTTP parser rejects PROPFIND before request instrumentation) - weblog: [akka-http, play] + weblog: [play] tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules::test_server_span_name_is_available_before_client_sampling: + - declaration: missing_feature (IAST forces a keep for weak randomness in Play's multipart parser before sampling rules run, so _dd.rule_psr is unset) + weblog: [play] - declaration: missing_feature (AppSec or IAST trace retention bypasses OTel sampling rule evaluation) - weblog: [play, vertx3, vertx4] + weblog: [vertx3, vertx4] tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_http_endpoint_retained_from_appsec: irrelevant (The AppSec endpoint retention request is specific to .NET) tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_route_invariance: - declaration: missing_feature (The root HTTP server span does not capture the route template) weblog: [akka-http, play] - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_unknown_method: - - declaration: incomplete_test_app (The HTTP parser rejects PROPFIND before request instrumentation) - weblog: [akka-http, play] tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_with_route: - declaration: missing_feature (The root HTTP server span does not capture the route template) weblog: [akka-http, play] diff --git a/utils/build/docker/java/akka-http/src/main/scala/com/datadoghq/akka_http/Main.scala b/utils/build/docker/java/akka-http/src/main/scala/com/datadoghq/akka_http/Main.scala index 35f258279a3..98db7eaa5ab 100644 --- a/utils/build/docker/java/akka-http/src/main/scala/com/datadoghq/akka_http/Main.scala +++ b/utils/build/docker/java/akka-http/src/main/scala/com/datadoghq/akka_http/Main.scala @@ -4,6 +4,7 @@ import akka.http.scaladsl.Http import akka.http.scaladsl.model._ import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.Route +import akka.http.scaladsl.settings.ServerSettings import com.datadoghq.system_tests.iast.infra.{LdapServer, SqlServer} import org.slf4j.LoggerFactory @@ -14,8 +15,12 @@ import scala.util.{Failure, Success, Try} object Main extends App { + // Accept an extension method so HTTP semantics tests reach request instrumentation. + private val settings = ServerSettings(system) + private val parserSettings = settings.parserSettings.withCustomMethods(HttpMethod.custom("PROPFIND")) + private val bindingFuture: Future[Http.ServerBinding] = - Http().newServerAt("0.0.0.0", 7777).bindFlow(MainRoutes.route ~ AppSecRoutes.route ~ IastRoutes.route ~ RaspRoutes.route ~ HealthcheckRoutes.route) + Http().newServerAt("0.0.0.0", 7777).withSettings(settings.withParserSettings(parserSettings)).bindFlow(MainRoutes.route ~ AppSecRoutes.route ~ IastRoutes.route ~ RaspRoutes.route ~ HealthcheckRoutes.route) LoggerFactory.getLogger(this.getClass).info("Server online at port 7777") } diff --git a/utils/build/docker/java/play/app/SystemTestsAkkaHttpServerProvider.scala b/utils/build/docker/java/play/app/SystemTestsAkkaHttpServerProvider.scala new file mode 100644 index 00000000000..ed2d0030035 --- /dev/null +++ b/utils/build/docker/java/play/app/SystemTestsAkkaHttpServerProvider.scala @@ -0,0 +1,12 @@ +import akka.http.scaladsl.model.HttpMethod +import akka.http.scaladsl.settings.ParserSettings +import play.core.server.{AkkaHttpServer, AkkaHttpServerProvider, ServerProvider} + +/** Accept an extension method so HTTP semantics tests reach request instrumentation. */ +class SystemTestsAkkaHttpServerProvider extends AkkaHttpServerProvider { + override def createServer(context: ServerProvider.Context): AkkaHttpServer = + new AkkaHttpServer(AkkaHttpServer.Context.fromServerProviderContext(context)) { + override protected def createParserSettings(): ParserSettings = + super.createParserSettings().withCustomMethods(HttpMethod.custom("PROPFIND")) + } +} diff --git a/utils/build/docker/java/play/conf/application.conf b/utils/build/docker/java/play/conf/application.conf index a666bea4a67..f75ff90a31e 100644 --- a/utils/build/docker/java/play/conf/application.conf +++ b/utils/build/docker/java/play/conf/application.conf @@ -1,2 +1,3 @@ play.http.secret.key="7Yf2WqExHc0LqpDBYzVeHnns656b6Iw6ekgApxvWXOLyLZzaAGsepCecumbk6qh" http.port=7777 +play.server.provider="SystemTestsAkkaHttpServerProvider" diff --git a/utils/build/docker/java/play/pom.xml b/utils/build/docker/java/play/pom.xml index 60444790cac..ed2d67c4415 100644 --- a/utils/build/docker/java/play/pom.xml +++ b/utils/build/docker/java/play/pom.xml @@ -49,7 +49,6 @@ com.typesafe.play play-akka-http-server_2.13 ${play2.version} - runtime From fe2165aab800530bf7d8e12698b5890035c59c41 Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 15 Oct 2026 14:01:22 -0700 Subject: [PATCH 08/12] Fix the vertx3 java weblog build --- utils/build/docker/java/vertx3/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/utils/build/docker/java/vertx3/pom.xml b/utils/build/docker/java/vertx3/pom.xml index c683ecc9f14..b13d4fe6d6b 100644 --- a/utils/build/docker/java/vertx3/pom.xml +++ b/utils/build/docker/java/vertx3/pom.xml @@ -20,6 +20,11 @@ vertx-core 3.9.13 + + org.slf4j + slf4j-api + 1.7.36 + io.opentracing opentracing-api From 16b1218571cf7efc306924aed510ccb4942c322a Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 15 Oct 2026 14:15:23 -0700 Subject: [PATCH 09/12] Fix the Test_OtelSemantics_SamplingRules tests by omitting IAST / AppSec specifically in the OTEL_SEMANTICS_OTLP_SAMPLING_RULES scenario --- manifests/java.yml | 8 -------- utils/_context/_scenarios/otel_semantics.py | 3 +++ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/manifests/java.yml b/manifests/java.yml index cd62010d290..d91e1c304f4 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -4988,14 +4988,6 @@ manifest: tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_Spans_Http_ErrorStatusConfiguration: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_TraceMetrics: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules: v1.66.0 - tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules::test_otel_span_name_is_available_to_sampling_rules: - - declaration: incomplete_test_app (The HTTP parser rejects PROPFIND before request instrumentation) - weblog: [play] - tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules::test_server_span_name_is_available_before_client_sampling: - - declaration: missing_feature (IAST forces a keep for weak randomness in Play's multipart parser before sampling rules run, so _dd.rule_psr is unset) - weblog: [play] - - declaration: missing_feature (AppSec or IAST trace retention bypasses OTel sampling rule evaluation) - weblog: [vertx3, vertx4] tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: v1.66.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_http_endpoint_retained_from_appsec: irrelevant (The AppSec endpoint retention request is specific to .NET) diff --git a/utils/_context/_scenarios/otel_semantics.py b/utils/_context/_scenarios/otel_semantics.py index 62dd594a134..375bdc5a1b1 100644 --- a/utils/_context/_scenarios/otel_semantics.py +++ b/utils/_context/_scenarios/otel_semantics.py @@ -125,6 +125,9 @@ class OtelSemanticsOtlpSamplingRules(DdTraceEndToEndScenario): def __init__(self) -> None: super().__init__( "OTEL_SEMANTICS_OTLP_SAMPLING_RULES", + # Security findings can force-keep a trace before ordinary sampling rules run. + appsec_enabled=False, + iast_enabled=False, weblog_env={ "DD_TRACE_OTEL_SEMANTICS_ENABLED": "true", "DD_TRACE_OTEL_ENABLED": "true", From 7aa15eb185a6ad38237df3ae14105b0fc4efa432 Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Thu, 15 Oct 2026 18:59:18 -0700 Subject: [PATCH 10/12] fixup the version numbers --- manifests/java.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/manifests/java.yml b/manifests/java.yml index d91e1c304f4..fc8c0f276b0 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -4985,17 +4985,19 @@ manifest: akka-http: irrelevant (integration injects Date header after bytecode injection occurs) play: irrelevant (integration injects Date header after bytecode injection occurs) tests/test_library_logs.py::Test_NoExceptions::test_dotnet: irrelevant (only for .NET) - tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_Spans_Http_ErrorStatusConfiguration: v1.66.0 - tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_TraceMetrics: v1.66.0 - tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules: v1.66.0 - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client: v1.66.0 - tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: v1.66.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_Spans_Http_ErrorStatusConfiguration: v1.68.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_TraceMetrics: v1.68.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules: v1.68.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Client: v1.68.0 + tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: v1.68.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_http_endpoint_retained_from_appsec: irrelevant (The AppSec endpoint retention request is specific to .NET) tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_route_invariance: - declaration: missing_feature (The root HTTP server span does not capture the route template) + component_version: <1.68.0 weblog: [akka-http, play] tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_with_route: - declaration: missing_feature (The root HTTP server span does not capture the route template) + component_version: <1.68.0 weblog: [akka-http, play] tests/test_otel_tracestate_sampling.py::Test_EmitOtOnProbabilityDecision_Rate0_5: - weblog_declaration: From e31a3689c85540c99ba2a6b448195a4b95b3e35a Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Tue, 27 Oct 2026 11:33:40 -0700 Subject: [PATCH 11/12] Fixup Java manifest changes --- manifests/java.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/manifests/java.yml b/manifests/java.yml index fc8c0f276b0..f258612fcc3 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -4992,13 +4992,16 @@ manifest: tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server: v1.68.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_http_endpoint_retained_from_appsec: irrelevant (The AppSec endpoint retention request is specific to .NET) tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_route_invariance: - - declaration: missing_feature (The root HTTP server span does not capture the route template) - component_version: <1.68.0 - weblog: [akka-http, play] + - weblog_declaration: + "*": v1.68.0 + akka-http: missing_feature (The root HTTP server span does not capture the route template) + play: missing_feature (The root HTTP server span does not capture the route template) tests/test_otel_http_semantics.py::Test_OtelSemantics_Spans_Http_Server::test_span_name_with_route: - - declaration: missing_feature (The root HTTP server span does not capture the route template) - component_version: <1.68.0 - weblog: [akka-http, play] + - weblog_declaration: + "*": v1.68.0 + akka-http: missing_feature (The root HTTP server span does not capture the route template) + play: missing_feature (The root HTTP server span does not capture the route template) + tests/test_otel_startup_logs.py::Test_OTEL_Startup_Logs: missing_feature tests/test_otel_tracestate_sampling.py::Test_EmitOtOnProbabilityDecision_Rate0_5: - weblog_declaration: "*": v1.67.0-SNAPSHOT From 68ab2d9bcbeb71383d7273146aad1a077440d357 Mon Sep 17 00:00:00 2001 From: Zach Montoya Date: Tue, 3 Nov 2026 12:34:44 -0800 Subject: [PATCH 12/12] Add weblog exception for spring-boot-3-native in test file tests/test_otel_http_semantics.py --- manifests/java.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/manifests/java.yml b/manifests/java.yml index 91e636df3c1..47584770799 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -5013,6 +5013,9 @@ manifest: akka-http: irrelevant (integration injects Date header after bytecode injection occurs) play: irrelevant (integration injects Date header after bytecode injection occurs) tests/test_library_logs.py::Test_NoExceptions::test_dotnet: irrelevant (only for .NET) + tests/test_otel_http_semantics.py: + - declaration: missing_feature (GraalVM native images do not reload OpenTelemetry exporter configuration at runtime) + weblog: [spring-boot-3-native] tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_Spans_Http_ErrorStatusConfiguration: v1.68.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_OTLP_TraceMetrics: v1.68.0 tests/test_otel_http_semantics.py::Test_OtelSemantics_SamplingRules: v1.68.0