Megatest

Hex Artifact Content
Login

Artifact fa6512266d595fe53ad8b69cd2515b0539088490:


0000: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;;==============
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 43 6f 70 79  ========.;; Copy
0050: 72 69 67 68 74 20 32 30 30 36 2d 32 30 31 32 2c  right 2006-2012,
0060: 20 4d 61 74 74 68 65 77 20 57 65 6c 6c 61 6e 64   Matthew Welland
0070: 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 69 73 20 70  ..;; .;;  This p
0080: 72 6f 67 72 61 6d 20 69 73 20 6d 61 64 65 20 61  rogram is made a
0090: 76 61 69 6c 61 62 6c 65 20 75 6e 64 65 72 20 74  vailable under t
00a0: 68 65 20 47 4e 55 20 47 50 4c 20 76 65 72 73 69  he GNU GPL versi
00b0: 6f 6e 20 32 2e 30 20 6f 72 0a 3b 3b 20 20 67 72  on 2.0 or.;;  gr
00c0: 65 61 74 65 72 2e 20 53 65 65 20 74 68 65 20 61  eater. See the a
00d0: 63 63 6f 6d 70 61 6e 79 69 6e 67 20 66 69 6c 65  ccompanying file
00e0: 20 43 4f 50 59 49 4e 47 20 66 6f 72 20 64 65 74   COPYING for det
00f0: 61 69 6c 73 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68  ails..;; .;;  Th
0100: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69  is program is di
0110: 73 74 72 69 62 75 74 65 64 20 57 49 54 48 4f 55  stributed WITHOU
0120: 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20  T ANY WARRANTY; 
0130: 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65  without even the
0140: 0a 3b 3b 20 20 69 6d 70 6c 69 65 64 20 77 61 72  .;;  implied war
0150: 72 61 6e 74 79 20 6f 66 20 4d 45 52 43 48 41 4e  ranty of MERCHAN
0160: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
0170: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
0180: 55 4c 41 52 0a 3b 3b 20 20 50 55 52 50 4f 53 45  ULAR.;;  PURPOSE
0190: 2e 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ..;;============
01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 63  ==========..(dec
01e0: 6c 61 72 65 20 28 75 6e 69 74 20 67 65 6e 65 78  lare (unit genex
01f0: 61 6d 70 6c 65 29 29 0a 28 75 73 65 20 70 6f 73  ample)).(use pos
0200: 69 78 20 72 65 67 65 78 29 0a 0a 28 64 65 66 69  ix regex)..(defi
0210: 6e 65 20 67 65 6e 65 78 61 6d 70 6c 65 3a 65 78  ne genexample:ex
0220: 61 6d 70 6c 65 2d 6c 6f 67 70 72 6f 0a 23 3c 3c  ample-logpro.#<<
0230: 45 4f 46 0a 20 20 3b 3b 20 59 6f 75 20 73 68 6f  EOF.  ;; You sho
0240: 75 6c 64 20 68 61 76 65 20 61 74 20 6c 65 61 73  uld have at leas
0250: 74 20 6f 6e 65 20 65 78 70 65 63 74 3a 72 65 71  t one expect:req
0260: 75 69 72 65 64 2e 20 54 68 69 73 20 65 6e 73 75  uired. This ensu
0270: 72 65 73 20 74 68 61 74 20 79 6f 75 72 20 70 72  res that your pr
0280: 6f 63 65 73 73 20 72 61 6e 0a 20 20 3b 3b 20 63  ocess ran.  ;; c
0290: 6f 6d 6d 65 6e 74 20 6f 75 74 20 74 68 65 20 6c  omment out the l
02a0: 69 6e 65 20 62 65 6c 6f 77 20 61 6e 64 20 72 65  ine below and re
02b0: 70 6c 61 63 65 20 22 70 75 74 20 70 61 74 74 65  place "put patte
02c0: 72 6e 20 68 65 72 65 22 20 77 69 74 68 20 61 20  rn here" with a 
02d0: 70 61 74 74 65 72 6e 20 74 68 61 74 20 77 69 6c  pattern that wil
02e0: 6c 0a 20 20 3b 3b 20 61 6c 77 61 79 73 20 62 65  l.  ;; always be
02f0: 20 73 65 65 6e 20 69 6e 20 79 6f 75 72 20 6c 6f   seen in your lo
0300: 67 20 66 69 6c 65 20 69 66 20 74 68 65 20 73 74  g file if the st
0310: 65 70 20 72 75 6e 73 20 73 75 63 63 65 73 73 66  ep runs successf
0320: 75 6c 6c 79 2e 0a 20 20 3b 3b 0a 20 20 3b 3b 20  ully..  ;;.  ;; 
0330: 28 65 78 70 65 63 74 3a 72 65 71 75 69 72 65 64  (expect:required
0340: 20 69 6e 20 22 4c 6f 67 46 69 6c 65 42 6f 64 79   in "LogFileBody
0350: 22 20 3e 20 30 20 22 50 75 74 20 64 65 73 63 72  " > 0 "Put descr
0360: 69 70 74 69 6f 6e 20 68 65 72 65 22 20 23 2f 70  iption here" #/p
0370: 75 74 20 70 61 74 74 65 72 6e 20 68 65 72 65 2f  ut pattern here/
0380: 29 0a 20 20 3b 3b 0a 20 20 3b 3b 20 59 6f 75 20  ).  ;;.  ;; You 
0390: 6d 61 79 20 6e 65 65 64 20 69 67 6e 6f 72 65 73  may need ignores
03a0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 66 61 6c   to suppress fal
03b0: 73 65 20 65 72 72 6f 72 20 6f 72 20 77 61 72 6e  se error or warn
03c0: 69 6e 67 20 68 69 74 73 20 66 72 6f 6d 20 74 68  ing hits from th
03d0: 65 20 6c 61 74 65 72 20 65 78 70 65 63 74 73 0a  e later expects.
03e0: 20 20 3b 3b 20 4e 4f 54 45 3a 20 4f 72 64 65 72    ;; NOTE: Order
03f0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 68 65   is important he
0400: 72 65 21 0a 20 20 28 65 78 70 65 63 74 3a 69 67  re!.  (expect:ig
0410: 6e 6f 72 65 20 20 20 69 6e 20 22 4c 6f 67 46 69  nore   in "LogFi
0420: 6c 65 42 6f 64 79 22 20 20 3c 20 39 39 20 22 49  leBody"  < 99 "I
0430: 67 6e 6f 72 65 20 74 68 65 20 77 6f 72 64 20 65  gnore the word e
0440: 72 72 6f 72 20 69 6e 20 63 6f 6d 6d 65 6e 74 73  rror in comments
0450: 22 20 23 2f 5e 5c 2f 5c 2f 2e 2a 65 72 72 6f 72  " #/^\/\/.*error
0460: 2f 29 0a 20 20 28 65 78 70 65 63 74 3a 77 61 72  /).  (expect:war
0470: 6e 69 6e 67 20 20 69 6e 20 22 4c 6f 67 46 69 6c  ning  in "LogFil
0480: 65 42 6f 64 79 22 20 20 3d 20 30 20 22 41 6e 79  eBody"  = 0 "Any
0490: 20 77 61 72 6e 69 6e 67 22 20 23 2f 77 61 72 6e   warning" #/warn
04a0: 2f 29 0a 20 20 28 65 78 70 65 63 74 3a 65 72 72  /).  (expect:err
04b0: 6f 72 20 20 20 20 69 6e 20 22 4c 6f 67 46 69 6c  or    in "LogFil
04c0: 65 42 6f 64 79 22 20 20 3d 20 30 20 22 41 6e 79  eBody"  = 0 "Any
04d0: 20 65 72 72 6f 72 22 20 20 28 6c 69 73 74 20 23   error"  (list #
04e0: 2f 45 52 52 4f 52 2f 20 23 2f 65 72 72 6f 72 2f  /ERROR/ #/error/
04f0: 29 29 20 3b 3b 20 62 75 74 20 64 69 73 61 6c 6c  )) ;; but disall
0500: 6f 77 20 61 6e 79 20 6f 74 68 65 72 20 65 72 72  ow any other err
0510: 6f 72 73 0a 45 4f 46 0a 29 0a 0a 28 64 65 66 69  ors.EOF.)..(defi
0520: 6e 65 20 67 65 6e 65 78 61 6d 70 6c 65 3a 65 78  ne genexample:ex
0530: 61 6d 70 6c 65 2d 73 63 72 69 70 74 0a 23 3c 3c  ample-script.#<<
0540: 45 4f 46 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 65  EOF.#!/usr/bin/e
0550: 6e 76 20 62 61 73 68 0a 0a 23 20 52 75 6e 20 79  nv bash..# Run y
0560: 6f 75 72 20 73 74 65 70 20 68 65 72 65 0a 45 4f  our step here.EO
0570: 46 0a 29 0a 0a 28 64 65 66 69 6e 65 20 28 67 65  F.)..(define (ge
0580: 6e 65 78 61 6d 70 6c 65 3a 6d 6b 2d 6d 65 67 61  nexample:mk-mega
0590: 74 65 73 74 2e 63 6f 6e 66 69 67 29 0a 20 20 28  test.config).  (
05a0: 6c 65 74 20 28 28 6b 65 79 73 74 72 20 23 66 29  let ((keystr #f)
05b0: 0a 09 28 6b 65 79 73 20 20 20 23 66 29 0a 09 28  ..(keys   #f)..(
05c0: 6c 6e 74 72 65 65 20 23 66 29 0a 09 28 70 61 74  lntree #f)..(pat
05d0: 68 20 20 20 23 66 29 0a 09 28 66 69 72 73 74 64  h   #f)..(firstd
05e0: 20 23 66 29 29 0a 20 20 20 20 28 70 72 69 6e 74   #f)).    (print
05f0: 20 22 4e 6f 74 65 3a 20 64 6f 6e 27 74 20 77 6f   "Note: don't wo
0600: 72 72 79 20 74 6f 6f 20 6d 75 63 68 20 61 62 6f  rry too much abo
0610: 75 74 20 74 79 70 6f 73 20 69 6e 20 74 68 69 73  ut typos in this
0620: 20 70 72 6f 63 65 73 73 2c 20 79 6f 75 20 77 69   process, you wi
0630: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 65 64  ll be able to ed
0640: 69 74 0a 74 68 65 20 67 65 6e 65 72 61 74 65 64  it.the generated
0650: 20 66 69 6c 65 73 20 62 65 66 6f 72 65 20 73 74   files before st
0660: 61 72 74 69 6e 67 20 79 6f 75 72 20 66 69 72 73  arting your firs
0670: 74 20 72 75 6e 73 22 29 0a 0a 20 20 20 20 3b 3b  t runs")..    ;;
0680: 20 63 72 65 61 74 65 20 74 68 65 20 6e 65 65 64   create the need
0690: 65 64 20 61 72 65 61 0a 20 20 20 20 28 70 72 69  ed area.    (pri
06a0: 6e 74 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  nt "============
06b0: 3d 3d 3d 3d 3d 3d 5c 6e 57 68 65 72 65 20 63 61  ======\nWhere ca
06c0: 6e 20 49 20 63 72 65 61 74 65 20 79 6f 75 72 20  n I create your 
06d0: 4d 65 67 61 74 65 73 74 20 72 65 67 72 65 73 73  Megatest regress
06e0: 73 69 6f 6e 2f 63 6f 6e 74 69 6e 75 6f 75 73 20  sion/continuous 
06f0: 62 75 69 6c 64 20 61 72 65 61 3f 20 4e 6f 74 65  build area? Note
0700: 2c 20 79 6f 75 72 20 5c 6e 22 0a 09 20 20 20 22  , your \n"..   "
0710: 74 65 73 74 73 20 77 69 6c 6c 20 6e 6f 74 20 6e  tests will not n
0720: 65 63 65 73 73 61 72 69 6c 79 20 62 65 20 72 75  ecessarily be ru
0730: 6e 20 69 6e 20 74 68 69 73 20 61 72 65 61 2c 20  n in this area, 
0740: 64 69 73 6b 20 73 70 61 63 65 20 6e 65 65 64 73  disk space needs
0750: 20 61 72 65 20 6d 6f 64 65 73 74 2e 20 43 75 72   are modest. Cur
0760: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 69  rent directory i
0770: 73 3a 5c 6e 5c 6e 22 0a 09 20 20 20 28 63 75 72  s:\n\n"..   (cur
0780: 72 65 6e 74 2d 64 69 72 65 63 74 6f 72 79 29 20  rent-directory) 
0790: 22 5c 6e 22 29 0a 20 20 20 20 28 64 69 73 70 6c  "\n").    (displ
07a0: 61 79 20 22 45 6e 74 65 72 20 79 6f 75 72 20 6d  ay "Enter your m
07b0: 65 67 61 74 65 73 74 20 64 69 72 65 63 74 6f 72  egatest director
07c0: 79 3a 20 22 29 0a 20 20 20 20 28 73 65 74 21 20  y: ").    (set! 
07d0: 70 61 74 68 20 28 72 65 61 64 2d 6c 69 6e 65 29  path (read-line)
07e0: 29 0a 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20  )..    (if (not 
07f0: 28 64 69 72 65 63 74 6f 72 79 3f 20 70 61 74 68  (directory? path
0800: 29 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 70  ))..(begin..  (p
0810: 72 69 6e 74 20 22 54 68 65 20 70 61 74 68 20 22  rint "The path "
0820: 20 70 61 74 68 20 22 20 64 6f 65 73 20 6e 6f 74   path " does not
0830: 20 65 78 69 73 74 20 6f 72 20 69 73 20 6e 6f 74   exist or is not
0840: 20 61 20 64 69 72 65 63 74 6f 72 79 2e 20 41 74   a directory. At
0850: 74 65 6d 70 74 69 6e 67 20 74 6f 20 63 72 65 61  tempting to crea
0860: 74 65 20 69 74 20 6e 6f 77 22 29 0a 09 20 20 28  te it now")..  (
0870: 63 72 65 61 74 65 2d 64 69 72 65 63 74 6f 72 79  create-directory
0880: 20 70 61 74 68 20 23 74 29 29 29 0a 0a 20 20 20   path #t)))..   
0890: 20 3b 3b 20 46 69 72 73 74 20 63 68 65 63 6b 20   ;; First check 
08a0: 74 68 61 74 20 74 68 65 20 64 69 72 65 63 74 6f  that the directo
08b0: 72 79 20 69 73 20 65 6d 70 74 79 21 0a 20 20 20  ry is empty!.   
08c0: 20 28 69 66 20 28 61 6e 64 20 28 66 69 6c 65 2d   (if (and (file-
08d0: 65 78 69 73 74 73 3f 20 70 61 74 68 29 0a 09 20  exists? path).. 
08e0: 20 20 20 20 28 6e 6f 74 20 28 6e 75 6c 6c 3f 20      (not (null? 
08f0: 28 67 6c 6f 62 20 28 63 6f 6e 63 20 70 61 74 68  (glob (conc path
0900: 20 22 2f 2a 22 29 29 29 29 29 0a 09 28 62 65 67   "/*")))))..(beg
0910: 69 6e 0a 09 20 20 28 70 72 69 6e 74 20 22 57 41  in..  (print "WA
0920: 52 4e 49 4e 47 3a 20 64 69 72 65 63 74 6f 72 79  RNING: directory
0930: 20 22 20 70 61 74 68 20 22 20 69 73 20 6e 6f 74   " path " is not
0940: 20 65 6d 70 74 79 2c 20 61 72 65 20 79 6f 75 20   empty, are you 
0950: 73 75 72 65 20 79 6f 75 20 77 61 6e 74 20 74 6f  sure you want to
0960: 20 63 6f 6e 74 69 6e 75 65 3f 22 29 0a 09 20 20   continue?")..  
0970: 28 64 69 73 70 6c 61 79 20 22 45 6e 74 65 72 20  (display "Enter 
0980: 79 2f 6e 3a 20 22 29 0a 09 20 20 28 69 66 20 28  y/n: ")..  (if (
0990: 65 71 75 61 6c 3f 20 22 79 22 20 28 72 65 61 64  equal? "y" (read
09a0: 2d 6c 69 6e 65 29 29 0a 09 20 20 20 20 20 20 28  -line))..      (
09b0: 70 72 69 6e 74 20 22 55 73 69 6e 67 20 64 69 72  print "Using dir
09c0: 65 63 74 6f 72 79 20 22 20 70 61 74 68 20 22 20  ectory " path " 
09d0: 66 6f 72 20 79 6f 75 72 20 4d 65 67 61 74 65 73  for your Megates
09e0: 74 20 61 72 65 61 2e 22 29 0a 09 20 20 20 20 20  t area.")..     
09f0: 20 28 62 65 67 69 6e 0a 09 09 28 70 72 69 6e 74   (begin...(print
0a00: 20 22 49 4e 46 4f 3a 20 43 72 65 61 74 69 6f 6e   "INFO: Creation
0a10: 20 6f 66 20 6d 65 67 61 74 65 73 74 20 66 69 6c   of megatest fil
0a20: 65 73 20 69 6e 20 22 20 70 61 74 68 20 22 20 61  es in " path " a
0a30: 62 6f 72 74 65 64 22 29 0a 09 09 28 65 78 69 74  borted")...(exit
0a40: 20 31 29 29 29 29 29 0a 0a 20 20 20 20 3b 3b 20   1)))))..    ;; 
0a50: 66 69 72 73 74 20 70 72 6f 6d 70 74 20 75 73 65  first prompt use
0a60: 72 20 66 6f 72 20 66 69 65 6c 64 73 0a 20 20 20  r for fields.   
0a70: 20 3b 3b 0a 20 20 20 20 28 70 72 69 6e 74 0a 20   ;;.    (print. 
0a80: 20 20 20 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d      "===========
0a90: 3d 3d 3d 3d 3d 3d 3d 0a 0a 4e 65 78 74 20 79 6f  =======..Next yo
0aa0: 75 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 66  u must specify f
0ab0: 69 65 6c 64 73 20 6f 72 20 6b 65 79 73 20 66 6f  ields or keys fo
0ac0: 72 20 79 6f 75 72 20 6d 65 67 61 74 65 73 74 20  r your megatest 
0ad0: 61 72 65 61 2e 20 54 68 65 73 65 0a 77 69 6c 6c  area. These.will
0ae0: 20 62 65 20 75 73 65 64 20 74 6f 20 6f 72 67 61   be used to orga
0af0: 6e 69 73 65 20 79 6f 75 72 20 72 75 6e 73 2e 20  nise your runs. 
0b00: 4f 6e 65 20 66 69 65 6c 64 20 73 68 6f 75 6c 64  One field should
0b10: 20 70 72 6f 62 61 62 6c 79 20 62 65 0a 5c 22 52   probably be.\"R
0b20: 45 4c 45 41 53 45 5c 22 2e 20 20 4f 74 68 65 72  ELEASE\".  Other
0b30: 20 65 78 61 6d 70 6c 65 73 20 6f 66 20 75 73 65   examples of use
0b40: 66 75 6c 20 66 69 65 6c 64 73 20 6d 69 67 68 74  ful fields might
0b50: 20 62 65 20 5c 22 50 4c 41 54 46 4f 52 4d 5c 22   be \"PLATFORM\"
0b60: 2c 0a 5c 22 54 41 52 47 45 54 5f 4f 53 5c 22 20  ,.\"TARGET_OS\" 
0b70: 6f 72 20 69 66 20 79 6f 75 20 61 72 65 20 69 6e  or if you are in
0b80: 20 74 68 65 20 73 65 6d 69 63 6f 6e 64 75 63 74   the semiconduct
0b90: 6f 72 20 62 75 73 69 6e 65 73 73 20 70 65 72 68  or business perh
0ba0: 61 70 73 0a 74 68 69 6e 67 73 20 6c 69 6b 65 20  aps.things like 
0bb0: 5c 22 54 45 43 48 4e 4f 4c 4f 47 59 5f 4e 4f 44  \"TECHNOLOGY_NOD
0bc0: 45 5c 22 2c 20 5c 22 44 45 53 49 47 4e 5f 4b 49  E\", \"DESIGN_KI
0bd0: 54 5c 22 20 6f 72 20 5c 22 4d 45 54 41 4c 5f 53  T\" or \"METAL_S
0be0: 54 41 43 4b 5c 22 2e 0a 0a 54 68 65 20 61 6c 6c  TACK\"...The all
0bf0: 20 63 61 70 73 20 69 73 20 61 20 63 6f 6e 76 65   caps is a conve
0c00: 6e 74 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68  ntion because th
0c10: 65 20 76 61 72 69 61 62 6c 65 73 20 79 6f 75 20  e variables you 
0c20: 63 68 6f 6f 73 65 20 77 69 6c 6c 20 62 65 0a 61  choose will be.a
0c30: 76 61 69 6c 61 62 6c 65 20 74 6f 20 79 6f 75 72  vailable to your
0c40: 20 74 65 73 74 73 20 61 73 20 65 6e 76 69 72 6f   tests as enviro
0c50: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 2e  nment variables.
0c60: 20 59 6f 75 20 63 61 6e 20 65 64 69 74 20 74 68   You can edit th
0c70: 65 73 65 0a 76 61 6c 75 65 73 20 6c 61 74 65 72  ese.values later
0c80: 20 62 75 74 20 69 74 20 69 73 20 67 65 6e 65 72   but it is gener
0c90: 61 6c 6c 79 20 61 20 67 6f 6f 64 20 69 64 65 61  ally a good idea
0ca0: 20 74 6f 20 73 65 74 74 6c 65 20 6f 6e 20 74 68   to settle on th
0cb0: 65 6d 0a 65 61 72 6c 79 2e 0a 0a 59 6f 75 72 20  em.early...Your 
0cc0: 72 75 6e 73 20 77 69 6c 6c 20 62 65 20 73 74 6f  runs will be sto
0cd0: 72 65 64 20 69 6e 20 64 69 72 65 63 74 6f 72 69  red in directori
0ce0: 65 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  es specified by 
0cf0: 79 6f 75 72 0a 6b 65 79 73 2e 20 45 78 61 6d 70  your.keys. Examp
0d00: 6c 65 2c 20 69 66 20 79 6f 75 20 68 61 76 65 20  le, if you have 
0d10: 6b 65 79 73 20 4f 53 46 41 4d 49 4c 59 2f 56 41  keys OSFAMILY/VA
0d20: 52 49 41 4e 54 2f 4f 53 56 45 52 2f 52 45 4c 45  RIANT/OSVER/RELE
0d30: 41 53 45 20 79 6f 75 20 6d 61 79 0a 67 65 74 20  ASE you may.get 
0d40: 61 20 74 65 73 74 20 5c 22 62 75 69 6c 64 5c 22  a test \"build\"
0d50: 20 69 6e 20 61 20 64 69 72 65 63 74 6f 72 79 20   in a directory 
0d60: 6c 69 6b 65 20 74 68 69 73 3a 0a 6c 69 6e 75 78  like this:.linux
0d70: 2f 75 62 75 6e 74 75 2f 31 31 2e 30 34 2f 72 65  /ubuntu/11.04/re
0d80: 76 5f 31 2e 32 2f 62 75 69 6c 64 0a 0a 50 6c 65  v_1.2/build..Ple
0d90: 61 73 65 20 65 6e 74 65 72 20 79 6f 75 72 20 6b  ase enter your k
0da0: 65 79 73 20 6e 6f 77 2c 20 73 65 70 61 72 61 74  eys now, separat
0db0: 65 64 20 62 79 20 73 70 61 63 65 73 20 6f 72 20  ed by spaces or 
0dc0: 73 6c 61 73 68 65 73 2e 20 4f 6e 6c 79 20 61 6c  slashes. Only al
0dd0: 70 68 61 2d 6e 75 6d 65 72 69 63 20 63 68 61 72  pha-numeric char
0de0: 61 63 74 65 72 73 2c 20 0a 75 70 70 65 72 20 63  acters, .upper c
0df0: 61 73 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e  ase recommended.
0e00: 20 45 78 61 6d 70 6c 65 3a 20 43 4f 4d 50 49 4c   Example: COMPIL
0e10: 45 52 5f 56 45 52 2f 52 45 4c 45 41 53 45 5f 4e  ER_VER/RELEASE_N
0e20: 41 4d 45 2f 51 55 41 4c 5f 4c 45 56 45 4c 0a 22  AME/QUAL_LEVEL."
0e30: 29 0a 20 20 20 20 28 73 65 74 21 20 6b 65 79 73  ).    (set! keys
0e40: 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 6b 65 79   (let loop ((key
0e50: 73 74 72 20 22 22 29 29 0a 09 09 20 28 69 66 20  str ""))... (if 
0e60: 28 65 71 75 61 6c 3f 20 6b 65 79 73 74 72 20 22  (equal? keystr "
0e70: 71 22 29 0a 09 09 20 20 20 20 20 28 62 65 67 69  q")...     (begi
0e80: 6e 0a 09 09 20 20 20 20 20 20 20 28 70 72 69 6e  n...       (prin
0e90: 74 20 22 51 75 69 74 69 6e 67 20 2e 2e 2e 22 29  t "Quiting ...")
0ea0: 0a 09 09 20 20 20 20 20 20 20 28 65 78 69 74 29  ...       (exit)
0eb0: 29 0a 09 09 20 20 20 20 20 28 6c 65 74 20 28 28  )...     (let ((
0ec0: 6b 65 79 6c 73 74 20 28 61 70 70 6c 79 20 61 70  keylst (apply ap
0ed0: 70 65 6e 64 0a 09 09 09 09 09 20 20 28 6d 61 70  pend......  (map
0ee0: 20 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 28 73   string-split (s
0ef0: 74 72 69 6e 67 2d 73 70 6c 69 74 20 6b 65 79 73  tring-split keys
0f00: 74 72 20 22 2f 22 29 29 29 29 29 0a 09 09 20 20  tr "/")))))...  
0f10: 20 20 20 20 20 28 69 66 20 28 6f 72 20 28 6e 75       (if (or (nu
0f20: 6c 6c 3f 20 6b 65 79 6c 73 74 29 0a 09 09 09 20  ll? keylst).... 
0f30: 20 20 20 20 20 20 28 6e 6f 74 20 28 6e 75 6c 6c        (not (null
0f40: 3f 20 28 66 69 6c 74 65 72 20 73 74 72 69 6e 67  ? (filter string
0f50: 2d 6e 75 6c 6c 3f 20 6b 65 79 6c 73 74 29 29 29  -null? keylst)))
0f60: 29 0a 09 09 09 20 20 20 28 62 65 67 69 6e 0a 09  )....   (begin..
0f70: 09 09 20 20 20 20 20 28 64 69 73 70 6c 61 79 20  ..     (display 
0f80: 22 45 6e 74 65 72 20 6b 65 79 73 20 73 65 70 61  "Enter keys sepa
0f90: 72 61 74 65 64 20 62 79 20 73 70 61 63 65 73 20  rated by spaces 
0fa0: 6f 72 20 73 6c 61 73 68 65 73 3a 20 22 29 0a 09  or slashes: ")..
0fb0: 09 09 20 20 20 20 20 28 6c 6f 6f 70 20 28 72 65  ..     (loop (re
0fc0: 61 64 2d 6c 69 6e 65 29 29 29 0a 09 09 09 20 20  ad-line)))....  
0fd0: 20 6b 65 79 6c 73 74 29 29 29 29 29 0a 0a 20 20   keylst)))))..  
0fe0: 20 20 28 70 72 69 6e 74 20 22 59 6f 75 20 68 61    (print "You ha
0ff0: 76 65 20 63 68 6f 6f 73 65 6e 20 22 20 28 73 74  ve choosen " (st
1000: 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65  ring-intersperse
1010: 20 6b 65 79 73 20 22 2c 20 22 29 20 22 20 66 6f   keys ", ") " fo
1020: 72 20 79 6f 75 72 20 6b 65 79 73 2e 22 29 0a 20  r your keys."). 
1030: 20 20 20 0a 20 20 20 20 3b 3b 20 4e 6f 77 20 67     .    ;; Now g
1040: 65 74 20 74 68 65 20 6c 69 6e 6b 20 74 72 65 65  et the link tree
1050: 20 6c 6f 63 61 74 69 6f 6e 20 61 6e 64 20 61 20   location and a 
1060: 66 69 72 73 74 20 64 69 73 6b 0a 20 20 20 20 28  first disk.    (
1070: 70 72 69 6e 74 0a 20 20 20 20 20 22 3d 3d 3d 3d  print.     "====
1080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a  ==============..
1090: 4e 6f 77 20 79 6f 75 20 6e 65 65 64 20 61 6e 20  Now you need an 
10a0: 69 6e 69 74 69 61 6c 20 70 6c 61 63 65 20 74 6f  initial place to
10b0: 20 73 74 6f 72 65 20 79 6f 75 72 20 72 75 6e 73   store your runs
10c0: 2e 20 54 68 65 73 65 20 61 72 65 20 63 61 6c 6c  . These are call
10d0: 65 64 20 5c 22 64 69 73 6b 73 5c 22 20 61 6e 64  ed \"disks\" and
10e0: 20 79 6f 75 0a 63 61 6e 20 61 64 64 20 6d 6f 72   you.can add mor
10f0: 65 20 61 74 20 61 6e 79 20 74 69 6d 65 2e 20 54  e at any time. T
1100: 6f 20 67 65 74 20 67 6f 69 6e 67 20 70 72 6f 76  o get going prov
1110: 69 64 65 20 61 20 77 72 69 74 65 61 62 6c 65 20  ide a writeable 
1120: 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 2e 20  directory name. 
1130: 0a 0a 22 29 0a 20 20 20 20 28 64 69 73 70 6c 61  ..").    (displa
1140: 79 20 22 45 6e 74 65 72 20 79 6f 75 72 20 74 65  y "Enter your te
1150: 73 74 20 72 75 6e 73 20 64 69 72 65 63 74 6f 72  st runs director
1160: 79 3a 20 22 29 0a 20 20 20 20 28 73 65 74 21 20  y: ").    (set! 
1170: 66 69 72 73 74 64 20 28 72 65 61 64 2d 6c 69 6e  firstd (read-lin
1180: 65 29 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74  e)).    (if (not
1190: 20 28 64 69 72 65 63 74 6f 72 79 3f 20 66 69 72   (directory? fir
11a0: 73 74 64 29 29 0a 09 28 62 65 67 69 6e 0a 09 20  std))..(begin.. 
11b0: 20 28 70 72 69 6e 74 20 22 57 41 52 4e 49 4e 47   (print "WARNING
11c0: 3a 20 79 6f 75 20 68 61 76 65 20 73 70 65 63 69  : you have speci
11d0: 66 69 65 64 20 61 20 70 61 74 68 20 22 20 66 69  fied a path " fi
11e0: 72 73 74 64 20 22 20 74 68 61 74 20 64 6f 65 73  rstd " that does
11f0: 20 6e 6f 74 20 65 78 69 73 74 2e 20 41 74 74 65   not exist. Atte
1200: 6d 70 74 69 6e 67 20 74 6f 20 63 72 65 61 74 65  mpting to create
1210: 20 69 74 2e 2e 2e 5c 6e 22 29 0a 09 20 20 28 63   it...\n")..  (c
1220: 72 65 61 74 65 2d 64 69 72 65 63 74 6f 72 79 20  reate-directory 
1230: 66 69 72 73 74 64 20 23 74 29 29 29 0a 0a 20 20  firstd #t)))..  
1240: 20 20 28 70 72 69 6e 74 0a 20 20 20 20 20 22 3d    (print.     "=
1250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1260: 3d 0a 0a 4d 65 67 61 74 65 73 74 20 75 73 65 73  =..Megatest uses
1270: 20 61 20 74 72 65 65 20 6f 66 20 73 79 6d 6c 69   a tree of symli
1280: 6e 6b 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61  nks to provide a
1290: 20 75 6e 69 66 6f 72 6d 20 73 74 72 75 63 74 75   uniform structu
12a0: 72 65 20 66 6f 72 20 66 69 6e 64 69 6e 67 20 61  re for finding a
12b0: 6c 6c 20 74 68 65 20 74 65 73 74 73 0a 79 6f 75  ll the tests.you
12c0: 20 72 75 6e 20 6f 76 65 72 20 74 69 6d 65 2e 20   run over time. 
12d0: 50 6c 65 61 73 65 20 70 72 6f 76 69 64 65 20 61  Please provide a
12e0: 20 70 61 74 68 20 77 68 65 72 65 20 77 65 20 63   path where we c
12f0: 61 6e 20 63 72 65 61 74 65 20 74 68 69 73 20 6c  an create this l
1300: 69 6e 6b 20 74 72 65 65 2e 0a 0a 22 29 0a 20 20  ink tree...").  
1310: 20 20 28 64 69 73 70 6c 61 79 20 22 45 6e 74 65    (display "Ente
1320: 72 20 6c 69 6e 6b 20 74 72 65 65 20 64 69 72 65  r link tree dire
1330: 63 74 6f 72 79 3a 20 22 29 0a 20 20 20 20 28 73  ctory: ").    (s
1340: 65 74 21 20 6c 6e 74 72 65 65 20 28 72 65 61 64  et! lntree (read
1350: 2d 6c 69 6e 65 29 29 0a 20 20 20 20 28 69 66 20  -line)).    (if 
1360: 28 6e 6f 74 20 28 64 69 72 65 63 74 6f 72 79 3f  (not (directory?
1370: 20 6c 6e 74 72 65 65 29 29 0a 09 28 62 65 67 69   lntree))..(begi
1380: 6e 0a 09 20 20 28 70 72 69 6e 74 20 22 57 41 52  n..  (print "WAR
1390: 4e 49 4e 47 3a 20 79 6f 75 20 68 61 76 65 20 73  NING: you have s
13a0: 70 65 63 69 66 69 65 64 20 61 20 70 61 74 68 20  pecified a path 
13b0: 22 20 6c 6e 74 72 65 65 20 22 74 68 61 74 20 64  " lntree "that d
13c0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 20 41  oes not exist. A
13d0: 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 63 72 65  ttempting to cre
13e0: 61 74 65 20 69 74 2e 2e 2e 5c 6e 22 29 0a 09 20  ate it...\n").. 
13f0: 20 28 63 72 65 61 74 65 2d 64 69 72 65 63 74 6f   (create-directo
1400: 72 79 20 6c 6e 74 72 65 65 20 23 74 29 29 29 0a  ry lntree #t))).
1410: 20 20 20 20 0a 20 20 20 20 28 77 69 74 68 2d 6f      .    (with-o
1420: 75 74 70 75 74 2d 74 6f 2d 66 69 6c 65 20 28 63  utput-to-file (c
1430: 6f 6e 63 20 70 61 74 68 20 22 2f 6d 65 67 61 74  onc path "/megat
1440: 65 73 74 2e 63 6f 6e 66 69 67 22 29 0a 20 20 20  est.config").   
1450: 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 09 28     (lambda ()..(
1460: 70 72 69 6e 74 20 22 23 20 54 68 69 73 20 61 72  print "# This ar
1470: 65 61 20 75 73 65 73 20 4d 65 67 61 74 65 73 74  ea uses Megatest
1480: 2e 20 4c 65 61 72 6e 20 6d 6f 72 65 20 61 74 20  . Learn more at 
1490: 68 74 74 70 3a 2f 2f 77 77 77 2e 6b 69 61 74 6f  http://www.kiato
14a0: 61 2e 63 6f 6d 2f 66 6f 73 73 69 6c 73 2f 6d 65  a.com/fossils/me
14b0: 67 61 74 65 73 74 2e 22 29 0a 09 28 70 72 69 6e  gatest.")..(prin
14c0: 74 20 22 23 5c 6e 22 29 0a 09 28 70 72 69 6e 74  t "#\n")..(print
14d0: 20 22 5b 66 69 65 6c 64 73 5d 22 29 0a 09 28 6d   "[fields]")..(m
14e0: 61 70 20 28 6c 61 6d 62 64 61 20 28 6b 29 28 70  ap (lambda (k)(p
14f0: 72 69 6e 74 20 6b 20 22 20 54 45 58 54 22 29 29  rint k " TEXT"))
1500: 20 6b 65 79 73 29 0a 09 28 70 72 69 6e 74 20 22   keys)..(print "
1510: 22 29 0a 09 28 70 72 69 6e 74 20 22 5b 73 65 74  ")..(print "[set
1520: 75 70 5d 22 29 0a 09 28 70 72 69 6e 74 20 22 23  up]")..(print "#
1530: 20 41 64 6a 75 73 74 20 6d 61 78 5f 63 6f 6e 63   Adjust max_conc
1540: 75 72 72 65 6e 74 5f 6a 6f 62 73 20 74 6f 20 6c  urrent_jobs to l
1550: 69 6d 69 74 20 68 6f 77 20 6d 75 63 68 20 79 6f  imit how much yo
1560: 75 20 6c 6f 61 64 20 79 6f 75 72 20 6d 61 63 68  u load your mach
1570: 69 6e 65 73 22 29 0a 09 28 70 72 69 6e 74 20 22  ines")..(print "
1580: 6d 61 78 5f 63 6f 6e 63 75 72 72 65 6e 74 5f 6a  max_concurrent_j
1590: 6f 62 73 20 35 30 5c 6e 22 29 0a 09 28 70 72 69  obs 50\n")..(pri
15a0: 6e 74 20 22 23 20 54 68 69 73 20 69 73 20 79 6f  nt "# This is yo
15b0: 75 72 20 6c 69 6e 6b 20 70 61 74 68 2e 20 41 76  ur link path. Av
15c0: 6f 69 64 20 6d 6f 76 69 6e 67 20 69 74 20 6f 6e  oid moving it on
15d0: 63 65 20 73 65 74 2e 22 29 0a 09 28 70 72 69 6e  ce set.")..(prin
15e0: 74 20 22 6c 69 6e 6b 74 72 65 65 20 22 20 28 63  t "linktree " (c
15f0: 6f 6d 6d 6f 6e 3a 72 65 61 6c 2d 70 61 74 68 20  ommon:real-path 
1600: 6c 6e 74 72 65 65 29 29 0a 09 28 70 72 69 6e 74  lntree))..(print
1610: 20 22 5c 6e 23 20 4a 6f 62 20 74 6f 6f 6c 73 20   "\n# Job tools 
1620: 61 72 65 20 6d 6f 72 65 20 61 64 76 61 6e 63 65  are more advance
1630: 64 20 77 61 79 73 20 74 6f 20 63 6f 6e 74 72 6f  d ways to contro
1640: 6c 20 68 6f 77 20 79 6f 75 72 20 6a 6f 62 73 20  l how your jobs 
1650: 61 72 65 20 6c 61 75 6e 63 68 65 64 22 29 0a 09  are launched")..
1660: 28 70 72 69 6e 74 20 22 5b 6a 6f 62 74 6f 6f 6c  (print "[jobtool
1670: 73 5d 5c 6e 75 73 65 73 68 65 6c 6c 20 79 65 73  s]\nuseshell yes
1680: 5c 6e 6c 61 75 6e 63 68 65 72 20 6e 62 66 61 6b  \nlauncher nbfak
1690: 65 5c 6e 6d 61 78 6c 6f 61 64 20 31 2e 35 5c 6e  e\nmaxload 1.5\n
16a0: 22 29 0a 09 28 70 72 69 6e 74 20 22 23 20 59 6f  ")..(print "# Yo
16b0: 75 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20 65  u can override e
16c0: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
16d0: 62 6c 65 73 20 66 6f 72 20 61 6c 6c 20 79 6f 75  bles for all you
16e0: 72 20 74 65 73 74 73 20 68 65 72 65 22 29 0a 09  r tests here")..
16f0: 28 70 72 69 6e 74 20 22 5b 65 6e 76 2d 6f 76 65  (print "[env-ove
1700: 72 72 69 64 65 5d 5c 6e 45 58 41 4d 50 4c 45 5f  rride]\nEXAMPLE_
1710: 56 41 52 20 65 78 61 6d 70 6c 65 20 76 61 6c 75  VAR example valu
1720: 65 5c 6e 22 29 0a 09 28 70 72 69 6e 74 20 22 23  e\n")..(print "#
1730: 20 41 73 20 79 6f 75 20 72 75 6e 20 6d 6f 72 65   As you run more
1740: 20 74 65 73 74 73 20 79 6f 75 20 6d 61 79 20 6e   tests you may n
1750: 65 65 64 20 74 6f 20 61 64 64 20 61 64 64 69 74  eed to add addit
1760: 69 6f 6e 61 6c 20 64 69 73 6b 73 2c 20 74 68 65  ional disks, the
1770: 20 6e 61 6d 65 73 20 61 72 65 20 61 72 62 69 74   names are arbit
1780: 72 61 72 79 20 62 75 74 20 6d 75 73 74 20 62 65  rary but must be
1790: 20 75 6e 69 71 75 65 22 29 0a 09 28 70 72 69 6e   unique")..(prin
17a0: 74 20 22 5b 64 69 73 6b 73 5d 5c 6e 64 69 73 6b  t "[disks]\ndisk
17b0: 30 20 22 20 28 63 6f 6d 6d 6f 6e 3a 72 65 61 6c  0 " (common:real
17c0: 2d 70 61 74 68 20 66 69 72 73 74 64 29 29 29 29  -path firstd))))
17d0: 0a 0a 20 20 20 20 28 70 72 69 6e 74 0a 20 20 20  ..    (print.   
17e0: 20 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d    "=============
17f0: 3d 3d 3d 3d 3d 0a 0a 49 27 6d 20 6e 6f 77 20 63  =====..I'm now c
1800: 72 65 61 74 69 6e 67 20 61 20 72 75 6e 63 6f 6e  reating a runcon
1810: 66 69 67 73 2e 63 6f 6e 66 69 67 20 66 69 6c 65  figs.config file
1820: 20 66 6f 72 20 79 6f 75 20 77 69 74 68 20 61 20   for you with a 
1830: 64 65 66 61 75 6c 74 20 73 65 63 74 69 6f 6e 2e  default section.
1840: 0a 59 6f 75 20 63 61 6e 20 75 73 65 20 74 68 69  .You can use thi
1850: 73 20 66 69 6c 65 20 74 6f 20 73 65 74 20 76 61  s file to set va
1860: 72 69 61 62 6c 65 73 20 66 6f 72 20 79 6f 75 72  riables for your
1870: 20 74 65 73 74 73 20 62 61 73 65 64 20 6f 6e 20   tests based on 
1880: 74 68 65 20 5c 22 74 61 72 67 65 74 5c 22 20 28  the \"target\" (
1890: 74 68 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a  the combination.
18a0: 6f 66 20 6b 65 79 73 29 2e 0a 0a 22 29 0a 20 20  of keys)...").  
18b0: 20 20 28 77 69 74 68 2d 6f 75 74 70 75 74 2d 74    (with-output-t
18c0: 6f 2d 66 69 6c 65 20 28 63 6f 6e 63 20 70 61 74  o-file (conc pat
18d0: 68 20 22 2f 72 75 6e 63 6f 6e 66 69 67 73 2e 63  h "/runconfigs.c
18e0: 6f 6e 66 69 67 22 29 0a 20 20 20 20 20 20 28 6c  onfig").      (l
18f0: 61 6d 62 64 61 20 28 29 0a 09 28 70 72 69 6e 74  ambda ()..(print
1900: 20 22 23 20 54 68 65 20 76 61 72 69 61 62 6c 65   "# The variable
1910: 73 20 69 6e 20 74 68 65 20 64 65 66 61 75 6c 74  s in the default
1920: 20 63 61 74 65 67 6f 72 79 20 77 69 6c 6c 20 62   category will b
1930: 65 20 73 65 65 6e 20 69 6e 20 61 6c 6c 20 72 75  e seen in all ru
1940: 6e 73 5c 6e 5b 64 65 66 61 75 6c 74 5d 5c 6e 41  ns\n[default]\nA
1950: 4c 4c 54 45 53 54 53 20 73 65 65 20 74 68 69 73  LLTESTS see this
1960: 20 76 61 72 69 61 62 6c 65 5c 6e 22 29 0a 09 0a   variable\n")...
1970: 09 28 70 72 69 6e 74 20 22 23 20 59 6f 75 72 20  .(print "# Your 
1980: 76 61 72 69 61 62 6c 65 73 20 68 65 72 65 20 61  variables here a
1990: 72 65 20 67 72 6f 75 70 65 64 20 62 79 20 74 61  re grouped by ta
19a0: 72 67 65 74 73 20 5b 22 20 28 73 74 72 69 6e 67  rgets [" (string
19b0: 2d 69 6e 74 65 72 73 70 65 72 73 65 20 6b 65 79  -intersperse key
19c0: 73 20 22 2f 22 29 20 22 5d 22 29 0a 09 28 6c 65  s "/") "]")..(le
19d0: 74 20 28 28 65 78 61 6d 70 6c 65 2d 74 61 72 67  t ((example-targ
19e0: 65 74 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72  et (string-inter
19f0: 73 70 65 72 73 65 20 28 6d 61 70 20 28 6c 61 6d  sperse (map (lam
1a00: 62 64 61 20 28 6b 29 28 63 6f 6e 63 20 6b 20 22  bda (k)(conc k "
1a10: 5f 76 61 6c 22 29 29 20 6b 65 79 73 29 20 22 2f  _val")) keys) "/
1a20: 22 29 29 29 0a 09 20 20 28 70 72 69 6e 74 20 22  ")))..  (print "
1a30: 5b 22 20 65 78 61 6d 70 6c 65 2d 74 61 72 67 65  [" example-targe
1a40: 74 20 22 5d 22 29 0a 09 20 20 28 70 72 69 6e 74  t "]")..  (print
1a50: 20 22 41 4e 4f 54 48 45 52 56 41 52 20 6f 6e 6c   "ANOTHERVAR onl
1a60: 79 20 64 65 66 69 6e 65 64 20 69 66 20 74 61 72  y defined if tar
1a70: 67 65 74 20 69 73 20 22 20 65 78 61 6d 70 6c 65  get is " example
1a80: 2d 74 61 72 67 65 74 29 29 0a 09 28 70 72 69 6e  -target))..(prin
1a90: 74 20 22 5c 6e 23 20 49 74 20 63 61 6e 20 62 65  t "\n# It can be
1aa0: 20 68 61 6e 64 79 20 74 6f 20 69 6e 63 6c 75 64   handy to includ
1ab0: 65 20 61 20 66 69 6c 65 20 62 61 73 65 64 20 6f  e a file based o
1ac0: 6e 20 74 68 65 20 75 73 65 72 73 20 75 6e 69 78  n the users unix
1ad0: 20 75 73 65 72 6e 61 6d 65 2e 5c 6e 22 0a 09 20   username.\n".. 
1ae0: 20 20 20 20 20 20 22 23 20 54 6f 20 70 72 65 76        "# To prev
1af0: 65 6e 74 20 63 6c 75 74 74 65 72 69 6e 67 20 75  ent cluttering u
1b00: 70 20 74 68 65 20 74 6f 70 20 6c 65 76 65 6c 20  p the top level 
1b10: 64 69 72 65 63 74 6f 72 79 20 77 65 27 6c 6c 20  directory we'll 
1b20: 70 75 74 20 74 68 69 73 20 66 69 6c 65 5c 6e 23  put this file\n#
1b30: 20 69 6e 20 61 20 64 69 72 65 63 74 6f 72 79 20   in a directory 
1b40: 63 61 6c 6c 65 64 20 5c 22 63 6f 6e 66 69 67 73  called \"configs
1b50: 5c 22 2e 22 29 0a 09 28 70 72 69 6e 74 20 22 5b  \".")..(print "[
1b60: 69 6e 63 6c 75 64 65 20 23 7b 67 65 74 65 6e 76  include #{getenv
1b70: 20 55 53 45 52 7d 2e 63 6f 6e 66 69 67 5d 22 29   USER}.config]")
1b80: 0a 09 29 29 0a 0a 20 20 20 20 28 63 72 65 61 74  ..))..    (creat
1b90: 65 2d 64 69 72 65 63 74 6f 72 79 20 28 63 6f 6e  e-directory (con
1ba0: 63 20 70 61 74 68 20 22 2f 63 6f 6e 66 69 67 73  c path "/configs
1bb0: 22 29 20 23 74 29 0a 20 20 20 20 28 77 69 74 68  ") #t).    (with
1bc0: 2d 6f 75 74 70 75 74 2d 74 6f 2d 66 69 6c 65 20  -output-to-file 
1bd0: 28 63 6f 6e 63 20 70 61 74 68 20 22 2f 63 6f 6e  (conc path "/con
1be0: 66 69 67 73 2f 22 20 28 63 75 72 72 65 6e 74 2d  figs/" (current-
1bf0: 75 73 65 72 2d 6e 61 6d 65 29 20 22 2e 63 6f 6e  user-name) ".con
1c00: 66 69 67 22 29 0a 20 20 20 20 20 20 28 6c 61 6d  fig").      (lam
1c10: 62 64 61 20 28 29 0a 09 28 70 72 69 6e 74 20 22  bda ()..(print "
1c20: 23 20 4f 76 65 72 72 69 64 65 20 73 65 74 74 69  # Override setti
1c30: 6e 67 73 20 69 6e 20 2e 2e 2f 72 75 6e 63 6f 6e  ngs in ../runcon
1c40: 66 69 67 73 2e 63 6f 6e 66 69 67 20 66 6f 72 20  figs.config for 
1c50: 75 73 65 72 20 22 20 28 63 75 72 72 65 6e 74 2d  user " (current-
1c60: 75 73 65 72 2d 6e 61 6d 65 29 20 22 20 68 65 72  user-name) " her
1c70: 65 2e 22 29 29 29 0a 20 20 20 20 0a 20 20 20 20  e."))).    .    
1c80: 3b 3b 20 4e 6f 77 20 63 72 65 61 74 65 20 61 20  ;; Now create a 
1c90: 74 65 73 74 20 61 6e 64 20 6c 6f 67 70 72 6f 20  test and logpro 
1ca0: 66 69 6c 65 0a 20 20 20 20 28 70 72 69 6e 74 0a  file.    (print.
1cb0: 20 20 20 20 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d       "==========
1cc0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 59 6f 75 20 6e 6f  ========..You no
1cd0: 77 20 68 61 76 65 20 74 68 65 20 62 61 73 69 63  w have the basic
1ce0: 20 63 6f 6d 6d 6f 6e 20 66 69 6c 65 73 20 66 6f   common files fo
1cf0: 72 20 79 6f 75 72 20 6d 65 67 61 74 65 73 74 20  r your megatest 
1d00: 73 65 74 75 70 2e 20 4e 65 78 74 20 72 75 6e 0a  setup. Next run.
1d10: 5c 22 6d 65 67 61 74 65 73 74 20 2d 67 65 6e 2d  \"megatest -gen-
1d20: 74 65 73 74 5c 22 20 74 6f 20 63 72 65 61 74 65  test\" to create
1d30: 20 61 20 74 65 73 74 2e 0a 0a 54 68 61 6e 6b 20   a test...Thank 
1d40: 79 6f 75 20 66 6f 72 20 75 73 69 6e 67 20 4d 65  you for using Me
1d50: 67 61 74 65 73 74 2e 20 0a 0a 59 6f 75 20 63 61  gatest. ..You ca
1d60: 6e 20 65 64 69 74 20 79 6f 75 72 20 63 6f 6e 66  n edit your conf
1d70: 69 67 20 66 69 6c 65 73 20 61 6e 64 20 63 72 65  ig files and cre
1d80: 61 74 65 20 74 65 73 74 73 20 69 6e 20 74 68 65  ate tests in the
1d90: 20 22 20 70 61 74 68 20 22 20 64 69 72 65 63 74   " path " direct
1da0: 6f 72 79 0a 0a 22 29 29 29 0a 0a 0a 3b 3b 3d 3d  ory..")))...;;==
1db0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1dc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1df0: 3d 3d 3d 3d 0a 3b 3b 20 63 72 65 61 74 65 20 73  ====.;; create s
1e00: 6b 65 6c 65 74 6f 6e 20 66 69 6c 65 73 20 66 6f  keleton files fo
1e10: 72 20 61 20 74 65 73 74 0a 3b 3b 3d 3d 3d 3d 3d  r a test.;;=====
1e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e60: 3d 0a 0a 28 64 65 66 69 6e 65 20 28 67 65 6e 65  =..(define (gene
1e70: 78 61 6d 70 6c 65 3a 6d 6b 2d 6d 65 67 61 74 65  xample:mk-megate
1e80: 73 74 2d 74 65 73 74 20 74 65 73 74 6e 61 6d 65  st-test testname
1e90: 29 0a 20 20 3b 3b 20 47 61 74 68 65 72 20 6e 65  ).  ;; Gather ne
1ea0: 65 64 65 64 20 64 61 74 61 0a 20 20 28 6c 65 74  eded data.  (let
1eb0: 20 28 28 77 61 69 74 6f 6e 20 20 20 23 66 29 0a   ((waiton   #f).
1ec0: 09 28 70 72 69 6f 72 69 74 79 20 23 66 29 0a 09  .(priority #f)..
1ed0: 28 64 65 73 63 72 69 70 74 69 6f 6e 20 23 66 29  (description #f)
1ee0: 0a 09 28 73 74 65 70 73 20 20 20 20 27 28 29 29  ..(steps    '())
1ef0: 0a 09 28 73 63 72 69 70 74 73 20 20 27 28 29 29  ..(scripts  '())
1f00: 0a 09 28 69 74 65 6d 73 20 20 20 20 27 28 29 29  ..(items    '())
1f10: 0a 09 28 72 65 6c 2d 70 61 74 68 20 23 66 29 29  ..(rel-path #f))
1f20: 0a 0a 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20  ..    (cond.    
1f30: 20 28 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20   ((file-exists? 
1f40: 22 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69 67  "megatest.config
1f50: 22 29 20 20 20 20 20 20 20 20 20 28 73 65 74 21  ")         (set!
1f60: 20 72 65 6c 2d 70 61 74 68 20 22 2e 2f 22 29 29   rel-path "./"))
1f70: 0a 20 20 20 20 20 28 28 66 69 6c 65 2d 65 78 69  .     ((file-exi
1f80: 73 74 73 3f 20 22 2e 2e 2f 6d 65 67 61 74 65 73  sts? "../megates
1f90: 74 2e 63 6f 6e 66 69 67 22 29 20 20 20 20 20 20  t.config")      
1fa0: 28 73 65 74 21 20 72 65 6c 2d 70 61 74 68 20 22  (set! rel-path "
1fb0: 2e 2e 2f 22 29 29 0a 20 20 20 20 20 28 28 66 69  ../")).     ((fi
1fc0: 6c 65 2d 65 78 69 73 74 73 3f 20 22 2e 2e 2f 2e  le-exists? "../.
1fd0: 2e 2f 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69  ./megatest.confi
1fe0: 67 22 29 20 20 20 28 73 65 74 21 20 72 65 6c 2d  g")   (set! rel-
1ff0: 70 61 74 68 20 22 2e 2e 2f 2e 2e 2f 22 29 29 0a  path "../../")).
2000: 20 20 20 20 20 28 28 66 69 6c 65 2d 65 78 69 73       ((file-exis
2010: 74 73 3f 20 22 2e 2e 2f 2e 2e 2f 2e 2e 2f 6d 65  ts? "../../../me
2020: 67 61 74 65 73 74 2e 63 6f 6e 66 69 67 22 29 28  gatest.config")(
2030: 73 65 74 21 20 72 65 6c 2d 70 61 74 68 20 22 2e  set! rel-path ".
2040: 2e 2f 2e 2e 2f 2e 2e 2f 22 29 29 29 20 3b 3b 20  ./../../"))) ;; 
2050: 67 6f 6f 64 20 65 6e 6f 75 67 68 20 64 61 6e 67  good enough dang
2060: 20 69 74 2e 0a 0a 20 20 20 20 3b 3b 20 44 6f 6e   it...    ;; Don
2070: 27 74 20 67 61 74 68 65 72 20 64 61 74 61 20 6f  't gather data o
2080: 72 20 63 6f 6e 74 69 6e 75 65 20 69 66 20 61 29  r continue if a)
2090: 20 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69 67   megatest.config
20a0: 20 63 61 6e 27 74 20 62 65 20 66 6f 75 6e 64 20   can't be found 
20b0: 6f 72 20 62 29 20 74 65 73 74 63 6f 6e 66 69 67  or b) testconfig
20c0: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 0a   already exists.
20d0: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 72 65 6c      (if (not rel
20e0: 2d 70 61 74 68 29 0a 09 28 62 65 67 69 6e 0a 09  -path)..(begin..
20f0: 20 20 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a    (print "ERROR:
2100: 20 49 20 63 6f 75 6c 64 20 6e 6f 74 20 66 69 6e   I could not fin
2110: 64 20 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69  d megatest.confi
2120: 67 2c 20 70 6c 65 61 73 65 20 72 75 6e 20 2d 63  g, please run -c
2130: 72 65 61 74 65 2d 74 65 73 74 20 69 6e 20 74 68  reate-test in th
2140: 65 20 74 6f 70 20 64 69 72 20 6f 66 20 79 6f 75  e top dir of you
2150: 72 20 6d 65 67 61 74 65 73 74 20 61 72 65 61 22  r megatest area"
2160: 29 0a 09 20 20 28 65 78 69 74 20 31 29 29 29 0a  )..  (exit 1))).
2170: 0a 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d 65  .    (if (file-e
2180: 78 69 73 74 73 3f 20 28 63 6f 6e 63 20 72 65 6c  xists? (conc rel
2190: 2d 70 61 74 68 20 22 74 65 73 74 73 2f 22 20 74  -path "tests/" t
21a0: 65 73 74 6e 61 6d 65 20 22 2f 74 65 73 74 63 6f  estname "/testco
21b0: 6e 66 69 67 22 29 29 0a 09 28 62 65 67 69 6e 0a  nfig"))..(begin.
21c0: 09 20 20 28 70 72 69 6e 74 20 22 57 41 52 4e 49  .  (print "WARNI
21d0: 4e 47 3a 20 59 6f 75 20 61 6c 72 65 61 64 79 20  NG: You already 
21e0: 68 61 76 65 20 61 20 74 65 73 74 63 6f 6e 66 69  have a testconfi
21f0: 67 20 69 6e 20 22 20 72 65 6c 2d 70 61 74 68 20  g in " rel-path 
2200: 22 74 65 73 74 73 2f 22 20 74 65 73 74 6e 61 6d  "tests/" testnam
2210: 65 20 22 2c 20 64 6f 20 79 6f 75 20 77 61 6e 74  e ", do you want
2220: 20 74 6f 20 63 6c 6f 62 62 65 72 20 79 6f 75 72   to clobber your
2230: 20 66 69 6c 65 73 3f 22 29 0a 09 20 20 28 64 69   files?")..  (di
2240: 73 70 6c 61 79 20 22 45 6e 74 65 72 20 79 2f 6e  splay "Enter y/n
2250: 3a 20 22 29 0a 09 20 20 28 69 66 20 28 6e 6f 74  : ")..  (if (not
2260: 20 28 65 71 75 61 6c 3f 20 22 79 22 20 28 72 65   (equal? "y" (re
2270: 61 64 2d 6c 69 6e 65 29 29 29 0a 09 20 20 20 20  ad-line)))..    
2280: 20 20 28 62 65 67 69 6e 0a 09 09 28 70 72 69 6e    (begin...(prin
2290: 74 20 22 49 4e 46 4f 3a 20 75 73 65 72 20 61 62  t "INFO: user ab
22a0: 6f 72 74 20 6f 66 20 63 72 65 61 74 69 6f 6e 20  ort of creation 
22b0: 6f 66 20 74 65 73 74 20 22 20 74 65 73 74 6e 61  of test " testna
22c0: 6d 65 29 0a 09 09 28 65 78 69 74 20 31 29 29 29  me)...(exit 1)))
22d0: 29 29 0a 0a 20 20 20 20 28 70 72 69 6e 74 20 22  ))..    (print "
22e0: 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20  We are going to 
22f0: 67 65 6e 65 72 61 74 65 20 61 20 73 6b 65 6c 65  generate a skele
2300: 74 6f 6e 20 73 65 74 20 6f 66 20 66 69 6c 65 73  ton set of files
2310: 20 66 6f 72 20 79 6f 75 72 20 74 65 73 74 20 22   for your test "
2320: 20 74 65 73 74 6e 61 6d 65 20 22 5c 6e 22 0a 09   testname "\n"..
2330: 20 20 20 22 20 2a 2a 2a 20 4e 6f 74 65 3a 20 64     " *** Note: d
2340: 6f 20 6e 6f 74 20 77 6f 72 72 79 20 74 6f 6f 20  o not worry too 
2350: 6d 75 63 68 20 61 62 6f 75 74 20 74 79 70 6f 73  much about typos
2360: 2c 20 79 6f 75 20 63 61 6e 20 65 64 69 74 20 74  , you can edit t
2370: 68 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  he files created
2380: 20 77 68 65 6e 20 79 6f 75 20 61 72 65 20 64 6f   when you are do
2390: 6e 65 2e 22 29 0a 0a 20 20 20 20 28 70 72 69 6e  ne.")..    (prin
23a0: 74 20 22 5c 6e 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  t "\n===========
23b0: 3d 3d 3d 3d 3d 3d 3d 5c 6e 50 6c 65 61 73 65 20  =======\nPlease 
23c0: 64 65 73 63 72 69 62 65 20 74 68 69 73 20 74 65  describe this te
23d0: 73 74 2e 20 54 68 65 20 64 65 73 63 72 69 70 74  st. The descript
23e0: 69 6f 6e 20 77 69 6c 6c 20 62 65 20 76 69 73 69  ion will be visi
23f0: 62 6c 65 20 69 6e 20 76 61 72 69 6f 75 73 20 64  ble in various d
2400: 69 61 6c 6f 67 73 20 61 6e 64 20 72 65 70 6f 72  ialogs and repor
2410: 74 73 22 29 0a 20 20 20 20 28 64 69 73 70 6c 61  ts").    (displa
2420: 79 20 22 45 6e 74 65 72 20 6f 6e 65 20 6c 69 6e  y "Enter one lin
2430: 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 66 6f  e description fo
2440: 72 20 74 68 69 73 20 74 65 73 74 3a 20 22 29 0a  r this test: ").
2450: 20 20 20 20 28 73 65 74 21 20 64 65 73 63 72 69      (set! descri
2460: 70 74 69 6f 6e 20 28 72 65 61 64 2d 6c 69 6e 65  ption (read-line
2470: 29 29 0a 0a 20 20 20 20 28 70 72 69 6e 74 20 22  ))..    (print "
2480: 5c 6e 5c 6e 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  \n\n============
2490: 3d 3d 3d 3d 3d 3d 5c 6e 44 6f 65 73 20 74 68 69  ======\nDoes thi
24a0: 73 20 74 65 73 74 2c 20 22 20 74 65 73 74 6e 61  s test, " testna
24b0: 6d 65 20 22 2c 20 72 65 71 75 69 72 65 20 61 6e  me ", require an
24c0: 79 20 6f 74 68 65 72 20 74 65 73 74 20 62 65 20  y other test be 
24d0: 72 75 6e 20 70 72 69 6f 72 20 74 6f 20 6c 61 75  run prior to lau
24e0: 6e 63 68 3f 22 29 0a 20 20 20 20 28 64 69 73 70  nch?").    (disp
24f0: 6c 61 79 20 28 63 6f 6e 63 20 22 45 6e 74 65 72  lay (conc "Enter
2500: 20 73 70 61 63 65 20 64 65 6c 69 6d 69 74 65 64   space delimited
2510: 20 6c 69 73 74 20 6f 66 20 74 65 73 74 73 20 77   list of tests w
2520: 68 69 63 68 20 22 20 74 65 73 74 6e 61 6d 65 20  hich " testname 
2530: 22 20 6d 75 73 74 20 77 61 69 74 20 66 6f 72 20  " must wait for 
2540: 28 64 65 66 61 75 6c 74 20 69 73 20 6e 6f 20 77  (default is no w
2550: 61 69 74 6f 6e 29 3a 20 22 29 29 0a 20 20 20 20  aiton): ")).    
2560: 28 73 65 74 21 20 77 61 69 74 6f 6e 20 28 72 65  (set! waiton (re
2570: 61 64 2d 6c 69 6e 65 29 29 0a 0a 20 20 20 20 28  ad-line))..    (
2580: 70 72 69 6e 74 20 22 5c 6e 5c 6e 3d 3d 3d 3d 3d  print "\n\n=====
2590: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e 44  =============\nD
25a0: 6f 20 79 6f 75 20 77 69 73 68 20 74 6f 20 70 72  o you wish to pr
25b0: 69 6f 72 69 74 69 7a 65 20 74 68 65 20 72 75 6e  ioritize the run
25c0: 6e 69 6e 67 20 6f 66 20 74 68 69 73 20 74 65 73  ning of this tes
25d0: 74 20 6f 76 65 72 20 6f 74 68 65 72 20 74 65 73  t over other tes
25e0: 74 73 3f 20 49 66 20 73 6f 22 29 0a 20 20 20 20  ts? If so").    
25f0: 28 70 72 69 6e 74 20 22 65 6e 74 65 72 20 61 20  (print "enter a 
2600: 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72 20 74  number greater t
2610: 68 61 6e 20 7a 65 72 6f 20 68 65 72 65 22 29 0a  han zero here").
2620: 20 20 20 20 28 64 69 73 70 6c 61 79 20 22 45 6e      (display "En
2630: 74 65 72 20 61 20 70 72 69 6f 72 69 74 79 20 6f  ter a priority o
2640: 66 20 30 20 28 64 65 66 61 75 6c 74 29 20 6f 72  f 0 (default) or
2650: 20 68 69 67 68 65 72 3a 20 22 29 0a 20 20 20 20   higher: ").    
2660: 28 73 65 74 21 20 70 72 69 6f 72 69 74 79 20 28  (set! priority (
2670: 72 65 61 64 2d 6c 69 6e 65 29 29 0a 0a 20 20 20  read-line))..   
2680: 20 3b 3b 20 47 65 74 20 74 68 65 20 73 74 65 70   ;; Get the step
2690: 73 0a 20 20 20 20 28 70 72 69 6e 74 20 22 5c 6e  s.    (print "\n
26a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
26b0: 3d 3d 5c 6e 4e 6f 77 20 74 6f 20 65 6e 74 65 72  ==\nNow to enter
26c0: 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   the one or more
26d0: 20 73 74 65 70 73 20 74 68 61 74 20 6d 61 6b 65   steps that make
26e0: 20 75 70 20 79 6f 75 72 20 74 65 73 74 2c 20 6e   up your test, n
26f0: 6f 74 65 3b 20 79 6f 75 20 63 61 6e 20 61 64 64  ote; you can add
2700: 20 6d 6f 72 65 20 6c 61 74 65 72 22 29 0a 20 20   more later").  
2710: 20 20 28 70 72 69 6e 74 20 22 48 69 6e 74 3b 20    (print "Hint; 
2720: 75 73 65 20 2e 73 68 20 65 78 74 65 6e 73 69 6f  use .sh extensio
2730: 6e 20 6f 6e 20 74 68 65 20 73 63 72 69 70 74 20  n on the script 
2740: 6e 61 6d 65 73 20 61 6e 64 20 77 65 27 6c 6c 20  names and we'll 
2750: 63 72 65 61 74 65 20 61 20 70 6c 61 63 65 68 6f  create a placeho
2760: 6c 64 65 72 20 73 63 72 69 70 74 2e 22 0a 0a 20  lder script.".. 
2770: 20 20 20 28 6c 65 74 20 28 28 73 74 65 70 6e 61     (let ((stepna
2780: 6d 65 20 20 20 23 66 29 0a 09 20 20 28 73 63 72  me   #f)..  (scr
2790: 69 70 74 6e 61 6d 65 20 23 66 29 29 0a 20 20 20  iptname #f)).   
27a0: 20 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 64     (let loop ((d
27b0: 6f 6e 65 20 23 66 29 29 0a 09 28 64 69 73 70 6c  one #f))..(displ
27c0: 61 79 20 22 45 6e 74 65 72 20 74 68 65 20 6e 61  ay "Enter the na
27d0: 6d 65 20 66 6f 72 20 74 68 69 73 20 73 74 65 70  me for this step
27e0: 20 28 62 6c 61 6e 6b 20 74 6f 20 73 74 6f 70 29   (blank to stop)
27f0: 3a 20 22 29 0a 09 28 73 65 74 21 20 73 74 65 70  : ")..(set! step
2800: 6e 61 6d 65 20 28 72 65 61 64 2d 6c 69 6e 65 29  name (read-line)
2810: 29 0a 09 28 69 66 20 28 6e 6f 74 20 28 65 71 75  )..(if (not (equ
2820: 61 6c 3f 20 73 74 65 70 6e 61 6d 65 20 22 22 29  al? stepname "")
2830: 29 0a 09 20 20 20 20 28 62 65 67 69 6e 0a 09 20  )..    (begin.. 
2840: 20 20 20 20 20 28 64 69 73 70 6c 61 79 20 22 45       (display "E
2850: 6e 74 65 72 20 74 68 65 20 73 63 72 69 70 74 20  nter the script 
2860: 6f 72 20 70 72 6f 67 61 6d 20 74 6f 20 72 75 6e  or progam to run
2870: 3a 20 22 29 0a 09 20 20 20 20 20 20 28 73 65 74  : ")..      (set
2880: 21 20 73 63 72 69 70 74 6e 61 6d 65 20 28 72 65  ! scriptname (re
2890: 61 64 2d 6c 69 6e 65 29 29 0a 09 20 20 20 20 20  ad-line))..     
28a0: 20 28 73 65 74 21 20 73 74 65 70 73 20 28 61 70   (set! steps (ap
28b0: 70 65 6e 64 20 73 74 65 70 73 20 28 6c 69 73 74  pend steps (list
28c0: 20 28 6c 69 73 74 20 73 74 65 70 6e 61 6d 65 20   (list stepname 
28d0: 73 63 72 69 70 74 6e 61 6d 65 29 29 29 29 29 29  scriptname))))))
28e0: 0a 09 28 69 66 20 28 6e 6f 74 20 28 65 71 75 61  ..(if (not (equa
28f0: 6c 3f 20 73 74 65 70 6e 61 6d 65 20 22 22 29 29  l? stepname ""))
2900: 0a 09 20 20 20 20 28 62 65 67 69 6e 0a 09 20 20  ..    (begin..  
2910: 20 20 20 20 28 70 72 69 6e 74 20 22 41 64 64 65      (print "Adde
2920: 64 20 73 74 65 70 20 22 20 73 74 65 70 6e 61 6d  d step " stepnam
2930: 65 20 22 20 74 6f 20 6c 69 73 74 20 6f 66 20 73  e " to list of s
2940: 74 65 70 73 2e 5c 6e 22 29 0a 09 20 20 20 20 20  teps.\n")..     
2950: 20 28 6c 6f 6f 70 20 23 66 29 29 29 29 29 0a 0a   (loop #f)))))..
2960: 20 20 20 20 3b 3b 20 47 65 74 20 74 68 65 20 69      ;; Get the i
2970: 74 65 6d 73 0a 20 20 20 20 28 70 72 69 6e 74 20  tems.    (print 
2980: 22 5c 6e 5c 6e 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  "\n\n===========
2990: 3d 3d 3d 3d 3d 3d 3d 5c 6e 4e 65 78 74 20 77 65  =======\nNext we
29a0: 20 6e 65 65 64 20 74 6f 20 67 65 74 20 74 68 65   need to get the
29b0: 20 76 61 72 69 61 62 6c 65 73 20 61 6e 64 20 76   variables and v
29c0: 61 6c 75 65 73 20 79 6f 75 20 77 69 73 68 20 74  alues you wish t
29d0: 6f 20 69 74 65 72 61 74 65 20 74 68 69 73 20 74  o iterate this t
29e0: 65 73 74 20 6f 76 65 72 20 28 62 6c 61 6e 6b 20  est over (blank 
29f0: 66 6f 72 20 6e 6f 6e 65 29 22 29 0a 20 20 20 20  for none)").    
2a00: 28 6c 65 74 20 28 28 76 61 72 6e 61 6d 65 20 23  (let ((varname #
2a10: 66 29 0a 09 20 20 28 76 61 6c 75 65 73 20 20 23  f)..  (values  #
2a20: 66 29 29 0a 20 20 20 20 20 20 28 6c 65 74 20 6c  f)).      (let l
2a30: 6f 6f 70 20 28 28 64 6f 6e 65 20 23 66 29 29 0a  oop ((done #f)).
2a40: 09 28 64 69 73 70 6c 61 79 20 22 45 6e 74 65 72  .(display "Enter
2a50: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 6e 61   the variable na
2a60: 6d 65 3a 20 22 29 0a 09 28 73 65 74 21 20 76 61  me: ")..(set! va
2a70: 72 6e 61 6d 65 20 28 72 65 61 64 2d 6c 69 6e 65  rname (read-line
2a80: 29 29 0a 09 28 69 66 20 28 6e 6f 74 20 28 65 71  ))..(if (not (eq
2a90: 75 61 6c 3f 20 76 61 72 6e 61 6d 65 20 22 22 29  ual? varname "")
2aa0: 29 0a 09 20 20 20 20 28 62 65 67 69 6e 0a 09 20  )..    (begin.. 
2ab0: 20 20 20 20 20 28 64 69 73 70 6c 61 79 20 28 63       (display (c
2ac0: 6f 6e 63 20 22 45 6e 74 65 72 20 74 68 65 20 73  onc "Enter the s
2ad0: 70 61 63 65 20 73 65 70 61 72 61 74 65 64 20 6c  pace separated l
2ae0: 69 73 74 20 6f 66 20 76 61 6c 75 65 73 20 66 6f  ist of values fo
2af0: 72 20 22 20 76 61 72 6e 61 6d 65 20 22 3a 20 22  r " varname ": "
2b00: 29 29 0a 09 20 20 20 20 20 20 28 73 65 74 21 20  ))..      (set! 
2b10: 76 61 6c 75 65 73 20 28 72 65 61 64 2d 6c 69 6e  values (read-lin
2b20: 65 29 29 0a 09 20 20 20 20 20 20 28 73 65 74 21  e))..      (set!
2b30: 20 69 74 65 6d 73 20 28 61 70 70 65 6e 64 20 69   items (append i
2b40: 74 65 6d 73 20 28 6c 69 73 74 20 28 63 6f 6e 63  tems (list (conc
2b50: 20 76 61 72 6e 61 6d 65 20 22 20 22 20 76 61 6c   varname " " val
2b60: 75 65 73 29 29 29 29 29 29 0a 09 28 69 66 20 28  ues))))))..(if (
2b70: 6e 6f 74 20 28 65 71 75 61 6c 3f 20 76 61 72 6e  not (equal? varn
2b80: 61 6d 65 20 22 22 29 29 0a 09 20 20 20 20 28 6c  ame ""))..    (l
2b90: 6f 6f 70 20 23 66 29 29 29 29 0a 0a 20 20 20 20  oop #f))))..    
2ba0: 3b 3b 20 4e 6f 77 20 63 72 65 61 74 65 20 74 68  ;; Now create th
2bb0: 65 20 74 65 73 74 0a 20 20 20 20 28 69 66 20 28  e test.    (if (
2bc0: 6e 6f 74 20 72 65 6c 2d 70 61 74 68 29 0a 09 28  not rel-path)..(
2bd0: 62 65 67 69 6e 0a 09 20 20 28 70 72 69 6e 74 20  begin..  (print 
2be0: 22 45 52 52 4f 52 3a 20 59 6f 75 20 6d 75 73 74  "ERROR: You must
2bf0: 20 72 75 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e   run this comman
2c00: 64 20 69 6e 20 61 20 6d 65 67 61 74 65 73 74 20  d in a megatest 
2c10: 61 72 65 61 20 75 6e 64 65 72 20 77 68 65 72 65  area under where
2c20: 20 74 68 65 20 6d 65 67 61 74 65 73 74 2e 63 6f   the megatest.co
2c30: 6e 66 69 67 20 66 69 6c 65 20 65 78 69 73 74 73  nfig file exists
2c40: 2e 22 29 0a 09 20 20 28 65 78 69 74 20 31 29 29  .")..  (exit 1))
2c50: 0a 09 28 6c 65 74 20 28 28 74 65 73 74 64 69 72  ..(let ((testdir
2c60: 20 28 63 6f 6e 63 20 72 65 6c 2d 70 61 74 68 20   (conc rel-path 
2c70: 22 74 65 73 74 73 2f 22 20 74 65 73 74 6e 61 6d  "tests/" testnam
2c80: 65 29 29 29 0a 09 20 20 28 63 72 65 61 74 65 2d  e)))..  (create-
2c90: 64 69 72 65 63 74 6f 72 79 20 74 65 73 74 64 69  directory testdi
2ca0: 72 20 23 74 29 0a 09 20 20 28 77 69 74 68 2d 6f  r #t)..  (with-o
2cb0: 75 74 70 75 74 2d 74 6f 2d 66 69 6c 65 20 28 63  utput-to-file (c
2cc0: 6f 6e 63 20 74 65 73 74 64 69 72 20 22 2f 74 65  onc testdir "/te
2cd0: 73 74 63 6f 6e 66 69 67 22 29 0a 09 20 20 20 20  stconfig")..    
2ce0: 28 6c 61 6d 62 64 61 20 28 29 0a 09 20 20 20 20  (lambda ()..    
2cf0: 20 20 28 70 72 69 6e 74 20 22 23 20 41 64 64 20    (print "# Add 
2d00: 61 64 64 69 74 69 6f 6e 61 6c 20 73 74 65 70 73  additional steps
2d10: 20 68 65 72 65 2e 20 46 6f 72 6d 61 74 20 69 73   here. Format is
2d20: 20 5c 22 73 74 65 70 6e 61 6d 65 20 73 63 72 69   \"stepname scri
2d30: 70 74 5c 22 5c 6e 5b 65 7a 73 74 65 70 73 5d 22  pt\"\n[ezsteps]"
2d40: 29 0a 09 20 20 20 20 20 20 28 6d 61 70 20 28 6c  )..      (map (l
2d50: 61 6d 62 64 61 20 28 73 74 70 29 28 70 72 69 6e  ambda (stp)(prin
2d60: 74 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73  t (string-inters
2d70: 70 65 72 73 65 20 73 74 70 20 22 20 22 29 29 29  perse stp " ")))
2d80: 20 73 74 65 70 73 29 0a 09 20 20 20 20 20 20 28   steps)..      (
2d90: 70 72 69 6e 74 20 22 22 29 0a 09 20 20 20 20 20  print "")..     
2da0: 20 28 70 72 69 6e 74 20 22 23 20 54 65 73 74 20   (print "# Test 
2db0: 72 65 71 75 69 72 65 6d 65 6e 74 73 20 61 72 65  requirements are
2dc0: 20 73 70 65 63 69 66 69 65 64 20 68 65 72 65 5c   specified here\
2dd0: 6e 5b 72 65 71 75 69 72 65 6d 65 6e 74 73 5d 22  n[requirements]"
2de0: 29 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 20  )..      (print 
2df0: 28 69 66 20 28 73 74 72 69 6e 67 2d 6e 75 6c 6c  (if (string-null
2e00: 3f 20 77 61 69 74 6f 6e 29 20 22 23 20 22 20 22  ? waiton) "# " "
2e10: 22 29 20 22 77 61 69 74 6f 6e 20 22 20 77 61 69  ") "waiton " wai
2e20: 74 6f 6e 29 0a 09 20 20 20 20 20 20 28 70 72 69  ton)..      (pri
2e30: 6e 74 20 22 70 72 69 6f 72 69 74 79 20 22 20 28  nt "priority " (
2e40: 69 66 20 28 73 74 72 69 6e 67 2d 6e 75 6c 6c 3f  if (string-null?
2e50: 20 70 72 69 6f 72 69 74 79 29 20 30 20 70 72 69   priority) 0 pri
2e60: 6f 72 69 74 79 29 20 22 5c 6e 22 29 0a 09 20 20  ority) "\n")..  
2e70: 20 20 20 20 28 70 72 69 6e 74 20 22 23 20 49 74      (print "# It
2e80: 65 72 61 74 69 6f 6e 20 66 6f 72 20 79 6f 75 72  eration for your
2e90: 20 74 65 73 74 20 69 73 20 63 6f 6e 74 72 6f 6c   test is control
2ea0: 6c 65 64 20 62 79 20 74 68 65 20 69 74 65 6d 73  led by the items
2eb0: 20 73 65 63 74 69 6f 6e 5c 6e 5b 69 74 65 6d 73   section\n[items
2ec0: 5d 22 29 0a 09 20 20 20 20 20 20 28 6d 61 70 20  ]")..      (map 
2ed0: 70 72 69 6e 74 20 69 74 65 6d 73 29 0a 09 20 20  print items)..  
2ee0: 20 20 20 20 28 70 72 69 6e 74 20 22 22 29 0a 09      (print "")..
2ef0: 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 23 20        (print "# 
2f00: 41 6c 74 65 72 6e 61 74 69 76 65 6c 79 20 79 6f  Alternatively yo
2f10: 75 20 63 6f 75 6c 64 20 75 73 65 20 61 20 5b 69  u could use a [i
2f20: 74 65 6d 73 74 61 62 6c 65 5d 20 73 65 63 74 69  temstable] secti
2f30: 6f 6e 22 29 0a 09 20 20 20 20 20 20 28 70 72 69  on")..      (pri
2f40: 6e 74 20 22 23 20 5b 69 74 65 6d 73 74 61 62 6c  nt "# [itemstabl
2f50: 65 5d 22 29 0a 09 20 20 20 20 20 20 28 70 72 69  e]")..      (pri
2f60: 6e 74 20 22 23 20 49 54 45 4d 56 41 52 31 20 20  nt "# ITEMVAR1  
2f70: 61 20 20 20 20 62 20 20 20 20 63 22 29 0a 09 20  a    b    c").. 
2f80: 20 20 20 20 20 28 70 72 69 6e 74 20 22 23 20 49       (print "# I
2f90: 54 45 4d 56 41 52 32 20 20 64 20 20 20 20 65 20  TEMVAR2  d    e 
2fa0: 20 20 20 66 22 29 0a 09 20 20 20 20 20 20 28 70     f")..      (p
2fb0: 72 69 6e 74 20 22 23 5c 6e 23 20 77 6f 75 6c 64  rint "#\n# would
2fc0: 20 72 65 73 75 6c 74 20 69 6e 20 69 74 65 6d 73   result in items
2fd0: 3a 20 61 2f 64 20 20 62 2f 65 20 20 20 63 2f 66  : a/d  b/e   c/f
2fe0: 5c 6e 23 5c 6e 22 29 0a 09 20 20 20 20 20 20 28  \n#\n")..      (
2ff0: 70 72 69 6e 74 20 22 23 20 4c 6f 67 70 72 6f 20  print "# Logpro 
3000: 72 75 6c 65 73 20 66 6f 72 20 65 61 63 68 20 73  rules for each s
3010: 74 65 70 20 63 61 6e 20 62 65 20 63 61 70 74 75  tep can be captu
3020: 72 65 64 20 68 65 72 65 20 69 6e 20 74 68 65 20  red here in the 
3030: 74 65 73 74 63 6f 6e 66 69 67 22 29 0a 09 20 20  testconfig")..  
3040: 20 20 20 20 28 70 72 69 6e 74 20 22 23 20 6e 6f      (print "# no
3050: 74 65 3a 20 54 68 65 20 3b 3b 20 61 66 74 65 72  te: The ;; after
3060: 20 74 68 65 20 73 74 65 70 6e 61 6d 65 20 61 6e   the stepname an
3070: 64 20 74 68 65 20 6c 65 61 64 69 6e 67 20 77 68  d the leading wh
3080: 69 74 65 73 70 61 63 65 20 61 72 65 20 72 65 71  itespace are req
3090: 75 69 72 65 64 22 29 0a 09 20 20 20 20 20 20 28  uired")..      (
30a0: 70 72 69 6e 74 20 22 23 5c 6e 5b 6c 6f 67 70 72  print "#\n[logpr
30b0: 6f 5d 5c 6e 22 29 0a 09 20 20 20 20 20 20 28 66  o]\n")..      (f
30c0: 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20  or-each (lambda 
30d0: 28 73 74 65 70 29 0a 09 09 09 20 20 28 6c 65 74  (step)....  (let
30e0: 20 28 28 73 74 65 70 6e 61 6d 65 20 20 20 28 63   ((stepname   (c
30f0: 61 72 20 73 74 65 70 29 29 0a 09 09 09 09 28 73  ar step)).....(s
3100: 63 72 69 70 74 6e 61 6d 65 20 28 63 61 64 72 20  criptname (cadr 
3110: 73 74 65 70 29 29 29 0a 09 09 09 20 20 20 20 28  step)))....    (
3120: 70 72 69 6e 74 20 73 74 65 70 6e 61 6d 65 20 22  print stepname "
3130: 20 3b 3b 20 72 75 6c 65 73 20 66 6f 72 20 63 68   ;; rules for ch
3140: 65 63 6b 69 6e 67 20 6f 75 74 70 75 74 20 66 72  ecking output fr
3150: 6f 6d 20 72 75 6e 6e 69 6e 67 20 73 74 65 70 20  om running step 
3160: 22 20 73 74 65 70 20 22 20 77 69 74 68 20 63 6f  " step " with co
3170: 6d 6d 61 6e 64 20 22 20 73 63 72 69 70 74 6e 61  mmand " scriptna
3180: 6d 65 29 0a 09 09 09 20 20 20 20 28 70 72 69 6e  me)....    (prin
3190: 74 20 67 65 6e 65 78 61 6d 70 6c 65 3a 65 78 61  t genexample:exa
31a0: 6d 70 6c 65 2d 6c 6f 67 70 72 6f 20 22 5c 6e 22  mple-logpro "\n"
31b0: 29 29 29 0a 09 09 09 73 74 65 70 73 29 0a 09 20  )))....steps).. 
31c0: 20 20 20 20 20 28 70 72 69 6e 74 20 22 23 20 74       (print "# t
31d0: 65 73 74 5f 6d 65 74 61 20 69 73 20 61 20 73 65  est_meta is a se
31e0: 63 74 69 6f 6e 20 66 6f 72 20 73 74 6f 72 69 6e  ction for storin
31f0: 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74  g additional dat
3200: 61 20 6f 6e 20 79 6f 75 72 20 74 65 73 74 5c 6e  a on your test\n
3210: 5b 74 65 73 74 5f 6d 65 74 61 5d 22 29 0a 09 20  [test_meta]").. 
3220: 20 20 20 20 20 28 70 72 69 6e 74 20 22 61 75 74       (print "aut
3230: 68 6f 72 20 22 20 28 67 65 74 2d 65 6e 76 69 72  hor " (get-envir
3240: 6f 6e 6d 65 6e 74 2d 76 61 72 69 61 62 6c 65 20  onment-variable 
3250: 22 55 53 45 52 22 29 29 0a 09 20 20 20 20 20 20  "USER"))..      
3260: 28 70 72 69 6e 74 20 22 6f 77 6e 65 72 20 20 22  (print "owner  "
3270: 20 28 67 65 74 2d 65 6e 76 69 72 6f 6e 6d 65 6e   (get-environmen
3280: 74 2d 76 61 72 69 61 62 6c 65 20 22 55 53 45 52  t-variable "USER
3290: 22 29 29 0a 09 20 20 20 20 20 20 28 70 72 69 6e  "))..      (prin
32a0: 74 20 22 64 65 73 63 72 69 70 74 69 6f 6e 20 22  t "description "
32b0: 20 64 65 73 63 72 69 70 74 69 6f 6e 29 0a 09 20   description).. 
32c0: 20 20 20 20 20 28 70 72 69 6e 74 20 22 74 61 67       (print "tag
32d0: 73 20 74 61 67 6f 6e 65 2c 74 61 67 74 77 6f 22  s tagone,tagtwo"
32e0: 29 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 20  )..      (print 
32f0: 22 72 65 76 69 65 77 65 64 20 6e 65 76 65 72 22  "reviewed never"
3300: 29 29 29 0a 09 20 20 3b 3b 20 4e 6f 77 20 63 72  )))..  ;; Now cr
3310: 65 61 74 65 20 73 68 65 6c 6c 20 73 63 72 69 70  eate shell scrip
3320: 74 73 20 28 69 66 20 65 78 74 65 6e 73 69 6f 6e  ts (if extension
3330: 20 69 73 20 2e 73 68 29 20 61 6e 64 20 6c 6f 67   is .sh) and log
3340: 70 72 6f 20 66 69 6c 65 73 0a 09 20 20 28 66 6f  pro files..  (fo
3350: 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28  r-each (lambda (
3360: 73 74 70 29 0a 09 09 20 20 20 20 20 20 28 6c 65  stp)...      (le
3370: 74 20 28 28 73 74 65 70 6e 61 6d 65 20 28 63 61  t ((stepname (ca
3380: 72 20 73 74 70 29 29 0a 09 09 09 20 20 20 20 28  r stp))....    (
3390: 73 63 72 69 70 74 20 20 20 28 63 61 64 72 20 73  script   (cadr s
33a0: 74 70 29 29 29 0a 09 09 09 28 69 66 20 28 73 74  tp)))....(if (st
33b0: 72 69 6e 67 2d 6d 61 74 63 68 20 22 2e 2a 5c 5c  ring-match ".*\\
33c0: 2e 73 68 24 22 20 73 63 72 69 70 74 29 0a 09 09  .sh$" script)...
33d0: 09 20 20 20 20 28 62 65 67 69 6e 0a 09 09 09 20  .    (begin.... 
33e0: 20 20 20 20 20 28 77 69 74 68 2d 6f 75 74 70 75       (with-outpu
33f0: 74 2d 74 6f 2d 66 69 6c 65 20 28 63 6f 6e 63 20  t-to-file (conc 
3400: 74 65 73 74 64 69 72 20 22 2f 22 20 73 63 72 69  testdir "/" scri
3410: 70 74 29 0a 09 09 09 09 28 6c 61 6d 62 64 61 20  pt).....(lambda 
3420: 28 29 0a 09 09 09 09 20 20 28 70 72 69 6e 74 20  ().....  (print 
3430: 67 65 6e 65 78 61 6d 70 6c 65 3a 65 78 61 6d 70  genexample:examp
3440: 6c 65 2d 73 63 72 69 70 74 29 29 29 0a 09 09 09  le-script)))....
3450: 20 20 20 20 20 20 28 73 79 73 74 65 6d 20 28 63        (system (c
3460: 6f 6e 63 20 22 63 68 6d 6f 64 20 75 67 2b 72 2c  onc "chmod ug+r,
3470: 61 2b 78 20 22 20 28 63 6f 6e 63 20 74 65 73 74  a+x " (conc test
3480: 64 69 72 20 22 2f 22 20 73 63 72 69 70 74 29 29  dir "/" script))
3490: 29 29 29 29 29 0a 09 09 20 20 20 20 73 74 65 70  )))))...    step
34a0: 73 29 29 29 29 29 29 0a                          s)))))).