75 %LOCAL l_macname; %LET l_macname=&sysmacroname;
79 libname _tmp
"&i_root.";
80 %let i_root=%sysfunc (pathname(_tmp));
84 %_sasunit_initErrorHandler;
87 %IF %_sasunit_handleError( &l_macname
89 , (&sysscp. NE WIN) AND (&sysscp. NE LINUX)
90 , Invalid operating system - only WIN and LINUX)
97 %IF %_sasunit_handleError( &l_macname
99 , (&sysver. NE 9.1) AND (&sysver. NE 9.2) AND (&sysver. NE 9.3)
100 , Invalid SAS version - only SAS 9.1 to 9.3)
105 %LET l_target_abs=%_sasunit_abspath(&i_root,&io_target);
106 %IF %_sasunit_handleError(&l_macname, InvalidTargetDir,
107 "&l_target_abs" EQ
"" OR NOT %_sasunit_existDir(&l_target_abs),
108 Error in parameter io_target: target directory does not exist)
111 LIBNAME target
"&l_target_abs";
112 %IF %_sasunit_handleError(&l_macname, ErrorTargetLib,
113 %quote(&syslibrc) NE 0,
114 Error in parameter io_target: target directory &l_target_abs. cannot be assigned as a SAS library)
118 %IF %_sasunit_handleError(&l_macname, ErrorTargetLibNotWritable,
119 %quote(&syserr) NE 0,
120 Error in parameter io_target: target directory not writeable)
123 DROP TABLE target._test;
128 %IF
"&i_overwrite" NE
"1" %then %LET i_overwrite=0;
129 %IF &i_overwrite %THEN %LET l_newdb=1;
130 %ELSE %LET l_newdb=%eval(NOT %sysfunc(exist(target.tsu)));
133 %IF &l_newdb %THEN %DO;
135 CREATE TABLE target.tsu (
136 tsu_project CHAR(255)
138 ,tsu_target CHAR(255)
139 ,tsu_sasunit CHAR(255)
140 ,tsu_sasautos CHAR(255)
142 ,tsu_sasautos&i CHAR(255)
144 ,tsu_autoexec CHAR(255)
145 ,tsu_sascfg CHAR(255)
146 ,tsu_sasuser CHAR(255)
147 ,tsu_testdata CHAR(255)
148 ,tsu_refdata CHAR(255)
150 ,tsu_lastinit INT FORMAT=datetime21.2
151 ,tsu_lastrep INT FORMAT=datetime21.2
153 INSERT INTO target.tsu VALUES (
154 "",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",0,0
157 CREATE TABLE target.scn (
158 scn_id INT FORMAT=z3.
161 ,scn_start INT FORMAT=datetime21.2
162 ,scn_end INT FORMAT=datetime21.2
165 ,scn_warningcount INT
168 CREATE TABLE target.cas (
169 cas_scnid INT FORMAT=z3.
170 ,cas_id INT FORMAT=z3.
175 ,cas_start INT FORMAT=datetime21.2
176 ,cas_end INT FORMAT=datetime21.2
179 CREATE TABLE target.tst (
180 tst_scnid INT FORMAT=z3.
181 ,tst_casid INT FORMAT=z3.
182 ,tst_id INT FORMAT=z3.
190 %IF %_sasunit_handleError(&l_macname, ErrorCreateDB,
192 Error on creation of test database)
198 FILE
"%sysfunc(pathname(work))/x.cmd" encoding=pcoem850;
199 PUT
"&g_removedir ""&l_target_abs/log""&g_endcommand";
200 PUT
"&g_removedir ""&l_target_abs/tst""&g_endcommand";
201 PUT
"&g_removedir ""&l_target_abs/rep""&g_endcommand";
202 PUT
"&g_makedir ""&l_target_abs/log""&g_endcommand";
203 PUT
"&g_makedir ""&l_target_abs/tst""&g_endcommand";
204 PUT
"&g_makedir ""&l_target_abs/rep""&g_endcommand";
206 %
if &sysscp. = LINUX %then %
do;
207 %_sasunit_xcmd(chmod u+x
"%sysfunc(pathname(work))/x.cmd")
209 %_sasunit_xcmd(
"%sysfunc(pathname(work))/x.cmd")
211 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/x.cmd);
216 %IF %_sasunit_handleError(&l_macname, NoLogDir,
217 NOT %_sasunit_existdir(&l_target_abs/log),
218 folder &l_target_abs/log does not exist)
220 %IF %_sasunit_handleError(&l_macname, NoTstDir,
221 NOT %_sasunit_existdir(&l_target_abs/tst),
222 folder &l_target_abs/tst does not exist)
224 %IF %_sasunit_handleError(&l_macname, NoRepDir,
225 NOT %_sasunit_existdir(&l_target_abs/rep),
226 folder &l_target_abs/rep does not exist)
229 UPDATE target.tsu SET tsu_target =
"&io_target";
235 SELECT tsu_project INTO :l_project FROM target.tsu;
237 %LET l_project=&l_project;
238 %IF
"&i_project" NE
"" %THEN %LET l_project=&i_project;
239 %IF %_sasunit_handleError(&l_macname, MissingProjectName,
241 Parameter i_project must be specified)
244 UPDATE target.tsu SET tsu_project =
"&l_project";
250 SELECT tsu_root INTO :l_root FROM target.tsu;
253 %IF
"&i_root" NE
"" %THEN %LET l_root=&i_root;
254 %IF %_sasunit_handleError(&l_macname, InvalidRoot,
255 "&l_root" NE
"" AND NOT %_sasunit_existdir(&l_root),
256 %str(Error in parameter i_root: folder must exist when specified))
259 UPDATE target.tsu SET tsu_root =
"&l_root";
263 %LOCAL l_sasunit l_sasunit_abs;
265 SELECT tsu_sasunit INTO :l_sasunit FROM target.tsu;
267 %LET l_sasunit=&l_sasunit;
268 %IF
"&i_sasunit" NE
"" %THEN %LET l_sasunit=&i_sasunit;
269 %LET l_sasunit_abs=%_sasunit_abspath(&l_root,&l_sasunit);
270 %IF %_sasunit_handleError(&l_macname, InvalidSASUnitDir,
271 "&l_sasunit_abs" EQ
"" OR NOT %sysfunc(fileexist(&l_sasunit_abs/_sasunit_scenario.sas)),
272 Error in parameter i_sasunit: SASUnit macro programs not found)
275 UPDATE target.tsu SET tsu_sasunit =
"&l_sasunit";
279 %LOCAL l_autoexec l_autoexec_abs;
281 SELECT tsu_autoexec INTO :l_autoexec FROM target.tsu;
283 %LET l_autoexec=&l_autoexec;
284 %*** because we need to specify a real blank (%str( )) as parameter, ***;
285 %*** we need to use a different method of assignment. ***;
286 %IF "&i_autoexec" NE "" %THEN %LET l_autoexec=%trim(&i_autoexec);
287 %LET l_autoexec_abs=%_sasunit_abspath(&l_root,&l_autoexec);
288 %IF %_sasunit_handleError(&l_macname, AutoexecNotFound,
289 "&l_autoexec" NE "" AND NOT %sysfunc(fileexist(&l_autoexec_abs%str( ))),
290 Error in parameter i_autoexec: file not found)
293 UPDATE target.tsu SET tsu_autoexec = "&l_autoexec";
297 %LOCAL l_sascfg l_sascfg_abs;
299 SELECT tsu_sascfg INTO :l_sascfg FROM target.tsu;
301 %LET l_sascfg=&l_sascfg;
302 %IF "&i_sascfg" NE "" %THEN %LET l_sascfg=&i_sascfg;
303 %LET l_sascfg_abs=%_sasunit_abspath(&l_root,&l_sascfg);
304 %IF %_sasunit_handleError(&l_macname, SASCfgNotFound,
305 "&l_sascfg" NE "" AND NOT %sysfunc(fileexist(&l_sascfg_abs%str( ))),
306 Error in parameter i_sascfg: file not found)
309 UPDATE target.tsu SET tsu_sascfg = "&l_sascfg";
313 %LOCAL l_sasuser l_sasuser_abs;
315 SELECT tsu_sasuser INTO :l_sasuser FROM target.tsu;
317 %LET l_sasuser=&l_sasuser;
318 %IF "&i_sasuser" NE "" %THEN %LET l_sasuser=&i_sasuser;
319 %LET l_sasuser_abs=%_sasunit_abspath(&l_root,&l_sasuser);
320 %IF %_sasunit_handleError(&l_macname, InvalidSasuser,
321 "&l_sasuser_abs" NE "" AND NOT %_sasunit_existdir(&l_sasuser_abs),
322 Error in parameter i_sasuser: folder not found)
325 UPDATE target.tsu SET tsu_sasuser = "&l_sasuser";
329 %LOCAL l_testdata l_testdata_abs;
331 SELECT tsu_testdata INTO :l_testdata FROM target.tsu;
333 %LET l_testdata=&l_testdata;
334 %IF "&i_testdata" NE "" %THEN %LET l_testdata=&i_testdata;
335 %LET l_testdata_abs=%_sasunit_abspath(&l_root,&l_testdata);
336 %IF %_sasunit_handleError(&l_macname, InvalidTestdata,
337 "&l_testdata_abs" NE "" AND NOT %_sasunit_existdir(&l_testdata_abs),
338 Error in parameter i_testdata: folder not found)
341 UPDATE target.tsu SET tsu_testdata = "&l_testdata";
345 %LOCAL l_refdata l_refdata_abs;
347 SELECT tsu_refdata INTO :l_refdata FROM target.tsu;
349 %LET l_refdata=&l_refdata;
350 %IF "&i_refdata" NE "" %THEN %LET l_refdata=&i_refdata;
351 %LET l_refdata_abs=%_sasunit_abspath(&l_root,&l_refdata);
352 %IF %_sasunit_handleError(&l_macname, InvalidRefdata,
353 "&l_refdata_abs" NE "" AND NOT %_sasunit_existdir(&l_refdata_abs),
354 Error in parameter i_refdata: folder not found)
357 UPDATE target.tsu SET tsu_refdata = "&l_refdata";
361 %LOCAL l_doc l_doc_abs;
363 SELECT tsu_doc INTO :l_doc FROM target.tsu;
366 %IF "&i_doc" NE "" %THEN %LET l_doc=&i_doc;
367 %LET l_doc_abs=%_sasunit_abspath(&l_root,&l_doc);
368 %IF %_sasunit_handleError(&l_macname, InvalidDoc,
369 "&l_doc_abs" NE "" AND NOT %_sasunit_existdir(&l_doc_abs),
370 Error in parameter i_doc: folder not found)
373 UPDATE target.tsu SET tsu_doc = "&l_doc";
377 %LOCAL restore_sasautos l_sasautos l_sasautos_abs i;
378 %LET restore_sasautos=%sysfunc(getoption(sasautos));
381 SELECT tsu_sasautos INTO :l_sasautos FROM target.tsu;
383 %LET l_sasautos=&l_sasautos;
384 %IF "&i_sasautos" NE "" %THEN %LET l_sasautos=&i_sasautos;
385 %LET l_sasautos_abs=%_sasunit_abspath(&l_root,&l_sasautos);
386 %IF %_sasunit_handleError(&l_macname, InvalidSASAutos,
387 "&l_sasautos_abs" NE "" AND NOT %_sasunit_existdir(&l_sasautos_abs),
388 Error in parameter i_sasautos: folder not found)
391 UPDATE target.tsu SET tsu_sasautos = "&l_sasautos";
396 SELECT tsu_sasautos&i INTO :l_sasautos FROM target.tsu;
398 %LET l_sasautos=&l_sasautos;
399 %IF "&&i_sasautos&i" NE "" %THEN %LET l_sasautos=&&i_sasautos&i;
400 %LET l_sasautos_abs=%_sasunit_abspath(&l_root,&l_sasautos);
401 %IF %_sasunit_handleError(&l_macname, InvalidSASAutosN,
402 "&l_sasautos_abs" NE "" AND NOT %_sasunit_existdir(&l_sasautos_abs),
403 Error in parameter i_sasautos&i: folder not found)
406 UPDATE target.tsu SET tsu_sasautos&i = "&l_sasautos";
411 %_sasunit_loadEnvironment (
414 %IF "&g_error_code" NE "" %THEN %GOTO errexit;
416 %if &sysscp. = WIN %then %do;
418 options noxwait xsync xmin;
425 %LET l_work = %sysfunc(pathname(work));
426 PROC DATASETS NOLIST NOWARN LIB=work;
431 FILE "%sysfunc(pathname(work))/x.cmd";
432 PUT "&g_removedir ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
433 PUT "&g_makedir ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
434 %IF %length(&g_sasuser) %THEN %DO;
435 PUT "&g_copydir ""&g_sasuser"" ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
438 %if &sysscp. = LINUX %then %do;
439 %_sasunit_xcmd(chmod u+x "%sysfunc(pathname(work))/x.cmd")
441 %_sasunit_xcmd("%sysfunc(pathname(work))/x.cmd")
443 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/x.cmd);
446 FILE "&l_work/run.sas";
447 PUT "LIBNAME awork ""&l_work"";";
448 PUT "DATA awork.check; RUN;";
451 %IF "&g_autoexec" NE "" %THEN %DO;
452 %LET l_parms=&l_parms -autoexec ""&g_autoexec"";
454 %IF "&g_sascfg" NE "" %THEN %DO;
455 %IF &sysscp. = LINUX %THEN %DO;
456 %IF "&g_sascfg" NE "" %THEN %DO;
457 options SET=SASCFGPATH "&g_sascfg.";
461 %LET l_parms=&l_parms -config ""&g_sascfg"";
468 _sCmdString LENGTH = $32000
471 "%sysfunc(pathname(work))/xxx.cmd"
474 %IF &sysscp. = LINUX %THEN %DO;
479 !! "-sysin &l_work./run.sas "
480 !! "-initstmt ""%nrstr(%%_sasunit_scenario%(io_target=)&g_target%nrstr(%);)"" "
481 !! "-log &g_log./000.log "
482 !! "-print &g_log./000.lst "
486 !! "-mcompilenote all "
487 !! "-sasautos &g_sasunit "
488 !! "-sasuser %sysfunc(pathname(work))/sasuser "
493 """" !! &g_sasstart !! """"
496 !! "-sysin ""&l_work./run.sas"" "
497 !! "-initstmt ""%nrstr(%%%_sasunit_scenario%(io_target=)&g_target%nrstr(%);)"" "
498 !! "-log ""&g_log./000.log"" "
499 !! "-print ""&g_log./000.lst"" "
504 !! "-mcompilenote all "
505 !! "-sasautos ""&g_sasunit"" "
506 !! "-sasuser ""%sysfunc(pathname(work))/sasuser"" "
513 %IF &sysscp. = LINUX %THEN %DO;
514 %_sasunit_xcmd(chmod u+x "%sysfunc(pathname(work))/xxx.cmd");
515 %_sasunit_xcmd(sed -i -e 's/\r
518 %_sasunit_xcmd("%sysfunc(pathname(work))/xxx.cmd")
519 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/xxx.cmd);
520 %LET l_sysrc = &sysrc;
522 %IF %_sasunit_handleError(&l_macname, ErrorSASCall2,
523 NOT %sysfunc(exist(work.check)),
524 Error spawning SAS process in initialization)
527 PROC DATASETS NOLIST NOWARN LIB=work;
531 %LET l_rc=%_sasunit_delFile(&l_work/run.sas);
536 SET tsu_lastinit = %sysfunc(datetime())
541 %PUT ============================ SASUnit has been initialized successfully ==========================;
547 %PUT &g_error: ===================== Error! Testsuite aborted! ===========================================;