Skip to content

Commit 751d983

Browse files
authored
Merge pull request #1184 from utPLSQL/feature/ignore_coverage_failure_1097
Gather coverage on code calling DBMS_STATS.
2 parents 08bb27b + 9912dfa commit 751d983

File tree

6 files changed

+86
-2
lines changed

6 files changed

+86
-2
lines changed

source/core/coverage/ut_coverage_helper_block.pkb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ create or replace package body ut_coverage_helper_block is
3939
$else
4040
null;
4141
$end
42+
exception
43+
when others then
44+
if sqlcode = -08402 then
45+
dbms_output.put_line('Unable to finish gathering coverage with DBMS_PLSQL_CODE_COVERAGE. ');
46+
dbms_output.put_line('Encountered exception `ORA-08402` when calling procedure `DBMS_PLSQL_CODE_COVERAGE.STOP_COVERAGE()`.');
47+
dbms_output.put_line('Coverage report will only include line-level code-coverage (without branches).');
48+
dbms_output.put_line('Please reference following issue for details on possible causes: https://github.com/utPLSQL/utPLSQL/issues/1097 ');
49+
end if;
4250
end;
4351

4452
function block_results(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return t_block_rows is

source/core/ut_utils.pkb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -787,9 +787,9 @@ create or replace package body ut_utils is
787787

788788
/**
789789
* Change string into unicode to match xmlgen format _00<unicode>_
790+
* See the section of Oracle documentation called: Escape of Characters in Generated XML Data
790791
* https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adxdb/generation-of-XML-data-from-relational-data.html#GUID-5BE09A7D-80D8-4734-B9AF-4A61F27FA9B2
791-
* secion v3.1.12.3796-develop
792-
*/
792+
*/
793793
function char_to_xmlgen_unicode(a_character varchar2) return varchar2 is
794794
begin
795795
return '_x00'||rawtohex(utl_raw.cast_to_raw(a_character))||'_';

test/ut3_tester_helper/coverage_helper.pkb

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,50 @@ create or replace package body coverage_helper is
123123
begin execute immediate q'[drop package ut3_develop.test_dummy_coverage_1]'; exception when others then null; end;
124124
end;
125125

126+
procedure create_cov_with_dbms_stats is
127+
pragma autonomous_transaction;
128+
begin
129+
execute immediate q'[create table ut3_develop.table_to_test_stats as select * from user_objects]';
130+
131+
execute immediate q'[create or replace package ut3_develop.stats is
132+
procedure gather;
133+
end;]';
134+
135+
execute immediate q'[create or replace package body ut3_develop.stats is
136+
procedure gather is
137+
begin
138+
dbms_Stats.gather_table_stats('UT3_DEVELOP','TABLE_TO_TEST_STATS');
139+
end;
140+
end;]';
141+
142+
execute immediate q'[create or replace package ut3_develop.test_stats is
143+
--%suite(stats gathering coverage test)
144+
--%suitepath(coverage_testing)
145+
146+
--%test
147+
procedure test_stats_gather;
148+
149+
end;]';
150+
151+
execute immediate q'[create or replace package body ut3_develop.test_stats is
152+
procedure test_stats_gather is
153+
begin
154+
stats.gather;
155+
ut.expect(1).to_equal(1);
156+
end;
157+
end;]';
158+
159+
end;
160+
161+
procedure drop_cov_with_dbms_stats is
162+
pragma autonomous_transaction;
163+
begin
164+
begin execute immediate q'[drop package ut3_develop.test_stats]'; exception when others then null; end;
165+
begin execute immediate q'[drop package ut3_develop.stats]'; exception when others then null; end;
166+
begin execute immediate q'[drop table ut3_develop.table_to_test_stats]'; exception when others then null; end;
167+
end;
168+
169+
126170
procedure run_standalone_coverage(a_coverage_run_id raw, a_input integer) is
127171
begin
128172
ut3_develop.ut_runner.coverage_start(a_coverage_run_id);

test/ut3_tester_helper/coverage_helper.pks

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ create or replace package coverage_helper is
1414
procedure create_dummy_coverage_1;
1515
procedure drop_dummy_coverage_1;
1616

17+
procedure create_cov_with_dbms_stats;
18+
procedure drop_cov_with_dbms_stats;
19+
1720
procedure run_standalone_coverage(a_coverage_run_id raw, a_input integer);
1821
procedure run_coverage_job(a_coverage_run_id raw, a_input integer);
1922

test/ut3_user/reporters/test_coverage/test_extended_coverage.pkb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,28 @@ create or replace package body test_extended_coverage is
8383
ut.expect(l_actual).to_be_like(l_expected);
8484
end;
8585

86+
procedure coverage_with_dbms_stats is
87+
l_expected clob;
88+
l_actual clob;
89+
begin
90+
--Arrange
91+
l_expected := '%<file path="package body ut3_develop.stats">' ||
92+
'%<lineToCover lineNumber="4" covered="true"/>%';
93+
--Act
94+
l_actual :=
95+
ut3_tester_helper.coverage_helper.run_tests_as_job(
96+
q'[
97+
ut3_develop.ut.run(
98+
a_path => 'ut3_develop.test_stats',
99+
a_reporter=> ut3_develop.ut_coverage_sonar_reporter( ),
100+
a_coverage_schemes => ut3_develop.ut_varchar2_list( 'ut3_develop' ),
101+
a_include_objects => ut3_develop.ut_varchar2_list('stats')
102+
)
103+
]'
104+
);
105+
--Assert
106+
ut.expect(l_actual).to_be_like(l_expected);
107+
end;
108+
86109
end;
87110
/

test/ut3_user/reporters/test_coverage/test_extended_coverage.pks

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ create or replace package test_extended_coverage is
1111

1212
--%test(Coverage is gathered for specified file - extended coverage type)
1313
procedure coverage_for_file;
14+
15+
--%beforetest(ut3_tester_helper.coverage_helper.create_cov_with_dbms_stats)
16+
--%aftertest(ut3_tester_helper.coverage_helper.drop_cov_with_dbms_stats)
17+
--%tags(#1097,#1094)
18+
--%test(Extended coverage does not fail the test run then tested code calls DBMS_STATS)
19+
procedure coverage_with_dbms_stats;
1420

1521
end;
1622
/

0 commit comments

Comments
 (0)