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

Skip to content

Commit fa90154

Browse files
authored
Merge pull request #789 from utPLSQL/feature/force_manual_rollback_option
Feature/force manual rollback option
2 parents c2e7586 + 8c3e4af commit fa90154

13 files changed

Lines changed: 260 additions & 63 deletions

docs/userguide/running-unit-tests.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,26 @@ Executes all tests from package _HR.TEST_APPLY_BONUS_ and provide outputs to DBM
131131

132132
For details on build-in reporters look at [reporters documentation](reporters.md).
133133

134+
## Keeping uncommited data after test-run
135+
136+
utPLSQL by default runs tests in autonomous transaction and performs automatic rollback to assure that tests do not impact one-another and do not have impact on the current session in your IDE.
137+
138+
If you would like to keep your uncommited data persisted after running tests, you can do so by using `a_force_manual_rollback` flag.
139+
Setting this flag to true has following side-effects:
140+
141+
- test execution is done in current transaction - if while running tests commit or rollback is issued your current session data will get commited too.
142+
- automatic rollback is forced to be disabled in test-run even if it was explicitly enabled by using annotation `--%rollback(manual)
143+
144+
Example invocation:
145+
```sql
146+
begin
147+
ut.run('hr.test_apply_bonus', a_force_manual_rollback => true);
148+
end;
149+
```
150+
151+
152+
This option is not anvailable when running tests using `ut.run` as a table function.
153+
134154
## ut.run functions
135155

136156
The `ut.run` functions provide exactly the same functionality as the `ut.run` procedures.

source/api/ut.pkb

Lines changed: 57 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ create or replace package body ut is
1818
*/
1919

2020
g_nls_date_format varchar2(4000);
21+
gc_fail_on_errors constant boolean := false;
2122

2223
function version return varchar2 is
2324
begin
@@ -117,7 +118,6 @@ create or replace package body ut is
117118
a_client_character_set varchar2 := null
118119
) is
119120
pragma autonomous_transaction;
120-
c_fail_on_errors constant boolean := false;
121121
begin
122122
a_reporter := coalesce(a_reporter,ut_documentation_reporter());
123123
ut_runner.run(
@@ -129,7 +129,7 @@ create or replace package body ut is
129129
a_test_file_mappings,
130130
a_include_objects,
131131
a_exclude_objects,
132-
c_fail_on_errors,
132+
gc_fail_on_errors,
133133
a_client_character_set
134134
);
135135
rollback;
@@ -147,7 +147,6 @@ create or replace package body ut is
147147
a_client_character_set varchar2 := null
148148
) is
149149
pragma autonomous_transaction;
150-
c_fail_on_errors constant boolean := false;
151150
begin
152151
a_reporter := coalesce(a_reporter,ut_documentation_reporter());
153152
ut_runner.run(
@@ -159,7 +158,7 @@ create or replace package body ut is
159158
ut_file_mapper.build_file_mappings(a_test_files),
160159
a_include_objects,
161160
a_exclude_objects,
162-
c_fail_on_errors,
161+
gc_fail_on_errors,
163162
a_client_character_set
164163
);
165164
rollback;
@@ -406,21 +405,39 @@ create or replace package body ut is
406405
a_test_file_mappings ut_file_mappings := null,
407406
a_include_objects ut_varchar2_list := null,
408407
a_exclude_objects ut_varchar2_list := null,
409-
a_client_character_set varchar2 := null
408+
a_client_character_set varchar2 := null,
409+
a_force_manual_rollback boolean := false
410410
) is
411411
l_reporter ut_reporter_base := a_reporter;
412412
begin
413-
run_autonomous(
414-
a_paths,
415-
l_reporter,
416-
ut_utils.boolean_to_int(a_color_console),
417-
a_coverage_schemes,
418-
a_source_file_mappings,
419-
a_test_file_mappings,
420-
a_include_objects,
421-
a_exclude_objects,
422-
a_client_character_set
423-
);
413+
if a_force_manual_rollback then
414+
l_reporter := coalesce(l_reporter,ut_documentation_reporter());
415+
ut_runner.run(
416+
a_paths,
417+
ut_reporters(l_reporter),
418+
a_color_console,
419+
a_coverage_schemes,
420+
a_source_file_mappings,
421+
a_test_file_mappings,
422+
a_include_objects,
423+
a_exclude_objects,
424+
gc_fail_on_errors,
425+
a_client_character_set,
426+
a_force_manual_rollback
427+
);
428+
else
429+
run_autonomous(
430+
a_paths,
431+
l_reporter,
432+
ut_utils.boolean_to_int(a_color_console),
433+
a_coverage_schemes,
434+
a_source_file_mappings,
435+
a_test_file_mappings,
436+
a_include_objects,
437+
a_exclude_objects,
438+
a_client_character_set
439+
);
440+
end if;
424441
if l_reporter is of (ut_output_reporter_base) then
425442
treat(l_reporter as ut_output_reporter_base).lines_to_dbms_output();
426443
end if;
@@ -436,25 +453,23 @@ create or replace package body ut is
436453
a_test_files ut_varchar2_list,
437454
a_include_objects ut_varchar2_list := null,
438455
a_exclude_objects ut_varchar2_list := null,
439-
a_client_character_set varchar2 := null
456+
a_client_character_set varchar2 := null,
457+
a_force_manual_rollback boolean := false
440458
) is
441459
l_reporter ut_reporter_base := a_reporter;
442460
begin
443-
run_autonomous(
461+
ut.run(
444462
a_paths,
445463
l_reporter,
446-
ut_utils.boolean_to_int(a_color_console),
464+
a_color_console,
447465
a_coverage_schemes,
448-
a_source_files,
449-
a_test_files,
466+
ut_file_mapper.build_file_mappings(a_source_files),
467+
ut_file_mapper.build_file_mappings(a_test_files),
450468
a_include_objects,
451469
a_exclude_objects,
452-
a_client_character_set
470+
a_client_character_set,
471+
a_force_manual_rollback
453472
);
454-
if l_reporter is of (ut_output_reporter_base) then
455-
treat(l_reporter as ut_output_reporter_base).lines_to_dbms_output();
456-
end if;
457-
raise_if_packages_invalidated();
458473
end;
459474

460475
procedure run(
@@ -465,7 +480,8 @@ create or replace package body ut is
465480
a_test_file_mappings ut_file_mappings := null,
466481
a_include_objects ut_varchar2_list := null,
467482
a_exclude_objects ut_varchar2_list := null,
468-
a_client_character_set varchar2 := null
483+
a_client_character_set varchar2 := null,
484+
a_force_manual_rollback boolean := false
469485
) is
470486
begin
471487
ut.run(
@@ -477,7 +493,8 @@ create or replace package body ut is
477493
a_test_file_mappings,
478494
a_include_objects,
479495
a_exclude_objects,
480-
a_client_character_set
496+
a_client_character_set,
497+
a_force_manual_rollback
481498
);
482499
end;
483500

@@ -489,7 +506,8 @@ create or replace package body ut is
489506
a_test_files ut_varchar2_list,
490507
a_include_objects ut_varchar2_list := null,
491508
a_exclude_objects ut_varchar2_list := null,
492-
a_client_character_set varchar2 := null
509+
a_client_character_set varchar2 := null,
510+
a_force_manual_rollback boolean := false
493511
) is
494512
begin
495513
ut.run(
@@ -501,7 +519,8 @@ create or replace package body ut is
501519
a_test_files,
502520
a_include_objects,
503521
a_exclude_objects,
504-
a_client_character_set
522+
a_client_character_set,
523+
a_force_manual_rollback
505524
);
506525
end;
507526

@@ -514,7 +533,8 @@ create or replace package body ut is
514533
a_test_file_mappings ut_file_mappings := null,
515534
a_include_objects ut_varchar2_list := null,
516535
a_exclude_objects ut_varchar2_list := null,
517-
a_client_character_set varchar2 := null
536+
a_client_character_set varchar2 := null,
537+
a_force_manual_rollback boolean := false
518538
) is
519539
begin
520540
ut.run(
@@ -526,7 +546,8 @@ create or replace package body ut is
526546
a_test_file_mappings,
527547
a_include_objects,
528548
a_exclude_objects,
529-
a_client_character_set
549+
a_client_character_set,
550+
a_force_manual_rollback
530551
);
531552
end;
532553

@@ -539,7 +560,8 @@ create or replace package body ut is
539560
a_test_files ut_varchar2_list,
540561
a_include_objects ut_varchar2_list := null,
541562
a_exclude_objects ut_varchar2_list := null,
542-
a_client_character_set varchar2 := null
563+
a_client_character_set varchar2 := null,
564+
a_force_manual_rollback boolean := false
543565
) is
544566
begin
545567
ut.run(
@@ -551,7 +573,8 @@ create or replace package body ut is
551573
a_test_files,
552574
a_include_objects,
553575
a_exclude_objects,
554-
a_client_character_set
576+
a_client_character_set,
577+
a_force_manual_rollback
555578
);
556579
end;
557580

source/api/ut.pks

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ create or replace package ut authid current_user as
125125
a_test_file_mappings ut_file_mappings := null,
126126
a_include_objects ut_varchar2_list := null,
127127
a_exclude_objects ut_varchar2_list := null,
128-
a_client_character_set varchar2 := null
128+
a_client_character_set varchar2 := null,
129+
a_force_manual_rollback boolean := false
129130
);
130131

131132
procedure run(
@@ -136,7 +137,8 @@ create or replace package ut authid current_user as
136137
a_test_files ut_varchar2_list,
137138
a_include_objects ut_varchar2_list := null,
138139
a_exclude_objects ut_varchar2_list := null,
139-
a_client_character_set varchar2 := null
140+
a_client_character_set varchar2 := null,
141+
a_force_manual_rollback boolean := false
140142
);
141143

142144
procedure run(
@@ -148,7 +150,8 @@ create or replace package ut authid current_user as
148150
a_test_file_mappings ut_file_mappings := null,
149151
a_include_objects ut_varchar2_list := null,
150152
a_exclude_objects ut_varchar2_list := null,
151-
a_client_character_set varchar2 := null
153+
a_client_character_set varchar2 := null,
154+
a_force_manual_rollback boolean := false
152155
);
153156

154157
procedure run(
@@ -160,7 +163,8 @@ create or replace package ut authid current_user as
160163
a_test_files ut_varchar2_list,
161164
a_include_objects ut_varchar2_list := null,
162165
a_exclude_objects ut_varchar2_list := null,
163-
a_client_character_set varchar2 := null
166+
a_client_character_set varchar2 := null,
167+
a_force_manual_rollback boolean := false
164168
);
165169

166170
procedure run(
@@ -172,7 +176,8 @@ create or replace package ut authid current_user as
172176
a_test_file_mappings ut_file_mappings := null,
173177
a_include_objects ut_varchar2_list := null,
174178
a_exclude_objects ut_varchar2_list := null,
175-
a_client_character_set varchar2 := null
179+
a_client_character_set varchar2 := null,
180+
a_force_manual_rollback boolean := false
176181
);
177182

178183
procedure run(
@@ -184,7 +189,8 @@ create or replace package ut authid current_user as
184189
a_test_files ut_varchar2_list,
185190
a_include_objects ut_varchar2_list := null,
186191
a_exclude_objects ut_varchar2_list := null,
187-
a_client_character_set varchar2 := null
192+
a_client_character_set varchar2 := null,
193+
a_force_manual_rollback boolean := false
188194
);
189195

190196
/**

source/api/ut_runner.pkb

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,16 @@ create or replace package body ut_runner is
4242
return l_result;
4343
end;
4444

45-
procedure finish_run(a_run ut_run) is
45+
procedure finish_run(a_run ut_run, a_force_manual_rollback boolean) is
4646
begin
4747
ut_utils.cleanup_temp_tables;
4848
ut_event_manager.trigger_event(ut_utils.gc_finalize, a_run);
4949
ut_metadata.reset_source_definition_cache;
5050
ut_utils.read_cache_to_dbms_output();
5151
ut_coverage_helper.cleanup_tmp_table();
52+
if not a_force_manual_rollback then
53+
rollback;
54+
end if;
5255
end;
5356

5457

@@ -83,7 +86,8 @@ create or replace package body ut_runner is
8386
a_include_objects ut_varchar2_list := null,
8487
a_exclude_objects ut_varchar2_list := null,
8588
a_fail_on_errors boolean := false,
86-
a_client_character_set varchar2 := null
89+
a_client_character_set varchar2 := null,
90+
a_force_manual_rollback boolean := false
8791
) is
8892
l_run ut_run;
8993
l_coverage_schema_names ut_varchar2_rows;
@@ -138,16 +142,18 @@ create or replace package body ut_runner is
138142
a_client_character_set
139143
);
140144
ut_suite_manager.configure_execution_by_path(l_paths, l_run.items);
145+
if a_force_manual_rollback then
146+
l_run.set_rollback_type(ut_utils.gc_rollback_manual, a_force=>true);
147+
end if;
148+
141149
l_run.do_execute();
142150

143-
finish_run(l_run);
144-
rollback;
151+
finish_run(l_run, a_force_manual_rollback);
145152
exception
146153
when others then
147-
finish_run(l_run);
154+
finish_run(l_run, a_force_manual_rollback);
148155
dbms_output.put_line(dbms_utility.format_error_backtrace);
149156
dbms_output.put_line(dbms_utility.format_error_stack);
150-
rollback;
151157
raise;
152158
end;
153159
if a_fail_on_errors and l_run.result in (ut_utils.gc_failure, ut_utils.gc_error) then
@@ -186,9 +192,9 @@ create or replace package body ut_runner is
186192
l_result boolean := false;
187193
begin
188194
if a_owner is not null and a_package_name is not null and a_procedure_name is not null then
189-
195+
190196
l_result := ut_suite_manager.suite_item_exists( a_owner, a_package_name, a_procedure_name );
191-
197+
192198
end if;
193199

194200
return l_result;
@@ -200,7 +206,7 @@ create or replace package body ut_runner is
200206
if a_owner is not null and a_package_name is not null then
201207

202208
l_result := ut_suite_manager.suite_item_exists( a_owner, a_package_name );
203-
209+
204210
end if;
205211

206212
return l_result;
@@ -212,7 +218,7 @@ create or replace package body ut_runner is
212218
if a_owner is not null then
213219

214220
l_result := ut_suite_manager.suite_item_exists( a_owner );
215-
221+
216222
end if;
217223

218224
return l_result;

0 commit comments

Comments
 (0)