53 %MACRO initSASUnit(i_root =
78 %GLOBAL g_version g_revision;
80 %LET g_version = 1.3.0;
81 %LET g_revision = $Revision: 320 $;
82 %LET g_revision = %scan(&g_revision,2,%str( $:));
84 %LOCAL l_macname l_current_dbversion l_target_abs l_newdb l_rc l_project l_root l_sasunit l_abs l_autoexec l_autoexec_abs
85 l_sascfg l_sascfg_abs l_sasuser l_sasuser_abs l_testdata l_testdata_abs l_refdata l_refdata_abs l_doc l_doc_abs restore_sasautos
86 l_sasautos l_sasautos_abs i l_work l_sysrc l_sasautos_os l_cmdfile l_abspath_sasautos l_abspath_sasautos_os l_sasunitroot
89 %LET l_current_dbversion=0;
90 %LET l_macname=&sysmacroname;
93 libname _tmp
"&i_root.";
94 %let i_root=%sysfunc (pathname(_tmp));
98 libname _tmp
"%sysget(SASUNIT_ROOT)";
99 %let l_sasunitroot=%sysfunc (pathname(_tmp));
107 %IF (&i_verbose. NE 0) %THEN %DO;
112 %IF %_handleError(&l_macname.
114 ,(%upcase(&sysscp.) NE WIN) AND (%upcase(&sysscpl.) NE LINUX)
115 ,Invalid operating system - only WIN%str(,) LINUX
116 ,i_verbose=&i_verbose.
121 %IF (&sysscp. = WIN) %THEN %DO;
122 %LET l_sasautos_os = &i_sasunit./windows;
124 %ELSE %IF (%upcase(&sysscpl.) = LINUX) %THEN %DO;
125 %LET l_sasautos_os = &i_sasunit./linux;
127 %ELSE %IF (%upcase(&sysscpl.) = AIX) %THEN %DO;
128 %LET l_sasautos_os = &i_sasunit./unix_aix;
130 %LET l_abspath_sasautos =%_abspath(&i_root.,&i_sasunit.);
131 %LET l_abspath_sasautos_os=%_abspath(&i_root.,&l_sasautos_os.);
132 OPTIONS SASAUTOS=(SASAUTOS
"&l_abspath_sasautos." "&l_abspath_sasautos_os.");
133 OPTIONS NOQUOTELENMAX;
138 %IF %_handleError(&l_macname.
140 ,(&sysver. NE 9.2) AND (&sysver. NE 9.3) AND (&sysver. NE 9.4)
141 ,Invalid SAS version - only SAS 9.2 to 9.4
142 ,i_verbose=&i_verbose.
148 %IF &i_testcoverage. NE 1 %THEN %DO;
149 %LET i_testcoverage = 0;
153 %IF %_handleError(&l_macname.
155 ,%quote(&syslibrc) NE 0
156 ,Error in parameter io_target: target directory &l_target_abs. cannot be assigned as a SAS library
157 ,i_verbose=&i_verbose.
163 %LET l_target_abs=%_abspath(&i_root,&io_target);
164 %IF %_handleError(&l_macname.
166 ,
"&l_target_abs" EQ
"" OR NOT %_existDir(&l_target_abs)
167 ,Error in parameter io_target: target directory does not exist
168 ,i_verbose=&i_verbose.
172 LIBNAME target
"&l_target_abs";
173 %IF %_handleError(&l_macname
175 ,%quote(&syslibrc.) NE 0
176 ,Error in parameter io_target: target directory &l_target_abs. cannot be assigned as a SAS library
177 ,i_verbose=&i_verbose.
182 %IF %_handleError(&l_macname.
183 ,ErrorTargetLibNotWritable
184 ,%quote(&syserr.) NE 0
185 ,Error in parameter io_target: target directory not writeable
186 ,i_verbose=&i_verbose.
190 DROP TABLE target._test;
194 %IF
"&i_overwrite" NE
"1" %then %LET i_overwrite=0;
195 %IF &i_overwrite %THEN %LET l_newdb=1;
196 %ELSE %LET l_newdb=%eval(NOT %sysfunc(exist(target.tsu)));
198 *** Check tsu db version ***;
199 *** Is there a need to recreate the database? ***;
200 %IF &l_newdb. ne 1 %THEN %DO;
202 if (exist (
"target.tsu")) then
do;
203 did = open (
"target.tsu");
204 if varnum (did,
"tsu_dbVersion") then do;
206 tsu_dbVersion = getvarc (did, varnum (did, "tsu_dbVersion"));
207 call symput ("l_current_dbversion", trim(tsu_dbVersion));
212 %LET l_newdb=%eval ("&l_current_dbversion." NE "&g_version.");
216 %IF &l_newdb %THEN %DO;
218 CREATE TABLE target.tsu(COMPRESS=CHAR)
220 tsu_project CHAR(1000)
222 ,tsu_target CHAR(1000)
223 ,tsu_sasunitroot CHAR(1000)
224 ,tsu_sasunit CHAR(1000)
225 ,tsu_sasunit_os CHAR(1000)
226 ,tsu_sasautos CHAR(1000)
228 ,tsu_sasautos&i CHAR(1000)
230 ,tsu_autoexec CHAR(1000)
231 ,tsu_sascfg CHAR(1000)
232 ,tsu_sasuser CHAR(1000)
233 ,tsu_testdata CHAR(1000)
234 ,tsu_refdata CHAR(1000)
236 ,tsu_lastinit INT FORMAT=datetime21.2
237 ,tsu_lastrep INT FORMAT=datetime21.2
238 ,tsu_testcoverage INT FORMAT=8.
239 ,tsu_dbversion CHAR(8)
240 ,tsu_verbose INT FORMAT=8.
242 INSERT INTO target.tsu VALUES (
243 "","","","","","","","","","","","","","","","","","","","","","",0,0,&i_testcoverage.,"",&i_verbose.
246 CREATE TABLE target.scn(COMPRESS=CHAR)
248 scn_id INT FORMAT=z3.
251 ,scn_start INT FORMAT=datetime21.2
252 ,scn_end INT FORMAT=datetime21.2
255 ,scn_warningcount INT
258 CREATE TABLE target.cas(COMPRESS=CHAR)
260 cas_scnid INT FORMAT=z3.
261 ,cas_id INT FORMAT=z3.
266 ,cas_start INT FORMAT=datetime21.2
267 ,cas_end INT FORMAT=datetime21.2
270 CREATE TABLE target.tst(COMPRESS=CHAR)
272 tst_scnid INT FORMAT=z3.
273 ,tst_casid INT FORMAT=z3.
274 ,tst_id INT FORMAT=z3.
280 ,tst_errmsg CHAR(1000)
283 %IF %_handleError(&l_macname.
286 ,Error on creation of test database
287 ,i_verbose=&i_verbose.
293 %LET l_cmdfile=%sysfunc(pathname(WORK))/remove_dir.cmd;
295 FILE "&l_cmdfile." encoding=pcoem850;
296 PUT "&g_removedir ""&l_target_abs/log""&g_endcommand";
297 PUT "&g_removedir ""&l_target_abs/tst""&g_endcommand";
298 PUT "&g_removedir ""&l_target_abs/rep""&g_endcommand";
300 %_executeCMDFile(&l_cmdfile.);
301 %LET l_rc=%_delfile(&l_cmdfile.);
302 %LET rc = %sysfunc (sleep(2,1));
303 %LET l_cmdfile=%sysfunc(pathname(WORK))/make_dir.cmd;
305 FILE "&l_cmdfile." encoding=pcoem850;
306 PUT "&g_makedir ""&l_target_abs/log""&g_endcommand";
307 PUT "&g_makedir ""&l_target_abs/tst""&g_endcommand";
308 PUT "&g_makedir ""&l_target_abs/rep""&g_endcommand";
310 %_executeCMDFile(&l_cmdfile.);
311 %LET l_rc=%_delfile(&l_cmdfile.);
315 %IF %_handleError(&l_macname.
317 ,NOT %_existdir(&l_target_abs./log)
318 ,folder &l_target_abs./log does not exist
319 ,i_verbose=&i_verbose.
322 %IF %_handleError(&l_macname.
324 ,NOT %_existdir(&l_target_abs./tst)
325 ,folder &l_target_abs./tst does not exist
326 ,i_verbose=&i_verbose.
329 %IF %_handleError(&l_macname.
331 ,NOT %_existdir(&l_target_abs./rep)
332 ,folder &l_target_abs./rep does not exist
333 ,i_verbose=&i_verbose.
337 UPDATE target.tsu SET tsu_target = "&io_target";
342 SELECT tsu_project INTO :l_project FROM target.tsu;
344 %LET l_project=&l_project;
345 %IF "&i_project" NE "" %THEN %LET l_project=&i_project;
346 %IF %_handleError(&l_macname.
349 ,Parameter i_project must be specified
350 ,i_verbose=&i_verbose.
354 UPDATE target.tsu SET tsu_project = "&l_project";
359 SELECT tsu_root INTO :l_root FROM target.tsu;
362 %IF "&i_root" NE "" %THEN %LET l_root=&i_root;
363 %IF %_handleError(&l_macname.
365 ,"&l_root" NE "" AND NOT %_existdir(&l_root)
366 ,%str(Error in parameter i_root: folder must exist when specified)
367 ,i_verbose=&i_verbose.
371 UPDATE target.tsu SET tsu_root = "&l_root";
375 %LET l_sasunitroot=&l_sasunitroot;
376 %IF %_handleError(&l_macname.
378 ,"&l_sasunitroot" NE "" AND NOT %_existdir(&l_sasunitroot)
379 ,%str(Error in parameter l_sasunitroot: folder must exist when specified)
380 ,i_verbose=&i_verbose.
384 UPDATE target.tsu SET tsu_sasunitroot = "&l_sasunitroot";
389 SELECT tsu_sasunit INTO :l_sasunit FROM target.tsu;
391 %LET l_sasunit=&l_sasunit;
392 %IF "&i_sasunit" NE "" %THEN %LET l_sasunit=&i_sasunit;
393 %LET l_abs=%_abspath(&l_root.,&l_sasunit.);
394 %IF %_handleError(&l_macname.
396 ,"&l_abs." EQ "" OR NOT %sysfunc(fileexist(&l_abs./_scenario.sas))
397 ,Error in parameter i_sasunit: SASUnit macro programs not found
398 ,i_verbose=&i_verbose.
402 UPDATE target.tsu SET tsu_sasunit = "&l_sasunit";
406 %LET l_sasautos_os=&l_sasautos_os;
407 %IF %_handleError(&l_macname.
409 ,"&l_abspath_sasautos_os." EQ "" OR NOT %sysfunc(fileexist(&l_abspath_sasautos_os./_oscmds.sas))
410 ,Error in parameter i_sasunit: os-specific SASUnit macro programs not found
411 ,i_verbose=&i_verbose.
415 UPDATE target.tsu SET tsu_sasunit_os = "&l_sasautos_os";
419 SELECT tsu_autoexec INTO :l_autoexec FROM target.tsu;
421 %LET l_autoexec=&l_autoexec;
422 %*** because we need to specify a real blank (%str( )) as parameter, ***;
423 %*** we need to use a different method of assignment. ***;
424 %IF "&i_autoexec" NE "" %THEN %LET l_autoexec=%trim(&i_autoexec);
425 %LET l_autoexec_abs=%_abspath(&l_root,&l_autoexec);
426 %IF %_handleError(&l_macname.
428 ,"&l_autoexec" NE "" AND NOT %sysfunc(fileexist(&l_autoexec_abs%str( )))
429 ,Error in parameter i_autoexec: file not found
430 ,i_verbose=&i_verbose.
434 UPDATE target.tsu SET tsu_autoexec = "&l_autoexec";
439 SELECT tsu_sascfg INTO :l_sascfg FROM target.tsu;
441 %LET l_sascfg=&l_sascfg;
442 %IF "&i_sascfg" NE "" %THEN %LET l_sascfg=&i_sascfg;
443 %LET l_sascfg_abs=%_abspath(&l_root,&l_sascfg);
444 %IF %_handleError(&l_macname.
446 ,"&l_sascfg" NE "" AND NOT %sysfunc(fileexist(&l_sascfg_abs%str( )))
447 ,Error in parameter i_sascfg: file not found
448 ,i_verbose=&i_verbose.
452 UPDATE target.tsu SET tsu_sascfg = "&l_sascfg";
457 SELECT tsu_sasuser INTO :l_sasuser FROM target.tsu;
459 %LET l_sasuser=&l_sasuser;
460 %IF "&i_sasuser" NE "" %THEN %LET l_sasuser=&i_sasuser;
461 %LET l_sasuser_abs=%_abspath(&l_root,&l_sasuser);
462 %IF %_handleError(&l_macname.
464 ,"&l_sasuser_abs" NE "" AND NOT %_existdir(&l_sasuser_abs)
465 ,Error in parameter i_sasuser: folder not found
466 ,i_verbose=&i_verbose.
470 UPDATE target.tsu SET tsu_sasuser = "&l_sasuser";
475 SELECT tsu_testdata INTO :l_testdata FROM target.tsu;
477 %LET l_testdata=&l_testdata;
478 %IF "&i_testdata" NE "" %THEN %LET l_testdata=&i_testdata;
479 %LET l_testdata_abs=%_abspath(&l_root,&l_testdata);
480 %IF %_handleError(&l_macname.
482 ,"&l_testdata_abs" NE "" AND NOT %_existdir(&l_testdata_abs)
483 ,Error in parameter i_testdata: folder not found
484 ,i_verbose=&i_verbose.
488 UPDATE target.tsu SET tsu_testdata = "&l_testdata";
493 SELECT tsu_refdata INTO :l_refdata FROM target.tsu;
495 %LET l_refdata=&l_refdata;
496 %IF "&i_refdata" NE "" %THEN %LET l_refdata=&i_refdata;
497 %LET l_refdata_abs=%_abspath(&l_root,&l_refdata);
498 %IF %_handleError(&l_macname.
500 ,"&l_refdata_abs" NE "" AND NOT %_existdir(&l_refdata_abs)
501 ,Error in parameter i_refdata: folder not found
502 ,i_verbose=&i_verbose.
506 UPDATE target.tsu SET tsu_refdata = "&l_refdata";
511 SELECT tsu_doc INTO :l_doc FROM target.tsu;
514 %IF "&i_doc" NE "" %THEN %LET l_doc=&i_doc;
515 %LET l_doc_abs=%_abspath(&l_root,&l_doc);
516 %IF %_handleError(&l_macname.
518 ,"&l_doc_abs" NE "" AND NOT %_existdir(&l_doc_abs)
519 ,Error in parameter i_doc: folder not found
520 ,i_verbose=&i_verbose.
524 UPDATE target.tsu SET tsu_doc = "&l_doc";
528 %LET restore_sasautos=%sysfunc(getoption(sasautos));
531 SELECT tsu_sasautos INTO :l_sasautos FROM target.tsu;
533 %LET l_sasautos=&l_sasautos;
534 %IF "&i_sasautos" NE "" %THEN %LET l_sasautos=&i_sasautos;
535 %LET l_sasautos_abs=%_abspath(&l_root,&l_sasautos);
536 %IF %_handleError(&l_macname.
538 ,"&l_sasautos_abs" NE "" AND NOT %_existdir(&l_sasautos_abs)
539 ,Error in parameter i_sasautos: folder not found
540 ,i_verbose=&i_verbose.
544 UPDATE target.tsu SET tsu_sasautos = "&l_sasautos";
549 SELECT tsu_sasautos&i. INTO :l_sasautos FROM target.tsu;
551 %LET l_sasautos=&l_sasautos;
552 %IF "&&i_sasautos&i" NE "" %THEN %LET l_sasautos=&&i_sasautos&i;
553 %LET l_sasautos_abs=%_abspath(&l_root,&l_sasautos);
554 %IF %_handleError(&l_macname.
556 ,"&l_sasautos_abs" NE "" AND NOT %_existdir(&l_sasautos_abs)
557 ,Error in parameter i_sasautos&i: folder not found
558 ,i_verbose=&i_verbose.
562 UPDATE target.tsu SET tsu_sasautos&i. = "&l_sasautos";
568 UPDATE target.tsu SET tsu_testcoverage=&i_testcoverage;
569 UPDATE target.tsu SET tsu_verbose =&i_verbose;
573 %_loadEnvironment (i_withLibrefs = 0
578 %IF "&g_error_code" NE "" %THEN %GOTO errexit;
583 %LET l_work = %sysfunc(pathname(work));
584 PROC DATASETS NOLIST NOWARN LIB=work;
589 FILE "&l_work/check_spawning.sas";
590 PUT "LIBNAME awork ""&l_work"";";
591 PUT "DATA awork.check; RUN;";
594 %_runProgramSpawned(i_program =&l_work./check_spawning.sas
596 ,i_generateMcoverage=0
600 %IF %_handleError(&l_macname.
602 ,NOT %sysfunc(exist(work.check))
603 ,Error spawning SAS process in initialization
604 ,i_verbose=&i_verbose.
608 PROC DATASETS NOLIST NOWARN LIB=work;
612 %LET l_rc=%_delFile(&l_work/run.sas);
617 SET tsu_lastinit = %sysfunc(datetime())
624 SET tsu_dbVersion = "&g_version."
629 %PUT ============================ SASUnit has been initialized successfully ==========================;
635 %PUT &g_error: ===================== Error! Testsuite aborted! ===========================================;