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

Skip to content

Commit 160a8b9

Browse files
authored
Merge pull request #471 from jgebal/bugfix/package_body_cache_reset
Package body cache is now invalidated after every test run.
2 parents b75dc53 + 3b2075e commit 160a8b9

7 files changed

Lines changed: 105 additions & 8 deletions

File tree

source/api/ut_runner.pkb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ create or replace package body ut_runner is
4949
l_current ut_utils.t_version := ut_utils.to_version(coalesce(a_current,version()));
5050
begin
5151
if l_requested.major = l_current.major
52-
and (l_requested.minor < l_current.minor
53-
or l_requested.minor = l_current.minor and l_requested.bugfix <= l_current.bugfix) then
52+
and (l_requested.minor < l_current.minor or l_requested.minor is null
53+
or l_requested.minor = l_current.minor and (l_requested.bugfix <= l_current.bugfix or l_requested.bugfix is null)) then
5454
l_result := true;
5555
end if;
5656
return ut_utils.boolean_to_int(l_result);
@@ -86,10 +86,12 @@ create or replace package body ut_runner is
8686

8787
ut_utils.cleanup_temp_tables;
8888
ut_output_buffer.close(l_listener.reporters);
89-
exception
89+
ut_metadata.reset_source_definition_cache;
90+
exception
9091
when others then
9192
ut_utils.cleanup_temp_tables;
9293
ut_output_buffer.close(l_listener.reporters);
94+
ut_metadata.reset_source_definition_cache;
9395
dbms_output.put_line(dbms_utility.format_error_backtrace);
9496
dbms_output.put_line(dbms_utility.format_error_stack);
9597
raise;

source/core/ut_expectation_processor.pkb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ create or replace package body ut_expectation_processor as
125125
l_line_no integer;
126126
l_owner varchar2(1000);
127127
l_object_name varchar2(1000);
128+
l_object_full_name varchar2(1000);
128129
l_result varchar2(4000);
129130
-- in 12.2 format_call_stack reportes not only package name, but also the procedure name
130131
-- when 11g and 12c reports only package name
@@ -135,9 +136,10 @@ create or replace package body ut_expectation_processor as
135136
if l_caller_stack_line like '%.%' then
136137
l_line_no := to_number( regexp_substr(l_caller_stack_line,'(0x)?[0-9a-f]+\s+(\d+)',subexpression => 2) );
137138
l_owner := regexp_substr(l_caller_stack_line,'([A-Za-z0-9$#_]+)\.([A-Za-z0-9$#_]|\.)+',subexpression => 1);
138-
l_object_name := regexp_substr(l_caller_stack_line,'([A-Za-z0-9$#_]+)\.(([A-Za-z0-9$#_]|\.)+)',subexpression => 2);
139+
l_object_name := regexp_substr(l_caller_stack_line,'([A-Za-z0-9$#_]+)\.([A-Za-z0-9$#_]+)',subexpression => 2);
140+
l_object_full_name := regexp_substr(l_caller_stack_line,'([A-Za-z0-9$#_]+)\.(([A-Za-z0-9$#_]|\.)+)',subexpression => 2);
139141
if l_owner is not null and l_object_name is not null and l_line_no is not null then
140-
l_result := 'at "' || l_owner || '.' || l_object_name || '", line '|| l_line_no || ' '
142+
l_result := 'at "' || l_owner || '.' || l_object_full_name || '", line '|| l_line_no || ' '
141143
|| ut_metadata.get_source_definition_line(l_owner, l_object_name, l_line_no);
142144
end if;
143145
end if;

source/core/ut_metadata.pkb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,12 @@ create or replace package body ut_metadata as
159159
return l_line;
160160
end;
161161

162+
procedure reset_source_definition_cache is
163+
begin
164+
g_source_cache := null;
165+
g_cached_object := null;
166+
end;
167+
162168
function get_dba_view(a_view_name varchar2) return varchar2 is
163169
l_invalid_object_name exception;
164170
l_result varchar2(128) := lower(a_view_name);
@@ -170,5 +176,6 @@ create or replace package body ut_metadata as
170176
when l_invalid_object_name then
171177
return replace(l_result,'dba_','all_');
172178
end;
179+
173180
end;
174181
/

source/core/ut_metadata.pks

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ create or replace package ut_metadata authid current_user as
7979
*/
8080
function get_source_definition_line(a_owner varchar2, a_object_name varchar2, a_line_no integer) return varchar2;
8181

82+
83+
procedure reset_source_definition_cache;
84+
8285
/*
8386
function: get_dba_view
8487

test/install_tests.sql

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
whenever sqlerror exit failure rollback
2+
whenever oserror exit failure rollback
13

24
@core.pks
35
@ut_utils/test_ut_utils.pks
@@ -23,6 +25,31 @@
2325
@ut_expectations/test_expectations_cursor.pkb
2426
@@ut_runner/test_ut_runner.pkb
2527

26-
show errors
28+
set linesize 200
29+
set define on
30+
set verify off
31+
column text format a100
32+
column error_count noprint new_value error_count
33+
34+
prompt Validating installation
35+
36+
set heading on
37+
select type, name, sequence, line, position, text, count(1) over() error_count
38+
from all_errors
39+
where owner = USER
40+
and name not like 'BIN$%' --not recycled
41+
-- errors only. ignore warnings
42+
and attribute = 'ERROR'
43+
order by name, type, sequence
44+
/
45+
46+
begin
47+
if to_number('&&error_count') > 0 then
48+
raise_application_error(-20000, 'Not all sources were successfully installed.');
49+
else
50+
dbms_output.put_line('Installation completed successfully');
51+
end if;
52+
end;
53+
/
2754

2855
exit

test/ut_runner/test_ut_runner.pkb

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,61 @@ create or replace package body test_ut_runner is
4141
throws('v3.0.0.0','bad_ver');
4242
end;
4343

44+
procedure create_test_spec
45+
as
46+
pragma autonomous_transaction;
47+
begin
48+
execute immediate q'[create or replace package test_cache as
49+
--%suite
50+
51+
--%test
52+
procedure failing_test;
53+
end;
54+
]';
55+
end;
56+
57+
procedure create_test_body(a_number integer)
58+
as
59+
pragma autonomous_transaction;
60+
begin
61+
execute immediate 'create or replace package body test_cache as
62+
procedure failing_test is
63+
begin
64+
ut3.ut.expect('||a_number||').to_be_null;
65+
end;
66+
end;';
67+
end;
68+
69+
procedure drop_test_package
70+
as
71+
pragma autonomous_transaction;
72+
begin
73+
execute immediate 'drop package test_cache';
74+
end;
75+
76+
procedure run_reset_package_body_cache is
77+
l_results ut3.ut_varchar2_list;
78+
l_expected clob;
79+
l_actual clob;
80+
begin
81+
--Arrange
82+
create_test_spec();
83+
create_test_body(0);
84+
select *
85+
bulk collect into l_results
86+
from table(ut3.ut.run('test_cache'));
87+
88+
--Act
89+
create_test_body(1);
90+
select *
91+
bulk collect into l_results
92+
from table(ut3.ut.run('test_cache'));
93+
--Assert
94+
l_actual := ut3.ut_utils.table_to_clob(l_results);
95+
l_expected := '%ut3.ut.expect(1).to_be_null;%';
96+
ut.expect(l_actual).to_be_like(l_expected);
97+
drop_test_package();
98+
end;
99+
44100
end;
45101
/

test/ut_runner/test_ut_runner.pks

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ create or replace package test_ut_runner is
1515
--%test(version_compatibility_check raises exception when invalid version passed)
1616
procedure version_comp_check_exception;
1717

18-
--%test(version_compatibility_check raises exception when invalid version passed)
19-
procedure version_comp_check_exception;
18+
--%test(run resets cache of package body after every run)
19+
procedure run_reset_package_body_cache;
2020

2121
end;
2222
/

0 commit comments

Comments
 (0)