diff --git a/manifests/cpp_httpd.yml b/manifests/cpp_httpd.yml index 13df5200ba9..d9d9bdec62b 100644 --- a/manifests/cpp_httpd.yml +++ b/manifests/cpp_httpd.yml @@ -13,6 +13,7 @@ manifest: tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardEvent_Tag: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone: missing_feature + tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone_APMDisabledMarker: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryRequests: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryTruncated: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AnomalyDetectionTags: missing_feature diff --git a/manifests/cpp_nginx.yml b/manifests/cpp_nginx.yml index 923123bf7de..256ba25dff8 100644 --- a/manifests/cpp_nginx.yml +++ b/manifests/cpp_nginx.yml @@ -11,6 +11,7 @@ manifest: tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardEvent_Tag: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone: missing_feature + tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone_APMDisabledMarker: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryRequests: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryTruncated: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AnomalyDetectionTags: missing_feature diff --git a/manifests/dotnet.yml b/manifests/dotnet.yml index c1444e14cd4..075d8750933 100644 --- a/manifests/dotnet.yml +++ b/manifests/dotnet.yml @@ -3,6 +3,7 @@ manifest: tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardEvent_Tag: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone: missing_feature + tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone_APMDisabledMarker: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryRequests: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryTruncated: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AnomalyDetectionTags: missing_feature diff --git a/manifests/golang.yml b/manifests/golang.yml index 057eff2875a..6d27e663b90 100644 --- a/manifests/golang.yml +++ b/manifests/golang.yml @@ -3,6 +3,7 @@ manifest: tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardEvent_Tag: missing_feature (APPSEC-62216) tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone: missing_feature + tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone_APMDisabledMarker: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryRequests: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryTruncated: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AnomalyDetectionTags: missing_feature diff --git a/manifests/java.yml b/manifests/java.yml index fe947671350..6ccf3ee5801 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -9,6 +9,7 @@ manifest: - weblog_declaration: "*": irrelevant (just one weblog is enough to test the SDK) "spring-boot": v1.65.0-SNAPSHOT + tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone_APMDisabledMarker: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryRequests: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryTruncated: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AnomalyDetectionTags: diff --git a/manifests/nodejs.yml b/manifests/nodejs.yml index 643bbc02540..eefe6f77d29 100644 --- a/manifests/nodejs.yml +++ b/manifests/nodejs.yml @@ -111,6 +111,10 @@ manifest: - weblog_declaration: "*": irrelevant (just one weblog is enough to test the SDK) express4: *ref_5_110_0 + tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone_APMDisabledMarker: + - weblog_declaration: + "*": irrelevant (just one weblog is enough to test the SDK) + express4: *ref_6_5_0 tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryRequests: - weblog_declaration: "*": irrelevant (just one weblog is enough to test the SDK) diff --git a/manifests/php.yml b/manifests/php.yml index 7ee69368932..c29bc292a88 100644 --- a/manifests/php.yml +++ b/manifests/php.yml @@ -3,6 +3,7 @@ manifest: tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardEvent_Tag: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone: missing_feature + tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone_APMDisabledMarker: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryRequests: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryTruncated: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AnomalyDetectionTags: missing_feature diff --git a/manifests/python.yml b/manifests/python.yml index c99cad012c4..51ca1fc335b 100644 --- a/manifests/python.yml +++ b/manifests/python.yml @@ -17,6 +17,7 @@ manifest: - weblog_declaration: "*": irrelevant (just one weblog is enough to test the SDK) "flask-poc": v4.13.0-dev + tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone_APMDisabledMarker: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryRequests: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryTruncated: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AnomalyDetectionTags: diff --git a/manifests/ruby.yml b/manifests/ruby.yml index c0fc95423e5..e2abf3d3ffb 100644 --- a/manifests/ruby.yml +++ b/manifests/ruby.yml @@ -25,6 +25,7 @@ manifest: sinatra32: irrelevant sinatra41: irrelevant uds-sinatra: irrelevant + tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardStandalone_APMDisabledMarker: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryRequests: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AIGuardTelemetryTruncated: missing_feature tests/ai_guard/test_ai_guard_sdk.py::Test_AnomalyDetectionTags: diff --git a/tests/ai_guard/test_ai_guard_sdk.py b/tests/ai_guard/test_ai_guard_sdk.py index 2431cf79569..ca90a4cfc55 100644 --- a/tests/ai_guard/test_ai_guard_sdk.py +++ b/tests/ai_guard/test_ai_guard_sdk.py @@ -1,6 +1,7 @@ import json import math +from tests.appsec.utils import assert_all_spans_have_apm_disabled_marker from utils import context, interfaces, scenarios, weblog, features, rfc from utils.dd_constants import TRACE_SOURCE_PROPAGATION_KEY, SamplingMechanism, SamplingPriority, TraceSource from utils.dd_types import DataDogLibrarySpan, DataDogLibraryTrace, is_same_boolean @@ -658,6 +659,22 @@ def test_standalone_keeps_ai_guard_trace(self): ) +@features.ai_guard_standalone +@scenarios.ai_guard_standalone +class Test_AIGuardStandalone_APMDisabledMarker: + """Every span sent in AI Guard standalone mode carries the APM-disabled billing marker.""" + + def setup_all_spans_have_apm_disabled_marker(self) -> None: + self.r = weblog.post("/ai_guard/evaluate", headers={BLOCKING_HEADER: "false"}, json=MESSAGES["DENY"]) + + def test_all_spans_have_apm_disabled_marker(self) -> None: + assert self.r.status_code == 200 + + spans = [span for _, _, span in interfaces.library.get_spans(request=self.r, full_trace=True)] + assert any(span.get("resource") == "ai_guard" for span in spans), "No ai_guard span found in the trace" + assert_all_spans_have_apm_disabled_marker(spans) + + @rfc("https://datadoghq.atlassian.net/wiki/x/54JqiQE") @features.ai_guard @scenarios.ai_guard_telemetry