Description
Recently I saw this comment saying that the unit test data isn't showing on your SonarCloud project, then I decided to investigate this issue further and I would like to discuss what's the best way to fix it.
Just for reference, this is how the SonarCloud panel looks like now:
And how it should look like:
I saw that the utplsql-cli
is executed using the user ut3_test_helper
, but the unit tests are being compiled on users ut3_tester
and ut3$user#
and the option -owner
for the test files is being omitted (line 10):
Lines 7 to 11 in b4d72e3
When this option is omitted and there's no other mapping rule to identify the owner of a file by its path, the ut_file_mapper
package assumes that the owner is the user running the tests, which is the user ut3_test_helper
:
utPLSQL/source/core/ut_file_mapper.pkb
Lines 102 to 105 in b4d72e3
But actually the ut3_test_helper
doesn't own any unit test and, as result, the test_results.xml
file generated by ut_sonar_test_reporter
doesn't contain any file path. This is the reason that the unit test data isn't being uploaded to SonarCloud.
The log of the "SonarCloud Scan" step on the GitHub Actions (example) also shows this, because the files aren't mapped correctly:
INFO: Test execution data ignored for 55 unknown files, including:
utplsql.ut3_tester.core.test_ut_utils
utplsql.ut3_tester.core.test_ut_test
(....)
One way I found to fix this issue without any changes to the utPLSQL code is executing the utplsql-cli
twice, one for each schema, like:
utPLSQL-cli/bin/utplsql run ${UT3_TESTER_HELPER} (...) -p='ut3_tester' -test_path=test -owner='ut3_tester'
utPLSQL-cli/bin/utplsql run ${UT3_TESTER_HELPER} (...) -p='ut3$user#' -test_path=test -owner='ut3$user#'
But this would required some other changes to the build pipeline because the generated reports would also be duplicated.
Another alternative, that makes more sense to me, is to not assume any default value for the file owner on ut_file_mapper
and change the ut_file_mapping
usages (example) to compare the owner only if it's present. With this change, if there's no owner defined on the object-to-file mapping rules, the code will compare only the object name and object type to find the corresponding file, which should be good enough for most situations.
What do you folks think about it?