[Home] [Help]
PACKAGE BODY: APPS.FND_CP_RT_PKG
Source
1 package body FND_CP_RT_PKG as
2 /* $Header: AFCPPRTB.pls 120.2 2007/12/18 22:23:51 ckclark ship $ */
3 --
4 -- Package
5 -- FND_CP_RT_PKG
6 --
7 -- Purpose
8 -- Concurrent processing PL/SQL regression testing
9 --
10 -- History
11 -- XX-XXX-02 Christina Clark Created
12 --
13
14 --
15 -- PRIVATE VARIABLES
16 --
17
18 --
19 -- EXCEPTION INFO
20 --
21
22 --
23 -- PRIVATE PROCEDURES/FUNCTIONS
24 --
25
26 -- --
27 -- Name
28 -- section_title
29 -- Purpose
30 -- Called to print title for each section
31 -- Parameters
32 -- which - log or output file? Either FND_FILE.LOG or FND_FILE.OUTPUT
33 -- title - title of section
34 --
35 -- --
36
37 procedure section_title (which IN number,
38 title IN varchar2) is
39
40 begin
41 FND_FILE.NEW_LINE(which);
42 FND_FILE.PUT_LINE(which, '----------------------------------------------------------------');
43 FND_FILE.PUT_LINE(which, title);
44 FND_FILE.PUT_LINE(which, '----------------------------------------------------------------');
45 end section_title;
46
47 --
48 -- PUBLIC PROCEDURES/FUNCTIONS
49 --
50
51 /* Sleep for duration seconds */
52 procedure sleep ( duration IN varchar2) is
53 begin
54 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Sleeping for '
55 || duration
56 || ' seconds... Current time: '
57 || to_char(sysdate, 'DD-MON-RR HH24:MI:SS'));
58
59 DBMS_LOCK.SLEEP(TO_NUMBER(duration));
60
61 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Sleep finished... Current time: '
62 || to_char(sysdate, 'DD-MON-RR HH24:MI:SS'));
63 FND_FILE.NEW_LINE(FND_FILE.LOG);
64 end sleep;
65
66 /* Run program in stripped down fashion */
67 procedure basic( errbuf OUT NOCOPY varchar2,
68 retcode OUT NOCOPY varchar2) is
69 begin
70
71 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Start of Concurrent Processing Regression Test...');
72 FND_FILE.PUT_LINE(FND_FILE.LOG, 'End of Concurrent Processing Regression Test...');
73 -- -----------------------------
74 -- Set errbuf and retcode
75 -- -----------------------------
76 errbuf := 'Success';
77 retcode := 0 ;
78 return;
79 end basic;
80
81 /* Select and display data */
82 procedure verify_values ( run_mode IN varchar2,
83 duration IN varchar2,
84 p_num IN varchar2,
85 p_date IN varchar2,
86 p_varchar IN varchar2) is
87
88 l_nls_lang nls_session_parameters.value%TYPE;
89 l_nls_terr nls_session_parameters.value%TYPE;
90 l_nls_num_char nls_session_parameters.value%TYPE;
91 l_nls_date_fmt nls_session_parameters.value%TYPE;
92 l_nls_date_lang nls_session_parameters.value%TYPE;
93 l_db_inst v$instance.instance_name%TYPE;
94
95 begin
96 -- ----------------------------------------------
97 -- Use FND_FILE to output messages at each stage
98 -- ----------------------------------------------
99
100 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Start of Concurrent Processing Regression Test...');
101 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Start of Concurrent Processing Regression Test...');
102 FND_FILE.NEW_LINE(FND_FILE.OUTPUT);
103
104 --
105 -- Verify IN parameter values
106 -- Right now we simply print out all three as varchar parameters. May find value
107 -- later in adding some verification for dates and numbers...
108 --
109 FND_FILE.NEW_LINE(FND_FILE.LOG);
110 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Verify IN parameter values...');
111 section_title(FND_FILE.OUTPUT, 'Verify IN parameter values...');
112 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'run_mode = ' || run_mode);
113 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'duration = ' || duration);
114 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'p_num = ' || nvl(p_num, 'NULL'));
115 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'p_date = ' || nvl(p_date, 'NULL'));
116 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'p_varchar ' || nvl(p_varchar, 'NULL'));
117
118 --
119 -- Verify the FND_GLOBAL values
120 --
121 FND_FILE.NEW_LINE(FND_FILE.LOG);
122 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Verify FND_GLOBAL values...');
123 SECTION_TITLE(FND_FILE.OUTPUT, 'Verify FND_GLOBAL values...');
124
125 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'User name = ' || fnd_global.user_name);
126 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'User id = ' || fnd_global.user_id);
127 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Resp name = ' || fnd_global.resp_name);
128 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Resp id = ' || fnd_global.resp_id);
129 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Resp app name = ' || fnd_global.application_name);
130 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Resp app short name = ' || fnd_global.application_short_name);
131 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Resp app id = ' || fnd_global.resp_appl_id);
132 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Security group id = ' || fnd_global.security_group_id);
133 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Login id = ' || fnd_global.login_id);
134 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Conc login id = ' || fnd_global.conc_login_id);
135 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Prog app id = ' || fnd_global.prog_appl_id);
136 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Conc program id = ' || fnd_global.conc_program_id);
137 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Conc request id = ' || fnd_global.conc_request_id);
138 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Conc priority request = ' || fnd_global.conc_priority_request);
139 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Per business group id = ' || fnd_global.per_business_group_id);
140 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Per security profile id = ' || fnd_global.per_security_profile_id);
141 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Language count = ' || fnd_global.language_count);
142 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Current language = ' || fnd_global.current_language);
143 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Base language = ' || fnd_global.base_language);
144
145 --
146 -- Verify NLS session parameter values
147 --
148 FND_FILE.NEW_LINE(FND_FILE.LOG);
149 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Verify NLS session parameter values...');
150 SECTION_TITLE(FND_FILE.OUTPUT, 'Verify NLS session parameter values...');
151
152 Select Value Into l_nls_lang
153 From Nls_Session_Parameters
154 Where Upper(Parameter) = 'NLS_LANGUAGE';
155 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'NLS_LANGUAGE = ' || l_nls_lang);
156
157 Select Value Into l_nls_terr
158 From Nls_Session_Parameters
159 Where Upper(Parameter) = 'NLS_TERRITORY';
160 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'NLS_TERRITORY = ' || l_nls_terr);
161
162 Select Value Into l_nls_num_char
163 From Nls_Session_Parameters
164 Where Upper(Parameter) = 'NLS_NUMERIC_CHARACTERS';
165 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'NLS_NUMERIC_CHARACTERS = ' || l_nls_num_char);
166
167 Select Value Into l_nls_date_fmt
168 From Nls_Session_Parameters
169 Where Upper(Parameter) = 'NLS_DATE_FORMAT';
170 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'NLS_DATE_FORMAT = ' || l_nls_date_fmt);
171
172 Select Value Into l_nls_date_lang
173 From Nls_Session_Parameters
174 Where Upper(Parameter) = 'NLS_DATE_LANGUAGE';
175 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'NLS_DATE_LANGUAGE = ' || l_nls_date_lang);
176
177 --
178 -- Verify current database instance
179 --
180 Select Instance_Name Into l_db_inst
181 From V$Instance;
182 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Current DB Instance = ' || l_db_inst);
183
184
185 end verify_values;
186
187 /* Submit a single request */
188 procedure submit_single_request(errbuf OUT NOCOPY varchar2,
189 retcode OUT NOCOPY varchar2) is
190
191 l_rpt_end_time varchar2(30);
192 l_printer fnd_printer.printer_name%TYPE;
193 reqid fnd_concurrent_requests.request_id%TYPE;
194
195 begin
196
197 -- -----------------------
198 -- Submit a single request
199 -- -----------------------
200 FND_FILE.NEW_LINE(FND_FILE.OUTPUT);
201 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Submit a single request...');
202 SECTION_TITLE(FND_FILE.LOG, 'Submit a single request...');
203 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Prepare to submit a single request...');
204
205 -- Set repeat options
206 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Set repeat options...2 resubmissions, 1 min apart, increment dates.');
207
208 Select to_char(SYSDATE + (3/1440), 'DD-MON-YYYY HH24:MI:SS')
209 Into l_rpt_end_time
210 From Dual;
211 if (not fnd_request.set_repeat_options(
212 repeat_interval => 1,
213 repeat_unit => 'MINUTES',
214 repeat_end_time => l_rpt_end_time,
215 increment_dates => 'Y'))
216 then
217 errbuf := substr(fnd_message.get, 1, 240);
218 retcode := 2;
219 rollback;
220 return;
221 end if;
222
223 -- Set print options
224
225 FND_PROFILE.GET('PRINTER', l_printer);
226 if l_printer IS NULL then
227 FND_FILE.PUT_LINE (FND_FILE.LOG, 'Printer is null, will not set print options.');
228 else
229 FND_FILE.PUT_LINE (FND_FILE.LOG, 'Printer is ' || l_printer );
230 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Set print options...one copy to default printer.');
231 end if;
232 if (not fnd_request.set_print_options(
233 printer => l_printer,
234 style => 'PORTRAIT',
235 copies => 1,
236 save_output => TRUE,
237 print_together => NULL))
238 then
239 errbuf := substr(fnd_message.get, 1, 240);
240 retcode := 2;
241 rollback;
242 return;
243 end if;
244
245 -- Add a notification to SYSADMIN user
246 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Add notification to SYSADMIN user...');
247
248 if (not fnd_request.add_notification(user => 'SYSADMIN')) then
249 errbuf := substr(fnd_message.get, 1, 240);
250 retcode := 2;
251 rollback;
252 return;
253 end if;
254
255 -- Submit the request for FNDCPRT_PLSQL with run_mode='BASIC'
256 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Submit a request for FNDCPRT_PLSQL in BASIC run_mode...');
257
258 reqid := fnd_request.submit_request(application => 'FND',
259 program => 'FNDCPRT_PLSQL',
260 description => 'Test of Single Request Submission',
261 argument1 => 'BASIC'); -- run_mode = 'BASIC'
262
263 if reqid = 0 then
264 errbuf := substr(fnd_message.get, 1, 240);
265 retcode := 2;
266 rollback;
267 return;
268 end if;
269
270 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Single submission request id = ' || reqid);
271 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Single request submission completed successfully.');
272 end submit_single_request;
273
274 /* Submit a single child request */
275 procedure submit_sub_request( errbuf OUT NOCOPY varchar2,
276 retcode OUT NOCOPY varchar2) is
277
278 reqid fnd_concurrent_requests.request_id%TYPE;
279
280 begin
281 -- ---------------------------
282 -- Submit a single sub-request
283 -- ---------------------------
284 FND_FILE.NEW_LINE(FND_FILE.OUTPUT);
285 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Submit a single sub-request...');
286 SECTION_TITLE(FND_FILE.LOG, 'Submit a single sub-request...');
287 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Submit a single sub-request...');
288 -- Submit the child request. The sub_request parameter must be set to 'Y'.
289 reqid := fnd_request.submit_request(application => 'FND',
290 program => 'FNDCPRT_PLSQL',
291 description => 'Test of Single Sub-request Submission',
292 sub_request => TRUE,
293 argument1 => 'BASIC'); -- run_mode = 'BASIC'
294
295 if reqid = 0 then
296 -- If request submission failed, exit with error.
297 errbuf := fnd_message.get;
298 retcode := 2;
299 else
300 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Single sub-request submission completed successfully.');
301
302 errbuf := 'Phase 1 complete:';
303 retcode := 0 ;
304 end if;
305
306 return;
307
308 end submit_sub_request;
309
310 /* Submit a request set */
311 procedure submit_request_set( errbuf OUT NOCOPY varchar2,
312 retcode OUT NOCOPY varchar2) is
313
314 l_success boolean;
315 reqid fnd_concurrent_requests.request_id%TYPE;
316 req_data varchar2(10);
317 srs_failed exception;
318 submitprog_failed exception;
319 submitset_failed exception;
320
321 begin
322
323 -- --------------------
324 -- Submit a request set
325 -- --------------------
326
327 FND_FILE.NEW_LINE(FND_FILE.OUTPUT);
328 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Submit a request set...');
329 SECTION_TITLE(FND_FILE.LOG, 'Submit a request set...');
330
331 -- Step 1 - call set_request_set
332 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call set_request_set...');
333
334 l_success := fnd_submit.set_request_set('FND', 'FNDCPRT_SET');
335 if ( not l_success ) then
336 raise srs_failed;
337 end if;
338
339 -- Step 2 - call submit program for each program in the set
340
341 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit program first time...');
342
343 l_success := fnd_submit.submit_program('FND','FNDCPRT_PLSQL', 'STAGE10', 'BASIC', '0', chr(0));
344 if ( not l_success ) then
345 raise submitprog_failed;
346 end if;
347
348 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit program second time...');
349
350 l_success := fnd_submit.submit_program('FND','FNDCPRT_SQLPLUS', 'STAGE20', 'BASIC', '0', '', '', '', chr(0));
351 if ( not l_success ) then
352 raise submitprog_failed;
353 end if;
354
355 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit program third time...');
356
357 l_success := fnd_submit.submit_program('FND','FNDCPRT_HOST', 'STAGE30', 'BASIC', '0', chr(0));
358 if ( not l_success ) then
359 raise submitprog_failed;
360 end if;
361
362 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit program fourth time...');
363
364 l_success := fnd_submit.submit_program('FND','FNDCPRT_SQLLOAD', 'STAGE40', '$FND_TOP/patch/115/import/fndcpldr.dat', chr(0));
365 if ( not l_success ) then
366 raise submitprog_failed;
367 end if;
368
369 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit program fifth time...');
370
371 l_success := fnd_submit.submit_program('FND','FNDCPRT_JAVA', 'STAGE50', 'BASIC', '0', chr(0));
372 if ( not l_success ) then
373 raise submitprog_failed;
374 end if;
375
376 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit program sixth time...');
377
378 l_success := fnd_submit.submit_program('FND','FNDCPRT_SPWN', 'STAGE60', 'BASIC', '0', chr(0));
379 if ( not l_success ) then
380 raise submitprog_failed;
381 end if;
382
383 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit program seventh time...');
384
385 l_success := fnd_submit.submit_program('FND','FNDCPRT_RPTTXT', 'STAGE70', 'BASIC', '0', chr(0));
386 if ( not l_success ) then
387 raise submitprog_failed;
388 end if;
389
390 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit program eighth time...');
391
392 l_success := fnd_submit.submit_program('FND','FNDCPRT_RPTPS', 'STAGE80', 'BASIC', '0', chr(0));
393 if ( not l_success ) then
394 raise submitprog_failed;
395 end if;
396
397 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit program ninth time...');
398
399 l_success := fnd_submit.submit_program('FND','FNDCPRT_PERL', 'STAGE90', 'BASIC', '0', chr(0));
400 if ( not l_success ) then
401 raise submitprog_failed;
402 end if;
403
404 -- Step 3 - call submit_set
405 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Call submit_set...');
406
407 -- ----------------------------------------------
408 -- If we are running as a PL/SQL concurrent program, submit the set as a sub-request.
409 -- If we are running as a standalone PL/SQL procedure, submit the set as an in indivdual request.
410 -- Check req_data: if NULL, we are running as a standalone
411 -- ----------------------------------------------
412 req_data := fnd_conc_global.request_data;
413 if (req_data IS NULL) then
414 reqid := fnd_submit.submit_set(null,false);
415 else
416 reqid := fnd_submit.submit_set(null,true);
417 end if;
418
419 if (reqid = 0 ) then
420 raise submitset_failed;
421 end if;
422
423 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Request set submission completed successfully.');
424
425 errbuf := 'Phase 2 complete:';
426 retcode := 0 ;
427
428 return;
429 exception
430 when srs_failed then
431 errbuf := 'Call to set_request_set failed: ' || fnd_message.get;
432 retcode := 2;
433 fnd_file.put_line(fnd_file.log, errbuf);
434 when submitprog_failed then
435 errbuf := 'Call to submit_program failed: ' || fnd_message.get;
436 retcode := 2;
437 fnd_file.put_line(fnd_file.log, errbuf);
438 when submitset_failed then
439 errbuf := 'Call to submit_set failed: ' || fnd_message.get;
440 retcode := 2;
441 fnd_file.put_line(fnd_file.log, errbuf);
442 when others then
443 errbuf := 'Request set submission failed - unknown error: ' || sqlerrm;
444 retcode := 2;
445 fnd_file.put_line(fnd_file.log, errbuf);
446
447 end submit_request_set;
448
449 /* Write a message that all phases complete */
450 procedure finish( errbuf OUT NOCOPY varchar2,
451 retcode OUT NOCOPY varchar2) is
452
453 begin
454
455 FND_FILE.NEW_LINE(FND_FILE.LOG, 2);
456 FND_FILE.PUT_LINE(FND_FILE.LOG, 'All tests complete!');
457 FND_FILE.PUT_LINE(FND_FILE.LOG, 'End of Concurrent Processing Regression Test...');
458 FND_FILE.NEW_LINE(FND_FILE.OUTPUT);
459 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'End of Concurrent Processing Regression Test...');
460
461
462 errbuf := 'Success:';
463 retcode := 0 ;
464 return;
465
466 end finish;
467
468 /* Main concurrent program procedure */
469 procedure fnd_cp_rt_proc(
470 errbuf out NOCOPY varchar2,
471 retcode out NOCOPY varchar2,
472 run_mode in varchar2 default 'BASIC',
473 duration in varchar2 default '0',
474 p_num in varchar2 default NULL,
475 p_date in varchar2 default NULL,
476 p_varchar in varchar2 default NULL) is
477
478 req_data varchar2(10);
479
480 begin
481
482 -- ----------------------------------------------
483 -- Check req_data:
484 -- if req_data IS NULL, first time into the program - Phase 1
485 -- if req_data = 'Phase_2' reawakened after sub-request has completed - Phase 2
486 -- if req_data = 'Phase_3' reawakened after request set has completed - Phase 3
487 -- ----------------------------------------------
488 req_data := fnd_conc_global.request_data;
489 FND_FILE.PUT_LINE(FND_FILE.LOG, 'req_data = ' || req_data);
490
491 if (req_data IS NULL and TO_NUMBER(duration) > 0) then
492 sleep (duration);
493 end if;
494
495 if (upper(run_mode) = 'FULL') then
496
497 if (req_data IS NULL) then
498 /*------------------------------------------------------------------------------+
499 | PHASE 1 |
500 +-------------------------------------------------------------------------------*/
501 sleep(duration);
502 verify_values(run_mode, duration, p_num, p_date, p_varchar);
503 submit_single_request(errbuf, retcode);
504 submit_sub_request(errbuf, retcode);
505
506 -- Set the globals to put the program into the PAUSED status on exit,
507 -- and to save the state in request_data.
508 fnd_conc_global.set_req_globals(conc_status => 'PAUSED',
509 request_data => 'Phase_2') ;
510
511 elsif (req_data = 'Phase_2') then -- Phase 1 has completed
512 /*------------------------------------------------------------------------------+
513 | PHASE 2 |
514 +-------------------------------------------------------------------------------*/
515 submit_request_set(errbuf, retcode);
516 -- Here we set the globals to put the program into the PAUSED status on exit,
517 -- and to save the state in request_data.
518 fnd_conc_global.set_req_globals(conc_status => 'PAUSED',
519 request_data => 'Phase_3') ;
520
521 else -- Phase 2 has completed
522 /*-------------------------------------------------------------------------------+
523 | PHASE 3 |
524 +-------------------------------------------------------------------------------*/
525 finish(errbuf, retcode);
526 -- Set globals to set request_data for program into FINISHED state
527 fnd_conc_global.set_req_globals(request_data => 'Finished');
528 end if;
529
530 elsif (upper(run_mode) = 'BASIC') then
531 basic(errbuf, retcode);
532 else
533 -- -----------------------------
534 -- Set errbuf and retcode
535 -- -----------------------------
536 errbuf := 'Failure: Invalid RUN_MODE parameter: '|| run_mode;
537 retcode := 2 ;
538 return;
539 end if;
540
541 end fnd_cp_rt_proc;
542
543 end fnd_cp_rt_pkg;