Sonar not showing number of unit tests from cpputest

Hello,

  • we’re using (SonarQube(Developer Edition Version 9.5 (build 56709)), SonarScanner 4.7.0.2747),
    C code and cpputest generates junit format xml’s.

  • we’re trying to achieve a display number of unit tests executed

  • we’ve tried setting path of junit xml’s location “sonar.junit.reportPaths=build/junit_reports/” or “sonar.junit.reportPaths=build/junit_reports/**/cpputest_*.xml”, reports are generated and gitlab picks loads them successfully, tested in MR also after merging to main branch still not working.
    image

  • is it not possible to display number of tests or is something possible wrong with the configuration?

Hi,

Welcome to the community!

Per the docs, to get stats about the tests themselves (versus their coverage) you need to be passing in a test execution report, using the sonar.cfamily.cppunit.reportsPath parameter.

 
HTH,
Ann

Hi,
Thank you for answer, but as I said we have junit reports from cpputest, when using sonar.cfamily.cppunit.reportsPath parsing fails:

05:53:05.070 INFO: Sensor cppunit [cpp]

05:53:05.071 INFO: Parsing /workspaces/project/build/junit_reports/cpputest_HexUtilities.xml

05:53:05.089 INFO: ------------------------------------------------------------------------

05:53:05.089 INFO: EXECUTION FAILURE

Hi,

Can you provide the full analysis log?

 
Ann

how can i send logs privately?

Hi,

Feel free to redact sensitive values as necessary.

 
Ann

Sorry, i can only send log privately

Hi,

Can you at least provide the full error & stacktrace?

 
Ann

Hi,
when i set option “sonar.cfamily.cppunit.reportsPath=build/junit_reports/” as you suggested, I get error because I believe suggested option requires cppunit reports.
But instead we have junit report generated by cpputest.
Is it possible that sonar would accept junit test execution reports for C/C++ analysis?
If you want full log I can share it only privately, for example other topics where people shared logs privately Sonar CFamily Cache Misses ‘Dependencies Changed’ - SonarQube - Sonar Community (sonarsource.com), Std::vector initialization problem (cpp:S5523) - Clean Code / Report False-positive / False-negative… - Sonar Community (sonarsource.com)

error trace:

08:04:14.865 ERROR: Error during SonarScanner execution
com.sonar.cpp.plugin.visualstudio.XmlParserHelper$ParseErrorException: Missing root element <TestRun> in /workspaces/project/build/junit_reports/cpputest_HexUtilities.xml at line 2
        at com.sonar.cpp.plugin.visualstudio.XmlParserHelper.parseError(XmlParserHelper.java:125)
        at com.sonar.cpp.plugin.visualstudio.XmlParserHelper.checkRootTag(XmlParserHelper.java:43)
        at com.sonar.cpp.plugin.cppunit.CppunitXmlParser.checkRootTag(CppunitXmlParser.java:28)
        at com.sonar.cpp.plugin.cppunit.CppunitXmlParser.parse(CppunitXmlParser.java:22)
        at com.sonar.cpp.plugin.cppunit.CppunitSensor.lambda$execute$1(CppunitSensor.java:54)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
        at java.base/java.util.Iterator.forEachRemaining(Unknown Source)
        at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
        at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
        at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
        at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
        at com.sonar.cpp.plugin.cppunit.CppunitSensor.scan(CppunitSensor.java:87)
        at com.sonar.cpp.plugin.cppunit.CppunitSensor.execute(CppunitSensor.java:52)
        at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:64)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:85)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:59)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:59)
        at org.sonar.scanner.scan.SpringModuleScanContainer.doAfterStart(SpringModuleScanContainer.java:81)
        at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
        at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
        at org.sonar.scanner.scan.SpringProjectScanContainer.scan(SpringProjectScanContainer.java:392)
        at org.sonar.scanner.scan.SpringProjectScanContainer.scanRecursively(SpringProjectScanContainer.java:388)
        at org.sonar.scanner.scan.SpringProjectScanContainer.doAfterStart(SpringProjectScanContainer.java:357)
        at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
        at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
        at org.sonar.scanner.bootstrap.SpringGlobalContainer.doAfterStart(SpringGlobalContainer.java:135)
        at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
        at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
        at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:72)
        at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:66)
        at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
        at com.sun.proxy.$Proxy0.execute(Unknown Source)
        at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
        at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
        at org.sonarsource.scanner.cli.Main.execute(Main.java:112)
        at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
        at org.sonarsource.scanner.cli.Main.main(Main.java:61)

Hi,

Thanks for the stacktrace.

Per the docs the only options are CPPUnit reports, passed via sonar.cfamily.cppunit.reportsPath or the generic test data format, passed via sonar.testExecutionReportPaths.

 
HTH,
Ann

Hi,
Thanks for the answers, we managed to convert junit reports to generic test data format, used GitHub - RedPaladin/sonar_test_report_converter: Script to convert Junit/Google Test report fo Sonar Generic Test Report for reference and configured generated XML to sonar.testExecutionReportPaths.

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.