Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4eec03e

Browse files
committed
Update to code to address sql injection concerns.
Dealing with precedence. Adding some more tests.
1 parent 7b9e085 commit 4eec03e

5 files changed

Lines changed: 123 additions & 77 deletions

File tree

source/core/coverage/ut_coverage.pkb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ create or replace package body ut_coverage is
133133
end if;
134134

135135
if a_coverage_options.exclude_object_expr is not null then
136-
l_regex_exc_filters := l_regex_exc_filters||q'[ and not regexp_like(s.name,:a_exclude_obj_expr:,'i')]';
136+
l_regex_exc_filters := l_regex_exc_filters||q'[ and not regexp_like(s.name,:a_exclude_obj_expr,'i')]';
137137
else
138138
l_regex_exc_filters := l_regex_exc_filters||'and :a_exclude_obj_expr is null ';
139139
end if;
@@ -147,7 +147,7 @@ create or replace package body ut_coverage is
147147
l_result := replace(l_result, '{mappings_cardinality}', l_mappings_cardinality);
148148
l_result := replace(l_result, '{skipped_objects_cardinality}', ut_utils.scale_cardinality(cardinality(a_skip_objects)));
149149
l_result := replace(l_result, '{regex_exc_filters}', l_regex_exc_filters);
150-
150+
151151
return l_result;
152152

153153
end;
@@ -159,7 +159,11 @@ create or replace package body ut_coverage is
159159
begin
160160
if not is_develop_mode() then
161161
--skip all the utplsql framework objects and all the unit test packages that could potentially be reported by coverage.
162-
l_skip_objects := ut_utils.get_utplsql_objects_list() multiset union all coalesce(a_coverage_options.exclude_objects, ut_object_names());
162+
l_skip_objects := coalesce(ut_utils.get_utplsql_objects_list(),ut_object_names());
163+
--Regex exclusion override the standard exclusion objects.
164+
if a_coverage_options.exclude_schema_expr is null and a_coverage_options.exclude_object_expr is null then
165+
l_skip_objects := l_skip_objects multiset union all coalesce(a_coverage_options.exclude_objects, ut_object_names());
166+
end if;
163167
end if;
164168

165169
l_sql := get_cov_sources_sql(a_coverage_options, l_skip_objects);
@@ -168,12 +172,12 @@ create or replace package body ut_coverage is
168172

169173
if a_coverage_options.file_mappings is not empty then
170174
open l_cursor for l_sql using a_coverage_options.file_mappings,a_coverage_options.exclude_schema_expr,a_coverage_options.exclude_object_expr,l_skip_objects;
171-
elsif a_coverage_options.include_objects is not empty then
172-
open l_cursor for l_sql using a_coverage_options.include_objects,a_coverage_options.exclude_schema_expr,a_coverage_options.exclude_object_expr,l_skip_objects;
173175
elsif a_coverage_options.include_schema_expr is not null or a_coverage_options.include_object_expr is not null then
174176
open l_cursor for l_sql using a_coverage_options.include_schema_expr,a_coverage_options.include_object_expr,
175177
a_coverage_options.exclude_schema_expr,a_coverage_options.exclude_object_expr,
176178
l_skip_objects;
179+
elsif a_coverage_options.include_objects is not empty then
180+
open l_cursor for l_sql using a_coverage_options.include_objects,a_coverage_options.exclude_schema_expr,a_coverage_options.exclude_object_expr,l_skip_objects;
177181
else
178182
open l_cursor for l_sql using a_coverage_options.schema_names,a_coverage_options.exclude_schema_expr,a_coverage_options.exclude_object_expr,l_skip_objects;
179183
end if;

test/ut3_tester_helper/coverage_helper.pkb

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -158,14 +158,14 @@ create or replace package body coverage_helper is
158158

159159
end;
160160

161-
procedure create_regex_dummy_cov is
161+
procedure create_regex_dummy_for_schema(p_schema in varchar2) is
162162
pragma autonomous_transaction;
163163
begin
164-
execute immediate q'[create or replace package ut3_develop.regex_dummy_cov is
164+
execute immediate q'[create or replace package ]'||p_schema||q'[.regex_dummy_cov is
165165
procedure do_stuff(i_input in number);
166166
end;]';
167167

168-
execute immediate q'[create or replace package body ut3_develop.regex_dummy_cov is
168+
execute immediate q'[create or replace package body ]'||p_schema||q'[.regex_dummy_cov is
169169
procedure do_stuff(i_input in number) is
170170
begin
171171
if i_input = 2 then dbms_output.put_line('should not get here'); elsif i_input = 1 then dbms_output.put_line('should get here');
@@ -175,39 +175,38 @@ create or replace package body coverage_helper is
175175
end;
176176
end;]';
177177

178-
execute immediate q'[create or replace package ut3_develop.test_regex_dummy_cov is
178+
execute immediate q'[create or replace package ]'||p_schema||q'[.test_regex_dummy_cov is
179179
--%suite(dummy coverage test)
180180
--%suitepath(coverage_testing)
181181

182182
--%test
183183
procedure test_do_stuff;
184184

185+
--%test
186+
procedure zero_coverage;
185187
end;]';
186188

187-
execute immediate q'[create or replace package body ut3_develop.test_regex_dummy_cov is
189+
execute immediate q'[create or replace package body ]'||p_schema||q'[.test_regex_dummy_cov is
188190
procedure test_do_stuff is
189191
begin
190192
regex_dummy_cov.do_stuff(1);
191193
ut.expect(1).to_equal(1);
192194
end;
195+
procedure zero_coverage is
196+
begin
197+
null;
198+
end;
193199
end;]';
194200
end;
195-
196-
procedure drop_regex_dummy_cov is
197-
pragma autonomous_transaction;
198-
begin
199-
begin execute immediate q'[drop package ut3_develop.regex_dummy_cov]'; exception when others then null; end;
200-
begin execute immediate q'[drop package ut3_develop.test_regex_dummy_cov]'; exception when others then null; end;
201-
end;
202201

203-
procedure create_regex_dummy_for_schema(p_schema in varchar2) is
202+
procedure create_regex_dummy_obj is
204203
pragma autonomous_transaction;
205204
begin
206-
execute immediate q'[create or replace package ]'||p_schema||q'[.regex_dummy_cov_schema is
205+
execute immediate q'[create or replace package ut3_develop.regex123_dummy_cov is
207206
procedure do_stuff(i_input in number);
208207
end;]';
209208

210-
execute immediate q'[create or replace package body ]'||p_schema||q'[.regex_dummy_cov_schema is
209+
execute immediate q'[create or replace package body ut3_develop.regex123_dummy_cov is
211210
procedure do_stuff(i_input in number) is
212211
begin
213212
if i_input = 2 then dbms_output.put_line('should not get here'); elsif i_input = 1 then dbms_output.put_line('should get here');
@@ -217,7 +216,7 @@ create or replace package body coverage_helper is
217216
end;
218217
end;]';
219218

220-
execute immediate q'[create or replace package ]'||p_schema||q'[.test_regex_dummy_cov_schema is
219+
execute immediate q'[create or replace package ut3_develop.test_regex123_dummy_cov is
221220
--%suite(dummy coverage test)
222221
--%suitepath(coverage_testing)
223222

@@ -228,10 +227,10 @@ create or replace package body coverage_helper is
228227
procedure zero_coverage;
229228
end;]';
230229

231-
execute immediate q'[create or replace package body ]'||p_schema||q'[.test_regex_dummy_cov_schema is
230+
execute immediate q'[create or replace package body ut3_develop.test_regex123_dummy_cov is
232231
procedure test_do_stuff is
233232
begin
234-
regex_dummy_cov_schema.do_stuff(1);
233+
regex123_dummy_cov.do_stuff(1);
235234
ut.expect(1).to_equal(1);
236235
end;
237236
procedure zero_coverage is
@@ -240,20 +239,23 @@ create or replace package body coverage_helper is
240239
end;
241240
end;]';
242241
end;
243-
244-
procedure create_regex_dummy_cov_schema is
242+
243+
procedure create_regex_dummy_cov is
245244
begin
246245
create_regex_dummy_for_schema('ut3_develop');
247246
create_regex_dummy_for_schema('ut3_tester_helper');
247+
create_regex_dummy_obj;
248248
end;
249249

250-
procedure drop_regex_dummy_cov_schema is
250+
procedure drop_regex_dummy_cov is
251251
pragma autonomous_transaction;
252252
begin
253-
begin execute immediate q'[drop package ut3_develop.regex_dummy_cov_schema]'; exception when others then null; end;
254-
begin execute immediate q'[drop package ut3_develop.test_regex_dummy_cov_schema]'; exception when others then null; end;
255-
begin execute immediate q'[drop package ut3_tester_helper.regex_dummy_cov_schema]'; exception when others then null; end;
256-
begin execute immediate q'[drop package ut3_tester_helper.test_regex_dummy_cov_schema]'; exception when others then null; end;
253+
begin execute immediate q'[drop package ut3_develop.regex_dummy_cov]'; exception when others then null; end;
254+
begin execute immediate q'[drop package ut3_develop.test_regex_dummy_cov]'; exception when others then null; end;
255+
begin execute immediate q'[drop package ut3_tester_helper.regex_dummy_cov]'; exception when others then null; end;
256+
begin execute immediate q'[drop package ut3_tester_helper.test_regex_dummy_cov]'; exception when others then null; end;
257+
begin execute immediate q'[drop package ut3_develop.regex123_dummy_cov]'; exception when others then null; end;
258+
begin execute immediate q'[drop package ut3_develop.test_regex123_dummy_cov]'; exception when others then null; end;
257259
end;
258260

259261

test/ut3_tester_helper/coverage_helper.pks

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ create or replace package coverage_helper is
1717
procedure create_regex_dummy_cov;
1818
procedure drop_regex_dummy_cov;
1919

20-
procedure create_regex_dummy_cov_schema;
21-
procedure drop_regex_dummy_cov_schema;
22-
2320
procedure create_cov_with_dbms_stats;
2421
procedure drop_cov_with_dbms_stats;
2522

test/ut3_user/reporters/test_coverage/test_extended_coverage.pkb

Lines changed: 76 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -107,74 +107,111 @@ create or replace package body test_extended_coverage is
107107
end;
108108

109109
procedure coverage_regex_include_schema is
110-
l_expected_ut3 clob;
111-
l_expected_help clob;
112-
l_actual_ut3 clob;
113-
l_actual_help clob;
114-
l_actual_both clob;
115-
110+
l_expected clob;
111+
l_not_expected clob;
112+
l_actual clob;
116113
begin
117114
--Arrange
118-
l_expected_ut3 := '%<file path="package body ut3_develop.test_regex_dummy_cov_schema">' ||
115+
l_expected := '%<file path="package body ut3_develop.regex_dummy_cov">' ||
119116
'%<lineToCover lineNumber="4" covered="true"/>%';
120-
l_expected_help := '%<file path="package body ut3_tester_helper.test_regex_dummy_cov_schema">' ||
117+
l_not_expected := '%<file path="package body ut3_tester_helper.regex_dummy_cov">' ||
121118
'%<lineToCover lineNumber="4" covered="true"/>%';
122119
--Act
123-
l_actual_ut3 :=
120+
l_actual :=
124121
ut3_tester_helper.coverage_helper.run_tests_as_job(
125122
q'[
126123
ut3_develop.ut.run(
127-
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov_schema', 'ut3_tester_helper.test_regex_dummy_cov_schema'),
124+
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov', 'ut3_tester_helper.test_regex_dummy_cov'),
128125
a_reporter=> ut3_develop.ut_coverage_sonar_reporter( ),
129-
a_include_schema_expr => '^ut3_develop'
126+
a_include_schema_expr => '^ut3_develop',
127+
a_include_objects => ut3_develop.ut_varchar2_list( 'ut3_tester_helper.regex_dummy_cov' )
130128
)
131129
]'
132-
);
133-
/*
134-
l_actual_help :=
130+
);
131+
--Assert
132+
ut.expect(l_actual).to_be_like(l_expected);
133+
ut.expect(l_actual).not_to_be_like(l_not_expected);
134+
end;
135+
136+
procedure coverage_regex_include_object is
137+
l_expected clob;
138+
l_not_expected clob;
139+
l_actual clob;
140+
begin
141+
--Arrange
142+
l_expected := '%<file path="package body ut3_develop.regex123_dummy_cov">' ||
143+
'%<lineToCover lineNumber="4" covered="true"/>%';
144+
l_not_expected := '%<file path="package body ut3_tester_helper.regex_dummy_cov">' ||
145+
'%<lineToCover lineNumber="4" covered="true"/>%';
146+
--Act
147+
l_actual :=
135148
ut3_tester_helper.coverage_helper.run_tests_as_job(
136149
q'[
137150
ut3_develop.ut.run(
138-
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov_schema', 'ut3_tester_helper.test_regex_dummy_cov_schema'),
151+
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov', 'ut3_develop.test_regex123_dummy_cov'),
139152
a_reporter=> ut3_develop.ut_coverage_sonar_reporter( ),
140-
a_include_schema_expr => '^ut3_tester_helper'
153+
a_include_object_expr => 'regex123',
154+
a_include_objects => ut3_develop.ut_varchar2_list( 'ut3_develop.regex_dummy_cov' )
141155
)
142156
]'
143-
);
157+
);
158+
--Assert
159+
ut.expect(l_actual).to_be_like(l_expected);
160+
ut.expect(l_actual).not_to_be_like(l_not_expected);
161+
end;
144162

145-
l_actual_both :=
163+
procedure coverage_regex_exclude_schema is
164+
l_expected clob;
165+
l_not_expected clob;
166+
l_actual clob;
167+
begin
168+
--Arrange
169+
l_expected := '%<file path="package body ut3_develop.regex_dummy_cov">' ||
170+
'%<lineToCover lineNumber="4" covered="true"/>%';
171+
l_not_expected := '%<file path="package body ut3_tester_helper.regex_dummy_cov">' ||
172+
'%<lineToCover lineNumber="4" covered="true"/>%';
173+
--Act
174+
l_actual :=
146175
ut3_tester_helper.coverage_helper.run_tests_as_job(
147176
q'[
148177
ut3_develop.ut.run(
149-
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov_schema', 'ut3_tester_helper.test_regex_dummy_cov_schema'),
178+
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov', 'ut3_tester_helper.test_regex_dummy_cov'),
150179
a_reporter=> ut3_develop.ut_coverage_sonar_reporter( ),
151-
a_include_schema_expr => '^ut3_tester_helper||^ut3_tester_helper'
180+
a_exclude_schema_expr => '^ut3_tester',
181+
a_exclude_objects => ut3_develop.ut_varchar2_list( 'ut3_develop.regex_dummy_cov' )
152182
)
153183
]'
154-
);
155-
*/
184+
);
156185
--Assert
157-
ut.expect(l_actual_ut3).to_be_like(l_expected_ut3);
158-
ut.expect(l_actual_ut3).not_to_be_like(l_expected_help);
159-
--ut.expect(l_actual_help).to_be_like(l_expected_help);
160-
--ut.expect(l_actual_help).not_to_be_like(l_expected_ut3);
161-
--ut.expect(l_actual_both).to_be_like(l_expected_ut3);
162-
--ut.expect(l_actual_both).to_be_like(l_expected_help);
163-
end;
164-
165-
procedure coverage_regex_include_object is
166-
begin
167-
null;
168-
end;
169-
170-
procedure coverage_regex_exclude_schema is
171-
begin
172-
null;
186+
ut.expect(l_actual).to_be_like(l_expected);
187+
ut.expect(l_actual).not_to_be_like(l_not_expected);
173188
end;
174189

175190
procedure coverage_regex_exclude_object is
191+
l_expected clob;
192+
l_not_expected clob;
193+
l_actual clob;
176194
begin
177-
null;
195+
--Arrange
196+
l_expected := '%<file path="package body ut3_develop.regex_dummy_cov">' ||
197+
'%<lineToCover lineNumber="4" covered="true"/>%';
198+
l_not_expected := '%<file path="package body ut3_tester_helper.regex123_dummy_cov">' ||
199+
'%<lineToCover lineNumber="4" covered="true"/>%';
200+
--Act
201+
l_actual :=
202+
ut3_tester_helper.coverage_helper.run_tests_as_job(
203+
q'[
204+
ut3_develop.ut.run(
205+
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov', 'ut3_develop.test_regex123_dummy_cov'),
206+
a_reporter=> ut3_develop.ut_coverage_sonar_reporter( ),
207+
a_exclude_object_expr => 'regex123',
208+
a_exclude_objects => ut3_develop.ut_varchar2_list( 'ut3_develop.regex_dummy_cov' )
209+
)
210+
]'
211+
);
212+
--Assert
213+
ut.expect(l_actual).to_be_like(l_expected);
214+
ut.expect(l_actual).not_to_be_like(l_not_expected);
178215
end;
179216

180217
end;

test/ut3_user/reporters/test_coverage/test_extended_coverage.pks

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,24 @@ create or replace package test_extended_coverage is
1818
--%test(Extended coverage does not fail the test run then tested code calls DBMS_STATS)
1919
procedure coverage_with_dbms_stats;
2020

21-
--%beforetest(ut3_tester_helper.coverage_helper.create_regex_dummy_cov_schema)
22-
--%aftertest(ut3_tester_helper.coverage_helper.drop_regex_dummy_cov_schema)
21+
--%beforetest(ut3_tester_helper.coverage_helper.create_regex_dummy_cov)
22+
--%aftertest(ut3_tester_helper.coverage_helper.drop_regex_dummy_cov)
2323
--%test(Collect coverage for objects with schema regex include)
2424
procedure coverage_regex_include_schema;
2525

26-
--%test(Collect coverage for objects with schema regex include)
26+
--%beforetest(ut3_tester_helper.coverage_helper.create_regex_dummy_cov)
27+
--%aftertest(ut3_tester_helper.coverage_helper.drop_regex_dummy_cov)
28+
--%test(Collect coverage for objects with object regex include)
2729
procedure coverage_regex_include_object;
2830

29-
--%test(Collect coverage for objects with schema regex include)
31+
--%beforetest(ut3_tester_helper.coverage_helper.create_regex_dummy_cov)
32+
--%aftertest(ut3_tester_helper.coverage_helper.drop_regex_dummy_cov)
33+
--%test(Collect coverage for objects with schema regex exclude)
3034
procedure coverage_regex_exclude_schema;
3135

32-
--%test(Collect coverage for objects with schema regex include)
36+
--%beforetest(ut3_tester_helper.coverage_helper.create_regex_dummy_cov)
37+
--%aftertest(ut3_tester_helper.coverage_helper.drop_regex_dummy_cov)
38+
--%test(Collect coverage for objects with object regex exclude)
3339
procedure coverage_regex_exclude_object;
3440

3541
end;

0 commit comments

Comments
 (0)