00001
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 %MACRO initSASUnit(
00051 i_root =
00052 ,io_target =
00053 ,i_overwrite = 0
00054 ,i_project =
00055 ,i_sasunit =
00056 ,i_sasautos =
00057 ,i_sasautos1 =
00058 ,i_sasautos2 =
00059 ,i_sasautos3 =
00060 ,i_sasautos4 =
00061 ,i_sasautos5 =
00062 ,i_sasautos6 =
00063 ,i_sasautos7 =
00064 ,i_sasautos8 =
00065 ,i_sasautos9 =
00066 ,i_autoexec =
00067 ,i_sascfg =
00068 ,i_sasuser =
00069 ,i_testdata =
00070 ,i_refdata =
00071 ,i_doc =
00072 );
00073 %LOCAL l_macname; %LET l_macname=&sysmacroname;
00074 %LOCAL l_first_temp;
00075
00076
00077 %_sasunit_initErrorHandler;
00078
00079
00080 %IF %_sasunit_handleError( &l_macname
00081 , WrongOS
00082 , (&sysscp. NE WIN) AND (&sysscp. NE LINUX)
00083 , Invalid operating system - only WIN and LINUX)
00084 %THEN %GOTO errexit;
00085
00086
00087 %_sasunit_oscmds;
00088
00089
00090 %IF %_sasunit_handleError( &l_macname
00091 , WrongVer
00092 , (&sysver. NE 9.1) AND (&sysver. NE 9.2)
00093 , Invalid SAS version - only SAS 9.1 and 9.2)
00094 %THEN %GOTO errexit;
00095
00096
00097 %LOCAL l_target_abs;
00098 %LET l_target_abs=%_sasunit_abspath(&i_root,&io_target);
00099 %IF %_sasunit_handleError(&l_macname, InvalidTargetDir,
00100 "&l_target_abs" EQ "" OR NOT %_sasunit_existDir(&l_target_abs),
00101 Error in parameter io_target: target directory does not exist)
00102 %THEN %GOTO errexit;
00103
00104 LIBNAME target "&l_target_abs";
00105 %IF %_sasunit_handleError(&l_macname, ErrorTargetLib,
00106 %quote(&syslibrc) NE 0,
00107 Error in parameter io_target: target directory &l_target_abs. cannot be assigned as a SAS library)
00108 %THEN %GOTO errexit;
00109 data target._test;
00110 run;
00111 %IF %_sasunit_handleError(&l_macname, ErrorTargetLibNotWritable,
00112 %quote(&syserr) NE 0,
00113 Error in parameter io_target: target directory not writeable)
00114 %THEN %GOTO errexit;
00115 PROC SQL;
00116 DROP TABLE target._test;
00117 QUIT;
00118
00119
00120 %LOCAL l_newdb;
00121 %IF "&i_overwrite" NE "1" %then %LET i_overwrite=0;
00122 %IF &i_overwrite %THEN %LET l_newdb=1;
00123 %ELSE %LET l_newdb=%eval(NOT %sysfunc(exist(target.tsu)));
00124
00125
00126 %IF &l_newdb %THEN %DO;
00127 PROC SQL NOPRINT;
00128 CREATE TABLE target.tsu (
00129 tsu_project CHAR(255)
00130 ,tsu_root CHAR(255)
00131 ,tsu_target CHAR(255)
00132 ,tsu_sasunit CHAR(255)
00133 ,tsu_sasautos CHAR(255)
00134 %DO i=1 %TO 9;
00135 ,tsu_sasautos&i CHAR(255)
00136 %END;
00137 ,tsu_autoexec CHAR(255)
00138 ,tsu_sascfg CHAR(255)
00139 ,tsu_sasuser CHAR(255)
00140 ,tsu_testdata CHAR(255)
00141 ,tsu_refdata CHAR(255)
00142 ,tsu_doc CHAR(255)
00143 ,tsu_lastinit INT FORMAT=datetime21.2
00144 ,tsu_lastrep INT FORMAT=datetime21.2
00145 );
00146 INSERT INTO target.tsu VALUES (
00147 "","","","","","","","","","","","","","","","","","","","",0,0
00148 );
00149
00150 CREATE TABLE target.scn (
00151 scn_id INT FORMAT=z3.
00152 ,scn_path CHAR(255)
00153 ,scn_desc CHAR(255)
00154 ,scn_start INT FORMAT=datetime21.2
00155 ,scn_end INT FORMAT=datetime21.2
00156 ,scn_rc INT
00157 ,scn_res INT
00158 );
00159 CREATE TABLE target.cas (
00160 cas_scnid INT FORMAT=z3.
00161 ,cas_id INT FORMAT=z3.
00162 ,cas_auton INT
00163 ,cas_pgm CHAR(255)
00164 ,cas_desc CHAR(255)
00165 ,cas_spec CHAR(255)
00166 ,cas_start INT FORMAT=datetime21.2
00167 ,cas_end INT FORMAT=datetime21.2
00168 ,cas_res INT
00169 );
00170 CREATE TABLE target.tst (
00171 tst_scnid INT FORMAT=z3.
00172 ,tst_casid INT FORMAT=z3.
00173 ,tst_id INT FORMAT=z3.
00174 ,tst_type CHAR(32)
00175 ,tst_desc CHAR(255)
00176 ,tst_exp CHAR(255)
00177 ,tst_act CHAR(255)
00178 ,tst_res INT
00179 );
00180 QUIT;
00181 %IF %_sasunit_handleError(&l_macname, ErrorCreateDB,
00182 &syserr NE 0,
00183 Error on creation of test database)
00184 %THEN %GOTO errexit;
00185
00186
00187
00188 DATA _null_;
00189 FILE "%sysfunc(pathname(work))/x.cmd" encoding=pcoem850;
00190 PUT "&g_removedir ""&l_target_abs/log""&g_endcommand";
00191 PUT "&g_removedir ""&l_target_abs/tst""&g_endcommand";
00192 PUT "&g_removedir ""&l_target_abs/rep""&g_endcommand";
00193 PUT "&g_makedir ""&l_target_abs/log""&g_endcommand";
00194 PUT "&g_makedir ""&l_target_abs/tst""&g_endcommand";
00195 PUT "&g_makedir ""&l_target_abs/rep""&g_endcommand";
00196 RUN;
00197 %if &sysscp. = LINUX %then %do;
00198 %_sasunit_xcmd(chmod u+x "%sysfunc(pathname(work))/x.cmd")
00199 %end;
00200 %_sasunit_xcmd("%sysfunc(pathname(work))/x.cmd")
00201 %LOCAL l_rc;
00202 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/x.cmd);
00203
00204 %END;
00205
00206
00207 %IF %_sasunit_handleError(&l_macname, NoLogDir,
00208 NOT %_sasunit_existdir(&l_target_abs/log),
00209 folder &l_target_abs/log does not exist)
00210 %THEN %GOTO errexit;
00211 %IF %_sasunit_handleError(&l_macname, NoTstDir,
00212 NOT %_sasunit_existdir(&l_target_abs/tst),
00213 folder &l_target_abs/tst does not exist)
00214 %THEN %GOTO errexit;
00215 %IF %_sasunit_handleError(&l_macname, NoRepDir,
00216 NOT %_sasunit_existdir(&l_target_abs/rep),
00217 folder &l_target_abs/rep does not exist)
00218 %THEN %GOTO errexit;
00219 PROC SQL NOPRINT;
00220 UPDATE target.tsu SET tsu_target = "&io_target";
00221 QUIT;
00222
00223
00224 %LOCAL l_project;
00225 PROC SQL NOPRINT;
00226 SELECT tsu_project INTO :l_project FROM target.tsu;
00227 QUIT;
00228 %LET l_project=&l_project;
00229 %IF "&i_project" NE "" %THEN %LET l_project=&i_project;
00230 %IF %_sasunit_handleError(&l_macname, MissingProjectName,
00231 "&l_project" EQ "",
00232 Parameter i_project must be specified)
00233 %THEN %GOTO errexit;
00234 PROC SQL NOPRINT;
00235 UPDATE target.tsu SET tsu_project = "&l_project";
00236 QUIT;
00237
00238
00239 %LOCAL l_root;
00240 PROC SQL NOPRINT;
00241 SELECT tsu_root INTO :l_root FROM target.tsu;
00242 QUIT;
00243 %LET l_root=&l_root;
00244 %IF "&i_root" NE "" %THEN %LET l_root=&i_root;
00245 %IF %_sasunit_handleError(&l_macname, InvalidRoot,
00246 "&l_root" NE "" AND NOT %_sasunit_existdir(&l_root),
00247 %str(Error in parameter i_root: folder must exist when specified))
00248 %THEN %GOTO errexit;
00249 PROC SQL NOPRINT;
00250 UPDATE target.tsu SET tsu_root = "&l_root";
00251 QUIT;
00252
00253
00254 %LOCAL l_sasunit l_sasunit_abs;
00255 PROC SQL NOPRINT;
00256 SELECT tsu_sasunit INTO :l_sasunit FROM target.tsu;
00257 QUIT;
00258 %LET l_sasunit=&l_sasunit;
00259 %IF "&i_sasunit" NE "" %THEN %LET l_sasunit=&i_sasunit;
00260 %LET l_sasunit_abs=%_sasunit_abspath(&l_root,&l_sasunit);
00261 %IF %_sasunit_handleError(&l_macname, InvalidSASUnitDir,
00262 "&l_sasunit_abs" EQ "" OR NOT %sysfunc(fileexist(&l_sasunit_abs/_sasunit_scenario.sas)),
00263 Error in parameter i_sasunit: SASUnit macro programs not found)
00264 %THEN %GOTO errexit;
00265 PROC SQL NOPRINT;
00266 UPDATE target.tsu SET tsu_sasunit = "&l_sasunit";
00267 QUIT;
00268
00269
00270 %LOCAL l_autoexec l_autoexec_abs;
00271 PROC SQL NOPRINT;
00272 SELECT tsu_autoexec INTO :l_autoexec FROM target.tsu;
00273 QUIT;
00274 %LET l_autoexec=&l_autoexec;
00275 %IF "&i_autoexec" NE "" %THEN %LET l_autoexec=&i_autoexec;
00276 %LET l_autoexec_abs=%_sasunit_abspath(&l_root,&l_autoexec);
00277 %IF %_sasunit_handleError(&l_macname, AutoexecNotFound,
00278 "&l_autoexec" NE "" AND NOT %sysfunc(fileexist(&l_autoexec_abs%str( ))),
00279 Error in parameter i_autoexec: file not found)
00280 %THEN %GOTO errexit;
00281 PROC SQL NOPRINT;
00282 UPDATE target.tsu SET tsu_autoexec = "&l_autoexec";
00283 QUIT;
00284
00285
00286 %LOCAL l_sascfg l_sascfg_abs;
00287 PROC SQL NOPRINT;
00288 SELECT tsu_sascfg INTO :l_sascfg FROM target.tsu;
00289 QUIT;
00290 %LET l_sascfg=&l_sascfg;
00291 %IF "&i_sascfg" NE "" %THEN %LET l_sascfg=&i_sascfg;
00292 %LET l_sascfg_abs=%_sasunit_abspath(&l_root,&l_sascfg);
00293 %IF %_sasunit_handleError(&l_macname, SASCfgNotFound,
00294 "&l_sascfg" NE "" AND NOT %sysfunc(fileexist(&l_sascfg_abs%str( ))),
00295 Error in parameter i_sascfg: file not found)
00296 %THEN %GOTO errexit;
00297 PROC SQL NOPRINT;
00298 UPDATE target.tsu SET tsu_sascfg = "&l_sascfg";
00299 QUIT;
00300
00301
00302 %LOCAL l_sasuser l_sasuser_abs;
00303 PROC SQL NOPRINT;
00304 SELECT tsu_sasuser INTO :l_sasuser FROM target.tsu;
00305 QUIT;
00306 %LET l_sasuser=&l_sasuser;
00307 %IF "&i_sasuser" NE "" %THEN %LET l_sasuser=&i_sasuser;
00308 %LET l_sasuser_abs=%_sasunit_abspath(&l_root,&l_sasuser);
00309 %IF %_sasunit_handleError(&l_macname, InvalidSasuser,
00310 "&l_sasuser_abs" NE "" AND NOT %_sasunit_existdir(&l_sasuser_abs),
00311 Error in parameter i_sasuser: folder not found)
00312 %THEN %GOTO errexit;
00313 PROC SQL NOPRINT;
00314 UPDATE target.tsu SET tsu_sasuser = "&l_sasuser";
00315 QUIT;
00316
00317
00318 %LOCAL l_testdata l_testdata_abs;
00319 PROC SQL NOPRINT;
00320 SELECT tsu_testdata INTO :l_testdata FROM target.tsu;
00321 QUIT;
00322 %LET l_testdata=&l_testdata;
00323 %IF "&i_testdata" NE "" %THEN %LET l_testdata=&i_testdata;
00324 %LET l_testdata_abs=%_sasunit_abspath(&l_root,&l_testdata);
00325 %IF %_sasunit_handleError(&l_macname, InvalidTestdata,
00326 "&l_testdata_abs" NE "" AND NOT %_sasunit_existdir(&l_testdata_abs),
00327 Error in parameter i_testdata: folder not found)
00328 %THEN %GOTO errexit;
00329 PROC SQL NOPRINT;
00330 UPDATE target.tsu SET tsu_testdata = "&l_testdata";
00331 QUIT;
00332
00333
00334 %LOCAL l_refdata l_refdata_abs;
00335 PROC SQL NOPRINT;
00336 SELECT tsu_refdata INTO :l_refdata FROM target.tsu;
00337 QUIT;
00338 %LET l_refdata=&l_refdata;
00339 %IF "&i_refdata" NE "" %THEN %LET l_refdata=&i_refdata;
00340 %LET l_refdata_abs=%_sasunit_abspath(&l_root,&l_refdata);
00341 %IF %_sasunit_handleError(&l_macname, InvalidRefdata,
00342 "&l_refdata_abs" NE "" AND NOT %_sasunit_existdir(&l_refdata_abs),
00343 Error in parameter i_refdata: folder not found)
00344 %THEN %GOTO errexit;
00345 PROC SQL NOPRINT;
00346 UPDATE target.tsu SET tsu_refdata = "&l_refdata";
00347 QUIT;
00348
00349
00350 %LOCAL l_doc l_doc_abs;
00351 PROC SQL NOPRINT;
00352 SELECT tsu_doc INTO :l_doc FROM target.tsu;
00353 QUIT;
00354 %LET l_doc=&l_doc;
00355 %IF "&i_doc" NE "" %THEN %LET l_doc=&i_doc;
00356 %LET l_doc_abs=%_sasunit_abspath(&l_root,&l_doc);
00357 %IF %_sasunit_handleError(&l_macname, InvalidDoc,
00358 "&l_doc_abs" NE "" AND NOT %_sasunit_existdir(&l_doc_abs),
00359 Error in parameter i_doc: folder not found)
00360 %THEN %GOTO errexit;
00361 PROC SQL NOPRINT;
00362 UPDATE target.tsu SET tsu_doc = "&l_doc";
00363 QUIT;
00364
00365
00366 %LOCAL restore_sasautos l_sasautos l_sasautos_abs i;
00367 %LET restore_sasautos=%sysfunc(getoption(sasautos));
00368
00369 PROC SQL NOPRINT;
00370 SELECT tsu_sasautos INTO :l_sasautos FROM target.tsu;
00371 QUIT;
00372 %LET l_sasautos=&l_sasautos;
00373 %IF "&i_sasautos" NE "" %THEN %LET l_sasautos=&i_sasautos;
00374 %LET l_sasautos_abs=%_sasunit_abspath(&l_root,&l_sasautos);
00375 %IF %_sasunit_handleError(&l_macname, InvalidSASAutos,
00376 "&l_sasautos_abs" NE "" AND NOT %_sasunit_existdir(&l_sasautos_abs),
00377 Error in parameter i_sasautos: folder not found)
00378 %THEN %GOTO errexit;
00379 PROC SQL NOPRINT;
00380 UPDATE target.tsu SET tsu_sasautos = "&l_sasautos";
00381 QUIT;
00382
00383 %DO i=1 %TO 9;
00384 PROC SQL NOPRINT;
00385 SELECT tsu_sasautos&i INTO :l_sasautos FROM target.tsu;
00386 QUIT;
00387 %LET l_sasautos=&l_sasautos;
00388 %IF "&&i_sasautos&i" NE "" %THEN %LET l_sasautos=&&i_sasautos&i;
00389 %LET l_sasautos_abs=%_sasunit_abspath(&l_root,&l_sasautos);
00390 %IF %_sasunit_handleError(&l_macname, InvalidSASAutosN,
00391 "&l_sasautos_abs" NE "" AND NOT %_sasunit_existdir(&l_sasautos_abs),
00392 Error in parameter i_sasautos&i: folder not found)
00393 %THEN %GOTO errexit;
00394 PROC SQL NOPRINT;
00395 UPDATE target.tsu SET tsu_sasautos&i = "&l_sasautos";
00396 QUIT;
00397 %END;
00398
00399
00400 %_sasunit_loadEnvironment (
00401 i_withLibrefs = 0
00402 )
00403 %IF "&g_error_code" NE "" %THEN %GOTO errexit;
00404
00405 %if &sysscp. = WIN %then %do;
00406
00407 options noxwait xsync xmin;
00408 %end;
00409
00410
00411
00412
00413 %LOCAL l_work;
00414 %LET l_work = %sysfunc(pathname(work));
00415 PROC DATASETS NOLIST NOWARN LIB=work;
00416 DELETE check;
00417 QUIT;
00418
00419 DATA _null_;
00420 FILE "%sysfunc(pathname(work))/x.cmd";
00421 PUT "&g_removedir ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
00422 PUT "&g_makedir ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
00423 %IF %length(&g_sasuser) %THEN %DO;
00424 PUT "&g_copydir ""&g_sasuser"" ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
00425 %END;
00426 RUN;
00427 %if &sysscp. = LINUX %then %do;
00428 %_sasunit_xcmd(chmod u+x "%sysfunc(pathname(work))/x.cmd")
00429 %end;
00430 %_sasunit_xcmd("%sysfunc(pathname(work))/x.cmd")
00431 %LOCAL l_rc;
00432 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/x.cmd);
00433
00434 DATA _null_;
00435 FILE "&l_work/run.sas";
00436 PUT "LIBNAME awork ""&l_work"";";
00437 PUT "DATA awork.check; RUN;";
00438 RUN;
00439 %LOCAL l_parms;
00440 %IF "&g_autoexec" NE "" %THEN %DO;
00441 %LET l_parms=&l_parms -autoexec "&g_autoexec";
00442 %END;
00443 %IF "&g_sascfg" NE "" %THEN %DO;
00444 %LET l_parms=&l_parms -config "&g_sascfg";
00445 %END;
00446
00447 %sysexec
00448 &g_sasstart
00449 &l_parms
00450 -sysin "&l_work/run.sas"
00451 -initstmt "%nrstr(%_sasunit_scenario%(io_target=)&g_target%str(%))"
00452 -log "&g_log/000.log"
00453 -print "&g_log/000.lst"
00454 &g_splash
00455 -noovp
00456 -nosyntaxcheck
00457 -mautosource
00458 -mcompilenote all
00459 -sasautos "&g_sasunit"
00460 -sasuser "%sysfunc(pathname(work))/sasuser"
00461 ;
00462
00463 %put &g_sasstart
00464 &l_parms
00465 -sysin "&l_work/run.sas"
00466 -initstmt "%nrstr(%_sasunit_scenario%(io_target=)&g_target%str(%))"
00467 -log "&g_log/000.log"
00468 -print "&g_log/000.lst"
00469 &g_splash
00470 -noovp
00471 -nosyntaxcheck
00472 -mautosource
00473 -mcompilenote all
00474 -sasautos "&g_sasunit"
00475 -sasuser "%sysfunc(pathname(work))/sasuser"
00476 ;
00477
00478
00479 %IF %_sasunit_handleError(&l_macname, ErrorSASCall2,
00480 NOT %sysfunc(exist(work.check)),
00481 Error spawning SAS process in initialization)
00482 %THEN %GOTO errexit;
00483
00484 PROC DATASETS NOLIST NOWARN LIB=work;
00485 DELETE check;
00486 QUIT;
00487
00488 %LET l_rc=%_sasunit_delFile(&l_work/run.sas);
00489
00490
00491 PROC SQL NOPRINT;
00492 UPDATE target.tsu
00493 SET tsu_lastinit = %sysfunc(datetime())
00494 ;
00495 QUIT;
00496
00497 %PUT;
00498 %PUT ============================ SASUnit has been initialized successfully ==========================;
00499 %PUT;
00500
00501 %GOTO exit;
00502 %errexit:
00503 %PUT;
00504 %PUT &g_error: ===================== Error! Testsuite aborted! ===========================================;
00505 %PUT;
00506 LIBNAME target;
00507 %exit:
00508 %MEND initSASUnit;