Ferenc Erdelyi created HADOOP-19948:
---------------------------------------

             Summary: Prevent modules from silently dropping JaCoCo 
instrumentation by centralizing the Surefire/Failsafe argLine
                 Key: HADOOP-19948
                 URL: https://issues.apache.org/jira/browse/HADOOP-19948
             Project: Hadoop Common
          Issue Type: Improvement
          Components: build
    Affects Versions: 3.6.0
            Reporter: Ferenc Erdelyi


JaCoCo coverage (introduced in HADOOP-15190) injects its agent by having the 
shared Surefire/Failsafe configuration in {{hadoop-project/pom.xml}} end its 
{{<argLine>}} with the late-bound {{@{argLine}}} token, which 
{{jacoco:prepare-agent}} substitutes with the {{-javaagent}} option at test 
time.

The problem is that a module-level {{<argLine>}} fully replaces the inherited 
one. Any module that overrides {{<argLine>}} (there are ~21 today) must 
remember to re-append {{@{argLine}}}; if it doesn't, the JaCoCo agent is never 
attached to that module's forked test JVMs. Its tests still pass, so nothing 
fails the build — the module simply contributes empty coverage to the aggregate 
report, silently. This is easy to introduce with any new or updated module and 
impossible to notice without inspecting the report.

Proposal: remove the footgun by no longer overriding {{<argLine>}} in 
individual modules. Define the shared Surefire/Failsafe {{<argLine>}} once (in 
{{hadoop-project/pom.xml}}) so it always contains {{@{argLine}}}, and expose a 
property (e.g. {{surefire.module.argLine}}, empty by default) for the extra 
per-module JVM arguments:

{code:xml}
<!-- shared, in hadoop-project/pom.xml -->
<argLine>@{argLine} ${maven-surefire-plugin.argLine} 
${surefire.module.argLine}</argLine>
{code}

Modules that today do {{<argLine>${maven-surefire-plugin.argLine} @{argLine} 
-Xmx2048m</argLine>}} would instead set only:

{code:xml}
<surefire.module.argLine>-Xmx2048m</surefire.module.argLine>
{code}

With this, {{@{argLine}}} is guaranteed present for every module and can never 
be dropped, eliminating the entire class of silent coverage gaps.

Scope:
- Refactor the ~21 modules that currently override Surefire/Failsafe 
{{<argLine>}} to set the new property instead.
- Update the shared configuration accordingly.

Acceptance criteria:
- No module declares its own {{<argLine>}} for Surefire/Failsafe (can be 
enforced by the coverage drift-guard added in HADOOP-15190).
- A full coverage build ({{mvn verify -Djacoco.skip=false ...}}) instruments 
and reports coverage for every test-bearing module, with none silently empty 
due to a missing agent.

Relates to: HADOOP-15190. A lighter-weight static guard (failing the build when 
an {{<argLine>}} override lacks {{@{argLine}}}) can catch the mistake, but this 
issue removes the ability to make it at all.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to