tomasbjerre / violations-lib

Java library for parsing report files from static code analysis.
Apache License 2.0
148 stars 39 forks source link

Gracefully allow tosca generated incomplete input files #114

Closed carstenartur closed 4 years ago

carstenartur commented 4 years ago

The output generated by Tricentis Tosca is not complete. It is missing the classname. You find an example at https://www.infometis.ch/smarter-reporting-jenkins-execution/

Something like this:

<?xml version="1.0" encoding="utf-8"?>

At the moment I see an error trying to use the jenkins warnings plugin on tosca files: " at se.bjurr.violations.lib.util.ViolationParserUtils.getAttribute(ViolationParserUtils.java:81) at se.bjurr.violations.lib.parsers.JUnitParser.parseReportOutput(JUnitParser.java:42) at edu.hm.hafner.analysis.parser.violations.AbstractViolationAdapter.parse(AbstractViolationAdapter.java:35) at edu.hm.hafner.analysis.parser.violations.JUnitAdapter.parse(JUnitAdapter.java:34) at io.jenkins.plugins.analysis.core.model.FilesScanner.aggregateIssuesOfFile(FilesScanner.java:105) at io.jenkins.plugins.analysis.core.model.FilesScanner.scanFiles(FilesScanner.java:89) at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:72) at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:30) at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3122) at hudson.remoting.UserRequest.perform(UserRequest.java:211) at hudson.remoting.UserRequest.perform(UserRequest.java:54) at hudson.remoting.Request$2.run(Request.java:375) at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:73) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:118) at java.lang.Thread.run(Thread.java:748) [JUnit] [-ERROR-] at se.bjurr.violations.lib.util.ViolationParserUtils.getAttribute(ViolationParserUtils.java:81) [JUnit] [-ERROR-] at se.bjurr.violations.lib.parsers.JUnitParser.parseReportOutput(JUnitParser.java:42) [JUnit] [-ERROR-] at edu.hm.hafner.analysis.parser.violations.AbstractViolationAdapter.parse(AbstractViolationAdapter.java:35) [JUnit] [-ERROR-] at edu.hm.hafner.analysis.parser.violations.JUnitAdapter.parse(JUnitAdapter.java:34) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.aggregateIssuesOfFile(FilesScanner.java:105) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.scanFiles(FilesScanner.java:89) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:72) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:30) [JUnit] [-ERROR-] at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3122) [JUnit] [-ERROR-] at hudson.remoting.UserRequest.perform(UserRequest.java:211) [JUnit] [-ERROR-] at hudson.remoting.UserRequest.perform(UserRequest.java:54) [JUnit] [-ERROR-] at hudson.remoting.Request$2.run(Request.java:375) [JUnit] [-ERROR-] at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:73) [JUnit] [-ERROR-] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [JUnit] [-ERROR-] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [JUnit] [-ERROR-] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [JUnit] [-ERROR-] at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:118) [JUnit] [-ERROR-] at java.lang.Thread.run(Thread.java:748) [JUnit] [-ERROR-] at edu.hm.hafner.analysis.parser.violations.AbstractViolationAdapter.parse(AbstractViolationAdapter.java:40) [JUnit] [-ERROR-] at edu.hm.hafner.analysis.parser.violations.JUnitAdapter.parse(JUnitAdapter.java:34) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.aggregateIssuesOfFile(FilesScanner.java:105) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.scanFiles(FilesScanner.java:89) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:72) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:30) [JUnit] [-ERROR-] at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3122) [JUnit] [-ERROR-] at hudson.remoting.UserRequest.perform(UserRequest.java:211) [JUnit] [-ERROR-] at hudson.remoting.UserRequest.perform(UserRequest.java:54) [JUnit] [-ERROR-] at hudson.remoting.Request$2.run(Request.java:375) [JUnit] [-ERROR-] at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:73) [JUnit] [-ERROR-] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [JUnit] [-ERROR-] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [JUnit] [-ERROR-] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [JUnit] [-ERROR-] at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:118) [JUnit] [-ERROR-] at java.lang.Thread.run(Thread.java:748)
tomasbjerre commented 4 years ago

Looks like it is not latest version. Also, attach report file when reporting a bug.

carstenartur commented 4 years ago

Not sure what you mean, its jenkins 2.263. That is the latest jenkins version - maybe it does not include the latest violations-lib? Does this mean the slightly different tosca junit result file format is supposed to be supported?

tomasbjerre commented 4 years ago

Update the Warnings plugin. It uses this library. The stacktrace looks like you are using the Warnings plugin in Jenkins.

carstenartur commented 4 years ago

You mean I should checkout the Warnings plugin on github and modify it to use the latest version of the library? I already use the latest jenkins together with latest plugins... Here a slightly bigger section from the failing jenkins build

[Pipeline] // stage [Pipeline] stage [Pipeline] { (Results) [Pipeline] recordIssues [JUnit] [-ERROR-] Parsing of file 'C:\Jenkins\workspace\toscapipeline\result.xml' failed due to an exception: [JUnit] [-ERROR-] java.lang.RuntimeException: "classname" not found in "

- Failed TC_HomePage_01 {LogInfo='Execution will be continued with the next TestCase, because there was an error in the current TestCase.'} - Failed RibbonMenu {LogInfo='No matching tab was found.'}
</testcase>"

[JUnit] [-ERROR-] at se.bjurr.violations.lib.util.ViolationParserUtils.getAttribute(ViolationParserUtils.java:81) [JUnit] [-ERROR-] at se.bjurr.violations.lib.parsers.JUnitParser.parseReportOutput(JUnitParser.java:42) [JUnit] [-ERROR-] at edu.hm.hafner.analysis.parser.violations.AbstractViolationAdapter.parse(AbstractViolationAdapter.java:35) [JUnit] [-ERROR-] [wrapped] edu.hm.hafner.analysis.ParsingException: Exception occurred during parsing RuntimeException: "classname" not found in "

- Failed TC_HomePage_01 {LogInfo='Execution will be continued with the next TestCase, because there was an error in the current TestCase.'} - Failed RibbonMenu {LogInfo='No matching tab was found.'}
</testcase>"

java.lang.RuntimeException: "classname" not found in "

- Failed TC_HomePage_01 {LogInfo='Execution will be continued with the next TestCase, because there was an error in the current TestCase.'} - Failed RibbonMenu {LogInfo='No matching tab was found.'}
</testcase>"
at se.bjurr.violations.lib.util.ViolationParserUtils.getAttribute(ViolationParserUtils.java:81)
at se.bjurr.violations.lib.parsers.JUnitParser.parseReportOutput(JUnitParser.java:42)
at edu.hm.hafner.analysis.parser.violations.AbstractViolationAdapter.parse(AbstractViolationAdapter.java:35)
at edu.hm.hafner.analysis.parser.violations.JUnitAdapter.parse(JUnitAdapter.java:34)
at io.jenkins.plugins.analysis.core.model.FilesScanner.aggregateIssuesOfFile(FilesScanner.java:105)
at io.jenkins.plugins.analysis.core.model.FilesScanner.scanFiles(FilesScanner.java:89)
at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:72)
at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:30)
at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3122)
at hudson.remoting.UserRequest.perform(UserRequest.java:211)
at hudson.remoting.UserRequest.perform(UserRequest.java:54)
at hudson.remoting.Request$2.run(Request.java:375)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:73)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:118)
at java.lang.Thread.run(Thread.java:748)

[JUnit] [-ERROR-] at se.bjurr.violations.lib.util.ViolationParserUtils.getAttribute(ViolationParserUtils.java:81) [JUnit] [-ERROR-] at se.bjurr.violations.lib.parsers.JUnitParser.parseReportOutput(JUnitParser.java:42) [JUnit] [-ERROR-] at edu.hm.hafner.analysis.parser.violations.AbstractViolationAdapter.parse(AbstractViolationAdapter.java:35) [JUnit] [-ERROR-] at edu.hm.hafner.analysis.parser.violations.JUnitAdapter.parse(JUnitAdapter.java:34) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.aggregateIssuesOfFile(FilesScanner.java:105) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.scanFiles(FilesScanner.java:89) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:72) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:30) [JUnit] [-ERROR-] at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3122) [JUnit] [-ERROR-] at hudson.remoting.UserRequest.perform(UserRequest.java:211) [JUnit] [-ERROR-] at hudson.remoting.UserRequest.perform(UserRequest.java:54) [JUnit] [-ERROR-] at hudson.remoting.Request$2.run(Request.java:375) [JUnit] [-ERROR-] at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:73) [JUnit] [-ERROR-] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [JUnit] [-ERROR-] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [JUnit] [-ERROR-] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [JUnit] [-ERROR-] at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:118) [JUnit] [-ERROR-] at java.lang.Thread.run(Thread.java:748) [JUnit] [-ERROR-] at edu.hm.hafner.analysis.parser.violations.AbstractViolationAdapter.parse(AbstractViolationAdapter.java:40) [JUnit] [-ERROR-] at edu.hm.hafner.analysis.parser.violations.JUnitAdapter.parse(JUnitAdapter.java:34) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.aggregateIssuesOfFile(FilesScanner.java:105) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.scanFiles(FilesScanner.java:89) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:72) [JUnit] [-ERROR-] at io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:30) [JUnit] [-ERROR-] at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3122) [JUnit] [-ERROR-] at hudson.remoting.UserRequest.perform(UserRequest.java:211) [JUnit] [-ERROR-] at hudson.remoting.UserRequest.perform(UserRequest.java:54) [JUnit] [-ERROR-] at hudson.remoting.Request$2.run(Request.java:375) [JUnit] [-ERROR-] at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:73) [JUnit] [-ERROR-] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [JUnit] [-ERROR-] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [JUnit] [-ERROR-] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [JUnit] [-ERROR-] at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:118) [JUnit] [-ERROR-] at java.lang.Thread.run(Thread.java:748) [JUnit] Searching for all files in 'C:\Jenkins\workspace\toscapipeline' that match the pattern '**/result.xml' [JUnit] -> found 1 file

tomasbjerre commented 4 years ago

You can open a bug on the plugin in Jenkins.

The stacktrace shows this is not the latest version of this libary, no such exception is thrown here: https://github.com/tomasbjerre/violations-lib/blob/master/src/main/java/se/bjurr/violations/lib/util/ViolationParserUtils.java#L81

If you want to file a bug on this library, you need to supploy the report-file you are trying to parse.

carstenartur commented 4 years ago

I already added a transcript of such a report-file in the first comment here. Unfortunately it is only visible when you edit the entry because github seems to suppress xml content. But the link in the first comment points to a page that contains such a content. I repeat it here: https://www.infometis.ch/smarter-reporting-jenkins-execution/ However, I can imagine that supporting tricentis tosca is not necessarily something that a free library is in charge of. So thanks so far for the information!