SASUnit Examples  Version 1.3.0
initsasunit.sas
Go to the documentation of this file.
1 
53 %MACRO initSASUnit(i_root =
54  ,io_target =
55  ,i_overwrite = 0
56  ,i_project =
57  ,i_sasunit =
58  ,i_sasautos =
59  ,i_sasautos1 =
60  ,i_sasautos2 =
61  ,i_sasautos3 =
62  ,i_sasautos4 =
63  ,i_sasautos5 =
64  ,i_sasautos6 =
65  ,i_sasautos7 =
66  ,i_sasautos8 =
67  ,i_sasautos9 =
68  ,i_autoexec =
69  ,i_sascfg =
70  ,i_sasuser =
71  ,i_testdata =
72  ,i_refdata =
73  ,i_doc =
74  ,i_testcoverage = 1
75  ,i_verbose = 0
76  );
77 
78  %GLOBAL g_version g_revision;
79 
80  %LET g_version = 1.3.0;
81  %LET g_revision = $Revision: 320 $;
82  %LET g_revision = %scan(&g_revision,2,%str( $:));
83 
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
87  ;
88 
89  %LET l_current_dbversion=0;
90  %LET l_macname=&sysmacroname;
91 
92  /*-- Resolve relative root path like .../. to an absolute root path ----------*/
93  libname _tmp "&i_root.";
94  %let i_root=%sysfunc (pathname(_tmp));
95  libname _tmp clear;
96 
97  /*-- Get SASUnit root path from environement variable ----------*/
98  libname _tmp "%sysget(SASUNIT_ROOT)";
99  %let l_sasunitroot=%sysfunc (pathname(_tmp));
100  libname _tmp clear;
101 
102  /*-- initialize error --------------------------------------------------------*/
103  %_initErrorHandler;
104 
105  /*-- check value of parameter i_verbose, if it has a value other than 0,
106  it will be set to 1 in order to assure that it will have only value 0 or 1 ------*/
107  %IF (&i_verbose. NE 0) %THEN %DO;
108  %LET i_verbose = 1;
109  %END;
110 
111  /*-- check for operation system ----------------------------------------------*/
112  %IF %_handleError(&l_macname.
113  ,WrongOS
114  ,(%upcase(&sysscp.) NE WIN) AND (%upcase(&sysscpl.) NE LINUX) /*AND (%upcase(&sysscpl.) NE AIX)*/
115  ,Invalid operating system - only WIN%str(,) LINUX/* AND AIX*/
116  ,i_verbose=&i_verbose.
117  )
118  %THEN %GOTO errexit;
119 
120  /*-- set macro symbols for os commands ---------------------------------------*/
121  %IF (&sysscp. = WIN) %THEN %DO;
122  %LET l_sasautos_os = &i_sasunit./windows;
123  %END;
124  %ELSE %IF (%upcase(&sysscpl.) = LINUX) %THEN %DO;
125  %LET l_sasautos_os = &i_sasunit./linux;
126  %END;
127  %ELSE %IF (%upcase(&sysscpl.) = AIX) %THEN %DO;
128  %LET l_sasautos_os = &i_sasunit./unix_aix;
129  %END;
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;
134 
135  %_oscmds;
136 
137  /*-- check SAS version -------------------------------------------------------*/
138  %IF %_handleError(&l_macname.
139  ,WrongVer
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.
143  )
144  %THEN %GOTO errexit;
145 
146  /*-- check value of parameter i_testcoverage, if it has an other value than 1,
147  set it to 0 in order to assure that it will have only value 0 or 1 ------*/
148  %IF &i_testcoverage. NE 1 %THEN %DO;
149  %LET i_testcoverage = 0;
150  %END;
151  %ELSE %DO;
152  /*-- if test coverage should be assessed: check SAS version --------------*/
153  %IF %_handleError(&l_macname.
154  ,ErrorTargetLib
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.
158  )
159  %THEN %GOTO errexit;
160  %END;
161 
162  /*-- check for target directory ----------------------------------------------*/
163  %LET l_target_abs=%_abspath(&i_root,&io_target);
164  %IF %_handleError(&l_macname.
165  ,InvalidTargetDir
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.
169  )
170  %THEN %GOTO errexit;
171 
172  LIBNAME target "&l_target_abs";
173  %IF %_handleError(&l_macname
174  ,ErrorTargetLib
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.
178  )
179  %THEN %GOTO errexit;
180  data target._test;
181  run;
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.
187  )
188  %THEN %GOTO errexit;
189  PROC SQL;
190  DROP TABLE target._test;
191  QUIT;
192 
193  /*-- does the test database exist already? -----------------------------------*/
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)));
197 
198  *** Check tsu db version ***;
199  *** Is there a need to recreate the database? ***;
200  %IF &l_newdb. ne 1 %THEN %DO;
201  data _null_;
202  if (exist ("target.tsu")) then do;
203  did = open ("target.tsu");
204  if varnum (did, "tsu_dbVersion") then do;
205  rc = fetch (did);
206  tsu_dbVersion = getvarc (did, varnum (did, "tsu_dbVersion"));
207  call symput ("l_current_dbversion", trim(tsu_dbVersion));
208  end;
209  did = close(did);
210  end;
211  run;
212  %LET l_newdb=%eval ("&l_current_dbversion." NE "&g_version.");
213  %END;
214 
215  /*-- create test database if necessary ---------------------------------------*/
216  %IF &l_newdb %THEN %DO;
217  PROC SQL NOPRINT;
218  CREATE TABLE target.tsu(COMPRESS=CHAR)
219  ( /* test suite */
220  tsu_project CHAR(1000) /* see i_project */
221  ,tsu_root CHAR(1000) /* see i_root */
222  ,tsu_target CHAR(1000) /* see io_target */
223  ,tsu_sasunitroot CHAR(1000) /* root path to sasunit files */
224  ,tsu_sasunit CHAR(1000) /* see i_sasunit */
225  ,tsu_sasunit_os CHAR(1000) /* os-specific sasunit macros */
226  ,tsu_sasautos CHAR(1000) /* see i_sasautos */
227  %DO i=1 %TO 9;
228  ,tsu_sasautos&i CHAR(1000) /* see i_sasautos<n> */
229  %END;
230  ,tsu_autoexec CHAR(1000) /* see i_autoexec */
231  ,tsu_sascfg CHAR(1000) /* see i_sascfg */
232  ,tsu_sasuser CHAR(1000) /* see i_sasuser */
233  ,tsu_testdata CHAR(1000) /* see i_testdata */
234  ,tsu_refdata CHAR(1000) /* see i_refdata */
235  ,tsu_doc CHAR(1000) /* see i_doc */
236  ,tsu_lastinit INT FORMAT=datetime21.2 /* date and time of last initialization */
237  ,tsu_lastrep INT FORMAT=datetime21.2 /* date and time of last report generation*/
238  ,tsu_testcoverage INT FORMAT=8. /* see i_testcoverage */
239  ,tsu_dbversion CHAR(8) /* Version String to force creation of a new test data base */
240  ,tsu_verbose INT FORMAT=8. /* see i_verbose */
241  );
242  INSERT INTO target.tsu VALUES (
243  "","","","","","","","","","","","","","","","","","","","","","",0,0,&i_testcoverage.,"",&i_verbose.
244  );
245 
246  CREATE TABLE target.scn(COMPRESS=CHAR)
247  ( /* test scenario */
248  scn_id INT FORMAT=z3. /* number of scenario */
249  ,scn_path CHAR(1000) /* path to program file */
250  ,scn_desc CHAR(1000) /* description of program (brief tag in comment header) */
251  ,scn_start INT FORMAT=datetime21.2 /* starting date and time of the last run */
252  ,scn_end INT FORMAT=datetime21.2 /* ending date and time of the last run */
253  ,scn_rc INT /* return code of SAS session of last run */
254  ,scn_errorcount INT /* number of detected errors in the scenario log */
255  ,scn_warningcount INT /* number of detected warnings in the scenario log */
256  ,scn_res INT /* overall test result of last run: 0 .. OK, 1 .. not OK, 2 .. manual */
257  );
258  CREATE TABLE target.cas(COMPRESS=CHAR)
259  ( /* test case */
260  cas_scnid INT FORMAT=z3. /* reference to test scenario */
261  ,cas_id INT FORMAT=z3. /* sequential number of test case within test scenario */
262  ,cas_auton INT /* number of autocall path where program under test has been found or ., if not found */
263  ,cas_pgm CHAR(255) /* file name of program under test: only name if found in autocall paths, or fully qualified path otherwise */
264  ,cas_desc CHAR(1000) /* description of test case */
265  ,cas_spec CHAR(1000) /* optional: specification document, fully qualified path or only filename to be found in folder &g_doc */
266  ,cas_start INT FORMAT=datetime21.2 /* starting date and time of the last run */
267  ,cas_end INT FORMAT=datetime21.2 /* ending date and time of the last run */
268  ,cas_res INT /* overall test result of last run: 0 .. OK, 1 .. not OK, 2 .. manual */
269  );
270  CREATE TABLE target.tst(COMPRESS=CHAR)
271  ( /* Test */
272  tst_scnid INT FORMAT=z3. /* reference to test scenario */
273  ,tst_casid INT FORMAT=z3. /* reference to test case */
274  ,tst_id INT FORMAT=z3. /* sequential number of test within test case */
275  ,tst_type CHAR(32) /* type of test (name of assert macro) */
276  ,tst_desc CHAR(1000) /* description of test */
277  ,tst_exp CHAR(255) /* expected result */
278  ,tst_act CHAR(255) /* actual result */
279  ,tst_res INT /* test result of the last run: 0 .. OK, 1 .. manual, 2 .. not OK */
280  ,tst_errmsg CHAR(1000) /* custom error message for asserts */
281  );
282  QUIT;
283  %IF %_handleError(&l_macname.
284  ,ErrorCreateDB
285  ,&syserr. NE 0
286  ,Error on creation of test database
287  ,i_verbose=&i_verbose.
288  )
289  %THEN %GOTO errexit;
290 
291 
292  /*-- regenerate empty folders ------------------------------------------------*/
293  %LET l_cmdfile=%sysfunc(pathname(WORK))/remove_dir.cmd;
294  DATA _null_;
295  FILE "&l_cmdfile." encoding=pcoem850; /* wg. Umlauten in Pfaden */
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";
299  RUN;
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;
304  DATA _null_;
305  FILE "&l_cmdfile." encoding=pcoem850; /* wg. Umlauten in Pfaden */
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";
309  RUN;
310  %_executeCMDFile(&l_cmdfile.);
311  %LET l_rc=%_delfile(&l_cmdfile.);
312  %END; /* %if &l_newdb */
313 
314  /*-- check folders -----------------------------------------------------------*/
315  %IF %_handleError(&l_macname.
316  ,NoLogDir
317  ,NOT %_existdir(&l_target_abs./log)
318  ,folder &l_target_abs./log does not exist
319  ,i_verbose=&i_verbose.
320  )
321  %THEN %GOTO errexit;
322  %IF %_handleError(&l_macname.
323  ,NoTstDir
324  ,NOT %_existdir(&l_target_abs./tst)
325  ,folder &l_target_abs./tst does not exist
326  ,i_verbose=&i_verbose.
327  )
328  %THEN %GOTO errexit;
329  %IF %_handleError(&l_macname.
330  ,NoRepDir
331  ,NOT %_existdir(&l_target_abs./rep)
332  ,folder &l_target_abs./rep does not exist
333  ,i_verbose=&i_verbose.
334  )
335  %THEN %GOTO errexit;
336  PROC SQL NOPRINT;
337  UPDATE target.tsu SET tsu_target = "&io_target";
338  QUIT;
339 
340  /*-- project name ------------------------------------------------------------*/
341  PROC SQL NOPRINT;
342  SELECT tsu_project INTO :l_project FROM target.tsu;
343  QUIT;
344  %LET l_project=&l_project;
345  %IF "&i_project" NE "" %THEN %LET l_project=&i_project;
346  %IF %_handleError(&l_macname.
347  ,MissingProjectName
348  ,"&l_project" EQ ""
349  ,Parameter i_project must be specified
350  ,i_verbose=&i_verbose.
351  )
352  %THEN %GOTO errexit;
353  PROC SQL NOPRINT;
354  UPDATE target.tsu SET tsu_project = "&l_project";
355  QUIT;
356 
357  /*-- root folder -------------------------------------------------------------*/
358  PROC SQL NOPRINT;
359  SELECT tsu_root INTO :l_root FROM target.tsu;
360  QUIT;
361  %LET l_root=&l_root;
362  %IF "&i_root" NE "" %THEN %LET l_root=&i_root;
363  %IF %_handleError(&l_macname.
364  ,InvalidRoot
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.
368  )
369  %THEN %GOTO errexit;
370  PROC SQL NOPRINT;
371  UPDATE target.tsu SET tsu_root = "&l_root";
372  QUIT;
373 
374  /*-- sasunit root folder -------------------------------------------------------------*/
375  %LET l_sasunitroot=&l_sasunitroot;
376  %IF %_handleError(&l_macname.
377  ,InvalidRoot
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.
381  )
382  %THEN %GOTO errexit;
383  PROC SQL NOPRINT;
384  UPDATE target.tsu SET tsu_sasunitroot = "&l_sasunitroot";
385  QUIT;
386 
387  /*-- sasunit folder ----------------------------------------------------------*/
388  PROC SQL NOPRINT;
389  SELECT tsu_sasunit INTO :l_sasunit FROM target.tsu;
390  QUIT;
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.
395  ,InvalidSASUnitDir
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.
399  )
400  %THEN %GOTO errexit;
401  PROC SQL NOPRINT;
402  UPDATE target.tsu SET tsu_sasunit = "&l_sasunit";
403  QUIT;
404 
405  /*-- os-specific sasunit folder ----------------------------------------------------------*/
406  %LET l_sasautos_os=&l_sasautos_os;
407  %IF %_handleError(&l_macname.
408  ,InvalidSASUnitDir
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.
412  )
413  %THEN %GOTO errexit;
414  PROC SQL NOPRINT;
415  UPDATE target.tsu SET tsu_sasunit_os = "&l_sasautos_os";
416  QUIT;
417  /*-- check if autoexec exists where specified --------------------------------*/
418  PROC SQL NOPRINT;
419  SELECT tsu_autoexec INTO :l_autoexec FROM target.tsu;
420  QUIT;
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.
427  ,AutoexecNotFound
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.
431  )
432  %THEN %GOTO errexit;
433  PROC SQL NOPRINT;
434  UPDATE target.tsu SET tsu_autoexec = "&l_autoexec";
435  QUIT;
436 
437  /*-- check if sascfg exists where specified ----------------------------------*/
438  PROC SQL NOPRINT;
439  SELECT tsu_sascfg INTO :l_sascfg FROM target.tsu;
440  QUIT;
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.
445  ,SASCfgNotFound
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.
449  )
450  %THEN %GOTO errexit;
451  PROC SQL NOPRINT;
452  UPDATE target.tsu SET tsu_sascfg = "&l_sascfg";
453  QUIT;
454 
455  /*-- check sasuser folder ----------------------------------------------------*/
456  PROC SQL NOPRINT;
457  SELECT tsu_sasuser INTO :l_sasuser FROM target.tsu;
458  QUIT;
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.
463  ,InvalidSasuser
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.
467  )
468  %THEN %GOTO errexit;
469  PROC SQL NOPRINT;
470  UPDATE target.tsu SET tsu_sasuser = "&l_sasuser";
471  QUIT;
472 
473  /*-- check test data folder --------------------------------------------------*/
474  PROC SQL NOPRINT;
475  SELECT tsu_testdata INTO :l_testdata FROM target.tsu;
476  QUIT;
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.
481  ,InvalidTestdata
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.
485  )
486  %THEN %GOTO errexit;
487  PROC SQL NOPRINT;
488  UPDATE target.tsu SET tsu_testdata = "&l_testdata";
489  QUIT;
490 
491  /*-- check reference data folder ---------------------------------------------*/
492  PROC SQL NOPRINT;
493  SELECT tsu_refdata INTO :l_refdata FROM target.tsu;
494  QUIT;
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.
499  ,InvalidRefdata
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.
503  )
504  %THEN %GOTO errexit;
505  PROC SQL NOPRINT;
506  UPDATE target.tsu SET tsu_refdata = "&l_refdata";
507  QUIT;
508 
509  /*-- check folder for specification documents --------------------------------*/
510  PROC SQL NOPRINT;
511  SELECT tsu_doc INTO :l_doc FROM target.tsu;
512  QUIT;
513  %LET l_doc=&l_doc;
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.
517  ,InvalidDoc
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.
521  )
522  %THEN %GOTO errexit;
523  PROC SQL NOPRINT;
524  UPDATE target.tsu SET tsu_doc = "&l_doc";
525  QUIT;
526 
527  /*-- check autocall paths ----------------------------------------------------*/
528  %LET restore_sasautos=%sysfunc(getoption(sasautos));
529 
530  PROC SQL NOPRINT;
531  SELECT tsu_sasautos INTO :l_sasautos FROM target.tsu;
532  QUIT;
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.
537  ,InvalidSASAutos
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.
541  )
542  %THEN %GOTO errexit;
543  PROC SQL NOPRINT;
544  UPDATE target.tsu SET tsu_sasautos = "&l_sasautos";
545  QUIT;
546 
547  %DO i=1 %TO 9;
548  PROC SQL NOPRINT;
549  SELECT tsu_sasautos&i. INTO :l_sasautos FROM target.tsu;
550  QUIT;
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.
555  ,InvalidSASAutosN
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.
559  )
560  %THEN %GOTO errexit;
561  PROC SQL NOPRINT;
562  UPDATE target.tsu SET tsu_sasautos&i. = "&l_sasautos";
563  QUIT;
564  %END; /* i=1 %TO 9 */
565 
566  /*-- update parameters ----------------------------------------------------*/
567  PROC SQL NOPRINT;
568  UPDATE target.tsu SET tsu_testcoverage=&i_testcoverage;
569  UPDATE target.tsu SET tsu_verbose =&i_verbose;
570  QUIT;
571 
572  /*-- load relevant information from test database to global macro symbols ----*/
573  %_loadEnvironment (i_withLibrefs = 0
574  )
575  /* Correct Termstring in Textfiles */
576  %_prepareTextFiles;
577 
578  %IF "&g_error_code" NE "" %THEN %GOTO errexit;
579 
580  /*-- check spawning of a SAS process -----------------------------------------*/
581  /* a file will be created in the work library of the parent (this) process
582  to check whether spawning works */
583  %LET l_work = %sysfunc(pathname(work));
584  PROC DATASETS NOLIST NOWARN LIB=work;
585  DELETE check;
586  QUIT;
587 
588  DATA _null_;
589  FILE "&l_work/check_spawning.sas";
590  PUT "LIBNAME awork ""&l_work"";";
591  PUT "DATA awork.check; RUN;";
592  RUN;
593 
594  %_runProgramSpawned(i_program =&l_work./check_spawning.sas
595  ,i_scnid =000
596  ,i_generateMcoverage=0
597  ,r_sysrc =l_sysrc
598  );
599 
600  %IF %_handleError(&l_macname.
601  ,ErrorSASCall2
602  ,NOT %sysfunc(exist(work.check))
603  ,Error spawning SAS process in initialization
604  ,i_verbose=&i_verbose.
605  )
606  %THEN %GOTO errexit;
607 
608  PROC DATASETS NOLIST NOWARN LIB=work;
609  DELETE check;
610  QUIT;
611 
612  %LET l_rc=%_delFile(&l_work/run.sas);
613 
614  /*-- save time of initialization ---------------------------------------------*/
615  PROC SQL NOPRINT;
616  UPDATE target.tsu
617  SET tsu_lastinit = %sysfunc(datetime())
618  ;
619  QUIT;
620 
621  /*-- update column tsu_dbVersion ------------------------------------------*/
622  PROC SQL NOPRINT;
623  UPDATE target.tsu
624  SET tsu_dbVersion = "&g_version."
625  ;
626  QUIT;
627 
628  %PUT;
629  %PUT ============================ SASUnit has been initialized successfully ==========================;
630  %PUT;
631 
632  %GOTO exit;
633 %errexit:
634  %PUT;
635  %PUT &g_error: ===================== Error! Testsuite aborted! ===========================================;
636  %PUT;
637  LIBNAME target;
638  endsas;
639 %exit:
640 %MEND initSASUnit;
641