Skip to content

[JENKINS-76345] [Coverage Plugin] recordCoverage() coudln't generate COBERTURA coverage report #658

@jenkins-infra-bot

Description

@jenkins-infra-bot

HI, There are IllegalArgumentException below when using recordCoverage() as a COBERTURA format

If the reference project of the test project has overloaded duplicate methods, coverage.cobertura.xml is generated, but the coverage plugin cannot interpret the duplicated methods with the same name.

 

Operating System 

master : Ubuntu
agent: Windows 10

 

Reproduction steps

3 overload methods(same project) test code(C#)

{{ex) public int Get(int a), public int Get(int a, int b, int c), public int Get(int a, int b, intc) }}

Jenkins PIpeline

{{ recordCoverage(tools: [[
parser: 'COBERTURA',
pattern: 'TestResults/**/coverage.cobertura.xml'
]])}}

 

Expected Results

 

{{[Coverage] Obtaining result action of reference build }}

[Coverage] Reference build recorder is not configured

[Coverage] -> Found no reference build

{{[Coverage] No quality gates have been set - skipping
[}}

Coverage] Executing source code painting...

[Coverage] Painting 1 source files on agent

[Coverage] -> finished painting (0 files have been painted, 1 files failed)

[Coverage] -> zipping sources from folder 'C:\Jenkins\workspace\Coverage_main\coverage' as 'C:\Jenkins\workspace\Coverage_main\coverage-sources.zip'

{{[Coverage] Copying painted sources from agent to build folder
[Coverage] -> extracting...}}

[Coverage] -> done

[Coverage] Deleting source code files of build #24

[Coverage] Finished coverage processing - adding the action to the build...

 

Actual Results

[Pipeline] recordCoverage
Error when executing success post condition:
Also:   hudson.remoting.Channel$CallSiteStackTrace: Remote call to BuildMachine
at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1916)
at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:384)
at hudson.remoting.Channel.call(Channel.java:1108)
at hudson.FilePath.act(FilePath.java:1204)
at hudson.FilePath.act(FilePath.java:1193)
at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageRecorder.recordCoverageResults(CoverageRecorder.java:498)
at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageRecorder.perform(CoverageRecorder.java:418)
at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageRecorder.perform(CoverageRecorder.java:408)
at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageStep$Execution.run(CoverageStep.java:369)
at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageStep$Execution.run(CoverageStep.java:337)
at PluginClassLoader for workflow-step-api//org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:49)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: f916fd79-264e-44f7-a244-e000200d0e73
java.lang.IllegalArgumentException: There is already the same child [METHOD] Enqueue(System.Byte[]) <0> with the name Enqueue(System.Byte[]) in [CLASS] xx.xx.xx <7, LINE: 0.00% (0/41)>
at PluginClassLoader for coverage//edu.hm.hafner.coverage.Node.addChild(Node.java:181)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.Node.addChildNode(Node.java:970)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.Node.createMethodNode(Node.java:924)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.createMethodNode(CoberturaParser.java:239)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.createNode(CoberturaParser.java:227)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.readClassOrMethod(CoberturaParser.java:169)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.readClassOrMethod(CoberturaParser.java:200)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.readPackage(CoberturaParser.java:137)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.readModule(CoberturaParser.java:116)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.parseReport(CoberturaParser.java:94)
at PluginClassLoader for coverage//edu.hm.hafner.coverage.CoverageParser.parse(CoverageParser.java:82)
at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageReportScanner.processFile(CoverageReportScanner.java:64)
at PluginClassLoader for plugin-util-api//io.jenkins.plugins.util.AgentFileVisitor.scanFiles(AgentFileVisitor.java:116)
at PluginClassLoader for plugin-util-api//io.jenkins.plugins.util.AgentFileVisitor.invoke(AgentFileVisitor.java:95)
at PluginClassLoader for plugin-util-api//io.jenkins.plugins.util.AgentFileVisitor.invoke(AgentFileVisitor.java:40)
at Jenkins v2.528.3//hudson.FilePath$FileCallableWrapper.call(FilePath.java:3590)
at hudson.remoting.UserRequest.perform(UserRequest.java:225)
at hudson.remoting.UserRequest.perform(UserRequest.java:50)
at hudson.remoting.Request$2.run(Request.java:391)
at hudson.remoting.InterceptingExecutorService.lambda$wrap$0(InterceptingExecutorService.java:81)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
 

coverage version

coverage:2.3060.v035a_5557cdb_c


Originally reported by volta2030, imported from: [Coverage Plugin] recordCoverage() coudln't generate COBERTURA coverage report
  • assignee: drulli
  • status: Open
  • priority: Major
  • component(s): coverage-plugin
  • resolution: Unresolved
  • votes: 0
  • watchers: 1
  • imported: 20260107-220949
Raw content of original issue

HI, There are IllegalArgumentException below when using recordCoverage() as a COBERTURA format

If the reference project of the test project has overloaded duplicate methods, coverage.cobertura.xml is generated, but the coverage plugin cannot interpret the duplicated methods with the same name.

 

Operating System 

master : Ubuntu agent: Windows 10

 

Reproduction steps

3 overload methods(same project) test code(C#)

{{ex) public int Get(int a), public int Get(int a, int b, int c), public int Get(int a, int b, intc) }}

Jenkins PIpeline

{{ recordCoverage(tools: [[ parser: 'COBERTURA', pattern: 'TestResults/**/coverage.cobertura.xml' ]])}}

 

Expected Results

 

{{[Coverage] Obtaining result action of reference build }}

[Coverage] Reference build recorder is not configured

[Coverage] -> Found no reference build

{{[Coverage] No quality gates have been set - skipping [}}

Coverage] Executing source code painting...

[Coverage] Painting 1 source files on agent

[Coverage] -> finished painting (0 files have been painted, 1 files failed)

[Coverage] -> zipping sources from folder 'C:\Jenkins\workspace\Coverage_main\coverage' as 'C:\Jenkins\workspace\Coverage_main\coverage-sources.zip'

{{[Coverage] Copying painted sources from agent to build folder [Coverage] -> extracting...}}

[Coverage] -> done

[Coverage] Deleting source code files of build #24

[Coverage] Finished coverage processing - adding the action to the build...

 

Actual Results

[Pipeline] recordCoverage Error when executing success post condition: Also:   hudson.remoting.Channel$CallSiteStackTrace: Remote call to BuildMachine at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1916) at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:384) at hudson.remoting.Channel.call(Channel.java:1108) at hudson.FilePath.act(FilePath.java:1204) at hudson.FilePath.act(FilePath.java:1193) at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageRecorder.recordCoverageResults(CoverageRecorder.java:498) at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageRecorder.perform(CoverageRecorder.java:418) at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageRecorder.perform(CoverageRecorder.java:408) at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageStep$Execution.run(CoverageStep.java:369) at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageStep$Execution.run(CoverageStep.java:337) at PluginClassLoader for workflow-step-api//org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:49) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.run(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: f916fd79-264e-44f7-a244-e000200d0e73 java.lang.IllegalArgumentException: There is already the same child [METHOD] Enqueue(System.Byte[]) <0> with the name Enqueue(System.Byte[]) in [CLASS] xx.xx.xx <7, LINE: 0.00% (0/41)> at PluginClassLoader for coverage//edu.hm.hafner.coverage.Node.addChild(Node.java:181) at PluginClassLoader for coverage//edu.hm.hafner.coverage.Node.addChildNode(Node.java:970) at PluginClassLoader for coverage//edu.hm.hafner.coverage.Node.createMethodNode(Node.java:924) at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.createMethodNode(CoberturaParser.java:239) at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.createNode(CoberturaParser.java:227) at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.readClassOrMethod(CoberturaParser.java:169) at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.readClassOrMethod(CoberturaParser.java:200) at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.readPackage(CoberturaParser.java:137) at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.readModule(CoberturaParser.java:116) at PluginClassLoader for coverage//edu.hm.hafner.coverage.parser.CoberturaParser.parseReport(CoberturaParser.java:94) at PluginClassLoader for coverage//edu.hm.hafner.coverage.CoverageParser.parse(CoverageParser.java:82) at PluginClassLoader for coverage//io.jenkins.plugins.coverage.metrics.steps.CoverageReportScanner.processFile(CoverageReportScanner.java:64) at PluginClassLoader for plugin-util-api//io.jenkins.plugins.util.AgentFileVisitor.scanFiles(AgentFileVisitor.java:116) at PluginClassLoader for plugin-util-api//io.jenkins.plugins.util.AgentFileVisitor.invoke(AgentFileVisitor.java:95) at PluginClassLoader for plugin-util-api//io.jenkins.plugins.util.AgentFileVisitor.invoke(AgentFileVisitor.java:40) at Jenkins v2.528.3//hudson.FilePath$FileCallableWrapper.call(FilePath.java:3590) at hudson.remoting.UserRequest.perform(UserRequest.java:225) at hudson.remoting.UserRequest.perform(UserRequest.java:50) at hudson.remoting.Request$2.run(Request.java:391) at hudson.remoting.InterceptingExecutorService.lambda$wrap$0(InterceptingExecutorService.java:81) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833)  

coverage version

coverage:2.3060.v035a_5557cdb_c

environment
Jenkins: 2.528.3
OS: Linux - 6.8.0-78-generic
Java: 21.0.9 - Eclipse Adoptium (OpenJDK 64-Bit Server VM)
---
Office-365-Connector:5.2.0
all-changes:1.5
ant:520.vd082ecfb_16a_9
antisamy-markup-formatter:173.v680e3a_b_69ff3
apache-httpcomponents-client-4-api:4.5.14-269.vfa_2321039a_83
apache-httpcomponents-client-5-api:5.6-183.ve5a_8a_b_e71e59
asm-api:9.9.1-189.vb_5ef2964da_91
authentication-tokens:1.144.v5ff4a_5ec5c33
badge:2.562.vc3c0b_6925377
batch-task:1.398.v550a_8e8ca_e5f
blueocean:1.27.25
blueocean-bitbucket-pipeline:1.27.25
blueocean-commons:1.27.25
blueocean-config:1.27.25
blueocean-core-js:1.27.25
blueocean-dashboard:1.27.25
blueocean-display-url:2.4.4
blueocean-events:1.27.25
blueocean-git-pipeline:1.27.25
blueocean-github-pipeline:1.27.25
blueocean-i18n:1.27.25
blueocean-jwt:1.27.25
blueocean-personalization:1.27.25
blueocean-pipeline-api-impl:1.27.25
blueocean-pipeline-editor:1.27.25
blueocean-pipeline-scm-api:1.27.25
blueocean-rest:1.27.25
blueocean-rest-impl:1.27.25
blueocean-web:1.27.25
bootstrap5-api:5.3.8-895.v4d0d8e47fea_d
bouncycastle-api:2.30.1.82-277.v70ca_0b_877184
branch-api:2.1268.v044a_87612da_8
build-failure-analyzer:2.6.1
build-timeout:1.38
build-user-vars-plugin:212.vd6b_e9f6d0cdb_
caffeine-api:3.2.3-194.v31a_b_f7a_b_5a_81
checks-api:373.vfe7645102093
cloudbees-bitbucket-branch-source:937.2.3
cloudbees-folder:6.1073.va_7888eb_dd514
command-launcher:123.v37cfdc92ef67
commons-collections4-api:4.5.0-8.va_d5448ef9011
commons-compress-api:1.28.0-2
commons-lang3-api:3.20.0-109.ve43756e2d2b_4
commons-text-api:1.15.0-210.v7480a_da_70b_9e
config-file-provider:1006.vc7366c201f57
configuration-as-code:2006.v001a_2ca_6b_574
coverage:2.3060.v035a_5557cdb_c
credentials:1453.v9b_a_29777a_b_fd
credentials-binding:702.vfe613e537e88
dark-theme:574.va_19f05d54df5
dashboard-view:2.543.vca_9da_3cb_9c60
data-tables-api:2.3.5-1497.v38449eb_7d5a_1
delivery-pipeline-plugin:1.4.2
disk-usage:1.3
display-url-api:2.217.va_6b_de84cc74b_
dotnet-sdk:1.4.0
durable-task:639.vefb_3d8372f6d
echarts-api:6.0.0-1165.vd1283a_3e37d4
eddsa-api:0.3.0.1-19.vc432d923e5ee
email-ext:1933.v45cec755423f
emoji-symbols-api:17.0-57.v8d44b_9a_b_d5ea_
extended-read-permission:68.vd270568a_7520
external-monitor-job:223.vb_fddcf42c9b_3
favorite:2.253.v9b_413168133b_
font-awesome-api:7.1.0-882.v1dfb_771e3278
forensics-api:3.1772.v99ca_3d83b_9fa_
git:5.8.1
git-changelog:3.45
git-client:6.5.0
git-server:137.ve0060b_432302
gitea:250.v76a_0b_d4fef5b_
gitea-checks:602.615.veed470de4039
github:1.45.0
github-api:1.330-492.v3941a_032db_2a_
github-branch-source:1917.v9ee8a_39b_3d0d
gradle:2.18.1203.v2c96b_1243c72
groovy:497.v7b_061a_a_de65d
gson-api:2.13.2-173.va_a_092315913c
handy-uri-templates-2-api:2.1.8-38.vcea_5d521d5f3
htmlpublisher:427
http_request:1.24
hudson-wsclean-plugin:1.0.8
instance-identity:203.v15e81a_1b_7a_38
ionicons-api:94.vcc3065403257
jackson2-api:2.20.1-423.v13951f6b_6532
jakarta-activation-api:2.1.4-1
jakarta-mail-api:2.1.5-1
jakarta-xml-bind-api:4.0.6-10.v9b_7e1d1fc40b_
javax-activation-api:1.2.0-8
javax-mail-api:1.6.2-11
jaxb:2.3.9-133.vb_ec76a_73f706
jdk-tool:83.v417146707a_3d
jenkins-design-language:1.27.25
jjwt-api:0.11.5-120.v0268cf544b_89
jobConfigHistory:1356.ve360da_6c523a_
joda-time-api:2.14.0-149.v1c3ce991d1b_9
jquery:1.12.4-3
jquery3-api:3.7.1-619.vdb_10e002501a_
jsch:0.2.16-95.v3eecb_55fa_b_78
json-api:20251224-185.v0cc18490c62c
json-path-api:2.10.0-202.va_9cc16c1e476
jsoup:1.21.2-66.v6ea_38164b_8a_2
junit:1369.v15da_00283f06
kubernetes:4398.vb_b_33d9e7fe23
kubernetes-client-api:7.3.1-256.v788a_0b_787114
kubernetes-credentials:206.vde31a_b_0f71a_c
ldap:793.v754d6b_41b_ea_4
log-parser:2.5.0
login-theme:284.v95044396a_484
mailer:525.v2458b_d8a_1a_71
mapdb-api:1.0.9-44.va_1e1310c9118
matrix-auth:3.2.9
matrix-project:870.v9db_fcfc2f45b_
metrics:4.2.37-489.vb_6db_69b_ce753
mina-sshd-api-common:2.16.0-167.va_269f38cc024
mina-sshd-api-core:2.16.0-167.va_269f38cc024
msbuild:1.37
multibranch-scan-webhook-trigger:1.0.11
next-build-number:66.v4b_4762172d53
nodejs:1.6.6
nuget:1.1
okhttp-api:4.12.0-195.vc02552c04ffd
pam-auth:1.12
parameterized-trigger:873.v8b_e37dd8418f
performance:1003.v150ec0e4cf65
pipeline-build-step:571.v08a_fffd4b_0ce
pipeline-github-lib:65.v203688e7727e
pipeline-graph-analysis:245.v88f03631a_b_21
pipeline-graph-view:661.v6003f4542123
pipeline-groovy-lib:787.ve2fef0efdca_6
pipeline-input-step:540.v14b_100d754dd
pipeline-milestone-step:138.v78ca_76831a_43
pipeline-model-api:2.2277.v00573e73ddf1
pipeline-model-definition:2.2277.v00573e73ddf1
pipeline-model-extensions:2.2277.v00573e73ddf1
pipeline-rest-api:2.38
pipeline-stage-step:322.vecffa_99f371c
pipeline-stage-tags-metadata:2.2277.v00573e73ddf1
pipeline-stage-view:2.38
pipeline-utility-steps:2.20.0
plain-credentials:199.v9f8e1f741799
plugin-util-api:6.1192.v30fe6e2837ff
powershell:2.3
prism-api:1.30.0-630.va_e19d17f83b_0
publish-over:0.22
publish-over-ssh:390.vb_f56e7405751
pubsub-light:1.19
resource-disposer:0.25
role-strategy:848.va_a_ea_673cf0b_c
saferestart:102.v4dc1b_9636a_ee
scm-api:724.v7d839074eb_5c
script-security:1385.v7d2d9ec4d909
scriptler:432.v872ed6cd6d5b_
snakeyaml-api:2.5-143.v93b_c004f89de
sse-gateway:1.28
ssh-agent:386.v36cc0c7582f0
ssh-credentials:361.vb_f6760818e8c
ssh-slaves:3.1085.vc64d040efa_85
sshd:3.374.v19b_d59ce6610
structs:362.va_b_695ef4fdf9
subversion:1292.ve8cf25770ee3
theme-manager:327.v780d7096ec29
thinBackup:2.1.3
timestamper:1.30
token-macro:477.vd4f0dc3cb_cf1
trilead-api:2.284.v1974ea_324382
variant:70.va_d9f17f859e0
workflow-aggregator:608.v67378e9d3db_1
workflow-api:1384.vdc05a_48f535f
workflow-basic-steps:1098.v808b_fd7f8cf4
workflow-cps:4238.va_6fb_65c1f699
workflow-durable-task-step:1464.v2d3f5c68f84c
workflow-job:1559.va_a_533730b_ea_d
workflow-multibranch:821.vc3b_4ea_780798
workflow-scm-step:466.va_d69e602552b_
workflow-step-api:710.v3e456cc85233
workflow-support:1010.vb_b_39488a_9841
ws-cleanup:0.49

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions