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

Skip to content

Commit 29295b7

Browse files
committed
Adding set of tests:
core/test_ut_executable core/test_ut_suite
1 parent 0618616 commit 29295b7

9 files changed

Lines changed: 460 additions & 0 deletions

test/install_ut3_tester_helper.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ alter session set plsql_optimize_level=0;
1010
@@ut3_tester_helper/test_tab_varchar2.tps
1111
@@ut3_tester_helper/test_tab_varray.tps
1212
@@ut3_tester_helper/test_dummy_number.tps
13+
@@ut3_tester_helper/ut_test_table.sql
1314

1415
@@ut3_tester_helper/main_helper.pks
1516
@@ut3_tester_helper/run_helper.pks

test/install_ut3_tester_tests.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ alter session set plsql_optimize_level=0;
1414
@@ut3_tester/core/expectations/test_expectation_processor.pks
1515
@@ut3_tester/core/test_ut_utils.pks
1616
@@ut3_tester/core/test_ut_test.pks
17+
@@ut3_tester/core/test_ut_suite.pks
18+
@@ut3_tester/core/test_ut_executable.pks
1719

1820

1921
@@ut3_tester/core.pkb
@@ -24,6 +26,8 @@ alter session set plsql_optimize_level=0;
2426
@@ut3_tester/core/annotations/test_annot_throws_exception.pkb
2527
@@ut3_tester/core/test_ut_utils.pkb
2628
@@ut3_tester/core/test_ut_test.pkb
29+
@@ut3_tester/core/test_ut_suite.pkb
30+
@@ut3_tester/core/test_ut_executable.pkb
2731

2832

2933
set linesize 200
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
create or replace package body test_ut_executable is
2+
3+
g_dbms_output_text varchar2(30) := 'Some output from procedure';
4+
5+
procedure exec_schema_package_proc is
6+
l_executable ut3.ut_executable;
7+
l_test ut3.ut_test;
8+
l_result boolean;
9+
begin
10+
--Arrange
11+
l_test := ut3.ut_test(a_object_name => 'test_ut_executable',a_name => 'test_ut_executable', a_line_no=> 1);
12+
l_executable := ut3.ut_executable_test( null, 'test_ut_executable', 'passing_proc', ut3.ut_utils.gc_test_execute );
13+
--Act
14+
l_result := l_executable.do_execute(l_test);
15+
--Assert
16+
ut.expect(l_result).to_be_true;
17+
ut.expect(l_executable.serveroutput).to_be_null;
18+
ut.expect(l_executable.get_error_stack_trace()).to_be_null;
19+
end;
20+
21+
procedure exec_package_proc_output is
22+
l_executable ut3.ut_executable;
23+
l_test ut3.ut_test;
24+
l_result boolean;
25+
begin
26+
--Arrange
27+
l_test := ut3.ut_test(a_object_name => 'test_ut_executable',a_name => 'test_ut_executable', a_line_no=> 1);
28+
l_executable := ut3.ut_executable_test( user, 'test_ut_executable', 'output_proc', ut3.ut_utils.gc_test_execute );
29+
--Act
30+
l_result := l_executable.do_execute(l_test);
31+
--Assert
32+
ut.expect(l_result).to_be_true;
33+
ut.expect(l_executable.serveroutput).to_equal(to_clob(g_dbms_output_text||chr(10)));
34+
ut.expect(l_executable.get_error_stack_trace()).to_be_null;
35+
end;
36+
37+
procedure exec_failing_proc is
38+
l_executable ut3.ut_executable;
39+
l_test ut3.ut_test;
40+
l_result boolean;
41+
begin
42+
--Arrange
43+
l_test := ut3.ut_test(a_object_name => 'test_ut_executable',a_name => 'test_ut_executable', a_line_no=> 1);
44+
l_executable := ut3.ut_executable_test( user, 'test_ut_executable', 'throwing_proc', ut3.ut_utils.gc_test_execute );
45+
--Act
46+
l_result := l_executable.do_execute(l_test);
47+
--Assert
48+
ut.expect(l_result).to_be_false;
49+
ut.expect(l_executable.serveroutput).to_be_null;
50+
ut.expect(l_executable.get_error_stack_trace()).to_be_like('ORA-06501: PL/SQL: program error%');
51+
end;
52+
53+
procedure modify_stateful_package is
54+
l_job_name varchar2(30) := 'recreate_stateful_package';
55+
l_cnt integer := 1;
56+
pragma autonomous_transaction;
57+
begin
58+
dbms_scheduler.create_job(
59+
job_name => l_job_name,
60+
job_type => 'PLSQL_BLOCK',
61+
job_action => q'/
62+
begin
63+
execute immediate q'[
64+
create or replace package stateful_package as
65+
g_state varchar2(3) := 'abc';
66+
end;]';
67+
end;/',
68+
start_date => localtimestamp,
69+
enabled => TRUE,
70+
auto_drop => TRUE,
71+
comments => 'one-time job'
72+
);
73+
$if dbms_db_version.version >= 18 $then
74+
dbms_session.sleep(0.4);
75+
$else
76+
dbms_lock.sleep(0.4);
77+
$end
78+
while l_cnt > 0 loop
79+
select count(1) into l_cnt
80+
from dba_scheduler_running_jobs srj
81+
where srj.job_name = l_job_name;
82+
end loop;
83+
end;
84+
85+
procedure form_name is
86+
begin
87+
ut.expect(ut3.ut_executable_test( user, ' package ', 'proc', null ).form_name()).to_equal(user||'.package.proc');
88+
ut.expect(ut3.ut_executable_test( null, 'package', ' proc ', null ).form_name()).to_equal('package.proc');
89+
ut.expect(ut3.ut_executable_test( null, 'proc', null, null ).form_name()).to_equal('proc');
90+
ut.expect(ut3.ut_executable_test( ' '||user||' ', 'proc', null, null ).form_name()).to_equal(user||'.proc');
91+
end;
92+
93+
procedure passing_proc is
94+
begin
95+
null;
96+
end;
97+
98+
procedure output_proc is
99+
begin
100+
dbms_output.put_line(g_dbms_output_text);
101+
end;
102+
103+
procedure throwing_proc is
104+
begin
105+
raise program_error;
106+
end;
107+
108+
end;
109+
/
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
create or replace package test_ut_executable is
2+
3+
--%suite(ut_executable)
4+
--%suitepath(utplsql.framework_tester.core)
5+
6+
--%context(do_execute)
7+
8+
--%test(Executes procedure in current schema when user was not provided)
9+
procedure exec_schema_package_proc;
10+
11+
--%test(Executes procedure and saves dbms_output)
12+
procedure exec_package_proc_output;
13+
14+
--%test(Executes a procedure raising exception, saves dbms_output and exception stack trace)
15+
procedure exec_failing_proc;
16+
17+
--%endcontext
18+
19+
--%context(form_name)
20+
21+
--%test(Builds a name for the executable test)
22+
procedure form_name;
23+
24+
--%endcontext
25+
26+
procedure passing_proc;
27+
28+
procedure output_proc;
29+
30+
procedure throwing_proc;
31+
32+
end;
33+
/
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
create or replace package body test_ut_suite is
2+
3+
procedure cleanup_package_state is
4+
begin
5+
ut3_tester_helper.ut_example_tests.g_number := null;
6+
end;
7+
8+
procedure create_trans_control is
9+
begin
10+
ut3_tester_helper.run_helper.create_trans_control;
11+
end;
12+
13+
procedure drop_trans_control is
14+
begin
15+
ut3_tester_helper.run_helper.drop_trans_control;
16+
end;
17+
18+
procedure disabled_suite is
19+
l_suite ut3.ut_suite;
20+
begin
21+
--Arrange
22+
l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1);
23+
l_suite.path := 'ut3_tester_helper.ut_example_tests';
24+
l_suite.disabled_flag := ut3.ut_utils.boolean_to_int(true);
25+
l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_EXAMPLE_TESTS', 'set_g_number_0', ut3.ut_utils.gc_before_all));
26+
l_suite.after_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_EXAMPLE_TESTS', 'add_1_to_g_number', ut3.ut_utils.gc_before_all));
27+
l_suite.items.extend;
28+
l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_EXAMPLE_TESTS',a_name => 'add_1_to_g_number', a_line_no=> 1);
29+
l_suite.items.extend;
30+
l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_EXAMPLE_TESTS',a_name => 'add_1_to_g_number', a_line_no=> 1);
31+
--Act
32+
l_suite.do_execute();
33+
--Assert
34+
ut.expect(ut3_tester_helper.ut_example_tests.g_number).to_be_null;
35+
ut.expect(l_suite.result).to_equal(ut3.ut_utils.gc_disabled);
36+
ut.expect(l_suite.results_count.disabled_count).to_equal(2);
37+
ut.expect(l_suite.results_count.warnings_count).to_equal(0);
38+
ut.expect(l_suite.results_count.success_count).to_equal(0);
39+
ut.expect(l_suite.results_count.failure_count).to_equal(0);
40+
ut.expect(l_suite.results_count.errored_count).to_equal(0);
41+
end;
42+
43+
procedure beforeall_errors is
44+
l_suite ut3.ut_suite;
45+
begin
46+
--Arrange
47+
l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1);
48+
l_suite.path := 'ut3_tester_helper.ut_example_tests';
49+
l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_EXAMPLE_TESTS', 'failing_procedure', ut3.ut_utils.gc_before_all));
50+
l_suite.items.extend;
51+
l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper',a_object_name => 'UT_EXAMPLE_TESTS',a_name => 'set_g_number_0', a_line_no=> 1);
52+
--Act
53+
l_suite.do_execute();
54+
--Assert
55+
ut.expect(ut3_tester_helper.ut_example_tests.g_number).to_be_null;
56+
ut.expect(l_suite.result).to_equal(ut3.ut_utils.gc_error);
57+
ut.expect(l_suite.results_count.disabled_count).to_equal(0);
58+
ut.expect(l_suite.results_count.warnings_count).to_equal(0);
59+
ut.expect(l_suite.results_count.success_count).to_equal(0);
60+
ut.expect(l_suite.results_count.failure_count).to_equal(0);
61+
ut.expect(l_suite.results_count.errored_count).to_equal(1);
62+
end;
63+
64+
procedure aftereall_errors is
65+
l_suite ut3.ut_suite;
66+
begin
67+
--Arrange
68+
l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1);
69+
l_suite.path := 'ut3_tester_helper.ut_example_tests';
70+
l_suite.after_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_EXAMPLE_TESTS', 'failing_procedure', ut3.ut_utils.gc_after_all));
71+
72+
l_suite.items.extend;
73+
l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_EXAMPLE_TESTS',a_name => 'set_g_number_0', a_line_no=> 1);
74+
l_suite.items.extend;
75+
l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_EXAMPLE_TESTS',a_name => 'add_1_to_g_number', a_line_no=> 1);
76+
--Act
77+
l_suite.do_execute();
78+
--Assert
79+
ut.expect(ut3_tester_helper.ut_example_tests.g_number).to_equal(1);
80+
ut.expect(l_suite.result).to_equal(ut3.ut_utils.gc_success);
81+
ut.expect(l_suite.results_count.disabled_count).to_equal(0);
82+
ut.expect(l_suite.results_count.warnings_count).to_equal(1);
83+
ut.expect(l_suite.results_count.success_count).to_equal(2);
84+
ut.expect(l_suite.results_count.failure_count).to_equal(0);
85+
ut.expect(l_suite.results_count.errored_count).to_equal(0);
86+
end;
87+
88+
procedure package_without_body is
89+
l_suite ut3.ut_suite;
90+
begin
91+
l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_WITHOUT_BODY', a_line_no=> 1);
92+
l_suite.path := 'UT_WITHOUT_BODY';
93+
l_suite.items.extend;
94+
l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_name => 'ut_without_body',a_name => 'test1', a_line_no=> 1);
95+
--Act
96+
l_suite.do_execute();
97+
--Assert
98+
ut.expect(l_suite.result).to_equal(ut3.ut_utils.gc_error);
99+
end;
100+
101+
procedure package_with_invalid_body is
102+
l_suite ut3.ut_suite;
103+
begin
104+
l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_WITH_INVALID_BODY', a_line_no=> 1);
105+
l_suite.path := 'UT_WITH_INVALID_BODY';
106+
l_suite.items.extend;
107+
l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_name => 'ut_with_invalid_body',a_name => 'test1', a_line_no=> 1);
108+
--Act
109+
l_suite.do_execute();
110+
--Assert
111+
ut.expect(l_suite.result).to_equal(ut3.ut_utils.gc_error);
112+
end;
113+
114+
procedure rollback_auto is
115+
l_suite ut3.ut_suite;
116+
begin
117+
--Arrange
118+
execute immediate 'delete from ut3_tester_helper.ut$test_table';
119+
l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_TRANSACTION_CONTROL', a_line_no=> 1);
120+
l_suite.path := 'ut3_tester_helper.ut_transaction_control';
121+
l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_TRANSACTION_CONTROL', 'setup', ut3.ut_utils.gc_before_all));
122+
l_suite.items.extend;
123+
l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => USER, a_object_name => 'ut_transaction_control',a_name => 'test', a_line_no=> 1);
124+
l_suite.set_rollback_type(ut3.ut_utils.gc_rollback_auto);
125+
126+
--Act
127+
l_suite.do_execute();
128+
129+
--Assert
130+
ut.expect(ut3_tester_helper.main_helper.get_value(q'[ut3_tester_helper.ut_transaction_control.count_rows('t')]')).to_equal(0);
131+
ut.expect(ut3_tester_helper.main_helper.get_value(q'[ut3_tester_helper.ut_transaction_control.count_rows('s')]')).to_equal(0);
132+
end;
133+
134+
procedure rollback_auto_on_failure is
135+
begin
136+
ut3_tester_helper.run_helper.test_rollback_type('test_failure', ut3.ut_utils.gc_rollback_auto, equal(0) );
137+
end;
138+
139+
procedure rollback_manual is
140+
begin
141+
ut3_tester_helper.run_helper.test_rollback_type('test', ut3.ut_utils.gc_rollback_manual, be_greater_than(0) );
142+
end;
143+
144+
procedure rollback_manual_on_failure is
145+
begin
146+
ut3_tester_helper.run_helper.test_rollback_type('test_failure', ut3.ut_utils.gc_rollback_manual, be_greater_than(0) );
147+
end;
148+
149+
procedure trim_transaction_invalidators is
150+
l_suite ut3.ut_suite;
151+
begin
152+
--arrange
153+
l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1);
154+
for i in 1 .. 100 loop
155+
l_suite.add_transaction_invalidator('schema_name.package_name.procedure_name'||i);
156+
end loop;
157+
--Act
158+
l_suite.rollback_to_savepoint('dummy_savepoint');
159+
--Assert
160+
ut.expect(l_suite.warnings.count).to_equal(1);
161+
end;
162+
163+
end;
164+
/
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
create or replace package test_ut_suite is
2+
3+
--%suite(ut_suite)
4+
--%suitepath(utplsql.core.framework_tester)
5+
6+
--%beforeeach
7+
procedure cleanup_package_state;
8+
9+
--%test(Disabled flag skips tests execution in suite)
10+
procedure disabled_suite;
11+
12+
--%test(Marks each test as errored if beforeall raises exception)
13+
procedure beforeall_errors;
14+
15+
--%test(Reports warnings for each test if afterall raises exception)
16+
procedure aftereall_errors;
17+
18+
--%beforetest(ut3_tester_helper.run_helper.package_no_body)
19+
--%aftertest(ut3_tester_helper.run_helper.drop_package_no_body)
20+
--%test(Fails all tests in package when package has no body)
21+
procedure package_without_body;
22+
23+
--%test(Fails all tests in package when package body is invalid)
24+
procedure package_with_invalid_body;
25+
26+
--%context( rollback_test )
27+
28+
--%beforeall
29+
procedure create_trans_control;
30+
--%afterall
31+
procedure drop_trans_control;
32+
33+
--%test(Performs automatic rollback after a suite)
34+
procedure rollback_auto;
35+
36+
--%test(Performs automatic rollback after a suite even if test fails)
37+
procedure rollback_auto_on_failure;
38+
39+
--%test(rollback(manual) - disables automatic rollback after a suite)
40+
procedure rollback_manual;
41+
42+
--%test(rollback(manual) - disables automatic rollback after a suite even if test fails)
43+
procedure rollback_manual_on_failure;
44+
45+
--%endcontext
46+
47+
--%test(Transaction invalidators list is trimmed in warnings when too long)
48+
procedure trim_transaction_invalidators;
49+
50+
end;
51+
/

0 commit comments

Comments
 (0)