Skip to content

test(spring-boot): [Sample Tests 21] Move the Boot 4 OTel no-agent sample's tests - #6313

Merged
runningcode merged 3 commits into
no/boot3-otel-noagent-integration-testfrom
no/boot4-otel-noagent-integration-test
Oct 23, 2026
Merged

runningcode merged 3 commits into
no/boot3-otel-noagent-integration-testfrom
no/boot4-otel-noagent-integration-test

Conversation

@runningcode

@runningcode runningcode commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

PR Stack (Sample Tests)


📜 Description

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-4, the Boot 4 counterpart of #6312's. It ports sentry-samples-spring-boot-4-opentelemetry-noagent's tests, which match the Boot 3 no-agent sample's file for file, except that the Boot 4 sample has no Cache test. So the suite is #6312's, with these changes:

  • Boot 4's packages:
    • RestTemplateBuilder from spring-boot-restclient;
    • TestRestTemplate from spring-boot-resttestclient;
    • Jackson 3;
    • sentry-spring-7's @SentrySpan.
  • No open modifiers, because the module applies kotlin-spring.
  • No Cache test. The sample had none, and the integrationTest suite covers cache tracing.

As in #6312, the sample's MetricsSystemTest runs in this suite too.

With no system tests left, the sample comes off the runner, the backend workflow and the Spring Boot 4 matrix. The matrix now runs the new suite.

After a coverage audit against the sample's tests:

💡 Motivation and Context

sentry-opentelemetry-agentless-spring brings in the OpenTelemetry Spring Boot starter, which supports each Boot line separately. The module's build notes that a starter version without Boot 4 support breaks the application context. With the sample's tests gone, this suite is the only check that the starter and Sentry's OTel setup work together on Boot 4. It runs 20 tests.

💚 How did you test it?

  • All 20 tests pass on Spring Boot 4.1.0.
  • They also pass with the catalog set to 4.0.0.
  • Expecting the wrong flag on the annotation span makes the test fail.
  • :sentry-spring-boot-4:check passes.

📝 Checklist

  • I added GH Issue ID & Linear ID
  • I added tests to verify the changes.
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled.
  • I updated the docs if needed.
  • I updated the wizard if needed.
  • Review from the native team if needed.
  • No breaking change or entry added to the changelog.
  • No breaking change for hybrid SDKs or communicated to hybrid SDKs.
  • Public API changes reviewed by another Mobile SDK team member or implemented according to the develop docs spec.

🔮 Next steps

The Boot 2 no-agent sample.

#skip-changelog

🤖 Generated with Claude Code

This was referenced Oct 20, 2026
@sentry

sentry Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

📲 Install Builds

Android

🔗 App Name App ID Version Configuration
SDK Size io.sentry.tests.size 8.61.1 (1) release

⚙️ sentry-android Build Distribution Settings

@runningcode
runningcode force-pushed the no/boot4-otel-noagent-integration-test branch from 7829fdf to a4c5c7d Compare October 23, 2026 08:58
@runningcode
runningcode force-pushed the no/boot3-otel-noagent-integration-test branch 2 times, most recently from 3fb0492 to c87ef01 Compare October 23, 2026 09:35
@runningcode
runningcode force-pushed the no/boot4-otel-noagent-integration-test branch 2 times, most recently from 264ff95 to 8032cec Compare October 23, 2026 11:51
@runningcode
runningcode force-pushed the no/boot3-otel-noagent-integration-test branch 2 times, most recently from 5ded3b0 to 5d3efce Compare October 23, 2026 12:48
@runningcode
runningcode force-pushed the no/boot4-otel-noagent-integration-test branch from 8032cec to 15a03c3 Compare October 23, 2026 12:48
@runningcode
runningcode force-pushed the no/boot3-otel-noagent-integration-test branch from 5d3efce to 765d32b Compare October 23, 2026 13:02
@runningcode
runningcode force-pushed the no/boot4-otel-noagent-integration-test branch from 15a03c3 to 4416783 Compare October 23, 2026 13:02
…the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-4, the
Boot 4 counterpart of the Boot 3 one: the app traces through the
OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring. The sample's tests were the same
as the Boot 3 sample's, minus Cache, so the suite is the Boot 3 one with
Boot 4's packages and no Cache test. Its Metrics tests were copies of
the servlet ones and don't depend on tracing.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 4 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@runningcode
runningcode force-pushed the no/boot4-otel-noagent-integration-test branch from 4416783 to 23eb8cf Compare October 23, 2026 13:53
@runningcode
runningcode force-pushed the no/boot3-otel-noagent-integration-test branch from 765d32b to 0e762cf Compare October 23, 2026 13:53
@runningcode runningcode added the ship-it PR is ready to merge from a reviewer perspective label Oct 23, 2026
@runningcode
runningcode marked this pull request as ready for review October 23, 2026 14:09
…mple's tests (#6314)

* test(spring-boot): Move the Boot 2 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot, the
Boot 2 counterpart of the Boot 3 one. The sample's tests were the Boot 3
sample's minus Cache and RestClient, which Boot 2 doesn't have.
GraphQL and Kafka are gated on Boot 2.7, as in the servlet suite, and
Kafka gets a context of its own.

Sentry is global, so a second live context re-initializes it with that
context's OpenTelemetry SDK, and the Sentry API spans of the first
context's tests went to the wrong one. Each test class therefore starts
its own context and closes it afterwards.

The sample has no system tests left, so it comes off the system-test
runner and the Spring Boot 2 matrix, which now runs the new suite, and
the backend workflow's base row moves to the console sample.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Port the tracing and GraphQL checks to Boot 2 no-agent and restore Metrics

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 23] Port the Boot 3 OTel agent sample's Person, tracing and Todo tests (#6315)

* test(spring-boot): Port the Boot 3 OTel agent sample's Person, tracing and Todo tests

The agent tests now start the fixture app once per test JVM and share
it, because it takes seconds to start. Which mode initializes Sentry is
a property of the test task, so the suite's task runs with the agent
initializing it and a new integrationTestOtelAgentWithoutAutoInit task
runs the same tests with the Spring Boot starter doing it. Gradle runs
the two in parallel.

The fixture gains the Person POST, distributed tracing and Todo
endpoints, and the suite ports the agent sample's Person,
DistributedTracing and Todo tests. Sentry exports the agent's spans in
batches every 5 seconds, which can't be configured, so each test waits
for the next batch and the negative tracing check waits past one.

ChildJvmApp now copies the app's output into the test's as it arrives
instead of printing it on close. The shared app is closed when the JVM
exits, where its whole log would otherwise land on the console.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to the Boot 3 agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 24] Port the rest of the Boot 3 OTel agent sample's tests (#6316)

* test(spring-boot): Port the rest of the Boot 3 OTel agent sample's tests

The agent fixture gains the Cache, Metrics, GraphQL and Kafka
endpoints, and the agent suite ports the sample's remaining tests in
both init modes. The agent traces each GraphQL operation as one span
named after it, so the queries are named. Kafka uses an in-JVM KRaft
broker that the test JVM starts next to the app.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix. The matrix
no longer builds the agent separately, because the suites build the
jar they attach.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Check the Boot 3 agent GraphQL task query's assignee and creator ids

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@runningcode
runningcode merged commit 7400006 into no/boot3-otel-noagent-integration-test Oct 23, 2026
39 of 42 checks passed
@runningcode
runningcode deleted the no/boot4-otel-noagent-integration-test branch October 23, 2026 14:36
runningcode added a commit that referenced this pull request Oct 23, 2026
…mple's tests (#6312)

* test(spring-boot): Move the Boot 3 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-jakarta.
The app traces through the OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring, and the suite ports the no-agent
sample's tests: spans from the OTel annotation, the OTel API and the
Sentry API with their feature flags, the OTel database span, trace
continuation, client spans, cache spans, GraphQL, and Kafka traced by
OTel instead of Sentry's Spring Kafka integration. The sample's Metrics
tests were copies of the servlet ones and don't depend on tracing.

The suite needs a TestRestTemplate built outside the context: the one
Spring Boot provides is instrumented by the OTel starter, which replaced
the trace headers the tests send and started a new trace.

Sentry exports OTel spans in batches every 5 seconds, so every test
waited that long. MockSentryServer gets a hook that runs before each
check while waiting, which the suite uses to flush the tracer provider,
taking the suite from about 112s to 8s of test time.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Rejoin a wrapped comment in the Boot 3 OTel no-agent suite

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 3 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 21] Move the Boot 4 OTel no-agent sample's tests (#6313)

* test(spring-boot): Move the Boot 4 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-4, the
Boot 4 counterpart of the Boot 3 one: the app traces through the
OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring. The sample's tests were the same
as the Boot 3 sample's, minus Cache, so the suite is the Boot 3 one with
Boot 4's packages and no Cache test. Its Metrics tests were copies of
the servlet ones and don't depend on tracing.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 4 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 4 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 22] Move the Boot 2 OTel no-agent sample's tests (#6314)

* test(spring-boot): Move the Boot 2 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot, the
Boot 2 counterpart of the Boot 3 one. The sample's tests were the Boot 3
sample's minus Cache and RestClient, which Boot 2 doesn't have.
GraphQL and Kafka are gated on Boot 2.7, as in the servlet suite, and
Kafka gets a context of its own.

Sentry is global, so a second live context re-initializes it with that
context's OpenTelemetry SDK, and the Sentry API spans of the first
context's tests went to the wrong one. Each test class therefore starts
its own context and closes it afterwards.

The sample has no system tests left, so it comes off the system-test
runner and the Spring Boot 2 matrix, which now runs the new suite, and
the backend workflow's base row moves to the console sample.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Port the tracing and GraphQL checks to Boot 2 no-agent and restore Metrics

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 23] Port the Boot 3 OTel agent sample's Person, tracing and Todo tests (#6315)

* test(spring-boot): Port the Boot 3 OTel agent sample's Person, tracing and Todo tests

The agent tests now start the fixture app once per test JVM and share
it, because it takes seconds to start. Which mode initializes Sentry is
a property of the test task, so the suite's task runs with the agent
initializing it and a new integrationTestOtelAgentWithoutAutoInit task
runs the same tests with the Spring Boot starter doing it. Gradle runs
the two in parallel.

The fixture gains the Person POST, distributed tracing and Todo
endpoints, and the suite ports the agent sample's Person,
DistributedTracing and Todo tests. Sentry exports the agent's spans in
batches every 5 seconds, which can't be configured, so each test waits
for the next batch and the negative tracing check waits past one.

ChildJvmApp now copies the app's output into the test's as it arrives
instead of printing it on close. The shared app is closed when the JVM
exits, where its whole log would otherwise land on the console.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to the Boot 3 agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 24] Port the rest of the Boot 3 OTel agent sample's tests (#6316)

* test(spring-boot): Port the rest of the Boot 3 OTel agent sample's tests

The agent fixture gains the Cache, Metrics, GraphQL and Kafka
endpoints, and the agent suite ports the sample's remaining tests in
both init modes. The agent traces each GraphQL operation as one span
named after it, so the queries are named. Kafka uses an in-JVM KRaft
broker that the test JVM starts next to the app.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix. The matrix
no longer builds the agent separately, because the suites build the
jar they attach.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Check the Boot 3 agent GraphQL task query's assignee and creator ids

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
runningcode added a commit that referenced this pull request Oct 23, 2026
… tests into the module (#6311)

* test(spring-boot): Move the Boot 2 WebFlux sample's tests into the module

Adds an integrationTestWebflux suite to sentry-spring-boot that mirrors
the Boot 3 one, without the Reactor thread-local accessor that Spring
Boot 2's Reactor lacks. The GraphQL greeting lives in its own file so
the suite can leave it out below Spring Boot 2.7, like the servlet
suite's GraphQL.

The Boot 2 WebFlux sample has no system tests left, so it comes off the
system-test runner, the backend workflow and the Spring Boot 2 matrix,
which now runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Tighten the Boot 2 WebFlux tracing checks and restore Metrics

Ports the tracing checks and the plain test client from the servlet
suite, and runs the WebFlux sample's Metrics tests in the reactive app
too, rather than only in the servlet suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Return a Mono from the Boot 2 WebFlux GraphQL resolver

The sample's resolver returned a Mono, so its test covered Sentry
finishing the field's span when the Mono completes. The port returned a
String, which only covers the synchronous path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 20] Move the Boot 3 OTel no-agent sample's tests (#6312)

* test(spring-boot): Move the Boot 3 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-jakarta.
The app traces through the OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring, and the suite ports the no-agent
sample's tests: spans from the OTel annotation, the OTel API and the
Sentry API with their feature flags, the OTel database span, trace
continuation, client spans, cache spans, GraphQL, and Kafka traced by
OTel instead of Sentry's Spring Kafka integration. The sample's Metrics
tests were copies of the servlet ones and don't depend on tracing.

The suite needs a TestRestTemplate built outside the context: the one
Spring Boot provides is instrumented by the OTel starter, which replaced
the trace headers the tests send and started a new trace.

Sentry exports OTel spans in batches every 5 seconds, so every test
waited that long. MockSentryServer gets a hook that runs before each
check while waiting, which the suite uses to flush the tracer provider,
taking the suite from about 112s to 8s of test time.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Rejoin a wrapped comment in the Boot 3 OTel no-agent suite

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 3 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 21] Move the Boot 4 OTel no-agent sample's tests (#6313)

* test(spring-boot): Move the Boot 4 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-4, the
Boot 4 counterpart of the Boot 3 one: the app traces through the
OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring. The sample's tests were the same
as the Boot 3 sample's, minus Cache, so the suite is the Boot 3 one with
Boot 4's packages and no Cache test. Its Metrics tests were copies of
the servlet ones and don't depend on tracing.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 4 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 4 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 22] Move the Boot 2 OTel no-agent sample's tests (#6314)

* test(spring-boot): Move the Boot 2 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot, the
Boot 2 counterpart of the Boot 3 one. The sample's tests were the Boot 3
sample's minus Cache and RestClient, which Boot 2 doesn't have.
GraphQL and Kafka are gated on Boot 2.7, as in the servlet suite, and
Kafka gets a context of its own.

Sentry is global, so a second live context re-initializes it with that
context's OpenTelemetry SDK, and the Sentry API spans of the first
context's tests went to the wrong one. Each test class therefore starts
its own context and closes it afterwards.

The sample has no system tests left, so it comes off the system-test
runner and the Spring Boot 2 matrix, which now runs the new suite, and
the backend workflow's base row moves to the console sample.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Port the tracing and GraphQL checks to Boot 2 no-agent and restore Metrics

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 23] Port the Boot 3 OTel agent sample's Person, tracing and Todo tests (#6315)

* test(spring-boot): Port the Boot 3 OTel agent sample's Person, tracing and Todo tests

The agent tests now start the fixture app once per test JVM and share
it, because it takes seconds to start. Which mode initializes Sentry is
a property of the test task, so the suite's task runs with the agent
initializing it and a new integrationTestOtelAgentWithoutAutoInit task
runs the same tests with the Spring Boot starter doing it. Gradle runs
the two in parallel.

The fixture gains the Person POST, distributed tracing and Todo
endpoints, and the suite ports the agent sample's Person,
DistributedTracing and Todo tests. Sentry exports the agent's spans in
batches every 5 seconds, which can't be configured, so each test waits
for the next batch and the negative tracing check waits past one.

ChildJvmApp now copies the app's output into the test's as it arrives
instead of printing it on close. The shared app is closed when the JVM
exits, where its whole log would otherwise land on the console.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to the Boot 3 agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 24] Port the rest of the Boot 3 OTel agent sample's tests (#6316)

* test(spring-boot): Port the rest of the Boot 3 OTel agent sample's tests

The agent fixture gains the Cache, Metrics, GraphQL and Kafka
endpoints, and the agent suite ports the sample's remaining tests in
both init modes. The agent traces each GraphQL operation as one span
named after it, so the queries are named. Kafka uses an in-JVM KRaft
broker that the test JVM starts next to the app.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix. The matrix
no longer builds the agent separately, because the suites build the
jar they attach.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Check the Boot 3 agent GraphQL task query's assignee and creator ids

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
runningcode added a commit that referenced this pull request Oct 23, 2026
… tests into the module (#6310)

* test(spring-boot): Move the Boot 4 WebFlux sample's tests into the module

Adds an integrationTestWebflux suite to sentry-spring-boot-4 that
mirrors the Boot 3 one, adjusted for Spring Boot 4: the webclient
starter for WebClient.Builder, the restclient starter that
TestRestTemplate needs, Jackson 3, and @AutoConfigureTestRestTemplate.
The Todo test reads the port with @LocalServerPort because
TestRestTemplate's root URI doesn't hold the port on Boot 4.0.

The Boot 4 WebFlux sample has no system tests left, so it comes off the
system-test runner, the backend workflow and the Spring Boot 4 matrix,
which now runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 4 WebFlux

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Return a Mono from the Boot 4 WebFlux GraphQL resolver

The sample's resolver returned a Mono, so its test covered Sentry
finishing the field's span when the Mono completes. The port returned a
String, which only covers the synchronous path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 19] Move the Boot 2 WebFlux sample's tests into the module (#6311)

* test(spring-boot): Move the Boot 2 WebFlux sample's tests into the module

Adds an integrationTestWebflux suite to sentry-spring-boot that mirrors
the Boot 3 one, without the Reactor thread-local accessor that Spring
Boot 2's Reactor lacks. The GraphQL greeting lives in its own file so
the suite can leave it out below Spring Boot 2.7, like the servlet
suite's GraphQL.

The Boot 2 WebFlux sample has no system tests left, so it comes off the
system-test runner, the backend workflow and the Spring Boot 2 matrix,
which now runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Tighten the Boot 2 WebFlux tracing checks and restore Metrics

Ports the tracing checks and the plain test client from the servlet
suite, and runs the WebFlux sample's Metrics tests in the reactive app
too, rather than only in the servlet suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Return a Mono from the Boot 2 WebFlux GraphQL resolver

The sample's resolver returned a Mono, so its test covered Sentry
finishing the field's span when the Mono completes. The port returned a
String, which only covers the synchronous path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 20] Move the Boot 3 OTel no-agent sample's tests (#6312)

* test(spring-boot): Move the Boot 3 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-jakarta.
The app traces through the OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring, and the suite ports the no-agent
sample's tests: spans from the OTel annotation, the OTel API and the
Sentry API with their feature flags, the OTel database span, trace
continuation, client spans, cache spans, GraphQL, and Kafka traced by
OTel instead of Sentry's Spring Kafka integration. The sample's Metrics
tests were copies of the servlet ones and don't depend on tracing.

The suite needs a TestRestTemplate built outside the context: the one
Spring Boot provides is instrumented by the OTel starter, which replaced
the trace headers the tests send and started a new trace.

Sentry exports OTel spans in batches every 5 seconds, so every test
waited that long. MockSentryServer gets a hook that runs before each
check while waiting, which the suite uses to flush the tracer provider,
taking the suite from about 112s to 8s of test time.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Rejoin a wrapped comment in the Boot 3 OTel no-agent suite

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 3 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 21] Move the Boot 4 OTel no-agent sample's tests (#6313)

* test(spring-boot): Move the Boot 4 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-4, the
Boot 4 counterpart of the Boot 3 one: the app traces through the
OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring. The sample's tests were the same
as the Boot 3 sample's, minus Cache, so the suite is the Boot 3 one with
Boot 4's packages and no Cache test. Its Metrics tests were copies of
the servlet ones and don't depend on tracing.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 4 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 4 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 22] Move the Boot 2 OTel no-agent sample's tests (#6314)

* test(spring-boot): Move the Boot 2 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot, the
Boot 2 counterpart of the Boot 3 one. The sample's tests were the Boot 3
sample's minus Cache and RestClient, which Boot 2 doesn't have.
GraphQL and Kafka are gated on Boot 2.7, as in the servlet suite, and
Kafka gets a context of its own.

Sentry is global, so a second live context re-initializes it with that
context's OpenTelemetry SDK, and the Sentry API spans of the first
context's tests went to the wrong one. Each test class therefore starts
its own context and closes it afterwards.

The sample has no system tests left, so it comes off the system-test
runner and the Spring Boot 2 matrix, which now runs the new suite, and
the backend workflow's base row moves to the console sample.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Port the tracing and GraphQL checks to Boot 2 no-agent and restore Metrics

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 23] Port the Boot 3 OTel agent sample's Person, tracing and Todo tests (#6315)

* test(spring-boot): Port the Boot 3 OTel agent sample's Person, tracing and Todo tests

The agent tests now start the fixture app once per test JVM and share
it, because it takes seconds to start. Which mode initializes Sentry is
a property of the test task, so the suite's task runs with the agent
initializing it and a new integrationTestOtelAgentWithoutAutoInit task
runs the same tests with the Spring Boot starter doing it. Gradle runs
the two in parallel.

The fixture gains the Person POST, distributed tracing and Todo
endpoints, and the suite ports the agent sample's Person,
DistributedTracing and Todo tests. Sentry exports the agent's spans in
batches every 5 seconds, which can't be configured, so each test waits
for the next batch and the negative tracing check waits past one.

ChildJvmApp now copies the app's output into the test's as it arrives
instead of printing it on close. The shared app is closed when the JVM
exits, where its whole log would otherwise land on the console.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to the Boot 3 agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 24] Port the rest of the Boot 3 OTel agent sample's tests (#6316)

* test(spring-boot): Port the rest of the Boot 3 OTel agent sample's tests

The agent fixture gains the Cache, Metrics, GraphQL and Kafka
endpoints, and the agent suite ports the sample's remaining tests in
both init modes. The agent traces each GraphQL operation as one span
named after it, so the queries are named. Kafka uses an in-JVM KRaft
broker that the test JVM starts next to the app.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix. The matrix
no longer builds the agent separately, because the suites build the
jar they attach.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Check the Boot 3 agent GraphQL task query's assignee and creator ids

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
runningcode added a commit that referenced this pull request Oct 23, 2026
… tests into the module (#6308)

* test(spring-boot): Move the Boot 3 WebFlux sample's tests into the module

Adds an integrationTestWebflux suite to sentry-spring-boot-jakarta. It
runs a reactive app without the servlet stack, so Spring Boot starts a
WebFlux server, and ports the WebFlux sample's Person,
DistributedTracing, Todo and GraphQL tests. The sample's Cache and
Metrics tests were copies of the servlet ones and don't depend on the
web stack, so the integrationTest suite already covers them.

The WebFlux sample has no system tests left, so it comes off the
system-test runner, the backend workflow and the Spring Boot 3 matrix,
which now runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Tighten the Boot 3 WebFlux tracing checks and restore Cache and Metrics

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Return a Mono from the Boot 3 WebFlux GraphQL resolver

The sample's resolver returned a Mono, so its test covered Sentry
finishing the field's span when the Mono completes. The port returned a
String, which only covers the synchronous path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 18] Move the Boot 4 WebFlux sample's tests into the module (#6310)

* test(spring-boot): Move the Boot 4 WebFlux sample's tests into the module

Adds an integrationTestWebflux suite to sentry-spring-boot-4 that
mirrors the Boot 3 one, adjusted for Spring Boot 4: the webclient
starter for WebClient.Builder, the restclient starter that
TestRestTemplate needs, Jackson 3, and @AutoConfigureTestRestTemplate.
The Todo test reads the port with @LocalServerPort because
TestRestTemplate's root URI doesn't hold the port on Boot 4.0.

The Boot 4 WebFlux sample has no system tests left, so it comes off the
system-test runner, the backend workflow and the Spring Boot 4 matrix,
which now runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 4 WebFlux

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Return a Mono from the Boot 4 WebFlux GraphQL resolver

The sample's resolver returned a Mono, so its test covered Sentry
finishing the field's span when the Mono completes. The port returned a
String, which only covers the synchronous path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 19] Move the Boot 2 WebFlux sample's tests into the module (#6311)

* test(spring-boot): Move the Boot 2 WebFlux sample's tests into the module

Adds an integrationTestWebflux suite to sentry-spring-boot that mirrors
the Boot 3 one, without the Reactor thread-local accessor that Spring
Boot 2's Reactor lacks. The GraphQL greeting lives in its own file so
the suite can leave it out below Spring Boot 2.7, like the servlet
suite's GraphQL.

The Boot 2 WebFlux sample has no system tests left, so it comes off the
system-test runner, the backend workflow and the Spring Boot 2 matrix,
which now runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Tighten the Boot 2 WebFlux tracing checks and restore Metrics

Ports the tracing checks and the plain test client from the servlet
suite, and runs the WebFlux sample's Metrics tests in the reactive app
too, rather than only in the servlet suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Return a Mono from the Boot 2 WebFlux GraphQL resolver

The sample's resolver returned a Mono, so its test covered Sentry
finishing the field's span when the Mono completes. The port returned a
String, which only covers the synchronous path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 20] Move the Boot 3 OTel no-agent sample's tests (#6312)

* test(spring-boot): Move the Boot 3 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-jakarta.
The app traces through the OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring, and the suite ports the no-agent
sample's tests: spans from the OTel annotation, the OTel API and the
Sentry API with their feature flags, the OTel database span, trace
continuation, client spans, cache spans, GraphQL, and Kafka traced by
OTel instead of Sentry's Spring Kafka integration. The sample's Metrics
tests were copies of the servlet ones and don't depend on tracing.

The suite needs a TestRestTemplate built outside the context: the one
Spring Boot provides is instrumented by the OTel starter, which replaced
the trace headers the tests send and started a new trace.

Sentry exports OTel spans in batches every 5 seconds, so every test
waited that long. MockSentryServer gets a hook that runs before each
check while waiting, which the suite uses to flush the tracer provider,
taking the suite from about 112s to 8s of test time.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Rejoin a wrapped comment in the Boot 3 OTel no-agent suite

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 3 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 21] Move the Boot 4 OTel no-agent sample's tests (#6313)

* test(spring-boot): Move the Boot 4 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-4, the
Boot 4 counterpart of the Boot 3 one: the app traces through the
OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring. The sample's tests were the same
as the Boot 3 sample's, minus Cache, so the suite is the Boot 3 one with
Boot 4's packages and no Cache test. Its Metrics tests were copies of
the servlet ones and don't depend on tracing.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 4 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 4 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 22] Move the Boot 2 OTel no-agent sample's tests (#6314)

* test(spring-boot): Move the Boot 2 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot, the
Boot 2 counterpart of the Boot 3 one. The sample's tests were the Boot 3
sample's minus Cache and RestClient, which Boot 2 doesn't have.
GraphQL and Kafka are gated on Boot 2.7, as in the servlet suite, and
Kafka gets a context of its own.

Sentry is global, so a second live context re-initializes it with that
context's OpenTelemetry SDK, and the Sentry API spans of the first
context's tests went to the wrong one. Each test class therefore starts
its own context and closes it afterwards.

The sample has no system tests left, so it comes off the system-test
runner and the Spring Boot 2 matrix, which now runs the new suite, and
the backend workflow's base row moves to the console sample.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Port the tracing and GraphQL checks to Boot 2 no-agent and restore Metrics

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 23] Port the Boot 3 OTel agent sample's Person, tracing and Todo tests (#6315)

* test(spring-boot): Port the Boot 3 OTel agent sample's Person, tracing and Todo tests

The agent tests now start the fixture app once per test JVM and share
it, because it takes seconds to start. Which mode initializes Sentry is
a property of the test task, so the suite's task runs with the agent
initializing it and a new integrationTestOtelAgentWithoutAutoInit task
runs the same tests with the Spring Boot starter doing it. Gradle runs
the two in parallel.

The fixture gains the Person POST, distributed tracing and Todo
endpoints, and the suite ports the agent sample's Person,
DistributedTracing and Todo tests. Sentry exports the agent's spans in
batches every 5 seconds, which can't be configured, so each test waits
for the next batch and the negative tracing check waits past one.

ChildJvmApp now copies the app's output into the test's as it arrives
instead of printing it on close. The shared app is closed when the JVM
exits, where its whole log would otherwise land on the console.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to the Boot 3 agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 24] Port the rest of the Boot 3 OTel agent sample's tests (#6316)

* test(spring-boot): Port the rest of the Boot 3 OTel agent sample's tests

The agent fixture gains the Cache, Metrics, GraphQL and Kafka
endpoints, and the agent suite ports the sample's remaining tests in
both init modes. The agent traces each GraphQL operation as one span
named after it, so the queries are named. Kafka uses an in-JVM KRaft
broker that the test JVM starts next to the app.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix. The matrix
no longer builds the agent separately, because the suites build the
jar they attach.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Check the Boot 3 agent GraphQL task query's assignee and creator ids

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 663e7d5. Configure here.

classpath = sources.runtimeClasspath
useJUnit()
runAgentFixture(autoInit = false)
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WithoutAutoInit tests skip check

Medium Severity

integrationTestOtelAgentWithoutAutoInit is a standalone Test task in the verification group, but it is not a check dependency. Jvm-test-suite tasks are attached to check; this one is not. The SENTRY_AUTO_INIT=false agent path therefore does not run on :sentry-spring-boot-jakarta:check or any CI job that only runs check. The comment expects Gradle to run it with the suite; only the Boot 3 matrix names the task.

Fix in Cursor Fix in Web

Triggered by project rule: PR Review Guidelines for Cursor Bugbot

Reviewed by Cursor Bugbot for commit 663e7d5. Configure here.

runningcode added a commit that referenced this pull request Oct 23, 2026
… system tests with a Log4j2 suite (#6306)

* test(spring-boot): Remove the log4j2 Boot samples' system tests

The jakarta-log4j2 and 4-log4j2 samples' system tests were copies of the
plain samples' tests, which now run in the modules' integrationTest
suites. The only addition was a check that a logged error carries the
Log4j integration. That's covered by SentryLog4j2AppenderAutoConfigurationTest,
which checks the appender Spring Boot attaches, and by sentry-log4j2's
own tests of what the appender sends.

Both samples come off the system-test runner and the backend workflow.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Test the auto-configured Log4j2 appender end to end

The log4j2 Boot samples' tests were removed as covered elsewhere, but
nothing else sends an event through the Log4j2 appender that Spring
Boot's auto-configuration attaches. integrationTestLog4j2, in
sentry-spring-boot-jakarta and sentry-spring-boot-4, runs a servlet app
with Log4j2 instead of Logback and checks that an error logged through
SLF4J reaches Sentry with the request's feature flag and the Log4j
integration, as the samples' Person test did.

Gradle's module replacement swaps the starters, as Spring Boot
documents. It only acts on a classpath with both, which only this
suite has.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 17] Move the Boot 3 WebFlux sample's tests into the module (#6308)

* test(spring-boot): Move the Boot 3 WebFlux sample's tests into the module

Adds an integrationTestWebflux suite to sentry-spring-boot-jakarta. It
runs a reactive app without the servlet stack, so Spring Boot starts a
WebFlux server, and ports the WebFlux sample's Person,
DistributedTracing, Todo and GraphQL tests. The sample's Cache and
Metrics tests were copies of the servlet ones and don't depend on the
web stack, so the integrationTest suite already covers them.

The WebFlux sample has no system tests left, so it comes off the
system-test runner, the backend workflow and the Spring Boot 3 matrix,
which now runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Tighten the Boot 3 WebFlux tracing checks and restore Cache and Metrics

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Return a Mono from the Boot 3 WebFlux GraphQL resolver

The sample's resolver returned a Mono, so its test covered Sentry
finishing the field's span when the Mono completes. The port returned a
String, which only covers the synchronous path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 18] Move the Boot 4 WebFlux sample's tests into the module (#6310)

* test(spring-boot): Move the Boot 4 WebFlux sample's tests into the module

Adds an integrationTestWebflux suite to sentry-spring-boot-4 that
mirrors the Boot 3 one, adjusted for Spring Boot 4: the webclient
starter for WebClient.Builder, the restclient starter that
TestRestTemplate needs, Jackson 3, and @AutoConfigureTestRestTemplate.
The Todo test reads the port with @LocalServerPort because
TestRestTemplate's root URI doesn't hold the port on Boot 4.0.

The Boot 4 WebFlux sample has no system tests left, so it comes off the
system-test runner, the backend workflow and the Spring Boot 4 matrix,
which now runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 4 WebFlux

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Return a Mono from the Boot 4 WebFlux GraphQL resolver

The sample's resolver returned a Mono, so its test covered Sentry
finishing the field's span when the Mono completes. The port returned a
String, which only covers the synchronous path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 19] Move the Boot 2 WebFlux sample's tests into the module (#6311)

* test(spring-boot): Move the Boot 2 WebFlux sample's tests into the module

Adds an integrationTestWebflux suite to sentry-spring-boot that mirrors
the Boot 3 one, without the Reactor thread-local accessor that Spring
Boot 2's Reactor lacks. The GraphQL greeting lives in its own file so
the suite can leave it out below Spring Boot 2.7, like the servlet
suite's GraphQL.

The Boot 2 WebFlux sample has no system tests left, so it comes off the
system-test runner, the backend workflow and the Spring Boot 2 matrix,
which now runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Tighten the Boot 2 WebFlux tracing checks and restore Metrics

Ports the tracing checks and the plain test client from the servlet
suite, and runs the WebFlux sample's Metrics tests in the reactive app
too, rather than only in the servlet suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Return a Mono from the Boot 2 WebFlux GraphQL resolver

The sample's resolver returned a Mono, so its test covered Sentry
finishing the field's span when the Mono completes. The port returned a
String, which only covers the synchronous path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 20] Move the Boot 3 OTel no-agent sample's tests (#6312)

* test(spring-boot): Move the Boot 3 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-jakarta.
The app traces through the OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring, and the suite ports the no-agent
sample's tests: spans from the OTel annotation, the OTel API and the
Sentry API with their feature flags, the OTel database span, trace
continuation, client spans, cache spans, GraphQL, and Kafka traced by
OTel instead of Sentry's Spring Kafka integration. The sample's Metrics
tests were copies of the servlet ones and don't depend on tracing.

The suite needs a TestRestTemplate built outside the context: the one
Spring Boot provides is instrumented by the OTel starter, which replaced
the trace headers the tests send and started a new trace.

Sentry exports OTel spans in batches every 5 seconds, so every test
waited that long. MockSentryServer gets a hook that runs before each
check while waiting, which the suite uses to flush the tracer provider,
taking the suite from about 112s to 8s of test time.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Rejoin a wrapped comment in the Boot 3 OTel no-agent suite

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 3 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 21] Move the Boot 4 OTel no-agent sample's tests (#6313)

* test(spring-boot): Move the Boot 4 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot-4, the
Boot 4 counterpart of the Boot 3 one: the app traces through the
OpenTelemetry SDK in its own JVM, set up by
sentry-opentelemetry-agentless-spring. The sample's tests were the same
as the Boot 3 sample's, minus Cache, so the suite is the Boot 3 one with
Boot 4's packages and no Cache test. Its Metrics tests were copies of
the servlet ones and don't depend on tracing.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 4 matrix, which now
runs the new suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to Boot 4 no-agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 22] Move the Boot 2 OTel no-agent sample's tests (#6314)

* test(spring-boot): Move the Boot 2 OTel no-agent sample's tests into the module

Adds an integrationTestOtelNoAgent suite to sentry-spring-boot, the
Boot 2 counterpart of the Boot 3 one. The sample's tests were the Boot 3
sample's minus Cache and RestClient, which Boot 2 doesn't have.
GraphQL and Kafka are gated on Boot 2.7, as in the servlet suite, and
Kafka gets a context of its own.

Sentry is global, so a second live context re-initializes it with that
context's OpenTelemetry SDK, and the Sentry API spans of the first
context's tests went to the wrong one. Each test class therefore starts
its own context and closes it afterwards.

The sample has no system tests left, so it comes off the system-test
runner and the Spring Boot 2 matrix, which now runs the new suite, and
the backend workflow's base row moves to the console sample.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Port the tracing and GraphQL checks to Boot 2 no-agent and restore Metrics

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 23] Port the Boot 3 OTel agent sample's Person, tracing and Todo tests (#6315)

* test(spring-boot): Port the Boot 3 OTel agent sample's Person, tracing and Todo tests

The agent tests now start the fixture app once per test JVM and share
it, because it takes seconds to start. Which mode initializes Sentry is
a property of the test task, so the suite's task runs with the agent
initializing it and a new integrationTestOtelAgentWithoutAutoInit task
runs the same tests with the Spring Boot starter doing it. Gradle runs
the two in parallel.

The fixture gains the Person POST, distributed tracing and Todo
endpoints, and the suite ports the agent sample's Person,
DistributedTracing and Todo tests. Sentry exports the agent's spans in
batches every 5 seconds, which can't be configured, so each test waits
for the next batch and the negative tracing check waits past one.

ChildJvmApp now copies the app's output into the test's as it arrives
instead of printing it on close. The shared app is closed when the JVM
exits, where its whole log would otherwise land on the console.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test: Port the audit fixes to the Boot 3 agent

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): [Sample Tests 24] Port the rest of the Boot 3 OTel agent sample's tests (#6316)

* test(spring-boot): Port the rest of the Boot 3 OTel agent sample's tests

The agent fixture gains the Cache, Metrics, GraphQL and Kafka
endpoints, and the agent suite ports the sample's remaining tests in
both init modes. The agent traces each GraphQL operation as one span
named after it, so the queries are named. Kafka uses an in-JVM KRaft
broker that the test JVM starts next to the app.

The sample has no system tests left, so it comes off the system-test
runner, the backend workflow and the Spring Boot 3 matrix. The matrix
no longer builds the agent separately, because the suites build the
jar they attach.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(spring-boot): Check the Boot 3 agent GraphQL task query's assignee and creator ids

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ship-it PR is ready to merge from a reviewer perspective

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants