Skip to content

test(java): enable agentless EVP egress - #7702

Draft
leoromanovsky wants to merge 2 commits into
exec/system-tests-agentless-side-effectsfrom
leo.romanovsky/ffe-agentless-evp-java-enablement-v4
Draft

test(java): enable agentless EVP egress#7702
leoromanovsky wants to merge 2 commits into
exec/system-tests-agentless-side-effectsfrom
leo.romanovsky/ffe-agentless-evp-java-enablement-v4

Conversation

@leoromanovsky

@leoromanovsky leoromanovsky commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Motivation

We are shipping agentless CDN-delivered configuration to make customer deployments simpler. The SDK's core Feature Flags telemetry still needs a network path out of the process: automatically use a compatible running Agent or serverless-init relay when available, and fall back to direct EVP intake when no compatible relay exists.

FFLSDK-193 activates Java against the shared cross-language contract in #7299 so configuration success cannot mask missing exposure or flag-evaluation delivery.

Changes

Capability Topology Assertion
Exposure delivery Direct intake /api/v2/exposures reaches the direct EVP capture with the shared transport contract
Flag-evaluation delivery Direct intake /api/v2/flagevaluation reaches the direct EVP capture with the shared transport contract
Shutdown exposure flush Direct intake An exposure queued immediately before application shutdown reaches EVP exactly once
Exposure delivery serverless-init /api/v2/exposures reaches intake through the compatible relay
Flag-evaluation delivery serverless-init /api/v2/flagevaluation reaches intake through the compatible relay
Agent-backed delivery Agent Existing coverage remains enabled
  • Activate the supported spring-boot weblog at Java 1.67.
  • Add the test observer CA without replacing the canonical application startup.
  • Add an opt-in Spring shutdown lifecycle that closes the application before emitting the shared shutdown marker.

Decisions

  • Stack directly on test(ffe): add direct agentless EVP contract #7299; do not depend on another language activation.
  • Scope activation to the supported spring-boot weblog.
  • Keep shutdown behavior test-only and opt-in through SYSTEM_TESTS_FFE_SHUTDOWN_FLUSH_ENABLED.
  • Preserve the existing FFL-2446 exclusions for broader non-egress aggregation contracts.
  • Validate the transport implementation from dd-trace-java#12477 at exact commit e20a9d77c333ddb0c0444835f23fafba70952373.
  • Require the relay to advertise forwarding support for both DD-EVP-ORIGIN and DD-EVP-ORIGIN-VERSION; the shared base uses serverless-init 1.10.4 because 1.10.2 does not advertise or forward those headers.

Validation

  • System-tests base: 9c753fbcbdcc6122eed15fd5af827671fbc0771c
  • System-tests candidate: 364b7dcfd7294b0ede91222b688ca90d8e9d52dd
  • Java candidate: e20a9d77c333ddb0c0444835f23fafba70952373 (1.67.0-SNAPSHOT+e20a9d77c3)
  • ./run.sh TEST_THE_TEST tests/test_the_test/test_java_direct_evp_activation.py tests/test_the_test/test_manifest.py — 37 passed
  • ./gradlew :dd-java-agent:shadowJar :dd-trace-api:jar :products:feature-flagging:feature-flagging-api:jar --rerun-tasks — passed, 1,036 tasks; produced the exact Java candidate above
  • ./build.sh java -w spring-boot — passed; image reported the exact Java candidate above
  • Direct exposure, shutdown exposure, and flag evaluation at candidate parent c8edddec6bb33d46f71b8be32e22c87bdb804887 — 3 passed in 26.27s. The only subsequent merge changes the shared serverless-init image pin and its mirror metadata.
  • Forced-serverless-init exposure and flag evaluation at candidate 364b7dcfd7294b0ede91222b688ca90d8e9d52dd with serverless-init 1.10.4 — 2 passed in 24.67s
  • This is local mock-intake transport proof, not staging or production backend proof.
  • Commits c8edddec6bb33d46f71b8be32e22c87bdb804887 and 364b7dcfd7294b0ede91222b688ca90d8e9d52dd — GitHub signatures verified

Activate the shared direct and sidecar contracts and add an opt-in Spring shutdown lifecycle for exact flush evidence.

Environment: Datadog workspace
@github-actions

Copy link
Copy Markdown
Contributor

CODEOWNERS have been resolved as:

tests/test_the_test/test_java_direct_evp_activation.py                  @DataDog/system-tests-reviewers
utils/build/docker/java/app-with-proxy-ca.sh                            @DataDog/system-tests-reviewers
utils/build/docker/java/spring-boot/src/main/java/com/datadoghq/system_tests/springboot/DirectEvpShutdown.java  @DataDog/system-tests-reviewers
manifests/java.yml                                                      @DataDog/system-tests-reviewers
utils/_context/_scenarios/agentless_endtoend.py                         @DataDog/system-tests-core
utils/build/docker/java/spring-boot/src/main/java/com/datadoghq/system_tests/springboot/SpringbootwildflyApplication.java  @DataDog/system-tests-reviewers

@datadog-datadog-prod-us1

datadog-datadog-prod-us1 Bot commented Sep 11, 2026

Copy link
Copy Markdown

Pipelines  Tests

Unblock PR with BitsAI

⚠️ Warnings

Your PR has failed checks. Please review the issues below and take necessary action before merging.

🚦 15 Pipeline jobs failed

Testing the test | System Tests (java, dev) / End-to-end #2 / spring-boot 2 — ❌ 3 tests failed · 🔧 Needs a code fix, caused by this PR

View more details · View in GitHub Actions

❌ tests.ffe.test_exposure_egress.Test_FFE_Exposure_Egress_Agentless_Direct.test_exposure_egress[spring-boot] from system_tests_suite
AssertionError: expected exactly one DD-EVP-ORIGIN header, got []

self = <tests.ffe.test_exposure_egress.Test_FFE_Exposure_Egress_Agentless_Direct object at 0x7f9ca890fbc0>

    def test_exposure_egress(self) -> None:
        egress = feature_flagging_evp_egress()
        matching_requests = assert_exposure_side_effects_contract(
            egress.interface,
            self.responses,
            flag_key=self.flag_key,
...
❌ tests.ffe.test_exposure_egress.Test_FFE_Exposure_Egress_Agentless_Direct_Shutdown.test_exposure_egress_shutdown[spring-boot] from system_tests_suite
AssertionError: Event request started at 2026-09-12T05:45:56.596016+00:00 before server close at 2026-09-12T05:45:56.623690+00:00

self = <tests.ffe.test_exposure_egress.Test_FFE_Exposure_Egress_Agentless_Direct_Shutdown object at 0x7f9ca890ff50>

    def test_exposure_egress_shutdown(self) -> None:
        egress = feature_flagging_evp_egress()
        assert egress.route == "direct"
        assert_agentless_evp_topology(egress)
    
        scenario = context.scenario
...
❌ tests.ffe.test_flag_eval_evp.Test_FFE_EVP_Flagevaluation_Egress_Agentless_Direct.test_ffe_evp_flagevaluation_egress[spring-boot] from system_tests_suite
AssertionError: expected exactly one DD-EVP-ORIGIN header, got []

self = <tests.ffe.test_flag_eval_evp.Test_FFE_EVP_Flagevaluation_Egress_Agentless_Direct object at 0x7f9ca8727770>

    def test_ffe_evp_flagevaluation_egress(self) -> None:
        for index, response in enumerate(self.responses):
            assert response.status_code == 200, f"Request {index + 1} failed: {response.text}"
    
        egress = feature_flagging_evp_egress()
    
...
DataDog/system-tests | php-app.amd64.DOC: [public.ecr.aws/lts/ubuntu:22.04, linux/amd64, 7.0] — 🔧 Needs a code fix, caused by this PR

View more details · View in GitLab

DataDog/system-tests | php-app.amd64.DOC: [public.ecr.aws/lts/ubuntu:22.04, linux/amd64, 7.1] — 🔧 Needs a code fix, caused by this PR

View more details · View in GitLab

View all 15 failed jobs.

ℹ️ Info

No other issues found (see more)

❄️ No new flaky tests detected

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 364b7dc | Docs | View more details | Give us feedback!

…-effects' into leo.romanovsky/ffe-agentless-evp-java-enablement-v4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant