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

Skip to content

Commit fef260b

Browse files
committed
Resolved issue with running package state invalidation test on 18c.
1 parent 870b04d commit fef260b

4 files changed

Lines changed: 35 additions & 101 deletions

File tree

test/api/test_ut_run.pkb

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -514,11 +514,27 @@ create or replace package body test_ut_run is
514514
end;
515515

516516
procedure create_test_suite is
517+
l_service_name varchar2(100);
517518
pragma autonomous_transaction;
518519
begin
520+
select global_name into l_service_name from global_name;
521+
execute immediate
522+
'create public database link db_loopback connect to ut3_tester identified by ut3
523+
using ''(DESCRIPTION=
524+
(ADDRESS=(PROTOCOL=TCP)
525+
(HOST='||sys_context('userenv','SERVER_HOST')||')
526+
(PORT=1521)
527+
)
528+
(CONNECT_DATA=(SERVICE_NAME='||l_service_name||')))''';
519529
execute immediate q'[
520530
create or replace package stateful_package as
531+
function get_state return varchar2;
532+
end;
533+
]';
534+
execute immediate q'[
535+
create or replace package body stateful_package as
521536
g_state varchar2(1) := 'A';
537+
function get_state return varchar2 is begin return g_state; end;
522538
end;
523539
]';
524540
execute immediate q'[
@@ -527,11 +543,11 @@ create or replace package body test_ut_run is
527543
--%suitepath(test_state)
528544

529545
--%test
530-
--%beforetest(acquire_state,recompile_in_background)
546+
--%beforetest(acquire_state_via_db_link,rebuild_stateful_package)
531547
procedure failing_stateful_test;
532548

533-
procedure recompile_in_background;
534-
procedure acquire_state;
549+
procedure rebuild_stateful_package;
550+
procedure acquire_state_via_db_link;
535551

536552
end;
537553
]';
@@ -540,39 +556,23 @@ create or replace package body test_ut_run is
540556

541557
procedure failing_stateful_test is
542558
begin
543-
ut3.ut.expect(stateful_package.g_state).to_equal('abc');
559+
ut3.ut.expect(stateful_package.get_state@db_loopback).to_equal('abc');
544560
end;
545561

546-
procedure recompile_in_background is
547-
l_job_name varchar2(30) := 'recreate_stateful_package';
548-
l_cnt integer := 1;
562+
procedure rebuild_stateful_package is
549563
pragma autonomous_transaction;
550564
begin
551-
dbms_scheduler.create_job(
552-
job_name => l_job_name,
553-
job_type => 'PLSQL_BLOCK',
554-
job_action => q'/
555-
begin
556-
execute immediate q'[
557-
create or replace package stateful_package as
558-
g_state varchar2(3) := 'abc';
559-
end;]';
560-
end;/',
561-
start_date => localtimestamp,
562-
enabled => TRUE,
563-
auto_drop => TRUE,
564-
comments => 'one-time job'
565-
);
566-
dbms_lock.sleep(1);
567-
while l_cnt > 0 loop
568-
select count(1) into l_cnt
569-
from dba_scheduler_running_jobs srj
570-
where srj.job_name = l_job_name;
571-
end loop;
565+
execute immediate q'[
566+
create or replace package body stateful_package as
567+
g_state varchar2(3) := 'abc';
568+
function get_state return varchar2 is begin return g_state; end;
569+
end;
570+
]';
572571
end;
573-
procedure acquire_state is
572+
573+
procedure acquire_state_via_db_link is
574574
begin
575-
dbms_output.put_line('stateful_package.g_state='||stateful_package.g_state);
575+
dbms_output.put_line('stateful_package.get_state@db_loopback='||stateful_package.get_state@db_loopback);
576576
end;
577577
end;
578578
}';
@@ -589,10 +589,9 @@ create or replace package body test_ut_run is
589589
failing_stateful_test [% sec] (FAILED - 1)%
590590
Failures:%
591591
1) failing_stateful_test
592-
ORA-04061: existing state of package "UT3_TESTER.STATEFUL_PACKAGE" has been invalidated
593-
ORA-04065: not executed, altered or dropped package "UT3_TESTER.STATEFUL_PACKAGE"
594-
ORA-06508: PL/SQL: could not find program unit being called: "UT3_TESTER.STATEFUL_PACKAGE"
595-
ORA-06512: at "UT3_TESTER.TEST_STATEFUL", line 5%
592+
ORA-04068: existing state of packages (DB_LOOPBACK) has been discarded
593+
ORA-04061: existing state of package body "UT3_TESTER.STATEFUL_PACKAGE" has been invalidated
594+
ORA-04065: not executed, altered or dropped package body "UT3_TESTER.STATEFUL_PACKAGE"%
596595
ORA-06512: at line 6%
597596
1 tests, 0 failed, 1 errored, 0 disabled, 0 warning(s)%';
598597

@@ -613,6 +612,7 @@ Failures:%
613612
begin
614613
execute immediate 'drop package stateful_package';
615614
execute immediate 'drop package test_stateful';
615+
begin execute immediate 'drop public database link db_loopback'; exception when others then null; end;
616616
end;
617617

618618
procedure run_in_invalid_state is

test/api/test_ut_run.pks

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ create or replace package test_ut_run is
7979
--%test(Executes successfully an empty suite)
8080
procedure run_func_empty_suite;
8181

82-
--%disabled(Makes session wait for lock on 18.1 due to library cache pin wait)
82+
--disabled(Makes session wait for lock on 18.1 due to library cache pin wait)
8383
--%test(ut.run - raises after completing all tests if a test fails with ORA-04068 or ORA-04061)
8484
--%beforetest(create_test_suite)
8585
--%aftertest(drop_test_suite)

test/core/test_ut_executable.pkb

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -50,32 +50,6 @@ create or replace package body test_ut_executable is
5050
ut.expect(l_executable.get_error_stack_trace()).to_be_like('ORA-06501: PL/SQL: program error%');
5151
end;
5252

53-
procedure create_state_dependant_pkg is
54-
pragma autonomous_transaction;
55-
begin
56-
execute immediate q'[
57-
create or replace package stateful_package as
58-
g_state varchar2(1) := 'A';
59-
end;
60-
]';
61-
execute immediate q'[
62-
create or replace package state_dependant_pkg as
63-
procedure run;
64-
end;
65-
]';
66-
execute immediate q'[
67-
create or replace package body state_dependant_pkg as
68-
procedure run is
69-
x varchar2(30);
70-
begin
71-
if stateful_package.g_state = 'A' then
72-
dbms_output.put_line('stateful_package.g_state = "A"');
73-
end if;
74-
end;
75-
end;
76-
]';
77-
end;
78-
7953
procedure modify_stateful_package is
8054
l_job_name varchar2(30) := 'recreate_stateful_package';
8155
l_cnt integer := 1;
@@ -104,38 +78,6 @@ create or replace package body test_ut_executable is
10478
end loop;
10579
end;
10680

107-
procedure drop_state_dependant_pkg is
108-
pragma autonomous_transaction;
109-
begin
110-
execute immediate 'drop package state_dependant_pkg';
111-
execute immediate 'drop package stateful_package';
112-
end;
113-
114-
115-
procedure exec_invalid_state_proc is
116-
l_executable ut3.ut_executable;
117-
l_test ut3.ut_test;
118-
l_result boolean;
119-
begin
120-
--Arrange
121-
l_test := ut3.ut_test(a_object_name => 'state_dependant_pkg',a_name => 'state_dependant_pkg');
122-
l_executable := ut3.ut_executable_test( user, 'state_dependant_pkg', 'run', ut3.ut_utils.gc_test_execute );
123-
l_result := l_executable.do_execute(l_test);
124-
ut.expect(l_result).to_be_true;
125-
126-
modify_stateful_package;
127-
128-
l_test := ut3.ut_test(a_object_name => 'state_dependant_pkg',a_name => 'state_dependant_pkg');
129-
l_executable := ut3.ut_executable_test( user, 'state_dependant_pkg', 'run', ut3.ut_utils.gc_test_execute );
130-
--Act
131-
l_result := l_executable.do_execute(l_test);
132-
--Assert
133-
ut.expect(l_result).to_be_false;
134-
ut.expect(l_executable.serveroutput).to_be_null;
135-
ut.expect(l_executable.get_error_stack_trace()).to_be_like('ORA-04061: existing state of package "UT3_TESTER.STATEFUL_PACKAGE" has been invalidated%');
136-
ut.expect(ut3.ut_expectation_processor.invalidation_exception_found()).to_be_true;
137-
end;
138-
13981
procedure form_name is
14082
begin
14183
ut.expect(ut3.ut_executable_test( user, 'package', 'proc', null ).form_name()).to_equal(user||'.package.proc');

test/core/test_ut_executable.pks

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,6 @@ create or replace package test_ut_executable is
1414
--%test(Executes a procedure raising exception, saves dbms_output and exception stack trace)
1515
procedure exec_failing_proc;
1616

17-
--%disabled(Makes session wait for lock on 18.1 due to library cache pin wait)
18-
--%test(Sets state invalid flag when package-state invalidated and saves exception stack trace)
19-
--%beforetest(create_state_dependant_pkg)
20-
--%aftertest(drop_state_dependant_pkg)
21-
procedure exec_invalid_state_proc;
22-
procedure create_state_dependant_pkg;
23-
procedure drop_state_dependant_pkg;
24-
2517
--%endcontext
2618

2719
--%context(form_name)

0 commit comments

Comments
 (0)