This page consolidates the status of the official TCK tests run against Cassini. The day-to-day source of truth remains the TCK.md in the repo.

Result

Target profile

Jakarta EE Core Profile / SE-Bootstrap (standalone, no Servlet, no server-side JAXB)

TCK

jakarta.ws.rs:jakarta-restful-ws-tck:4.0.1

JDK

Eclipse Temurin 25

@Test count in the TCK

2670

Tests applicable to the profile

2538 (the rest excluded via @Tag or documented challenges)

Passed

2538

Failures + Errors

0

Skipped

132 (2670 − 2538: out-of-profile @Tag exclusions + 4 challenged test methods)

Conformance score

100.00 % of applicable tests

[INFO] Tests run: 2670, Failures: 0, Errors: 0, Skipped: 132
[INFO] BUILD SUCCESS

Cassini conforms to the Jakarta RESTful Web Services 4.0 specification on the Core Profile / SE-Bootstrap target for 100 % of the tests applicable to standalone mode.

Coverage by spec section

Spec section Status Source

§3 Resources

✅

cassini-core/internal/{ResourceScanner,UriRouter,UriTemplate,Invoker}

§3.5.4 EntityPart

✅

cassini-core/internal/multipart/CassiniEntityPart{,Builder}

§4 Providers

✅

cassini-core/internal/MessageBodyRegistry + CassiniJsonbReaderWriter

§5.1 Request.selectVariant

✅

cassini-core/internal/context/CassiniRequest

§5.2 SeBootstrap

✅

cassini-chappe/ChappeRuntimeDelegate

§6 Filters & Interceptors

✅

cassini-core/internal/filter/*

§6.5.5 DynamicFeature

✅

cassini-core/internal/filter/CassiniDynamicFeatureContext

§7 ContextResolver / Providers

✅

cassini-core/internal/context/CassiniProviders

§10 Application / @ApplicationPath

✅

cassini-chappe/ChappeRuntimeDelegate

§11 SSE

✅ (real chunked streaming since M2i)

cassini-core/internal/sse/CassiniSse{,EventSink,Broadcaster} + ChappeHttpAdapter

§11.2 BASIC auth

✅

cassini-core/internal/context/CassiniSecurityContext + cassini-tck/…​/BasicAuthHandler

Skipped tests by environment (out-of-profile)

The 4.0 TCK categorises tests via JUnit 5 @Tag`s — `servlet, xml_binding, security, se_bootstrap. The user-guide §5.2.3 documents excluding them via excludedGroups for standalone certifications (Type 1 + Type 3 of TCK Process 1.4.1).

Configuration in cassini-tck/pom.xml:

<excludedGroups>servlet,xml_binding</excludedGroups>
Tag Justification Tests removed

servlet

Requires HttpServletRequest; out of SE-Bootstrap scope.

~10

xml_binding

Requires JAXB-runtime; out of Core Profile.

~120

security and se_bootstrap are kept: Cassini supports BASIC auth (CassiniSecurityContext) and native SE-Bootstrap (ChappeRuntimeDelegate).

Intentionally skipped tests (official challenges)

Four test methods across three classes are disabled via TckChallengeExclusions (auto-discovered JUnit 5 ExecutionCondition) with documented justification — per the TCK Process 1.4.1:

Test Category Reason

spec.resource.requestmatching.JAXRSClientIT#locatorNameTooLongAgainTest

spec interpretation

Per a literal reading of §3.7.2 step 2(g), @GET @Path("locator/locator/locator") matches /locator/locator/locator → 200 expected. The test imposes a non-portable segment-by-segment interpretation.

signaturetest.jaxrs.JAXRSSigTestIT#signatureTest

TCK environment

TDK 2.5 sigtest requires a complete TCK layout. The jakarta.ws.rs API is unmodified by Cassini — this test evaluates the TCK environment, not Cassini’s conformance.

jaxrs31.ee.multipart.MultipartSupportIT#basicTest + multiFormParamTest

client harness

Cassini SERVER fully implements §3.5.4 EntityPart. The test fails on the Jersey CLIENT side (harness limitation).

Historical note: three additional §11 SSE streaming challenges (ssebroadcaster#sseBroadcastTest, sseeventsink#closeTest, sseeventsource#closeTest) were lifted with M2i (2026-06-11) — ChappeHttpExchange now opens real chunked streaming (pipe + latch in ChappeHttpAdapter, see ASYNC.md), so events reach the wire incrementally and those tests now PASS.

Runner architecture: in-reactor behind the tck profile

cassini-tck is an in-reactor module gated behind the tck Maven profile (TCK harmonisation, same pattern as the vidocq-runtime-tck-* runners): a plain mvn install neither downloads nor runs anything TCK-related, and the release reactor never sees the module. Invoke through run-official-tck-restful-4.0.sh, or directly via ./mvnw -Ptck,tck-official -pl cassini-tck verify.

Historical note: the module used to be excluded from the parent <modules> as a standalone Model 4.0.0 POM, because the official Jakarta REST 4.0 TCK transitively pulls ShrinkWrap Maven Resolver 3.3 (maven-resolver 1.9 / maven-model 3.9), which could not parse the Model 4.1.0 POMs the workspace used at the time. That constraint disappeared with the workspace-wide migration to Maven 3.9.16 / Model 4.0.0.

Reproduce locally

cd cassini

# 1. Prerequisites: Java 25 + Maven 3.9.16 (via .sdkmanrc)
sdk env

# 2. Install the official TCK JAR (non-public, fetch once).
#    The build resolves jakarta.ws.rs:jakarta-restful-ws-tck:4.0.1.
curl -Lo /tmp/restful-ws-tck.zip \
  https://download.eclipse.org/jakartaee/restful-ws/4.0/jakarta-restful-ws-tck-4.0.1.zip
unzip /tmp/restful-ws-tck.zip -d /tmp/restful-ws-tck
mvn install:install-file \
  -Dfile=/tmp/restful-ws-tck/jakarta-restful-ws-tck/lib/jakarta-restful-ws-tck-4.0.1.jar \
  -DgroupId=jakarta.ws.rs -DartifactId=jakarta-restful-ws-tck \
  -Dversion=4.0.1 -Dpackaging=jar

# 3. Run the TCK
./run-official-tck-restful-4.0.sh                          # smoke test
./run-official-tck-restful-4.0.sh all                      # full suite (2670 tests)
./run-official-tck-restful-4.0.sh -Dtest=ResourceTests     # targeted class

Expected output on all:

[INFO] Tests run: 2670, Failures: 0, Errors: 0, Skipped: 132
[INFO] BUILD SUCCESS