This is an automated email from the ASF dual-hosted git repository. jungm pushed a commit to branch ee11 in repository https://gitbox.apache.org/repos/asf/tomee-tck.git
commit 7ae24ba31dd6a94a7125cf4133228c584d29044e Author: Markus Jung <[email protected]> AuthorDate: Sun Jul 19 00:02:51 2026 +0200 Run the Faces TCK modern modules on Plume and retriage exclusions Move the tomee-remote container configuration into the failsafe execution where the TCK runs every IT: a surefire-only block never reached the integration-test fork, so the adapter fell back to its defaults and the suite ran against the webprofile distribution (MyFaces) instead of Plume (Mojarra). Stage ShrinkWrap API 1.2.6 through tomee.additionalLibs so the faces40/41 WARs' bundled util deployment scans cleanly under OpenWebBeans. Rederive exclusions/faces.txt from the clean Plume/Mojarra baseline: the faces-config https xsi:schemaLocation gap affects one class (Spec1760IT), not three; the rest are Mojarra/TomEE integration behaviors (Faces CDI implicit-object injection, whole-bean and CDI method validation, one Chrome ajax quirk). --- KNOWN_ISSUES.md | 39 ++++- runner-standalone/README.md | 2 +- runner-standalone/exclusions/faces.txt | 158 +++++++-------------- .../src/test/resources/tomee-remote-profile.xml | 21 ++- 4 files changed, 107 insertions(+), 113 deletions(-) diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md index ef31bff..e8914c5 100644 --- a/KNOWN_ISSUES.md +++ b/KNOWN_ISSUES.md @@ -40,7 +40,7 @@ Detail lives next to each runner: | security | 132 tests, 5 F + 2 E; signature test passes | 7 tests | TomEE Jakarta Security | | authentication | 106 tests, 1 F; signature test passes | 1 method (spi `CheckMsgInfoKey`) | TCK challenge #219 (hard-codes a JACC requirement) | | websocket | 737 tests, 3 E | 3 methods | Client container advertises permessage-deflate in the negotiated extension lists | -| faces (modern modules) | 263 tests on record, 9 F + 30 E | 39 tests | TomEE faces-config parsing + Mojarra integration | +| faces (modern modules) | 327 tests, 45 F + 6 E (failsafe reruns inflate the counts; 10 distinct failing classes) | 10 classes | 1 TomEE faces-config gap + Mojarra/TomEE CDI-injection, whole-bean/method validation, and one Chrome ajax quirk | | faces-old (JavaTest) | 5,391 tests, all pass (recorded run: 5 F from a foreign server answering :8080 mid-run; pass on re-run) | — | — (standalone mode, no exclusions) | | faces-signaturetest | passes against Plume's Mojarra (org.glassfish:jakarta.faces 4.1.9) | — | — | @@ -76,10 +76,35 @@ Fixes belong in Apache TomEE (or Tomcat); each removes exclusion entries. conduit's no-entity handling, tracked upstream as [CXF-9039](https://issues.apache.org/jira/browse/CXF-9039), otherwise fails the `getLength()`/`hasEntity()` assertions. -5. **Faces descriptor parsing** — TomEE's `faces-config.xml` unmarshaller - rejects the `xsi:schemaLocation` attribute that Faces 4.1 descriptors - carry, so affected applications never deploy. Dominant cause of the 31 - class exclusions in [faces.txt](runner-standalone/exclusions/faces.txt). +5. **Faces (Mojarra on TomEE)** — five distinct integration behaviors, all in + [faces.txt](runner-standalone/exclusions/faces.txt): + - *faces-config parsing (product gap):* TomEE's `faces-config.xml` + unmarshaller (`ReadDescriptors.readFacesConfig`) rejects the unexpected + `{https://www.w3.org/2001/XMLSchema-instance}schemaLocation` attribute the + Faces 4.1 descriptors declare on the nonstandard *https* XSI namespace, so + the deployment fails to unmarshall. Only descriptors with child content + hit the strict path: `faces41/headAndBodyRenderer/Spec1760IT` (its + `faces-config.xml` carries a `<faces-config-extension>`) is the single + class affected — the sibling `uiRepeat/Spec1263IT` and + `uuidConverter/Spec1819IT` modules carry the same https namespace on an + empty `<faces-config>` and deploy and pass. A TomEE fix and/or TCK + challenge candidate. + - *Faces CDI implicit-object injection:* `@Inject` with a Faces qualifier + (`@RequestCookieMap`/`@SessionMap`/`@ViewMap`) yields a `Map` that renders + non-empty where the TCK asserts the page contains `{}` — Mojarra's + implicit-object CDI producers do not resolve to the empty map under + OpenWebBeans (`Issue3729IT`/`Issue3730IT`/`Issue3731IT`, + `Spec1582RequestCookieMap2IT`/`Spec1582ViewMap2IT`). + - *Whole-bean / cross-field validation:* `<f:validateWholeBean>` does not + emit the expected "Password fields must match" message + (`multiFieldValidation/Spec1IT`, `validateWholeBean/Issue4083IT`). + - *CDI method-level validation:* a `@FooConstraint` method constraint does + not surface its violation message on the rendered page under TomEE's + BVal/OpenWebBeans method-validation integration (`MethodValidationIT`). + - *Mojarra ajax re-init under Chrome:* the ajax response re-executes an + inline "Init called" script a different number of times than expected; the + TCK source itself notes this appears under Chrome and passes under HtmlUnit + (`Issue2162IT`). 6. **Jakarta Security** — the BASIC mechanism answers 401 for valid credentials in the decorated/custom-handler variants, and both OpenID default modules fail token validation. @@ -193,6 +218,10 @@ Not product bugs — gaps in this repository's coverage. `run-standalone-suite.sh`; it joins the Jenkins branch list once its baseline and exclusion wiring have a verified green run. The `faces-old` JavaTest half runs in CI. +- **Faces `old-tck-selenium` module uncovered**: the extracted TCK reactor + ships an `old-tck-selenium` module (22 tests) that neither the `faces` + runner (which drives faces22/23/40/41 + faces-signaturetest) nor the + `faces-old` JavaTest runner executes; wire it into one of them. ## What CI runs diff --git a/runner-standalone/README.md b/runner-standalone/README.md index 40b898e..320471a 100644 --- a/runner-standalone/README.md +++ b/runner-standalone/README.md @@ -60,7 +60,7 @@ derived from; with the default exclusions applied these suites run green. | WebSocket 2.2 | EFTL zip (installed as `jakarta.tck:websocket-tck-spec-tests:2.2.0`) | `websocket` | **Runs: 737 tests, 0 failures, 3 errors** (2026-07-18) against Tomcat's WebSocket implementation, driven through the `tomcat-websocket` client container; the signature test passes. The negative-deployment classes run and pass: an invalid server endpoint aborts the whole webapp deployment as the spec requires, and the runner's Arquillian extension (`NegativeDeploymentToleranceObserver`) [...] | Security 4.0 | Source reactor zip 4.0.1 | `security` (Maven module) | **Runs: 26 app modules plus the signature test, 132 tests, 5 failures, 2 errors at baseline; green with the reviewed exclusions (all 27 invoker projects pass, verified end-to-end 2026-07-18)**. The runner downloads and patches the reactor, injects a tomee-remote profile (including the `trustStore.path`/`trustStore.password` properties the OpenID modules' keytool steps read), and drives every module through the Maven [...] | Authentication 3.1 | Source reactor zip 3.1.2 | `authentication` (Maven module) | **Runs: 12 Web Profile modules plus the signature test; green with the reviewed exclusions (all 13 invoker projects pass, 0 failures, verified end-to-end 2026-07-18)**. The spi module registers the TCK's test `AuthConfigProvider` under Tomcat's JASPIC app-context naming (`Catalina/localhost /spitests_servlet_web`), so `ServletProfileSPITest` runs against Tomcat's `AuthConfigFactory` and passes 56 of its 5 [...] -| Faces 4.1 | Source reactor zip 4.1.2 | `faces` (Maven module) | **Runs: modern Arquillian modules — 263 tests on record, 9 failures + 30 errors** (2026-07-18) on Plume's Mojarra. The dominant product finding: TomEE's faces-config.xml unmarshaller rejects the `xsi:schemaLocation` attribute used by Faces 4.1 descriptors, failing those deployments (the 31 class exclusions in `exclusions/faces.txt`). The `faces-signaturetest` module runs in the same invoker pass and passes against the Moja [...] +| Faces 4.1 | Source reactor zip 4.1.2 | `faces` (Maven module) | **Runs: modern Arquillian modules (faces22/23/40/41) — 327 tests, 45 failures + 6 errors** (2026-07-18) on Plume's Mojarra; the failsafe rerun mechanism inflates those totals, covering 10 distinct failing classes, all in `exclusions/faces.txt`. One is a TomEE product gap (faces-config.xml unmarshaller rejecting the nonstandard *https* `xsi:schemaLocation`, `Spec1760IT`); the rest are Mojarra/TomEE integration behaviors — F [...] | Faces 4.1 (legacy old-tck) | Source reactor zip 4.1.2 (old-tck built from bundled sources) | `faces-old` (Maven module) | **Passes 5,391/5,391 (standalone mode, no exclusions)** (2026-07-18). The recorded full run shows 5 failures in `htmloutcometargetbutton`, all from a foreign server answering port 8080 mid-run; they pass on re-run against TomEE. The JavaTest half deploys through the TCK's own `tomcat` handler (WAR copy into `webapps/`) against a TomEE instance the runner provisions [...] | JSON Processing 2.1 | `jakarta.json:jakarta.json-tck-*:2.1.1` (Maven Central; byte-identical to the EFTL zip pinned in `environment/versions.env`) | `jsonp` | **Passes 197/197** (2026-07-18) against Apache Johnzon 2.1.0, the JSON-P provider bundled in the TomEE Plume snapshot: 179 functional + signature tests and 18 pluggability tests. The signature test checks the `jakarta.json` packages of the distribution's `jakartaee-api` jar | | JSON Binding 3.0 | `jakarta.json.bind:jakarta.json.bind-tck:3.0.0` (Maven Central; byte-identical to the EFTL zip pinned in `environment/versions.env`) | `jsonb` | **Runs: 295 tests, 1 failure, 1 error, 5 skipped** against Apache Johnzon 2.1.0 with OpenWebBeans as the CDI SE container (the runner boots it because the TCK's own private `@BeforeAll` bootstrap is ignored by JUnit). The runner sets `johnzon.use-bigdecimal-stringadapter=false`/`johnzon.use-biginteger-stringadapter=false` (J [...] diff --git a/runner-standalone/exclusions/faces.txt b/runner-standalone/exclusions/faces.txt index 7dbeccb..54efc8d 100644 --- a/runner-standalone/exclusions/faces.txt +++ b/runner-standalone/exclusions/faces.txt @@ -1,121 +1,67 @@ # Jakarta Faces 4.1 TCK source reactor (4.1.2), modern Arquillian modules -# (faces22/23/40/41) on Mojarra / TomEE Plume snapshot, Java 21, 2026-07-18: -# 263 tests on record, 9 failures, 30 errors, 5 skipped. The dominant product -# finding: TomEE's faces-config.xml unmarshaller rejects the -# xsi:schemaLocation attribute used by Faces 4.1 descriptors, so the affected -# applications never deploy and their tests error out. The rest are CDI -# integration and component behavior differences to triage. The legacy -# JavaTest old-tck half and the signature module are not yet ported and are -# not covered by this file. +# (faces22/23/40/41 + faces-signaturetest) on TomEE Plume's Mojarra, Java 21, +# 2026-07-18. Full baseline without this file: 327 tests, 45 failures + 6 +# errors, 5 skipped (the failsafe rerun mechanism counts each retried method +# up to five times, so these totals cover 10 distinct failing test classes). +# The excluded work splits into one TomEE product gap and four Mojarra/TomEE +# integration behaviors: +# - faces-config xsi:schemaLocation on the nonstandard https XSI namespace: +# 1 class (Spec1760IT) whose faces-config carries child elements. +# - Faces CDI implicit-object injection (@Inject @RequestCookieMap / +# @SessionMap / @ViewMap Map): 5 classes. +# - Faces whole-bean / cross-field validation (<f:validateWholeBean>): 2 +# classes. +# - CDI method-level bean validation rendering: 1 class. +# - Mojarra ajax re-init under Chrome (flagged in the TCK source itself): 1 +# class. +# The signature test and the rest of the reactor pass. The legacy JavaTest +# old-tck half lives in runner-standalone-faces-old and is not covered here. # # Format: maven-surefire/failsafe excludesFile patterns; the runner passes # this file to every TCK module through the invoker as # -Dsurefire.excludesFile/-Dfailsafe.excludesFile. -# Spec1581IT: 1 failing -**/ee/jakarta/tck/faces/test/faces40/javapages/Spec1581IT.java - -# Spec1581IT: 1 failing -**/ee/jakarta/tck/faces/test/faces40/javapagewithmetadata/Spec1581IT.java - -# MethodValidationIT: 2 of 3 executed methods fail -**/ee/jakarta/tck/faces/test/javaee7/cdimethodvalidation/cdimethodvalidation/MethodValidationIT.java#testCorrectUsage2 -**/ee/jakarta/tck/faces/test/javaee7/cdimethodvalidation/cdimethodvalidation/MethodValidationIT.java#testIncorrectUsage - -# Spec1IT: 1 of 5 executed methods fail -**/ee/jakarta/tck/faces/test/javaee7/multiFieldValidation/Spec1IT.java#testSimpleValidFieldsInvalidBean +# --- TomEE product gap: strict faces-config parsing --- +# TomEE's ReadDescriptors.readFacesConfig (sxc/JAXB) rejects the unexpected +# {https://www.w3.org/2001/XMLSchema-instance}schemaLocation attribute the +# Faces 4.1 descriptors declare on the nonstandard https XSI namespace, so the +# deployment fails to unmarshall its WEB-INF/faces-config.xml. Only descriptors +# with child content hit the strict path: the sibling uiRepeat/Spec1263IT and +# uuidConverter/Spec1819IT modules carry the same https namespace on an empty +# <faces-config> and deploy and pass. Spec1760IT is the one class whose +# faces-config has a <faces-config-extension> child. +**/org/eclipse/ee4j/tck/faces/faces41/headAndBodyRenderer/Spec1760IT.java -# Issue3729IT: 1 failing +# --- Faces CDI implicit-object injection --- +# @Inject with a Faces CDI qualifier (@RequestCookieMap / @SessionMap / +# @ViewMap) produces a Map that renders as a non-empty string where the TCK +# asserts the rendered page contains "{}"; Mojarra's implicit-object CDI +# producers do not resolve to the empty map the test expects under TomEE's +# OpenWebBeans. **/ee/jakarta/tck/faces/test/javaee8/cdi/Issue3729IT.java - -# Issue3730IT: 1 failing **/ee/jakarta/tck/faces/test/javaee8/cdi/Issue3730IT.java - -# Issue3731IT: 1 failing **/ee/jakarta/tck/faces/test/javaee8/cdi/Issue3731IT.java - -# Spec1582ApplicationMap2IT: 1 failing -**/ee/jakarta/tck/faces/test/javaee8/cdi/Spec1582ApplicationMap2IT.java - -# Spec1582HeaderMapIT: 1 failing -**/ee/jakarta/tck/faces/test/javaee8/cdi/Spec1582HeaderMapIT.java - -# Spec1582HeaderValuesMapIT: 1 failing -**/ee/jakarta/tck/faces/test/javaee8/cdi/Spec1582HeaderValuesMapIT.java - -# Spec1582InitParameterMapIT: 1 failing -**/ee/jakarta/tck/faces/test/javaee8/cdi/Spec1582InitParameterMapIT.java - -# Spec1582RequestCookieMap2IT: 1 failing **/ee/jakarta/tck/faces/test/javaee8/cdi/Spec1582RequestCookieMap2IT.java - -# Spec1582RequestMapIT: 1 failing -**/ee/jakarta/tck/faces/test/javaee8/cdi/Spec1582RequestMapIT.java - -# Spec1582RequestParameterMapIT: 1 failing -**/ee/jakarta/tck/faces/test/javaee8/cdi/Spec1582RequestParameterMapIT.java - -# Spec1582RequestParametersValuesMapIT: 1 failing -**/ee/jakarta/tck/faces/test/javaee8/cdi/Spec1582RequestParametersValuesMapIT.java - -# Spec1582ViewMap2IT: 1 failing **/ee/jakarta/tck/faces/test/javaee8/cdi/Spec1582ViewMap2IT.java -# Spec1337IT: 1 of 3 executed methods fail -**/ee/jakarta/tck/faces/test/servlet40/el/Spec1337IT.java#testResourceEL3 - -# Spec1260IT: 3 of 6 executed methods fail -**/ee/jakarta/tck/faces/test/servlet40/exactmapping_selenium/Spec1260IT.java#testLinkToNonExactMappedView -**/ee/jakarta/tck/faces/test/servlet40/exactmapping_selenium/Spec1260IT.java#testPostBackOnLinkedNonExactMappedView -**/ee/jakarta/tck/faces/test/servlet40/exactmapping_selenium/Spec1260IT.java#testResourceReferenceFromExactMappedView - -# Issue5032IT: 2 failing -**/ee/jakarta/tck/faces/test/servlet50/ajax_selenium/Issue5032IT.java - -# Issue5415IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/ajax_selenium/Issue5415IT.java - -# Spec1567IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/ajax_selenium/Spec1567IT.java - -# Issue5171IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/beanValidation/Issue5171IT.java - -# Spec1568IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/doctype/Spec1568IT.java - -# Spec1556IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/inputfile/Spec1556IT.java - -# Spec1555IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/inputfile_selenium/Spec1555IT.java - -# Spec1560IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/inputtext/Spec1560IT.java - -# Spec1553IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/namespaces/Spec1553IT.java - -# Spec1565IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/resources/Spec1565IT.java - -# Spec1563IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/selectitemgroup/Spec1563IT.java - -# Spec1559IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/selectitemgroups/Spec1559IT.java - -# Spec1574IT: 1 failing -**/ee/jakarta/tck/faces/test/servlet50/selectmanycheckbox/Spec1574IT.java - -# Spec1760IT: 1 failing -**/org/eclipse/ee4j/tck/faces/faces41/headAndBodyRenderer/Spec1760IT.java - -# Spec1263IT: 1 failing -**/org/eclipse/ee4j/tck/faces/faces41/uiRepeat/Spec1263IT.java +# --- Faces whole-bean / cross-field validation --- +# <f:validateWholeBean> copies the bean and cross-validates two fields +# (matching passwords). TomEE does not emit the expected "Password fields must +# match" validation message, so multiFieldValidation/Spec1IT's assertion fails +# and validateWholeBean/Issue4083IT errors reading the missing message element. +**/ee/jakarta/tck/faces/test/javaee7/multiFieldValidation/Spec1IT.java#testSimpleValidFieldsInvalidBean +**/ee/jakarta/tck/faces/test/javaee8/validateWholeBean/Issue4083IT.java -# Spec1819IT: 1 failing -**/org/eclipse/ee4j/tck/faces/faces41/uuidConverter/Spec1819IT.java +# --- CDI method-level bean validation --- +# A @FooConstraint method-validation constraint on a managed-bean method does +# not surface its violation message on the rendered page under TomEE's +# BVal/OpenWebBeans method-validation integration (the GlassFish reference +# runtime uses Hibernate Validator/Weld). +**/ee/jakarta/tck/faces/test/javaee7/cdimethodvalidation/cdimethodvalidation/MethodValidationIT.java#testCorrectUsage2 +**/ee/jakarta/tck/faces/test/javaee7/cdimethodvalidation/cdimethodvalidation/MethodValidationIT.java#testIncorrectUsage -# ExtensionlessMappingIT: 1 failing -**/org/javaee8/cdi/dynamic/bean/ExtensionlessMappingIT.java +# --- Mojarra ajax re-init under Chrome --- +# The ajax response re-executes the inline "Init called" script a different +# number of times than the TCK expects. The test source itself notes this as a +# Mojarra codebase issue that appears under Chrome and passes under HtmlUnit. +**/ee/jakarta/tck/faces/test/servlet30/ajax_selenium/Issue2162IT.java diff --git a/runner-standalone/faces/src/test/resources/tomee-remote-profile.xml b/runner-standalone/faces/src/test/resources/tomee-remote-profile.xml index a1110e9..e4a1e69 100644 --- a/runner-standalone/faces/src/test/resources/tomee-remote-profile.xml +++ b/runner-standalone/faces/src/test/resources/tomee-remote-profile.xml @@ -57,8 +57,14 @@ <build> <plugins> + <!-- The TCK's modern modules run every IT (and the signature test) + through the failsafe plugin, so the Arquillian remote container + configuration and its TomEE system properties must live in the + failsafe execution, not surefire; a surefire block never + reaches the integration-test fork and the adapter falls back to + its defaults (webprofile classifier, ephemeral working dir). --> <plugin> - <artifactId>maven-surefire-plugin</artifactId> + <artifactId>maven-failsafe-plugin</artifactId> <configuration> <systemPropertyVariables> <tomee.stopPort>-1</tomee.stopPort> @@ -71,6 +77,19 @@ was developed against. --> <tomee.classifier>plume</tomee.classifier> <tomee.properties>openejb.environment.default=true</tomee.properties> + <!-- The faces40/41 WARs bundle util-4.1.2.jar, whose + BaseITNG @Deployment method references ShrinkWrap + types (org.jboss.shrinkwrap.api.Archive) that the + WARs do not package. OpenWebBeans loads every + annotated class while scanning for CDI beans and + aborts the deployment with a + ClassNotFoundException where GlassFish/Weld + tolerates the unloadable type. Stage the ShrinkWrap + API the TCK's util module already resolves (1.2.6) + into the server so the scan succeeds. --> + <tomee.additionalLibs>mvn:org.jboss.shrinkwrap:shrinkwrap-api:1.2.6 +mvn:org.jboss.shrinkwrap:shrinkwrap-spi:1.2.6 +mvn:org.jboss.shrinkwrap:shrinkwrap-impl-base:1.2.6</tomee.additionalLibs> </systemPropertyVariables> </configuration> </plugin>
