Skip to content

Commit d40d58d

Browse files
committed
Reworking migration utility
1 parent 7166bf7 commit d40d58d

File tree

4 files changed

+208
-78
lines changed

4 files changed

+208
-78
lines changed

source/migration/ut3.ut_v2_migration.pkb

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
create or replace package body ut_v2_migration is
22

3+
/*
4+
utPLSQL v2 migration
5+
Copyright 2017 utPLSQL Project
6+
7+
Licensed under the Apache License, Version 2.0 (the "License"):
8+
you may not use this file except in compliance with the License.
9+
You may obtain a copy of the License at
10+
11+
http://www.apache.org/licenses/LICENSE-2.0
12+
13+
Unless required by applicable law or agreed to in writing, software
14+
distributed under the License is distributed on an "AS IS" BASIS,
15+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
See the License for the specific language governing permissions and
17+
limitations under the License.
18+
*/
19+
320
procedure upgrade_v2_package_spec(a_owner_name varchar2, a_packge_name varchar2, a_package_desc varchar2, a_package_prefix varchar2, a_parent_suite varchar2, a_compile_flag boolean) is
421
l_resolved_owner varchar2(128 char);
522
l_resolved_object_name varchar2(128 char);
@@ -81,12 +98,7 @@ create or replace package body ut_v2_migration is
8198

8299
end upgrade_v2_package_spec;
83100

84-
procedure migrate_v2_packages(a_compile_flag boolean default true) is
85-
begin
86-
migrate_v2_packages(a_owner_name => null, a_package_name => null, a_compile_flag => a_compile_flag);
87-
end;
88-
89-
procedure migrate_v2_packages(a_owner_name varchar2, a_package_name varchar2 := null, a_compile_flag boolean := true) is
101+
procedure migrate_v2_packages(a_owner_name varchar2 := null, a_package_name varchar2 := null, a_suite_name varchar2 := null, a_compile_flag boolean := true) is
90102
l_items_processed pls_integer := 0;
91103
l_items_succeeded pls_integer := 0;
92104
l_items_skipped pls_integer := 0;
@@ -119,6 +131,7 @@ create or replace package body ut_v2_migration is
119131
and o.object_type in ('PACKAGE')
120132
and p.owner = nvl(a_owner_name, p.owner)
121133
and p.name = nvl(a_package_name, p.name)
134+
and (s.name = a_suite_name or a_suite_name is null)
122135
and upper(p.name) like upper(nvl(p.prefix, c.prefix))||'%'
123136
) loop
124137
begin
@@ -140,7 +153,7 @@ create or replace package body ut_v2_migration is
140153
if not a_compile_flag then
141154
dbms_output.put('--');
142155
end if;
143-
dbms_output.put_line('INVALID package ' || rec.owner || '.' || rec.name || ' was skipped');
156+
dbms_output.put_line('Package ' || rec.owner || '.' || rec.name || ' is in invalid state - skipping');
144157
l_items_skipped := l_items_skipped +1;
145158
end if;
146159

@@ -177,5 +190,35 @@ create or replace package body ut_v2_migration is
177190

178191
end;
179192

193+
procedure dry_run(a_owner varchar2, a_package varchar2 := null) is
194+
begin
195+
migrate_v2_packages(a_owner_name => a_owner, a_package_name => a_package, a_compile_flag => false);
196+
end;
197+
198+
procedure dry_run_for_suite(a_suite_name varchar2) is
199+
begin
200+
migrate_v2_packages( a_suite_name => a_suite_name, a_compile_flag => false);
201+
end;
202+
203+
procedure dry_run_all is
204+
begin
205+
migrate_v2_packages(a_compile_flag => false);
206+
end;
207+
208+
procedure run(a_owner varchar2, a_package varchar2 := null) is
209+
begin
210+
migrate_v2_packages(a_owner_name => a_owner, a_package_name => a_package);
211+
end;
212+
213+
procedure run_for_suite(a_suite_name varchar2) is
214+
begin
215+
migrate_v2_packages(a_suite_name => a_suite_name);
216+
end;
217+
218+
procedure run_all is
219+
begin
220+
migrate_v2_packages();
221+
end;
222+
180223
end ut_v2_migration;
181224
/

source/migration/ut3.ut_v2_migration.pks

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
create or replace package ut_v2_migration authid current_user is
22

3+
/*
4+
utPLSQL v2 migration
5+
Copyright 2017 utPLSQL Project
6+
7+
Licensed under the Apache License, Version 2.0 (the "License"):
8+
you may not use this file except in compliance with the License.
9+
You may obtain a copy of the License at
10+
11+
http://www.apache.org/licenses/LICENSE-2.0
12+
13+
Unless required by applicable law or agreed to in writing, software
14+
distributed under the License is distributed on an "AS IS" BASIS,
15+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
See the License for the specific language governing permissions and
17+
limitations under the License.
18+
*/
19+
320
/*
421
procedure: upgrade_v2_package_spec
522

@@ -28,8 +45,13 @@ create or replace package ut_v2_migration authid current_user is
2845
ex_package_parsing_failed exception;
2946
pragma exception_init(ex_package_parsing_failed, -20401);
3047

31-
procedure migrate_v2_packages(a_owner_name varchar2, a_package_name varchar2 := null, a_compile_flag boolean := true);
32-
procedure migrate_v2_packages(a_compile_flag boolean := true);
48+
procedure dry_run(a_owner varchar2, a_package varchar2 := null);
49+
procedure dry_run_for_suite(a_suite_name varchar2);
50+
procedure dry_run_all;
51+
52+
procedure run(a_owner varchar2, a_package varchar2 := null);
53+
procedure run_for_suite(a_suite_name varchar2);
54+
procedure run_all;
3355

3456
end ut_v2_migration;
3557
/

test/migration_test/test_migration.pkb

Lines changed: 107 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -8,44 +8,33 @@ begin
88
end if;
99
return substr( a_string, l_start_pos, a_end_pos - l_start_pos + 1);
1010
end;]';
11-
gc_test_package varchar2(32767) := q'[create or replace package ut_betwnstr as
11+
gc_ut_betwnstr_package varchar2(32767) := q'[create or replace package ut_betwnstr as
1212
procedure ut_setup;
1313
procedure ut_teardown;
1414
procedure ut_normal_case;
15-
procedure ut_zero_start_position;
16-
procedure ut_big_end_position;
17-
procedure ut_null_string;
18-
procedure ut_bad_params;
19-
procedure ut_bad_test;
2015
end;
2116
]';
22-
gc_test_package_body varchar2(32767) := q'[create or replace package body ut_betwnstr as
17+
gc_ut_betwnstr_body varchar2(32767) := q'[create or replace package body ut_betwnstr as
2318
procedure ut_setup is begin null; end;
2419
procedure ut_teardown is begin null; end;
2520
procedure ut_normal_case is
2621
begin
2722
utassert.eq( 'Returns substring from start position to end position',betwnstr( '1234567', 2, 5 ), '2345');
2823
end;
29-
procedure ut_zero_start_position is
30-
begin
31-
utassert.eq( 'Returns substring when start position is zero', betwnstr( '1234567', 0, 5 ), '12345');
32-
end;
33-
procedure ut_big_end_position is
34-
begin
35-
utassert.eq( 'Returns string until end if end position is greater than string length', betwnstr( '1234567', 0, 500 ), '1234567') ;
36-
end;
37-
procedure ut_null_string is
38-
begin
39-
utassert.isnull( 'Returns null for null input string value', betwnstr( null, 2, 5 ) );
40-
end;
41-
procedure ut_bad_params is
42-
begin
43-
utassert.isnull( 'A demo of test raising runtime exception', betwnstr( '1234567', 'a', 'b' ) );
44-
end;
45-
procedure ut_bad_test
46-
is
24+
end;
25+
]';
26+
gc_ut_betwnstr_new_package varchar2(32767) := q'[create or replace package ut_betwnstr_new as
27+
procedure ut_setup;
28+
procedure ut_teardown;
29+
procedure ut_normal_case;
30+
end;
31+
]';
32+
gc_ut_betwnstr_new_body varchar2(32767) := q'[create or replace package body ut_betwnstr_new as
33+
procedure ut_setup is begin null; end;
34+
procedure ut_teardown is begin null; end;
35+
procedure ut_normal_case is
4736
begin
48-
utassert.eq( 'A demo of failing test', betwnstr( '1234567', 0, 500 ), '1');
37+
utassert.eq( 'Returns substring from start position to end position',betwnstr( '1234567', 2, 5 ), '2345');
4938
end;
5039
end;
5140
]';
@@ -60,63 +49,80 @@ end;
6049
ut3.ut_coverage.coverage_stop_develop();
6150
end;
6251

63-
procedure create_ut_v2_package is
52+
procedure create_ut_v2_packages is
6453
pragma autonomous_transaction;
6554
begin
6655
execute immediate gc_tested_function;
67-
execute immediate gc_test_package;
68-
execute immediate gc_test_package_body;
56+
execute immediate gc_ut_betwnstr_package;
57+
execute immediate gc_ut_betwnstr_body;
58+
execute immediate gc_ut_betwnstr_new_package;
59+
execute immediate gc_ut_betwnstr_new_body;
60+
dbms_output.put_line('create_ut_v2_packages');
6961
end;
7062

71-
procedure remove_ut_v2_execution is
63+
procedure remove_ut_v2_executions is
64+
pragma autonomous_transaction;
7265
begin
66+
dbms_output.put_line('remove_ut_v2_executions');
7367
utpackage.rem(to_number(null),'UT_BETWNSTR');
68+
utpackage.rem(to_number(null),'UT_BETWNSTR_NEW');
69+
utSuite.rem('MIGRATION');
70+
commit;
7471
end;
7572

76-
procedure drop_ut_v2_package is
73+
procedure drop_ut_v2_packages is
7774
pragma autonomous_transaction;
78-
begin
75+
procedure exec(p_what varchar2) is
7976
begin
80-
execute immediate q'[drop package ut_betwnstr]';
81-
exception
82-
when others then
83-
null;
84-
end;
85-
begin
86-
execute immediate q'[drop function betwnstr]';
77+
execute immediate p_what;
8778
exception
8879
when others then
8980
null;
9081
end;
82+
83+
begin
84+
dbms_output.put_line('drop_ut_v2_packages');
85+
exec('drop package ut_betwnstr');
86+
exec('drop package ut_betwnstr_new');
87+
exec('drop function betwnstr');
88+
remove_ut_v2_executions;
9189
end;
9290

93-
procedure execute_ut_v2_betwnstr is
91+
procedure register_ut_v2_packages is
92+
pragma autonomous_transaction;
9493
begin
94+
dbms_output.put_line('register_ut_v2_packages');
9595
utplsql.run('UT_BETWNSTR');
96+
utSuite.add ('MIGRATION');
97+
utPackage.add('MIGRATION', 'UT_BETWNSTR_NEW');
98+
utplsql.testsuite ('MIGRATION');
99+
commit;
96100
end;
97101

98102
procedure ut_v2_with_no_executions is
99103
pragma autonomous_transaction;
104+
l_package clob;
100105
begin
101106
--act
102-
ut_v2_migration.migrate_v2_packages(user);
107+
ut_v2_migration.run(user);
103108
--assert
104-
ut.expect( dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR') ).not_to_match('-- %suite');
105-
ut.expect( dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR') ).not_to_match('-- %test');
106-
ut.expect( dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR') ).not_to_match('-- %beforeall');
107-
ut.expect( dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR') ).not_to_match('-- %afterall');
109+
l_package := dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR');
110+
ut.expect( l_package ).not_to_match('-- %suite');
111+
ut.expect( l_package ).not_to_match('-- %test');
112+
ut.expect( l_package ).not_to_match('-- %beforeall');
113+
ut.expect( l_package ).not_to_match('-- %afterall');
108114
end;
109115

110116
procedure ut_v2_dropped_package is
111117
l_sqlcode integer;
112118
pragma autonomous_transaction;
113119
begin
114120
--arrange
115-
drop_ut_v2_package;
121+
drop_ut_v2_packages;
116122
--act
117123
begin
118124
dbms_output.disable;
119-
ut_v2_migration.migrate_v2_packages(user);
125+
ut_v2_migration.run(user);
120126
dbms_output.enable;
121127
exception
122128
when others then
@@ -125,16 +131,64 @@ end;
125131
ut.expect(l_sqlcode).to_be_null;
126132
end;
127133

128-
procedure ut_v2_migration_success is
134+
procedure ut_v2_migration_one_pkg is
135+
pragma autonomous_transaction;
136+
l_package clob;
137+
begin
138+
--act
139+
ut_v2_migration.run(user, 'UT_BETWNSTR');
140+
--assert
141+
l_package := dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR');
142+
ut.expect( l_package ).to_match('-- %suite');
143+
ut.expect( l_package ).not_to_match('-- %suitepath');
144+
ut.expect( l_package ).to_match('-- %test');
145+
ut.expect( l_package ).to_match('-- %beforeall');
146+
ut.expect( l_package ).to_match('-- %afterall');
147+
l_package := dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR_NEW');
148+
ut.expect( l_package ).not_to_match('-- %suite');
149+
end;
150+
151+
procedure ut_v2_migration_one_suite is
152+
pragma autonomous_transaction;
153+
l_package clob;
154+
begin
155+
--act
156+
ut_v2_migration.run_for_suite('MIGRATION');
157+
--assert
158+
l_package := dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR_NEW');
159+
ut.expect( l_package ).to_match('-- %suite');
160+
ut.expect( l_package ).to_match('-- %suitepath(MIGRATION)');
161+
ut.expect( l_package ).to_match('-- %test');
162+
ut.expect( l_package ).to_match('-- %beforeall');
163+
ut.expect( l_package ).to_match('-- %afterall');
164+
l_package := dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR');
165+
ut.expect( l_package ).not_to_match('-- %suite');
166+
end;
167+
168+
procedure ut_v2_migration_one_schema is
169+
pragma autonomous_transaction;
170+
l_package clob;
171+
begin
172+
--act
173+
ut_v2_migration.run(USER);
174+
--assert
175+
l_package := dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR_NEW');
176+
ut.expect( l_package ).to_match('-- %suite');
177+
l_package := dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR');
178+
ut.expect( l_package ).to_match('-- %suite');
179+
end;
180+
181+
procedure ut_v2_migration_all is
129182
pragma autonomous_transaction;
183+
l_package clob;
130184
begin
131185
--act
132-
ut_v2_migration.migrate_v2_packages(user);
186+
ut_v2_migration.run_all;
133187
--assert
134-
ut.expect( dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR') ).to_match('-- %suite');
135-
ut.expect( dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR') ).to_match('-- %test');
136-
ut.expect( dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR') ).to_match('-- %beforeall');
137-
ut.expect( dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR') ).to_match('-- %afterall');
188+
l_package := dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR_NEW');
189+
ut.expect( l_package ).to_match('-- %suite');
190+
l_package := dbms_metadata.get_ddl('PACKAGE','UT_BETWNSTR');
191+
ut.expect( l_package ).to_match('-- %suite');
138192
end;
139193

140194
end;

0 commit comments

Comments
 (0)