From 5e3e4a6dc152be3ae0281078b96dc9e0b8c6dff8 Mon Sep 17 00:00:00 2001 From: Pazus Date: Tue, 21 Mar 2017 20:51:17 +0300 Subject: [PATCH 1/2] implemented warnings when savepoint is not reachable (implicit commit inside procedure) --- source/core/types/ut_suite_item.tpb | 4 +- source/core/types/ut_suite_item.tps | 2 +- tests/RunAll.sql | 1 + .../ut_test.ReportWarningOnRollbackFailed.sql | 52 +++++++++++++++++++ 4 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql diff --git a/source/core/types/ut_suite_item.tpb b/source/core/types/ut_suite_item.tpb index 7d1a88bd2..825fc4da5 100644 --- a/source/core/types/ut_suite_item.tpb +++ b/source/core/types/ut_suite_item.tpb @@ -58,7 +58,7 @@ create or replace type body ut_suite_item as return l_savepoint; end; - member procedure rollback_to_savepoint(self in ut_suite_item, a_savepoint varchar2) is + member procedure rollback_to_savepoint(self in out nocopy ut_suite_item, a_savepoint varchar2) is ex_savepoint_not_exists exception; pragma exception_init(ex_savepoint_not_exists, -1086); begin @@ -67,7 +67,7 @@ create or replace type body ut_suite_item as end if; exception when ex_savepoint_not_exists then - null; + put_warning('Savepoint not established. Implicit commit might have occured.'); end; member function execution_time return number is diff --git a/source/core/types/ut_suite_item.tps b/source/core/types/ut_suite_item.tps index 5a4ee05c8..721506a8f 100644 --- a/source/core/types/ut_suite_item.tps +++ b/source/core/types/ut_suite_item.tps @@ -23,7 +23,7 @@ create or replace type ut_suite_item force under ut_suite_item_base ( member procedure set_disabled_flag(self in out nocopy ut_suite_item, a_disabled_flag boolean), member function get_disabled_flag return boolean, member function create_savepoint_if_needed return varchar2, - member procedure rollback_to_savepoint(self in ut_suite_item, a_savepoint varchar2), + member procedure rollback_to_savepoint(self in out nocopy ut_suite_item, a_savepoint varchar2), member function execution_time return number, not instantiable member function do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) return boolean, diff --git a/tests/RunAll.sql b/tests/RunAll.sql index 8f5f98f12..ee1b044ed 100644 --- a/tests/RunAll.sql +++ b/tests/RunAll.sql @@ -164,6 +164,7 @@ exec ut_coverage.coverage_start_develop(); @@lib/RunTest.sql ut_test/ut_test.BeforeEachProcedureNameNull.sql @@lib/RunTest.sql ut_test/ut_test.TestOutputGathering.sql @@lib/RunTest.sql ut_test/ut_test.TestOutputGatheringForTeamcity.sql +@@lib/RunTest.sql ut_test/ut_test.ReportWarningOnRollbackFailed.sql @@lib/RunTest.sql ut_test_suite/ut_test_suite.ErrorsATestWhenAfterTestFails.sql @@lib/RunTest.sql ut_test_suite/ut_test_suite.ErrorsATestWhenBeforeTestFails.sql diff --git a/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql b/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql new file mode 100644 index 000000000..7e69707e9 --- /dev/null +++ b/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql @@ -0,0 +1,52 @@ +create or replace package ut_output_test_rollback +as + --%suite + + --%test + procedure tt + +end; +/ + +create or replace package body ut_output_test_rollback +as + + procedure tt is + begin + commit; + end; + +end; +/ + +declare + l_output_data dbms_output.chararr; + l_num_lines integer := 100000; + l_output clob; +begin + --act + ut.run('ut_output_test_rollback'); + + --assert + dbms_output.get_lines( l_output_data, l_num_lines); + dbms_lob.createtemporary(l_output,true); + for i in 1 .. l_num_lines loop + dbms_lob.append(l_output,l_output_data(i)); + end loop; + + if l_output like '%Warnings:%Savepoint not established. Implicit commit might have occured.%0 disabled, 1 warning(s)%' then + :test_result := ut_utils.tr_success; + end if; + + if :test_result != ut_utils.tr_success or :test_result is null then + for i in 1 .. l_num_lines loop + dbms_output.put_line(l_output_data(i)); + end loop; + dbms_output.put_line('Failed: Wrong output'); + end if; +end; +/ + +drop package ut_output_test_rollback +/ + From 6ceed7bdc061edf91c41485e602ecfcee5dbb1c5 Mon Sep 17 00:00:00 2001 From: Pazus Date: Tue, 21 Mar 2017 21:31:07 +0300 Subject: [PATCH 2/2] fixed test --- tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql b/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql index 7e69707e9..e090e92ba 100644 --- a/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql +++ b/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql @@ -3,7 +3,7 @@ as --%suite --%test - procedure tt + procedure tt; end; /