8000 Test execution data of utPLSQL project not showing on SonarCloud · Issue #1198 · utPLSQL/utPLSQL · GitHub
[go: up one dir, main page]

Skip to content
Test execution data of utPLSQL project not showing on SonarCloud #1198
Closed
@felipebz

Description

@felipebz

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:

image

And how it should look like:

image

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):

time utPLSQL-cli/bin/utplsql run ${UT3_TESTER_HELPER}/${UT3_TESTER_HELPER_PASSWORD}@${CONNECTION_STR} \
-source_path=source -owner=ut3_develop \
-p='ut3_tester,ut3$user#' \
-test_path=test -c \
-f=ut_coverage_sonar_reporter -o=coverage.xml \

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:

l_object_owner := coalesce(
upper(a_object_owner),
upper(regexp_substr(l_file_path, l_regex_pattern, 1, 1, 'i', l_object_owner_subexpression)),
sys_context('USERENV', 'CURRENT_SCHEMA'));

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?

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0