Megatest

Hex Artifact Content
Login

Artifact bb212116ece6d16dc8bd83c193bf86690dbe9dfd:


0000: 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 32 30  .;; Copyright 20
0010: 30 36 2d 32 30 31 31 2c 20 4d 61 74 74 68 65 77  06-2011, Matthew
0020: 20 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 20 0a 3b 3b   Welland..;; .;;
0030: 20 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69    This program i
0040: 73 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  s made available
0050: 20 75 6e 64 65 72 20 74 68 65 20 47 4e 55 20 47   under the GNU G
0060: 50 4c 20 76 65 72 73 69 6f 6e 20 32 2e 30 20 6f  PL version 2.0 o
0070: 72 0a 3b 3b 20 20 67 72 65 61 74 65 72 2e 20 53  r.;;  greater. S
0080: 65 65 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79  ee the accompany
0090: 69 6e 67 20 66 69 6c 65 20 43 4f 50 59 49 4e 47  ing file COPYING
00a0: 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 3b 3b   for details..;;
00b0: 20 0a 3b 3b 20 20 54 68 69 73 20 70 72 6f 67 72   .;;  This progr
00c0: 61 6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65  am is distribute
00d0: 64 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41  d WITHOUT ANY WA
00e0: 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20  RRANTY; without 
00f0: 65 76 65 6e 20 74 68 65 0a 3b 3b 20 20 69 6d 70  even the.;;  imp
0100: 6c 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66  lied warranty of
0110: 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59   MERCHANTABILITY
0120: 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20   or FITNESS FOR 
0130: 41 20 50 41 52 54 49 43 55 4c 41 52 0a 3b 3b 20  A PARTICULAR.;; 
0140: 20 50 55 52 50 4f 53 45 2e 0a 0a 3b 3b 3d 3d 3d   PURPOSE...;;===
0150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0190: 3d 3d 3d 0a 3b 3b 20 6c 61 75 6e 63 68 20 61 20  ===.;; launch a 
01a0: 74 61 73 6b 20 2d 20 74 68 69 73 20 72 75 6e 73  task - this runs
01b0: 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 74   on the originat
01c0: 69 6e 67 20 68 6f 73 74 2c 20 74 65 73 74 73 20  ing host, tests 
01d0: 74 68 65 6d 73 65 6c 76 65 73 0a 3b 3b 0a 3b 3b  themselves.;;.;;
01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0220: 3d 3d 3d 3d 3d 3d 0a 0a 28 75 73 65 20 72 65 67  ======..(use reg
0230: 65 78 20 72 65 67 65 78 2d 63 61 73 65 20 62 61  ex regex-case ba
0240: 73 65 36 34 20 73 71 6c 69 74 65 33 20 73 72 66  se64 sqlite3 srf
0250: 69 2d 31 38 29 0a 28 69 6d 70 6f 72 74 20 28 70  i-18).(import (p
0260: 72 65 66 69 78 20 62 61 73 65 36 34 20 62 61 73  refix base64 bas
0270: 65 36 34 3a 29 29 0a 28 69 6d 70 6f 72 74 20 28  e64:)).(import (
0280: 70 72 65 66 69 78 20 73 71 6c 69 74 65 33 20 73  prefix sqlite3 s
0290: 71 6c 69 74 65 33 3a 29 29 0a 0a 28 64 65 63 6c  qlite3:))..(decl
02a0: 61 72 65 20 28 75 6e 69 74 20 6c 61 75 6e 63 68  are (unit launch
02b0: 29 29 0a 28 64 65 63 6c 61 72 65 20 28 75 73 65  )).(declare (use
02c0: 73 20 63 6f 6d 6d 6f 6e 29 29 0a 28 64 65 63 6c  s common)).(decl
02d0: 61 72 65 20 28 75 73 65 73 20 63 6f 6e 66 69 67  are (uses config
02e0: 66 29 29 0a 28 64 65 63 6c 61 72 65 20 28 75 73  f)).(declare (us
02f0: 65 73 20 64 62 29 29 0a 0a 28 69 6e 63 6c 75 64  es db))..(includ
0300: 65 20 22 63 6f 6d 6d 6f 6e 5f 72 65 63 6f 72 64  e "common_record
0310: 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75 64 65  s.scm").(include
0320: 20 22 6b 65 79 5f 72 65 63 6f 72 64 73 2e 73 63   "key_records.sc
0330: 6d 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 64 62  m").(include "db
0340: 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a 0a  _records.scm")..
0350: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;;==============
0360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0390: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 65 7a 73 74  ========.;; ezst
03a0: 65 70 73 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  eps.;;==========
03b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b  ============..;;
03f0: 20 65 7a 73 74 65 70 73 20 77 65 72 65 20 67 6f   ezsteps were go
0400: 69 6e 67 20 74 6f 20 62 65 20 63 6f 64 65 64 20  ing to be coded 
0410: 61 73 0a 3b 3b 20 73 74 65 70 6e 61 6d 65 5b 2c  as.;; stepname[,
0420: 70 72 65 64 73 74 65 70 31 2c 70 72 65 64 73 74  predstep1,predst
0430: 65 70 32 20 2e 2e 2e 5d 20 5b 7b 56 41 52 31 3d  ep2 ...] [{VAR1=
0440: 66 69 72 73 74 2c 73 65 63 6f 6e 64 2c 74 68 69  first,second,thi
0450: 72 64 7d 5d 20 63 6f 6d 6d 61 6e 64 20 74 6f 20  rd}] command to 
0460: 65 78 65 63 75 74 65 0a 3b 3b 20 20 20 42 55 54  execute.;;   BUT
0470: 0a 3b 3b 20 6e 6f 77 20 61 72 65 0a 3b 3b 20 73  .;; now are.;; s
0480: 74 65 70 6e 61 6d 65 20 7b 56 41 52 3d 66 69 72  tepname {VAR=fir
0490: 73 74 2c 73 65 63 6f 6e 64 2c 74 68 69 72 64 20  st,second,third 
04a0: 2e 2e 2e 7d 20 63 6f 6d 6d 61 6e 64 20 2e 2e 2e  ...} command ...
04b0: 0a 0a 3b 3b 20 67 69 76 65 6e 20 61 6e 20 65 78  ..;; given an ex
04c0: 69 74 20 63 6f 64 65 20 61 6e 64 20 77 68 65 74  it code and whet
04d0: 68 65 72 20 6f 72 20 6e 6f 74 20 6c 6f 67 70 72  her or not logpr
04e0: 6f 20 77 61 73 20 75 73 65 64 20 63 61 6c 63 75  o was used calcu
04f0: 6c 61 74 65 20 4f 4b 2f 42 41 44 0a 3b 3b 20 72  late OK/BAD.;; r
0500: 65 74 75 72 6e 20 23 74 20 69 66 20 77 65 20 61  eturn #t if we a
0510: 72 65 20 6f 6b 2c 20 23 66 20 6f 74 68 65 72 77  re ok, #f otherw
0520: 69 73 65 0a 28 64 65 66 69 6e 65 20 28 73 74 65  ise.(define (ste
0530: 70 72 75 6e 2d 67 6f 6f 64 3f 20 6c 6f 67 70 72  prun-good? logpr
0540: 6f 20 65 78 69 74 63 6f 64 65 29 0a 20 20 28 6f  o exitcode).  (o
0550: 72 20 28 65 71 3f 20 65 78 69 74 63 6f 64 65 20  r (eq? exitcode 
0560: 30 29 0a 20 20 20 20 20 20 28 61 6e 64 20 6c 6f  0).      (and lo
0570: 67 70 72 6f 20 28 65 71 3f 20 65 78 69 74 63 6f  gpro (eq? exitco
0580: 64 65 20 32 29 29 29 29 0a 0a 28 64 65 66 69 6e  de 2))))..(defin
0590: 65 20 28 6c 61 75 6e 63 68 3a 65 78 65 63 75 74  e (launch:execut
05a0: 65 20 65 6e 63 6f 64 65 64 2d 63 6d 64 29 0a 20  e encoded-cmd). 
05b0: 20 28 6c 65 74 2a 20 28 28 63 6d 64 69 6e 66 6f   (let* ((cmdinfo
05c0: 20 20 20 28 72 65 61 64 20 28 6f 70 65 6e 2d 69     (read (open-i
05d0: 6e 70 75 74 2d 73 74 72 69 6e 67 20 28 62 61 73  nput-string (bas
05e0: 65 36 34 3a 62 61 73 65 36 34 2d 64 65 63 6f 64  e64:base64-decod
05f0: 65 20 65 6e 63 6f 64 65 64 2d 63 6d 64 29 29 29  e encoded-cmd)))
0600: 29 29 0a 20 20 20 20 28 73 65 74 65 6e 76 20 22  )).    (setenv "
0610: 4d 54 5f 43 4d 44 49 4e 46 4f 22 20 65 6e 63 6f  MT_CMDINFO" enco
0620: 64 65 64 2d 63 6d 64 29 0a 20 20 20 20 28 69 66  ded-cmd).    (if
0630: 20 28 6c 69 73 74 3f 20 63 6d 64 69 6e 66 6f 29   (list? cmdinfo)
0640: 20 3b 3b 20 28 28 74 65 73 74 70 61 74 68 20 2f   ;; ((testpath /
0650: 74 6d 70 2f 6d 72 77 65 6c 6c 61 6e 2f 6a 61 7a  tmp/mrwellan/jaz
0660: 7a 6d 69 6e 64 2f 73 72 63 2f 65 78 61 6d 70 6c  zmind/src/exampl
0670: 65 5f 72 75 6e 2f 74 65 73 74 73 2f 73 71 6c 69  e_run/tests/sqli
0680: 74 65 73 70 65 65 64 29 20 28 74 65 73 74 2d 6e  tespeed) (test-n
0690: 61 6d 65 20 73 71 6c 69 74 65 73 70 65 65 64 29  ame sqlitespeed)
06a0: 20 28 72 75 6e 73 63 72 69 70 74 20 72 75 6e 73   (runscript runs
06b0: 63 72 69 70 74 2e 72 62 29 20 28 64 62 2d 68 6f  cript.rb) (db-ho
06c0: 73 74 20 6c 6f 63 61 6c 68 6f 73 74 29 20 28 72  st localhost) (r
06d0: 75 6e 2d 69 64 20 31 29 29 0a 09 28 6c 65 74 2a  un-id 1))..(let*
06e0: 20 28 28 74 65 73 74 70 61 74 68 20 20 28 61 73   ((testpath  (as
06f0: 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 74 65 73  soc/default 'tes
0700: 74 70 61 74 68 20 20 63 6d 64 69 6e 66 6f 29 29  tpath  cmdinfo))
0710: 0a 09 20 20 20 20 20 20 20 28 77 6f 72 6b 2d 61  ..       (work-a
0720: 72 65 61 20 28 61 73 73 6f 63 2f 64 65 66 61 75  rea (assoc/defau
0730: 6c 74 20 27 77 6f 72 6b 2d 61 72 65 61 20 63 6d  lt 'work-area cm
0740: 64 69 6e 66 6f 29 29 0a 09 20 20 20 20 20 20 20  dinfo))..       
0750: 28 74 65 73 74 2d 6e 61 6d 65 20 28 61 73 73 6f  (test-name (asso
0760: 63 2f 64 65 66 61 75 6c 74 20 27 74 65 73 74 2d  c/default 'test-
0770: 6e 61 6d 65 20 63 6d 64 69 6e 66 6f 29 29 0a 09  name cmdinfo))..
0780: 20 20 20 20 20 20 20 28 72 75 6e 73 63 72 69 70         (runscrip
0790: 74 20 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74  t (assoc/default
07a0: 20 27 72 75 6e 73 63 72 69 70 74 20 63 6d 64 69   'runscript cmdi
07b0: 6e 66 6f 29 29 0a 09 20 20 20 20 20 20 20 28 65  nfo))..       (e
07c0: 7a 73 74 65 70 73 20 20 20 28 61 73 73 6f 63 2f  zsteps   (assoc/
07d0: 64 65 66 61 75 6c 74 20 27 65 7a 73 74 65 70 73  default 'ezsteps
07e0: 20 20 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20     cmdinfo))..  
07f0: 20 20 20 20 20 28 64 62 2d 68 6f 73 74 20 20 20       (db-host   
0800: 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27  (assoc/default '
0810: 64 62 2d 68 6f 73 74 20 20 20 63 6d 64 69 6e 66  db-host   cmdinf
0820: 6f 29 29 0a 09 20 20 20 20 20 20 20 28 72 75 6e  o))..       (run
0830: 2d 69 64 20 20 20 20 28 61 73 73 6f 63 2f 64 65  -id    (assoc/de
0840: 66 61 75 6c 74 20 27 72 75 6e 2d 69 64 20 20 20  fault 'run-id   
0850: 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20 20 20   cmdinfo))..    
0860: 20 20 20 28 69 74 65 6d 64 61 74 20 20 20 28 61     (itemdat   (a
0870: 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 69 74  ssoc/default 'it
0880: 65 6d 64 61 74 20 20 20 63 6d 64 69 6e 66 6f 29  emdat   cmdinfo)
0890: 29 0a 09 20 20 20 20 20 20 20 28 65 6e 76 2d 6f  )..       (env-o
08a0: 76 72 64 20 20 28 61 73 73 6f 63 2f 64 65 66 61  vrd  (assoc/defa
08b0: 75 6c 74 20 27 65 6e 76 2d 6f 76 72 64 20 20 63  ult 'env-ovrd  c
08c0: 6d 64 69 6e 66 6f 29 29 0a 09 20 20 20 20 20 20  mdinfo))..      
08d0: 20 28 72 75 6e 6e 61 6d 65 20 20 20 28 61 73 73   (runname   (ass
08e0: 6f 63 2f 64 65 66 61 75 6c 74 20 27 72 75 6e 6e  oc/default 'runn
08f0: 61 6d 65 20 20 20 63 6d 64 69 6e 66 6f 29 29 0a  ame   cmdinfo)).
0900: 09 20 20 20 20 20 20 20 28 6d 65 67 61 74 65 73  .       (megates
0910: 74 20 20 28 61 73 73 6f 63 2f 64 65 66 61 75 6c  t  (assoc/defaul
0920: 74 20 27 6d 65 67 61 74 65 73 74 20 20 63 6d 64  t 'megatest  cmd
0930: 69 6e 66 6f 29 29 0a 09 20 20 20 20 20 20 20 28  info))..       (
0940: 6d 74 2d 62 69 6e 64 69 72 2d 70 61 74 68 20 28  mt-bindir-path (
0950: 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 6d  assoc/default 'm
0960: 74 2d 62 69 6e 64 69 72 2d 70 61 74 68 20 63 6d  t-bindir-path cm
0970: 64 69 6e 66 6f 29 29 0a 09 20 20 20 20 20 20 20  dinfo))..       
0980: 28 66 75 6c 6c 72 75 6e 73 63 72 69 70 74 20 28  (fullrunscript (
0990: 69 66 20 72 75 6e 73 63 72 69 70 74 20 28 63 6f  if runscript (co
09a0: 6e 63 20 74 65 73 74 70 61 74 68 20 22 2f 22 20  nc testpath "/" 
09b0: 72 75 6e 73 63 72 69 70 74 29 20 23 66 29 29 0a  runscript) #f)).
09c0: 09 20 20 20 20 20 20 20 28 64 62 20 20 20 20 20  .       (db     
09d0: 20 20 20 23 66 29 29 0a 09 20 20 28 64 65 62 75     #f))..  (debu
09e0: 67 3a 70 72 69 6e 74 20 32 20 22 45 78 65 63 74  g:print 2 "Exect
09f0: 75 69 6e 67 20 22 20 74 65 73 74 2d 6e 61 6d 65  uing " test-name
0a00: 20 22 20 6f 6e 20 22 20 28 67 65 74 2d 68 6f 73   " on " (get-hos
0a10: 74 2d 6e 61 6d 65 29 29 0a 09 20 20 28 63 68 61  t-name))..  (cha
0a20: 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20 74 65  nge-directory te
0a30: 73 74 70 61 74 68 29 0a 09 20 20 28 73 65 74 65  stpath)..  (sete
0a40: 6e 76 20 22 4d 54 5f 54 45 53 54 5f 52 55 4e 5f  nv "MT_TEST_RUN_
0a50: 44 49 52 22 20 77 6f 72 6b 2d 61 72 65 61 29 0a  DIR" work-area).
0a60: 09 20 20 28 73 65 74 65 6e 76 20 22 4d 54 5f 54  .  (setenv "MT_T
0a70: 45 53 54 5f 4e 41 4d 45 22 20 74 65 73 74 2d 6e  EST_NAME" test-n
0a80: 61 6d 65 29 0a 09 20 20 28 73 65 74 65 6e 76 20  ame)..  (setenv 
0a90: 22 4d 54 5f 49 54 45 4d 5f 49 4e 46 4f 22 20 28  "MT_ITEM_INFO" (
0aa0: 63 6f 6e 63 20 69 74 65 6d 64 61 74 29 29 0a 09  conc itemdat))..
0ab0: 20 20 28 73 65 74 65 6e 76 20 22 4d 54 5f 52 55    (setenv "MT_RU
0ac0: 4e 4e 41 4d 45 22 20 20 20 72 75 6e 6e 61 6d 65  NNAME"   runname
0ad0: 29 0a 09 20 20 28 73 65 74 65 6e 76 20 22 4d 54  )..  (setenv "MT
0ae0: 5f 4d 45 47 41 54 45 53 54 22 20 20 6d 65 67 61  _MEGATEST"  mega
0af0: 74 65 73 74 29 0a 09 20 20 28 69 66 20 6d 74 2d  test)..  (if mt-
0b00: 62 69 6e 64 69 72 2d 70 61 74 68 20 28 73 65 74  bindir-path (set
0b10: 65 6e 76 20 22 50 41 54 48 22 20 28 63 6f 6e 63  env "PATH" (conc
0b20: 20 28 67 65 74 65 6e 76 20 22 50 41 54 48 22 29   (getenv "PATH")
0b30: 20 22 3a 22 20 6d 74 2d 62 69 6e 64 69 72 2d 70   ":" mt-bindir-p
0b40: 61 74 68 29 29 29 0a 09 20 20 0a 09 20 20 28 69  ath)))..  ..  (i
0b50: 66 20 28 6e 6f 74 20 28 73 65 74 75 70 2d 66 6f  f (not (setup-fo
0b60: 72 2d 72 75 6e 29 29 0a 09 20 20 20 20 20 20 28  r-run))..      (
0b70: 62 65 67 69 6e 0a 09 09 28 64 65 62 75 67 3a 70  begin...(debug:p
0b80: 72 69 6e 74 20 30 20 22 46 61 69 6c 65 64 20 74  rint 0 "Failed t
0b90: 6f 20 73 65 74 75 70 2c 20 65 78 69 74 69 6e 67  o setup, exiting
0ba0: 22 29 20 0a 09 09 28 65 78 69 74 20 31 29 29 29  ") ...(exit 1)))
0bb0: 0a 09 20 20 3b 3b 20 6e 6f 77 20 63 61 6e 20 66  ..  ;; now can f
0bc0: 69 6e 64 20 6f 75 72 20 64 62 0a 09 20 20 28 73  ind our db..  (s
0bd0: 65 74 21 20 64 62 20 28 6f 70 65 6e 2d 64 62 29  et! db (open-db)
0be0: 29 0a 09 20 20 28 63 68 61 6e 67 65 2d 64 69 72  )..  (change-dir
0bf0: 65 63 74 6f 72 79 20 77 6f 72 6b 2d 61 72 65 61  ectory work-area
0c00: 29 20 0a 09 20 20 28 73 65 74 2d 72 75 6e 2d 63  ) ..  (set-run-c
0c10: 6f 6e 66 69 67 2d 76 61 72 73 20 64 62 20 72 75  onfig-vars db ru
0c20: 6e 2d 69 64 29 0a 09 20 20 3b 3b 20 65 6e 76 69  n-id)..  ;; envi
0c30: 72 6f 6e 6d 65 6e 74 20 6f 76 65 72 72 69 64 65  ronment override
0c40: 73 20 61 72 65 20 64 6f 6e 65 20 2a 62 65 66 6f  s are done *befo
0c50: 72 65 2a 20 74 68 65 20 72 65 6d 61 69 6e 69 6e  re* the remainin
0c60: 67 20 63 72 69 74 69 63 61 6c 20 65 6e 76 61 72  g critical envar
0c70: 73 2e 0a 09 20 20 28 61 6c 69 73 74 2d 3e 65 6e  s...  (alist->en
0c80: 76 2d 76 61 72 73 20 65 6e 76 2d 6f 76 72 64 29  v-vars env-ovrd)
0c90: 0a 09 20 20 28 73 65 74 2d 6d 65 67 61 74 65 73  ..  (set-megates
0ca0: 74 2d 65 6e 76 2d 76 61 72 73 20 64 62 20 72 75  t-env-vars db ru
0cb0: 6e 2d 69 64 29 0a 09 20 20 28 73 65 74 2d 69 74  n-id)..  (set-it
0cc0: 65 6d 2d 65 6e 76 2d 76 61 72 73 20 69 74 65 6d  em-env-vars item
0cd0: 64 61 74 29 0a 09 20 20 28 73 61 76 65 2d 65 6e  dat)..  (save-en
0ce0: 76 69 72 6f 6e 6d 65 6e 74 2d 61 73 2d 66 69 6c  vironment-as-fil
0cf0: 65 73 20 22 6d 65 67 61 74 65 73 74 22 29 0a 09  es "megatest")..
0d00: 20 20 28 74 65 73 74 2d 73 65 74 2d 6d 65 74 61    (test-set-meta
0d10: 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 20  -info db run-id 
0d20: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61  test-name itemda
0d30: 74 29 0a 09 20 20 28 74 65 73 74 2d 73 65 74 2d  t)..  (test-set-
0d40: 73 74 61 74 75 73 21 20 64 62 20 72 75 6e 2d 69  status! db run-i
0d50: 64 20 74 65 73 74 2d 6e 61 6d 65 20 22 52 45 4d  d test-name "REM
0d60: 4f 54 45 48 4f 53 54 53 54 41 52 54 22 20 22 6e  OTEHOSTSTART" "n
0d70: 2f 61 22 20 69 74 65 6d 64 61 74 20 28 61 72 67  /a" itemdat (arg
0d80: 73 3a 67 65 74 2d 61 72 67 20 22 2d 6d 22 29 20  s:get-arg "-m") 
0d90: 23 66 29 0a 09 20 20 28 69 66 20 28 61 72 67 73  #f)..  (if (args
0da0: 3a 67 65 74 2d 61 72 67 20 22 2d 78 74 65 72 6d  :get-arg "-xterm
0db0: 22 29 0a 09 20 20 20 20 20 20 28 73 65 74 21 20  ")..      (set! 
0dc0: 66 75 6c 6c 72 75 6e 73 63 72 69 70 74 20 22 78  fullrunscript "x
0dd0: 74 65 72 6d 22 29 0a 09 20 20 20 20 20 20 28 69  term")..      (i
0de0: 66 20 28 61 6e 64 20 66 75 6c 6c 72 75 6e 73 63  f (and fullrunsc
0df0: 72 69 70 74 20 28 6e 6f 74 20 28 66 69 6c 65 2d  ript (not (file-
0e00: 65 78 65 63 75 74 65 2d 61 63 63 65 73 73 3f 20  execute-access? 
0e10: 66 75 6c 6c 72 75 6e 73 63 72 69 70 74 29 29 29  fullrunscript)))
0e20: 0a 09 09 20 20 28 73 79 73 74 65 6d 20 28 63 6f  ...  (system (co
0e30: 6e 63 20 22 63 68 6d 6f 64 20 75 67 2b 78 20 22  nc "chmod ug+x "
0e40: 20 66 75 6c 6c 72 75 6e 73 63 72 69 70 74 29 29   fullrunscript))
0e50: 29 29 0a 09 20 20 3b 3b 20 57 65 20 61 72 65 20  ))..  ;; We are 
0e60: 61 62 6f 75 74 20 74 6f 20 61 63 74 75 61 6c 6c  about to actuall
0e70: 79 20 6b 69 63 6b 20 6f 66 66 20 74 68 65 20 74  y kick off the t
0e80: 65 73 74 0a 09 20 20 3b 3b 20 73 6f 20 74 68 69  est..  ;; so thi
0e90: 73 20 69 73 20 61 20 67 6f 6f 64 20 70 6c 61 63  s is a good plac
0ea0: 65 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20  e to remove the 
0eb0: 72 65 63 6f 72 64 73 20 66 6f 72 20 0a 09 20 20  records for ..  
0ec0: 3b 3b 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20  ;; any previous 
0ed0: 72 75 6e 73 0a 09 20 20 3b 3b 20 28 64 62 3a 74  runs..  ;; (db:t
0ee0: 65 73 74 2d 72 65 6d 6f 76 65 2d 73 74 65 70 73  est-remove-steps
0ef0: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e   db run-id testn
0f00: 61 6d 65 20 69 74 65 6d 64 61 74 29 0a 09 20 20  ame itemdat)..  
0f10: 0a 09 20 20 3b 3b 20 66 72 6f 6d 20 68 65 72 65  ..  ;; from here
0f20: 20 6f 6e 20 6f 75 74 20 77 65 20 77 69 6c 6c 20   on out we will 
0f30: 6f 70 65 6e 20 61 6e 64 20 63 6c 6f 73 65 20 74  open and close t
0f40: 68 65 20 64 62 0a 09 20 20 3b 3b 20 6f 6e 20 65  he db..  ;; on e
0f50: 76 65 72 79 20 61 63 63 65 73 73 20 74 6f 20 72  very access to r
0f60: 65 64 75 63 65 20 74 68 65 20 70 72 6f 62 61 62  educe the probab
0f70: 6c 69 74 69 79 20 6f 66 20 0a 09 20 20 3b 3b 20  litiy of ..  ;; 
0f80: 63 6f 6e 74 65 6e 74 69 6f 6e 20 6f 72 20 73 74  contention or st
0f90: 75 63 6b 20 61 63 63 65 73 73 20 6f 6e 20 6e 66  uck access on nf
0fa0: 73 2e 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 66  s...  (sqlite3:f
0fb0: 69 6e 61 6c 69 7a 65 21 20 64 62 29 0a 0a 09 20  inalize! db)... 
0fc0: 20 28 6c 65 74 2a 20 28 28 6d 20 20 20 20 20 20   (let* ((m      
0fd0: 20 20 20 20 20 20 28 6d 61 6b 65 2d 6d 75 74 65        (make-mute
0fe0: 78 29 29 0a 09 09 20 28 6b 69 6c 6c 2d 6a 6f 62  x))... (kill-job
0ff0: 3f 20 20 20 20 23 66 29 0a 09 09 20 28 65 78 69  ?    #f)... (exi
1000: 74 2d 69 6e 66 6f 20 20 20 20 28 76 65 63 74 6f  t-info    (vecto
1010: 72 20 23 74 20 23 74 20 23 74 29 29 0a 09 09 20  r #t #t #t))... 
1020: 28 6a 6f 62 2d 74 68 72 65 61 64 20 20 20 23 66  (job-thread   #f
1030: 29 0a 09 09 20 28 72 75 6e 69 74 20 20 20 20 20  )... (runit     
1040: 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 09 09     (lambda ()...
1050: 09 09 20 3b 3b 20 28 6c 65 74 2d 76 61 6c 75 65  .. ;; (let-value
1060: 73 0a 09 09 09 09 20 3b 3b 20 20 28 28 28 70 69  s..... ;;  (((pi
1070: 64 20 65 78 69 74 2d 73 74 61 74 75 73 20 65 78  d exit-status ex
1080: 69 74 2d 63 6f 64 65 29 0a 09 09 09 09 20 3b 3b  it-code)..... ;;
1090: 20 20 20 20 28 72 75 6e 2d 6e 2d 77 61 69 74 20      (run-n-wait 
10a0: 66 75 6c 6c 72 75 6e 73 63 72 69 70 74 29 29 29  fullrunscript)))
10b0: 0a 09 09 09 09 20 0a 09 09 09 09 20 3b 3b 20 69  ..... ..... ;; i
10c0: 66 20 74 68 65 72 65 20 69 73 20 61 20 72 75 6e  f there is a run
10d0: 73 63 72 69 70 74 20 64 6f 20 69 74 20 66 69 72  script do it fir
10e0: 73 74 0a 09 09 09 09 20 28 69 66 20 66 75 6c 6c  st..... (if full
10f0: 72 75 6e 73 63 72 69 70 74 0a 09 09 09 09 20 20  runscript.....  
1100: 20 20 20 28 6c 65 74 20 28 28 70 69 64 20 28 70     (let ((pid (p
1110: 72 6f 63 65 73 73 2d 72 75 6e 20 66 75 6c 6c 72  rocess-run fullr
1120: 75 6e 73 63 72 69 70 74 29 29 29 0a 09 09 09 09  unscript))).....
1130: 20 20 20 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70         (let loop
1140: 20 28 28 69 20 30 29 29 0a 09 09 09 09 09 20 28   ((i 0))...... (
1150: 6c 65 74 2d 76 61 6c 75 65 73 0a 09 09 09 09 09  let-values......
1160: 20 20 28 28 28 70 69 64 2d 76 61 6c 20 65 78 69    (((pid-val exi
1170: 74 2d 73 74 61 74 75 73 20 65 78 69 74 2d 63 6f  t-status exit-co
1180: 64 65 29 20 28 70 72 6f 63 65 73 73 2d 77 61 69  de) (process-wai
1190: 74 20 70 69 64 20 23 74 29 29 29 0a 09 09 09 09  t pid #t))).....
11a0: 09 20 20 28 6d 75 74 65 78 2d 6c 6f 63 6b 21 20  .  (mutex-lock! 
11b0: 6d 29 0a 09 09 09 09 09 20 20 28 76 65 63 74 6f  m)......  (vecto
11c0: 72 2d 73 65 74 21 20 65 78 69 74 2d 69 6e 66 6f  r-set! exit-info
11d0: 20 30 20 70 69 64 29 0a 09 09 09 09 09 20 20 28   0 pid)......  (
11e0: 76 65 63 74 6f 72 2d 73 65 74 21 20 65 78 69 74  vector-set! exit
11f0: 2d 69 6e 66 6f 20 31 20 65 78 69 74 2d 73 74 61  -info 1 exit-sta
1200: 74 75 73 29 0a 09 09 09 09 09 20 20 28 76 65 63  tus)......  (vec
1210: 74 6f 72 2d 73 65 74 21 20 65 78 69 74 2d 69 6e  tor-set! exit-in
1220: 66 6f 20 32 20 65 78 69 74 2d 63 6f 64 65 29 0a  fo 2 exit-code).
1230: 09 09 09 09 09 20 20 28 6d 75 74 65 78 2d 75 6e  .....  (mutex-un
1240: 6c 6f 63 6b 21 20 6d 29 0a 09 09 09 09 09 20 20  lock! m)......  
1250: 28 69 66 20 28 65 71 3f 20 70 69 64 2d 76 61 6c  (if (eq? pid-val
1260: 20 30 29 0a 09 09 09 09 09 20 20 20 20 20 20 28   0)......      (
1270: 62 65 67 69 6e 0a 09 09 09 09 09 09 28 74 68 72  begin.......(thr
1280: 65 61 64 2d 73 6c 65 65 70 21 20 32 29 0a 09 09  ead-sleep! 2)...
1290: 09 09 09 09 28 6c 6f 6f 70 20 28 2b 20 69 20 31  ....(loop (+ i 1
12a0: 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 29  )))......      )
12b0: 29 29 29 29 0a 09 09 09 09 20 3b 3b 20 74 68 65  ))))..... ;; the
12c0: 6e 2c 20 69 66 20 72 75 6e 73 63 72 69 70 74 20  n, if runscript 
12d0: 72 61 6e 20 6f 6b 20 28 6f 72 20 64 69 64 20 6e  ran ok (or did n
12e0: 6f 74 20 67 65 74 20 63 61 6c 6c 65 64 29 0a 09  ot get called)..
12f0: 09 09 09 20 3b 3b 20 64 6f 20 61 6c 6c 20 74 68  ... ;; do all th
1300: 65 20 65 7a 73 74 65 70 73 20 28 69 66 20 61 6e  e ezsteps (if an
1310: 79 29 0a 09 09 09 09 20 28 69 66 20 65 7a 73 74  y)..... (if ezst
1320: 65 70 73 0a 09 09 09 09 20 20 20 20 20 28 6c 65  eps.....     (le
1330: 74 2a 20 28 28 74 65 73 74 63 6f 6e 66 69 67 20  t* ((testconfig 
1340: 28 72 65 61 64 2d 63 6f 6e 66 69 67 20 28 63 6f  (read-config (co
1350: 6e 63 20 77 6f 72 6b 2d 61 72 65 61 20 22 2f 74  nc work-area "/t
1360: 65 73 74 63 6f 6e 66 69 67 22 29 20 23 66 20 23  estconfig") #f #
1370: 74 29 29 20 3b 3b 20 46 49 58 4d 45 3f 3f 3f 20  t)) ;; FIXME??? 
1380: 69 73 20 61 6c 6c 6f 77 2d 73 79 73 74 65 6d 20  is allow-system 
1390: 6f 6b 20 68 65 72 65 3f 0a 09 09 09 09 09 20 20  ok here?......  
13a0: 20 20 28 65 7a 73 74 65 70 73 6c 73 74 20 28 68    (ezstepslst (h
13b0: 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65  ash-table-ref/de
13c0: 66 61 75 6c 74 20 74 65 73 74 63 6f 6e 66 69 67  fault testconfig
13d0: 20 22 65 7a 73 74 65 70 73 22 20 27 28 29 29 29   "ezsteps" '()))
13e0: 0a 09 09 09 09 09 20 20 20 20 28 64 62 20 20 20  ......    (db   
13f0: 20 20 20 20 20 20 28 6f 70 65 6e 2d 64 62 29 29        (open-db))
1400: 29 0a 09 09 09 09 20 20 20 20 20 20 20 28 69 66  ).....       (if
1410: 20 28 6e 6f 74 20 28 66 69 6c 65 2d 65 78 69 73   (not (file-exis
1420: 74 73 3f 20 22 2e 65 7a 73 74 65 70 73 22 29 29  ts? ".ezsteps"))
1430: 28 63 72 65 61 74 65 2d 64 69 72 65 63 74 6f 72  (create-director
1440: 79 20 22 2e 65 7a 73 74 65 70 73 22 29 29 0a 09  y ".ezsteps"))..
1450: 09 09 09 20 20 20 20 20 20 20 3b 3b 20 69 66 20  ...       ;; if 
1460: 65 7a 73 74 65 70 73 20 77 61 73 20 64 65 66 69  ezsteps was defi
1470: 6e 65 64 20 74 68 65 6e 20 77 65 20 61 72 65 20  ned then we are 
1480: 73 75 72 65 20 74 6f 20 68 61 76 65 20 61 74 20  sure to have at 
1490: 6c 65 61 73 74 20 6f 6e 65 20 73 74 65 70 20 62  least one step b
14a0: 75 74 20 63 68 65 63 6b 20 61 6e 79 77 61 79 0a  ut check anyway.
14b0: 09 09 09 09 20 20 20 20 20 20 20 28 69 66 20 28  ....       (if (
14c0: 6e 6f 74 20 28 3e 20 28 6c 65 6e 67 74 68 20 65  not (> (length e
14d0: 7a 73 74 65 70 73 6c 73 74 29 20 30 29 29 0a 09  zstepslst) 0))..
14e0: 09 09 09 09 20 20 20 28 64 65 62 75 67 3a 70 72  ....   (debug:pr
14f0: 69 6e 74 20 30 20 22 45 52 52 4f 52 3a 20 65 7a  int 0 "ERROR: ez
1500: 73 74 65 70 73 20 64 65 66 69 6e 65 64 20 62 75  steps defined bu
1510: 74 20 65 7a 73 74 65 70 73 6c 73 74 20 69 73 20  t ezstepslst is 
1520: 7a 65 72 6f 20 6c 65 6e 67 74 68 22 29 0a 09 09  zero length")...
1530: 09 09 09 20 20 20 28 6c 65 74 20 6c 6f 6f 70 20  ...   (let loop 
1540: 28 28 65 7a 73 74 65 70 20 28 63 61 72 20 65 7a  ((ezstep (car ez
1550: 73 74 65 70 73 6c 73 74 29 29 0a 09 09 09 09 09  stepslst))......
1560: 09 20 20 20 20 20 20 28 74 61 6c 20 20 20 20 28  .      (tal    (
1570: 63 64 72 20 65 7a 73 74 65 70 73 6c 73 74 29 29  cdr ezstepslst))
1580: 0a 09 09 09 09 09 09 20 20 20 20 20 20 28 70 72  .......      (pr
1590: 65 76 73 74 65 70 20 23 66 29 29 0a 09 09 09 09  evstep #f)).....
15a0: 09 20 20 20 20 20 3b 3b 20 63 68 65 63 6b 20 65  .     ;; check e
15b0: 78 69 74 2d 69 6e 66 6f 20 28 76 65 63 74 6f 72  xit-info (vector
15c0: 2d 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 31  -ref exit-info 1
15d0: 29 0a 09 09 09 09 09 20 20 20 20 20 28 69 66 20  )......     (if 
15e0: 28 76 65 63 74 6f 72 2d 72 65 66 20 65 78 69 74  (vector-ref exit
15f0: 2d 69 6e 66 6f 20 31 29 0a 09 09 09 09 09 09 20  -info 1)....... 
1600: 28 6c 65 74 2a 20 28 28 73 74 65 70 6e 61 6d 65  (let* ((stepname
1610: 20 20 28 63 61 72 20 65 7a 73 74 65 70 29 29 20    (car ezstep)) 
1620: 20 3b 3b 20 64 6f 20 73 74 75 66 66 20 74 6f 20   ;; do stuff to 
1630: 72 75 6e 20 74 68 65 20 73 74 65 70 0a 09 09 09  run the step....
1640: 09 09 09 09 28 73 74 65 70 69 6e 66 6f 20 20 28  ....(stepinfo  (
1650: 63 61 64 72 20 65 7a 73 74 65 70 29 29 0a 09 09  cadr ezstep))...
1660: 09 09 09 09 09 28 73 74 65 70 70 61 72 74 73 20  .....(stepparts 
1670: 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72  (string-match (r
1680: 65 67 65 78 70 20 22 5e 28 5c 5c 7b 28 5b 5e 5c  egexp "^(\\{([^\
1690: 5c 7d 5d 2a 29 5c 5c 7d 5c 5c 73 2a 7c 29 28 2e  \}]*)\\}\\s*|)(.
16a0: 2a 29 24 22 29 20 73 74 65 70 69 6e 66 6f 29 29  *)$") stepinfo))
16b0: 0a 09 09 09 09 09 09 09 28 73 74 65 70 70 61 72  ........(steppar
16c0: 6d 73 20 28 6c 69 73 74 2d 72 65 66 20 73 74 65  ms (list-ref ste
16d0: 70 70 61 72 74 73 20 32 29 29 20 3b 3b 20 66 6f  pparts 2)) ;; fo
16e0: 72 20 66 75 74 75 72 65 20 75 73 65 2c 20 7b 56  r future use, {V
16f0: 41 52 3d 31 2c 32 2c 33 7d 2c 20 72 75 6e 20 73  AR=1,2,3}, run s
1700: 74 65 70 20 66 6f 72 20 65 61 63 68 20 0a 09 09  tep for each ...
1710: 09 09 09 09 09 28 73 74 65 70 63 6d 64 20 20 20  .....(stepcmd   
1720: 28 6c 69 73 74 2d 72 65 66 20 73 74 65 70 70 61  (list-ref steppa
1730: 72 74 73 20 33 29 29 0a 09 09 09 09 09 09 09 28  rts 3))........(
1740: 73 63 72 69 70 74 20 20 20 22 23 21 2f 62 69 6e  script   "#!/bin
1750: 2f 62 61 73 68 5c 6e 22 29 20 3b 3b 20 79 65 70  /bash\n") ;; yep
1760: 2c 20 77 65 20 64 65 70 65 6e 64 20 6f 6e 20 62  , we depend on b
1770: 69 6e 2f 62 61 73 68 20 46 49 58 4d 45 21 21 21  in/bash FIXME!!!
1780: 0a 09 09 09 09 09 09 09 28 6c 6f 67 70 72 6f 2d  ........(logpro-
1790: 75 73 65 64 20 23 66 29 29 0a 09 09 09 09 09 09  used #f)).......
17a0: 20 20 20 3b 3b 20 4e 42 2f 2f 20 63 61 6e 20 73     ;; NB// can s
17b0: 61 66 65 6c 79 20 61 73 73 75 6d 65 20 77 65 20  afely assume we 
17c0: 61 72 65 20 69 6e 20 74 65 73 74 2d 61 72 65 61  are in test-area
17d0: 20 64 69 72 65 63 74 6f 72 79 0a 09 09 09 09 09   directory......
17e0: 09 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74  .   (debug:print
17f0: 20 34 20 22 65 7a 73 74 65 70 73 3a 5c 6e 20 73   4 "ezsteps:\n s
1800: 74 65 70 6e 61 6d 65 3a 20 22 20 73 74 65 70 6e  tepname: " stepn
1810: 61 6d 65 20 22 20 73 74 65 70 69 6e 66 6f 3a 20  ame " stepinfo: 
1820: 22 20 73 74 65 70 69 6e 66 6f 20 22 20 73 74 65  " stepinfo " ste
1830: 70 70 61 72 74 73 3a 20 22 20 73 74 65 70 70 61  pparts: " steppa
1840: 72 74 73 0a 09 09 09 09 09 09 09 09 22 20 73 74  rts........." st
1850: 65 70 70 61 72 6d 73 3a 20 22 20 73 74 65 70 70  epparms: " stepp
1860: 61 72 6d 73 20 22 20 73 74 65 70 63 6d 64 3a 20  arms " stepcmd: 
1870: 22 20 73 74 65 70 63 6d 64 29 0a 09 09 09 09 09  " stepcmd)......
1880: 09 20 20 20 0a 09 09 09 09 09 09 20 20 20 28 69  .   .......   (i
1890: 66 20 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20  f (file-exists? 
18a0: 28 63 6f 6e 63 20 73 74 65 70 6e 61 6d 65 20 22  (conc stepname "
18b0: 2e 6c 6f 67 70 72 6f 22 29 29 28 73 65 74 21 20  .logpro"))(set! 
18c0: 6c 6f 67 70 72 6f 2d 75 73 65 64 20 23 74 29 29  logpro-used #t))
18d0: 0a 0a 09 09 09 09 09 09 20 20 20 3b 3b 20 66 69  ........   ;; fi
18e0: 72 73 74 20 73 6f 75 72 63 65 20 74 68 65 20 70  rst source the p
18f0: 72 65 76 69 6f 75 73 20 65 6e 76 69 72 6f 6e 6d  revious environm
1900: 65 6e 74 0a 09 09 09 09 09 09 20 20 20 28 69 66  ent.......   (if
1910: 20 28 61 6e 64 20 70 72 65 76 73 74 65 70 20 28   (and prevstep (
1920: 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 70 72 65  file-exists? pre
1930: 76 73 74 65 70 29 29 0a 09 09 09 09 09 09 20 20  vstep)).......  
1940: 20 20 20 20 20 28 73 65 74 21 20 73 63 72 69 70       (set! scrip
1950: 74 20 28 63 6f 6e 63 20 73 63 72 69 70 74 20 22  t (conc script "
1960: 73 6f 75 72 63 65 20 2e 65 7a 73 74 65 70 73 2f  source .ezsteps/
1970: 22 20 70 72 65 76 73 74 65 70 20 22 2e 73 68 22  " prevstep ".sh"
1980: 29 29 29 0a 09 09 09 09 09 09 20 20 20 0a 09 09  ))).......   ...
1990: 09 09 09 09 20 20 20 3b 3b 20 63 61 6c 6c 20 74  ....   ;; call t
19a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 75 73 69 6e 67  he command using
19b0: 20 6d 74 5f 65 7a 73 74 65 70 0a 09 09 09 09 09   mt_ezstep......
19c0: 09 20 20 20 28 73 65 74 21 20 73 63 72 69 70 74  .   (set! script
19d0: 20 28 63 6f 6e 63 20 73 63 72 69 70 74 20 22 6d   (conc script "m
19e0: 74 5f 65 7a 73 74 65 70 20 22 20 73 74 65 70 6e  t_ezstep " stepn
19f0: 61 6d 65 20 22 20 22 20 73 74 65 70 63 6d 64 20  ame " " stepcmd 
1a00: 22 5c 6e 22 29 29 0a 0a 09 09 09 09 09 09 20 20  "\n"))........  
1a10: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20   (debug:print 4 
1a20: 22 73 63 72 69 70 74 3a 20 22 20 73 63 72 69 70  "script: " scrip
1a30: 74 29 0a 0a 09 09 09 09 09 09 20 20 20 28 74 65  t)........   (te
1a40: 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 75  ststep-set-statu
1a50: 73 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73  s! db run-id tes
1a60: 74 2d 6e 61 6d 65 20 73 74 65 70 6e 61 6d 65 20  t-name stepname 
1a70: 22 73 74 61 72 74 22 20 22 2d 22 20 69 74 65 6d  "start" "-" item
1a80: 64 61 74 20 23 66 29 0a 09 09 09 09 09 09 20 20  dat #f).......  
1a90: 20 3b 3b 20 6e 6f 77 20 6c 61 75 6e 63 68 0a 09   ;; now launch..
1aa0: 09 09 09 09 09 20 20 20 28 6c 65 74 20 28 28 70  .....   (let ((p
1ab0: 69 64 20 28 70 72 6f 63 65 73 73 2d 72 75 6e 20  id (process-run 
1ac0: 73 63 72 69 70 74 29 29 29 0a 09 09 09 09 09 09  script))).......
1ad0: 20 20 20 20 20 28 6c 65 74 20 70 72 6f 63 65 73       (let proces
1ae0: 73 6c 6f 6f 70 20 28 28 69 20 30 29 29 0a 09 09  sloop ((i 0))...
1af0: 09 09 09 09 20 20 20 20 20 20 20 28 6c 65 74 2d  ....       (let-
1b00: 76 61 6c 75 65 73 20 28 28 28 70 69 64 2d 76 61  values (((pid-va
1b10: 6c 20 65 78 69 74 2d 73 74 61 74 75 73 20 65 78  l exit-status ex
1b20: 69 74 2d 63 6f 64 65 29 28 70 72 6f 63 65 73 73  it-code)(process
1b30: 2d 77 61 69 74 20 70 69 64 20 23 74 29 29 29 0a  -wait pid #t))).
1b40: 09 09 09 09 09 09 09 09 20 20 20 28 6d 75 74 65  ........   (mute
1b50: 78 2d 6c 6f 63 6b 21 20 6d 29 0a 09 09 09 09 09  x-lock! m)......
1b60: 09 09 09 20 20 20 28 76 65 63 74 6f 72 2d 73 65  ...   (vector-se
1b70: 74 21 20 65 78 69 74 2d 69 6e 66 6f 20 30 20 70  t! exit-info 0 p
1b80: 69 64 29 0a 09 09 09 09 09 09 09 09 20 20 20 28  id).........   (
1b90: 76 65 63 74 6f 72 2d 73 65 74 21 20 65 78 69 74  vector-set! exit
1ba0: 2d 69 6e 66 6f 20 31 20 65 78 69 74 2d 73 74 61  -info 1 exit-sta
1bb0: 74 75 73 29 0a 09 09 09 09 09 09 09 09 20 20 20  tus).........   
1bc0: 28 76 65 63 74 6f 72 2d 73 65 74 21 20 65 78 69  (vector-set! exi
1bd0: 74 2d 69 6e 66 6f 20 32 20 65 78 69 74 2d 63 6f  t-info 2 exit-co
1be0: 64 65 29 0a 09 09 09 09 09 09 09 09 20 20 20 28  de).........   (
1bf0: 6d 75 74 65 78 2d 75 6e 6c 6f 63 6b 21 20 6d 29  mutex-unlock! m)
1c00: 0a 09 09 09 09 09 09 09 09 20 20 20 28 69 66 20  .........   (if 
1c10: 28 65 71 3f 20 70 69 64 2d 76 61 6c 20 30 29 0a  (eq? pid-val 0).
1c20: 09 09 09 09 09 09 09 09 20 20 20 20 20 20 20 28  ........       (
1c30: 62 65 67 69 6e 0a 09 09 09 09 09 09 09 09 09 20  begin.......... 
1c40: 28 74 68 72 65 61 64 2d 73 6c 65 65 70 21 20 32  (thread-sleep! 2
1c50: 29 0a 09 09 09 09 09 09 09 09 09 20 28 70 72 6f  ).......... (pro
1c60: 63 65 73 73 6c 6f 6f 70 20 28 2b 20 69 20 31 29  cessloop (+ i 1)
1c70: 29 29 29 0a 09 09 09 09 09 09 09 09 20 20 20 29  ))).........   )
1c80: 29 0a 09 09 09 09 09 09 20 20 20 20 20 28 74 65  ).......     (te
1c90: 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 75  ststep-set-statu
1ca0: 73 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73  s! db run-id tes
1cb0: 74 2d 6e 61 6d 65 20 73 74 65 70 6e 61 6d 65 20  t-name stepname 
1cc0: 22 65 6e 64 22 20 28 76 65 63 74 6f 72 2d 72 65  "end" (vector-re
1cd0: 66 20 65 78 69 74 2d 69 6e 66 6f 20 32 29 20 69  f exit-info 2) i
1ce0: 74 65 6d 64 61 74 20 23 66 29 0a 09 09 09 09 09  temdat #f)......
1cf0: 09 20 20 20 20 20 28 63 6f 6e 64 0a 09 09 09 09  .     (cond.....
1d00: 09 09 20 20 20 20 20 20 3b 3b 20 57 41 52 4e 20  ..      ;; WARN 
1d10: 66 72 6f 6d 20 6c 6f 67 70 72 6f 0a 09 09 09 09  from logpro.....
1d20: 09 09 20 20 20 20 20 20 28 28 61 6e 64 20 28 65  ..      ((and (e
1d30: 71 3f 20 28 76 65 63 74 6f 72 2d 72 65 66 20 65  q? (vector-ref e
1d40: 78 69 74 2d 69 6e 66 6f 20 31 29 20 32 29 20 6c  xit-info 1) 2) l
1d50: 6f 67 70 72 6f 2d 75 73 65 64 29 0a 09 09 09 09  ogpro-used).....
1d60: 09 09 20 20 20 20 20 20 20 28 74 65 73 74 2d 73  ..       (test-s
1d70: 65 74 2d 73 74 61 74 75 73 21 20 64 62 20 72 75  et-status! db ru
1d80: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 22  n-id test-name "
1d90: 43 4f 4d 50 4c 45 54 45 22 20 22 57 41 52 4e 22  COMPLETE" "WARN"
1da0: 20 69 74 65 6d 64 61 74 20 22 4c 6f 67 70 72 6f   itemdat "Logpro
1db0: 20 77 61 72 6e 69 6e 67 20 66 6f 75 6e 64 22 20   warning found" 
1dc0: 23 66 29 29 0a 09 09 09 09 09 09 20 20 20 20 20  #f)).......     
1dd0: 20 28 28 65 71 3f 20 28 76 65 63 74 6f 72 2d 72   ((eq? (vector-r
1de0: 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 31 29 20  ef exit-info 1) 
1df0: 30 29 0a 09 09 09 09 09 09 20 20 20 20 20 20 20  0).......       
1e00: 28 74 65 73 74 2d 73 65 74 2d 73 74 61 74 75 73  (test-set-status
1e10: 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74  ! db run-id test
1e20: 2d 6e 61 6d 65 20 22 43 4f 4d 50 4c 45 54 45 22  -name "COMPLETE"
1e30: 20 22 50 41 53 53 22 20 69 74 65 6d 64 61 74 20   "PASS" itemdat 
1e40: 23 66 20 23 66 29 29 0a 09 09 09 09 09 09 20 20  #f #f)).......  
1e50: 20 20 20 20 28 65 6c 73 65 0a 09 09 09 09 09 09      (else.......
1e60: 20 20 20 20 20 20 20 28 74 65 73 74 2d 73 65 74         (test-set
1e70: 2d 73 74 61 74 75 73 21 20 64 62 20 72 75 6e 2d  -status! db run-
1e80: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 22 43 4f  id test-name "CO
1e90: 4d 50 4c 45 54 45 22 20 22 46 41 49 4c 22 20 69  MPLETE" "FAIL" i
1ea0: 74 65 6d 64 61 74 20 28 63 6f 6e 63 20 22 46 61  temdat (conc "Fa
1eb0: 69 6c 65 64 20 61 74 20 73 74 65 70 20 22 20 73  iled at step " s
1ec0: 74 65 70 6e 61 6d 65 29 20 23 66 29 29 29 0a 09  tepname) #f)))..
1ed0: 09 09 09 09 09 20 20 20 20 20 29 0a 09 09 09 09  .....     ).....
1ee0: 09 09 20 20 20 28 69 66 20 28 61 6e 64 20 28 73  ..   (if (and (s
1ef0: 74 65 70 72 75 6e 2d 67 6f 6f 64 3f 20 6c 6f 67  teprun-good? log
1f00: 70 72 6f 2d 75 73 65 64 20 28 76 65 63 74 6f 72  pro-used (vector
1f10: 2d 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 32  -ref exit-info 2
1f20: 29 29 0a 09 09 09 09 09 09 09 20 20 20 20 28 6e  ))........    (n
1f30: 6f 74 20 28 6e 75 6c 6c 3f 20 74 61 6c 29 29 29  ot (null? tal)))
1f40: 0a 09 09 09 09 09 09 20 20 20 20 20 20 20 28 6c  .......       (l
1f50: 6f 6f 70 20 28 63 61 72 20 74 61 6c 29 20 28 63  oop (car tal) (c
1f60: 64 72 20 74 61 6c 29 20 73 74 65 70 6e 61 6d 65  dr tal) stepname
1f70: 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 28 64  )))......     (d
1f80: 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 57 41  ebug:print 4 "WA
1f90: 52 4e 49 4e 47 3a 20 61 20 70 72 69 6f 72 20 73  RNING: a prior s
1fa0: 74 65 70 20 66 61 69 6c 65 64 2c 20 73 74 6f 70  tep failed, stop
1fb0: 70 69 6e 67 20 61 74 20 22 20 65 7a 73 74 65 70  ping at " ezstep
1fc0: 29 29 29 29 29 29 29 29 0a 09 09 20 28 6d 6f 6e  ))))))))... (mon
1fd0: 69 74 6f 72 6a 6f 62 20 20 20 28 6c 61 6d 62 64  itorjob   (lambd
1fe0: 61 20 28 29 0a 09 09 09 09 20 28 6c 65 74 2a 20  a ()..... (let* 
1ff0: 28 28 73 74 61 72 74 2d 73 65 63 6f 6e 64 73 20  ((start-seconds 
2000: 28 63 75 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73  (current-seconds
2010: 29 29 0a 09 09 09 09 09 28 63 61 6c 63 2d 6d 69  ))......(calc-mi
2020: 6e 75 74 65 73 20 20 28 6c 61 6d 62 64 61 20 28  nutes  (lambda (
2030: 29 0a 09 09 09 09 09 09 09 20 28 69 6e 65 78 61  )........ (inexa
2040: 63 74 2d 3e 65 78 61 63 74 20 0a 09 09 09 09 09  ct->exact ......
2050: 09 09 20 20 28 72 6f 75 6e 64 20 0a 09 09 09 09  ..  (round .....
2060: 09 09 09 20 20 20 28 2d 20 0a 09 09 09 09 09 09  ...   (- .......
2070: 09 20 20 20 20 28 63 75 72 72 65 6e 74 2d 73 65  .    (current-se
2080: 63 6f 6e 64 73 29 20 0a 09 09 09 09 09 09 09 20  conds) ........ 
2090: 20 20 20 73 74 61 72 74 2d 73 65 63 6f 6e 64 73     start-seconds
20a0: 29 29 29 29 29 0a 09 09 09 09 09 28 6b 69 6c 6c  )))))......(kill
20b0: 2d 74 72 69 65 73 20 30 29 29 0a 09 09 09 09 20  -tries 0))..... 
20c0: 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 6d 69    (let loop ((mi
20d0: 6e 75 74 65 73 20 20 20 28 63 61 6c 63 2d 6d 69  nutes   (calc-mi
20e0: 6e 75 74 65 73 29 29 29 0a 09 09 09 09 20 20 20  nutes))).....   
20f0: 20 20 28 6c 65 74 2a 20 28 28 64 62 20 20 20 20    (let* ((db    
2100: 20 20 20 28 6f 70 65 6e 2d 64 62 29 29 0a 09 09     (open-db))...
2110: 09 09 09 20 20 20 20 28 63 70 75 6c 6f 61 64 20  ...    (cpuload 
2120: 20 28 67 65 74 2d 63 70 75 2d 6c 6f 61 64 29 29   (get-cpu-load))
2130: 0a 09 09 09 09 09 20 20 20 20 28 64 69 73 6b 66  ......    (diskf
2140: 72 65 65 20 28 67 65 74 2d 64 66 20 28 63 75 72  ree (get-df (cur
2150: 72 65 6e 74 2d 64 69 72 65 63 74 6f 72 79 29 29  rent-directory))
2160: 29 0a 09 09 09 09 09 20 20 20 20 28 74 6d 70 66  )......    (tmpf
2170: 72 65 65 20 20 28 67 65 74 2d 64 66 20 22 2f 74  ree  (get-df "/t
2180: 6d 70 22 29 29 29 0a 09 09 09 09 20 20 20 20 20  mp"))).....     
2190: 20 20 28 69 66 20 28 6e 6f 74 20 63 70 75 6c 6f    (if (not cpulo
21a0: 61 64 29 20 20 28 62 65 67 69 6e 20 28 64 65 62  ad)  (begin (deb
21b0: 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e  ug:print 0 "WARN
21c0: 49 4e 47 3a 20 43 50 55 4c 4f 41 44 20 6e 6f 74  ING: CPULOAD not
21d0: 20 66 6f 75 6e 64 2e 22 29 20 20 28 73 65 74 21   found.")  (set!
21e0: 20 63 70 75 6c 6f 61 64 20 22 6e 2f 61 22 29 29   cpuload "n/a"))
21f0: 29 0a 09 09 09 09 20 20 20 20 20 20 20 28 69 66  ).....       (if
2200: 20 28 6e 6f 74 20 64 69 73 6b 66 72 65 65 29 20   (not diskfree) 
2210: 28 62 65 67 69 6e 20 28 64 65 62 75 67 3a 70 72  (begin (debug:pr
2220: 69 6e 74 20 30 20 22 57 41 52 4e 49 4e 47 3a 20  int 0 "WARNING: 
2230: 44 49 53 4b 46 52 45 45 20 6e 6f 74 20 66 6f 75  DISKFREE not fou
2240: 6e 64 2e 22 29 20 28 73 65 74 21 20 64 69 73 6b  nd.") (set! disk
2250: 66 72 65 65 20 22 6e 2f 61 22 29 29 29 0a 09 09  free "n/a")))...
2260: 09 09 20 20 20 20 20 20 20 28 73 65 74 21 20 6b  ..       (set! k
2270: 69 6c 6c 2d 6a 6f 62 3f 20 28 74 65 73 74 2d 67  ill-job? (test-g
2280: 65 74 2d 6b 69 6c 6c 2d 72 65 71 75 65 73 74 20  et-kill-request 
2290: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e  db run-id test-n
22a0: 61 6d 65 20 69 74 65 6d 64 61 74 29 29 0a 09 09  ame itemdat))...
22b0: 09 09 20 20 20 20 20 20 20 28 74 65 73 74 2d 75  ..       (test-u
22c0: 70 64 61 74 65 2d 6d 65 74 61 2d 69 6e 66 6f 20  pdate-meta-info 
22d0: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e  db run-id test-n
22e0: 61 6d 65 20 69 74 65 6d 64 61 74 20 6d 69 6e 75  ame itemdat minu
22f0: 74 65 73 20 63 70 75 6c 6f 61 64 20 64 69 73 6b  tes cpuload disk
2300: 66 72 65 65 20 74 6d 70 66 72 65 65 29 0a 09 09  free tmpfree)...
2310: 09 09 20 20 20 20 20 20 20 28 69 66 20 6b 69 6c  ..       (if kil
2320: 6c 2d 6a 6f 62 3f 20 0a 09 09 09 09 09 20 20 20  l-job? ......   
2330: 28 62 65 67 69 6e 0a 09 09 09 09 09 20 20 20 20  (begin......    
2340: 20 28 6d 75 74 65 78 2d 6c 6f 63 6b 21 20 6d 29   (mutex-lock! m)
2350: 0a 09 09 09 09 09 20 20 20 20 20 28 6c 65 74 2a  ......     (let*
2360: 20 28 28 70 69 64 20 28 76 65 63 74 6f 72 2d 72   ((pid (vector-r
2370: 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 30 29 29  ef exit-info 0))
2380: 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 69  )......       (i
2390: 66 20 28 6e 75 6d 62 65 72 3f 20 70 69 64 29 0a  f (number? pid).
23a0: 09 09 09 09 09 09 20 20 20 28 62 65 67 69 6e 0a  ......   (begin.
23b0: 09 09 09 09 09 09 20 20 20 20 20 28 64 65 62 75  ......     (debu
23c0: 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e 49  g:print 0 "WARNI
23d0: 4e 47 3a 20 52 65 71 75 65 73 74 20 72 65 63 65  NG: Request rece
23e0: 69 76 65 64 20 74 6f 20 6b 69 6c 6c 20 6a 6f 62  ived to kill job
23f0: 20 28 61 74 74 65 6d 70 74 20 23 20 22 20 6b 69   (attempt # " ki
2400: 6c 6c 2d 74 72 69 65 73 20 22 29 22 29 0a 09 09  ll-tries ")")...
2410: 09 09 09 09 20 20 20 20 20 28 6c 65 74 20 28 28  ....     (let ((
2420: 70 72 6f 63 65 73 73 65 73 20 28 63 6d 64 2d 72  processes (cmd-r
2430: 75 6e 2d 3e 6c 69 73 74 20 28 63 6f 6e 63 20 22  un->list (conc "
2440: 70 67 72 65 70 20 2d 6c 20 2d 50 20 22 20 70 69  pgrep -l -P " pi
2450: 64 29 29 29 29 0a 09 09 09 09 09 09 20 20 20 20  d)))).......    
2460: 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 09 09     (for-each ...
2470: 09 09 09 09 09 28 6c 61 6d 62 64 61 20 28 70 29  .....(lambda (p)
2480: 0a 09 09 09 09 09 09 09 20 20 28 6c 65 74 2a 20  ........  (let* 
2490: 28 28 70 61 72 74 73 20 20 28 73 74 72 69 6e 67  ((parts  (string
24a0: 2d 73 70 6c 69 74 20 70 29 29 0a 09 09 09 09 09  -split p))......
24b0: 09 09 09 20 28 70 2d 69 64 20 20 20 28 69 66 20  ... (p-id   (if 
24c0: 28 3e 20 28 6c 65 6e 67 74 68 20 70 61 72 74 73  (> (length parts
24d0: 29 20 30 29 0a 09 09 09 09 09 09 09 09 09 20 20  ) 0)..........  
24e0: 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62     (string->numb
24f0: 65 72 20 28 63 61 72 20 70 61 72 74 73 29 29 0a  er (car parts)).
2500: 09 09 09 09 09 09 09 09 09 20 20 20 20 20 23 66  .........     #f
2510: 29 29 29 0a 09 09 09 09 09 09 09 20 20 20 20 28  )))........    (
2520: 69 66 20 70 2d 69 64 0a 09 09 09 09 09 09 09 09  if p-id.........
2530: 28 62 65 67 69 6e 0a 09 09 09 09 09 09 09 09 20  (begin......... 
2540: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20   (debug:print 0 
2550: 22 4b 69 6c 6c 69 6e 67 20 22 20 28 63 61 64 72  "Killing " (cadr
2560: 20 70 61 72 74 73 29 20 22 3b 20 6b 69 6c 6c 20   parts) "; kill 
2570: 2d 39 20 20 22 20 70 2d 69 64 29 0a 09 09 09 09  -9  " p-id).....
2580: 09 09 09 09 20 20 28 73 79 73 74 65 6d 20 28 63  ....  (system (c
2590: 6f 6e 63 20 22 6b 69 6c 6c 20 2d 39 20 22 20 70  onc "kill -9 " p
25a0: 2d 69 64 29 29 29 29 29 29 0a 09 09 09 09 09 09  -id)))))).......
25b0: 09 28 63 61 72 20 70 72 6f 63 65 73 73 65 73 29  .(car processes)
25c0: 29 0a 09 09 09 09 09 09 20 20 20 20 20 20 20 28  ).......       (
25d0: 73 79 73 74 65 6d 20 28 63 6f 6e 63 20 22 6b 69  system (conc "ki
25e0: 6c 6c 20 2d 39 20 22 20 70 69 64 29 29 29 29 0a  ll -9 " pid)))).
25f0: 09 09 09 09 09 09 20 20 20 28 62 65 67 69 6e 0a  ......   (begin.
2600: 09 09 09 09 09 09 20 20 20 20 20 28 64 65 62 75  ......     (debu
2610: 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e 49  g:print 0 "WARNI
2620: 4e 47 3a 20 52 65 71 75 65 73 74 20 72 65 63 65  NG: Request rece
2630: 69 76 65 64 20 74 6f 20 6b 69 6c 6c 20 6a 6f 62  ived to kill job
2640: 20 62 75 74 20 70 72 6f 62 6c 65 6d 20 77 69 74   but problem wit
2650: 68 20 70 72 6f 63 65 73 73 2c 20 61 74 74 65 6d  h process, attem
2660: 70 74 69 6e 67 20 74 6f 20 6b 69 6c 6c 20 6d 61  pting to kill ma
2670: 6e 61 67 65 72 20 70 72 6f 63 65 73 73 22 29 0a  nager process").
2680: 09 09 09 09 09 09 20 20 20 20 20 28 74 65 73 74  ......     (test
2690: 2d 73 65 74 2d 73 74 61 74 75 73 21 20 64 62 20  -set-status! db 
26a0: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65  run-id test-name
26b0: 20 22 4b 49 4c 4c 45 44 22 20 20 22 46 41 49 4c   "KILLED"  "FAIL
26c0: 22 0a 09 09 09 09 09 09 09 09 20 20 20 20 20 20  ".........      
26d0: 20 69 74 65 6d 64 61 74 20 28 61 72 67 73 3a 67   itemdat (args:g
26e0: 65 74 2d 61 72 67 20 22 2d 6d 22 29 20 23 66 29  et-arg "-m") #f)
26f0: 0a 09 09 09 09 09 09 20 20 20 20 20 28 73 71 6c  .......     (sql
2700: 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64  ite3:finalize! d
2710: 62 29 0a 09 09 09 09 09 09 20 20 20 20 20 28 65  b).......     (e
2720: 78 69 74 20 31 29 29 29 29 0a 09 09 09 09 09 20  xit 1))))...... 
2730: 20 20 20 20 28 73 65 74 21 20 6b 69 6c 6c 2d 74      (set! kill-t
2740: 72 69 65 73 20 28 2b 20 31 20 6b 69 6c 6c 2d 74  ries (+ 1 kill-t
2750: 72 69 65 73 29 29 0a 09 09 09 09 09 20 20 20 20  ries))......    
2760: 20 28 6d 75 74 65 78 2d 75 6e 6c 6f 63 6b 21 20   (mutex-unlock! 
2770: 6d 29 29 29 0a 09 09 09 09 20 20 20 20 20 20 20  m))).....       
2780: 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a  (sqlite3:finaliz
2790: 65 21 20 64 62 29 0a 09 09 09 09 20 20 20 20 20  e! db).....     
27a0: 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65 70 21    (thread-sleep!
27b0: 20 28 2b 20 38 20 28 72 61 6e 64 6f 6d 20 34 29   (+ 8 (random 4)
27c0: 29 29 20 3b 3b 20 61 64 64 20 73 6f 6d 65 20 6a  )) ;; add some j
27d0: 69 74 74 65 72 20 74 6f 20 74 68 65 20 63 61 6c  itter to the cal
27e0: 6c 20 68 6f 6d 65 20 74 69 6d 65 20 74 6f 20 73  l home time to s
27f0: 70 72 65 61 64 20 6f 75 74 20 74 68 65 20 64 62  pread out the db
2800: 20 61 63 63 65 73 73 65 73 0a 09 09 09 09 20 20   accesses.....  
2810: 20 20 20 20 20 28 6c 6f 6f 70 20 28 63 61 6c 63       (loop (calc
2820: 2d 6d 69 6e 75 74 65 73 29 29 29 29 29 29 29 0a  -minutes))))))).
2830: 09 09 20 28 74 68 31 20 20 20 20 20 20 20 20 20  .. (th1         
2840: 20 28 6d 61 6b 65 2d 74 68 72 65 61 64 20 6d 6f   (make-thread mo
2850: 6e 69 74 6f 72 6a 6f 62 29 29 0a 09 09 20 28 74  nitorjob))... (t
2860: 68 32 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b  h2          (mak
2870: 65 2d 74 68 72 65 61 64 20 72 75 6e 69 74 29 29  e-thread runit))
2880: 29 0a 09 20 20 20 20 28 73 65 74 21 20 6a 6f 62  )..    (set! job
2890: 2d 74 68 72 65 61 64 20 74 68 32 29 0a 09 20 20  -thread th2)..  
28a0: 20 20 28 74 68 72 65 61 64 2d 73 74 61 72 74 21    (thread-start!
28b0: 20 74 68 31 29 0a 09 20 20 20 20 28 74 68 72 65   th1)..    (thre
28c0: 61 64 2d 73 74 61 72 74 21 20 74 68 32 29 0a 09  ad-start! th2)..
28d0: 20 20 20 20 28 74 68 72 65 61 64 2d 6a 6f 69 6e      (thread-join
28e0: 21 20 74 68 32 29 0a 09 20 20 20 20 28 6d 75 74  ! th2)..    (mut
28f0: 65 78 2d 6c 6f 63 6b 21 20 6d 29 0a 09 20 20 20  ex-lock! m)..   
2900: 20 28 73 65 74 21 20 64 62 20 28 6f 70 65 6e 2d   (set! db (open-
2910: 64 62 29 29 0a 09 20 20 20 20 28 6c 65 74 2a 20  db))..    (let* 
2920: 28 28 69 74 65 6d 2d 70 61 74 68 20 28 69 74 65  ((item-path (ite
2930: 6d 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65  m-list->path ite
2940: 6d 64 61 74 29 29 0a 09 09 20 20 20 28 74 65 73  mdat))...   (tes
2950: 74 69 6e 66 6f 20 20 28 64 62 3a 67 65 74 2d 74  tinfo  (db:get-t
2960: 65 73 74 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d  est-info db run-
2970: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65  id test-name ite
2980: 6d 2d 70 61 74 68 29 29 29 0a 09 20 20 20 20 20  m-path)))..     
2990: 20 28 69 66 20 28 6e 6f 74 20 28 65 71 75 61 6c   (if (not (equal
29a0: 3f 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73  ? (db:test-get-s
29b0: 74 61 74 65 20 74 65 73 74 69 6e 66 6f 29 20 22  tate testinfo) "
29c0: 43 4f 4d 50 4c 45 54 45 44 22 29 29 0a 09 09 20  COMPLETED"))... 
29d0: 20 28 62 65 67 69 6e 0a 09 09 20 20 20 20 28 64   (begin...    (d
29e0: 65 62 75 67 3a 70 72 69 6e 74 20 32 20 22 54 65  ebug:print 2 "Te
29f0: 73 74 20 4e 4f 54 20 6c 6f 67 67 65 64 20 61 73  st NOT logged as
2a00: 20 43 4f 4d 50 4c 45 54 45 44 2c 20 28 73 74 61   COMPLETED, (sta
2a10: 74 65 3d 22 20 28 64 62 3a 74 65 73 74 2d 67 65  te=" (db:test-ge
2a20: 74 2d 73 74 61 74 65 20 74 65 73 74 69 6e 66 6f  t-state testinfo
2a30: 29 20 22 29 2c 20 75 70 64 61 74 69 6e 67 20 72  ) "), updating r
2a40: 65 73 75 6c 74 22 29 0a 09 09 20 20 20 20 28 74  esult")...    (t
2a50: 65 73 74 2d 73 65 74 2d 73 74 61 74 75 73 21 20  est-set-status! 
2a60: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e  db run-id test-n
2a70: 61 6d 65 0a 09 09 09 09 20 20 20 20 20 20 28 69  ame.....      (i
2a80: 66 20 6b 69 6c 6c 2d 6a 6f 62 3f 20 22 4b 49 4c  f kill-job? "KIL
2a90: 4c 45 44 22 20 22 43 4f 4d 50 4c 45 54 45 44 22  LED" "COMPLETED"
2aa0: 29 0a 09 09 09 09 20 20 20 20 20 20 28 69 66 20  ).....      (if 
2ab0: 28 76 65 63 74 6f 72 2d 72 65 66 20 65 78 69 74  (vector-ref exit
2ac0: 2d 69 6e 66 6f 20 31 29 20 3b 3b 20 6c 6f 6f 6b  -info 1) ;; look
2ad0: 20 61 74 20 74 68 65 20 65 78 69 74 2d 73 74 61   at the exit-sta
2ae0: 74 75 73 0a 09 09 09 09 09 20 20 28 69 66 20 28  tus......  (if (
2af0: 61 6e 64 20 28 6e 6f 74 20 6b 69 6c 6c 2d 6a 6f  and (not kill-jo
2b00: 62 3f 29 20 0a 09 09 09 09 09 09 20 20 20 28 65  b?) .......   (e
2b10: 71 3f 20 28 76 65 63 74 6f 72 2d 72 65 66 20 65  q? (vector-ref e
2b20: 78 69 74 2d 69 6e 66 6f 20 32 29 20 30 29 29 0a  xit-info 2) 0)).
2b30: 09 09 09 09 09 20 20 20 20 20 20 22 50 41 53 53  .....      "PASS
2b40: 22 0a 09 09 09 09 09 20 20 20 20 20 20 22 46 41  "......      "FA
2b50: 49 4c 22 29 0a 09 09 09 09 09 20 20 22 46 41 49  IL")......  "FAI
2b60: 4c 22 29 20 69 74 65 6d 64 61 74 20 28 61 72 67  L") itemdat (arg
2b70: 73 3a 67 65 74 2d 61 72 67 20 22 2d 6d 22 29 20  s:get-arg "-m") 
2b80: 23 66 29 29 29 0a 09 20 20 20 20 20 20 3b 3b 20  #f)))..      ;; 
2b90: 66 6f 72 20 61 75 74 6f 6d 61 74 65 64 20 63 72  for automated cr
2ba0: 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 6f  eation of the ro
2bb0: 6c 6c 75 70 20 68 74 6d 6c 20 66 69 6c 65 20 74  llup html file t
2bc0: 68 69 73 20 69 73 20 61 20 67 6f 6f 64 20 70 6c  his is a good pl
2bd0: 61 63 65 2e 2e 2e 0a 09 20 20 20 20 20 20 28 69  ace.....      (i
2be0: 66 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 69  f (not (equal? i
2bf0: 74 65 6d 2d 70 61 74 68 20 22 22 29 29 0a 09 09  tem-path ""))...
2c00: 20 20 28 74 65 73 74 73 3a 73 75 6d 6d 61 72 69    (tests:summari
2c10: 7a 65 2d 69 74 65 6d 73 20 64 62 20 72 75 6e 2d  ze-items db run-
2c20: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 23 66 29  id test-name #f)
2c30: 29 20 3b 3b 20 64 6f 6e 27 74 20 66 6f 72 63 65  ) ;; don't force
2c40: 20 2d 20 6a 75 73 74 20 75 70 64 61 74 65 20 69   - just update i
2c50: 66 20 6e 6f 0a 09 20 20 20 20 20 20 29 0a 09 20  f no..      ).. 
2c60: 20 20 20 28 6d 75 74 65 78 2d 75 6e 6c 6f 63 6b     (mutex-unlock
2c70: 21 20 6d 29 0a 09 20 20 20 20 3b 3b 20 28 65 78  ! m)..    ;; (ex
2c80: 65 63 2d 72 65 73 75 6c 74 73 20 28 63 6d 64 2d  ec-results (cmd-
2c90: 72 75 6e 2d 3e 6c 69 73 74 20 66 75 6c 6c 72 75  run->list fullru
2ca0: 6e 73 63 72 69 70 74 29 29 20 3b 3b 20 20 28 6c  nscript)) ;;  (l
2cb0: 69 73 74 20 22 3e 22 20 28 63 6f 6e 63 20 74 65  ist ">" (conc te
2cc0: 73 74 2d 6e 61 6d 65 20 22 2d 72 75 6e 2e 6c 6f  st-name "-run.lo
2cd0: 67 22 29 29 29 29 0a 09 20 20 20 20 3b 3b 20 28  g"))))..    ;; (
2ce0: 73 75 63 63 65 73 73 20 20 20 20 20 20 65 78 65  success      exe
2cf0: 63 2d 72 65 73 75 6c 74 73 29 29 20 3b 3b 20 28  c-results)) ;; (
2d00: 65 71 3f 20 28 63 61 64 72 20 65 78 65 63 2d 72  eq? (cadr exec-r
2d10: 65 73 75 6c 74 73 29 20 30 29 29 29 0a 09 20 20  esults) 0)))..  
2d20: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32    (debug:print 2
2d30: 20 22 4f 75 74 70 75 74 20 66 72 6f 6d 20 72 75   "Output from ru
2d40: 6e 6e 69 6e 67 20 22 20 66 75 6c 6c 72 75 6e 73  nning " fullruns
2d50: 63 72 69 70 74 20 22 2c 20 70 69 64 20 22 20 28  cript ", pid " (
2d60: 76 65 63 74 6f 72 2d 72 65 66 20 65 78 69 74 2d  vector-ref exit-
2d70: 69 6e 66 6f 20 30 29 20 22 20 69 6e 20 77 6f 72  info 0) " in wor
2d80: 6b 20 61 72 65 61 20 22 20 0a 09 09 09 20 77 6f  k area " .... wo
2d90: 72 6b 2d 61 72 65 61 20 22 3a 5c 6e 3d 3d 3d 3d  rk-area ":\n====
2da0: 5c 6e 20 65 78 69 74 20 63 6f 64 65 20 22 20 28  \n exit code " (
2db0: 76 65 63 74 6f 72 2d 72 65 66 20 65 78 69 74 2d  vector-ref exit-
2dc0: 69 6e 66 6f 20 32 29 20 22 5c 6e 22 20 22 3d 3d  info 2) "\n" "==
2dd0: 3d 3d 5c 6e 22 29 0a 09 20 20 20 20 28 73 71 6c  ==\n")..    (sql
2de0: 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64  ite3:finalize! d
2df0: 62 29 0a 09 20 20 20 20 28 69 66 20 28 6e 6f 74  b)..    (if (not
2e00: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 65 78 69   (vector-ref exi
2e10: 74 2d 69 6e 66 6f 20 31 29 29 0a 09 09 28 65 78  t-info 1))...(ex
2e20: 69 74 20 34 29 29 29 29 29 29 29 0a 0a 28 64 65  it 4)))))))..(de
2e30: 66 69 6e 65 20 28 73 65 74 75 70 2d 66 6f 72 2d  fine (setup-for-
2e40: 72 75 6e 29 0a 20 20 28 73 65 74 21 20 2a 63 6f  run).  (set! *co
2e50: 6e 66 69 67 69 6e 66 6f 2a 20 28 66 69 6e 64 2d  nfiginfo* (find-
2e60: 61 6e 64 2d 72 65 61 64 2d 63 6f 6e 66 69 67 20  and-read-config 
2e70: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72  (if (args:get-ar
2e80: 67 20 22 2d 63 6f 6e 66 69 67 22 29 28 61 72 67  g "-config")(arg
2e90: 73 3a 67 65 74 2d 61 72 67 20 22 2d 63 6f 6e 66  s:get-arg "-conf
2ea0: 69 67 22 29 20 22 6d 65 67 61 74 65 73 74 2e 63  ig") "megatest.c
2eb0: 6f 6e 66 69 67 22 29 29 29 0a 20 20 28 73 65 74  onfig"))).  (set
2ec0: 21 20 2a 63 6f 6e 66 69 67 64 61 74 2a 20 20 28  ! *configdat*  (
2ed0: 69 66 20 28 63 61 72 20 2a 63 6f 6e 66 69 67 69  if (car *configi
2ee0: 6e 66 6f 2a 29 28 63 61 72 20 2a 63 6f 6e 66 69  nfo*)(car *confi
2ef0: 67 69 6e 66 6f 2a 29 20 23 66 29 29 0a 20 20 28  ginfo*) #f)).  (
2f00: 73 65 74 21 20 2a 74 6f 70 70 61 74 68 2a 20 20  set! *toppath*  
2f10: 20 20 28 69 66 20 28 63 61 72 20 2a 63 6f 6e 66    (if (car *conf
2f20: 69 67 69 6e 66 6f 2a 29 28 63 61 64 72 20 2a 63  iginfo*)(cadr *c
2f30: 6f 6e 66 69 67 69 6e 66 6f 2a 29 20 23 66 29 29  onfiginfo*) #f))
2f40: 0a 20 20 28 69 66 20 2a 74 6f 70 70 61 74 68 2a  .  (if *toppath*
2f50: 0a 20 20 20 20 20 20 28 73 65 74 65 6e 76 20 22  .      (setenv "
2f60: 4d 54 5f 52 55 4e 5f 41 52 45 41 5f 48 4f 4d 45  MT_RUN_AREA_HOME
2f70: 22 20 2a 74 6f 70 70 61 74 68 2a 29 20 3b 3b 20  " *toppath*) ;; 
2f80: 74 6f 20 62 65 20 64 65 70 72 65 63 61 74 65 64  to be deprecated
2f90: 0a 20 20 20 20 20 20 28 64 65 62 75 67 3a 70 72  .      (debug:pr
2fa0: 69 6e 74 20 30 20 22 45 52 52 4f 52 3a 20 66 61  int 0 "ERROR: fa
2fb0: 69 6c 65 64 20 74 6f 20 66 69 6e 64 20 74 68 65  iled to find the
2fc0: 20 74 6f 70 20 70 61 74 68 20 74 6f 20 79 6f 75   top path to you
2fd0: 72 20 72 75 6e 20 73 65 74 75 70 2e 22 29 29 0a  r run setup.")).
2fe0: 20 20 2a 74 6f 70 70 61 74 68 2a 29 0a 0a 28 64    *toppath*)..(d
2ff0: 65 66 69 6e 65 20 28 67 65 74 2d 62 65 73 74 2d  efine (get-best-
3000: 64 69 73 6b 20 63 6f 6e 66 64 61 74 29 0a 20 20  disk confdat).  
3010: 28 6c 65 74 2a 20 28 28 64 69 73 6b 73 20 20 20  (let* ((disks   
3020: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66   (hash-table-ref
3030: 2f 64 65 66 61 75 6c 74 20 63 6f 6e 66 64 61 74  /default confdat
3040: 20 22 64 69 73 6b 73 22 20 23 66 29 29 0a 09 20   "disks" #f)).. 
3050: 28 62 65 73 74 20 20 20 20 20 23 66 29 0a 09 20  (best     #f).. 
3060: 28 62 65 73 74 73 69 7a 65 20 30 29 29 0a 20 20  (bestsize 0)).  
3070: 20 20 28 69 66 20 64 69 73 6b 73 20 0a 09 28 66    (if disks ..(f
3080: 6f 72 2d 65 61 63 68 20 0a 09 20 28 6c 61 6d 62  or-each .. (lamb
3090: 64 61 20 28 64 69 73 6b 2d 6e 75 6d 29 0a 09 20  da (disk-num).. 
30a0: 20 20 28 6c 65 74 2a 20 28 28 64 69 72 70 61 74    (let* ((dirpat
30b0: 68 20 20 20 20 28 63 61 64 72 20 28 61 73 73 6f  h    (cadr (asso
30c0: 63 20 64 69 73 6b 2d 6e 75 6d 20 64 69 73 6b 73  c disk-num disks
30d0: 29 29 29 0a 09 09 20 20 28 66 72 65 65 73 70 63  )))...  (freespc
30e0: 20 20 20 20 28 69 66 20 28 64 69 72 65 63 74 6f      (if (directo
30f0: 72 79 3f 20 64 69 72 70 61 74 68 29 0a 09 09 09  ry? dirpath)....
3100: 09 20 20 28 67 65 74 2d 64 66 20 64 69 72 70 61  .  (get-df dirpa
3110: 74 68 29 0a 09 09 09 09 20 20 28 62 65 67 69 6e  th).....  (begin
3120: 0a 09 09 09 09 20 20 20 20 28 64 65 62 75 67 3a  .....    (debug:
3130: 70 72 69 6e 74 20 30 20 22 57 41 52 4e 49 4e 47  print 0 "WARNING
3140: 3a 20 70 61 74 68 20 22 20 64 69 72 70 61 74 68  : path " dirpath
3150: 20 22 20 69 6e 20 5b 64 69 73 6b 73 5d 20 73 65   " in [disks] se
3160: 63 74 69 6f 6e 20 6e 6f 74 20 76 61 6c 69 64 22  ction not valid"
3170: 29 0a 09 09 09 09 20 20 20 20 30 29 29 29 29 0a  ).....    0)))).
3180: 09 20 20 20 20 20 28 69 66 20 28 3e 20 66 72 65  .     (if (> fre
3190: 65 73 70 63 20 62 65 73 74 73 69 7a 65 29 0a 09  espc bestsize)..
31a0: 09 20 28 62 65 67 69 6e 0a 09 09 20 20 20 28 73  . (begin...   (s
31b0: 65 74 21 20 62 65 73 74 20 20 20 20 20 64 69 72  et! best     dir
31c0: 70 61 74 68 29 0a 09 09 20 20 20 28 73 65 74 21  path)...   (set!
31d0: 20 62 65 73 74 73 69 7a 65 20 66 72 65 65 73 70   bestsize freesp
31e0: 63 29 29 29 29 29 0a 09 20 28 6d 61 70 20 63 61  c))))).. (map ca
31f0: 72 20 64 69 73 6b 73 29 29 29 0a 20 20 20 20 28  r disks))).    (
3200: 69 66 20 62 65 73 74 0a 09 62 65 73 74 0a 09 28  if best..best..(
3210: 62 65 67 69 6e 0a 09 20 20 28 64 65 62 75 67 3a  begin..  (debug:
3220: 70 72 69 6e 74 20 30 20 22 45 52 52 4f 52 3a 20  print 0 "ERROR: 
3230: 4e 6f 20 76 61 6c 69 64 20 64 69 73 6b 73 20 66  No valid disks f
3240: 6f 75 6e 64 20 69 6e 20 6d 65 67 61 74 65 73 74  ound in megatest
3250: 2e 63 6f 6e 66 69 67 2e 20 50 6c 65 61 73 65 20  .config. Please 
3260: 61 64 64 20 73 6f 6d 65 20 74 6f 20 79 6f 75 72  add some to your
3270: 20 5b 64 69 73 6b 73 5d 20 73 65 63 74 69 6f 6e   [disks] section
3280: 22 29 0a 09 20 20 28 65 78 69 74 20 31 29 29 29  ")..  (exit 1)))
3290: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 63 72 65  ))..(define (cre
32a0: 61 74 65 2d 77 6f 72 6b 2d 61 72 65 61 20 64 62  ate-work-area db
32b0: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 70 61 74   run-id test-pat
32c0: 68 20 64 69 73 6b 2d 70 61 74 68 20 74 65 73 74  h disk-path test
32d0: 6e 61 6d 65 20 69 74 65 6d 64 61 74 29 0a 20 20  name itemdat).  
32e0: 28 6c 65 74 2a 20 28 28 72 75 6e 2d 69 6e 66 6f  (let* ((run-info
32f0: 20 28 64 62 3a 67 65 74 2d 72 75 6e 2d 69 6e 66   (db:get-run-inf
3300: 6f 20 64 62 20 72 75 6e 2d 69 64 29 29 0a 09 20  o db run-id)).. 
3310: 28 69 74 65 6d 2d 70 61 74 68 20 28 6c 65 74 20  (item-path (let 
3320: 28 28 69 70 20 28 69 74 65 6d 2d 6c 69 73 74 2d  ((ip (item-list-
3330: 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29 29 29  >path itemdat)))
3340: 0a 09 09 20 20 20 20 20 20 28 69 66 20 28 65 71  ...      (if (eq
3350: 75 61 6c 3f 20 69 70 20 22 22 29 20 22 22 20 28  ual? ip "") "" (
3360: 63 6f 6e 63 20 22 2f 22 20 69 70 29 29 29 29 0a  conc "/" ip)))).
3370: 09 20 28 72 75 6e 6e 61 6d 65 20 20 28 64 62 3a  . (runname  (db:
3380: 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68 65 61  get-value-by-hea
3390: 64 65 72 20 28 64 62 3a 67 65 74 2d 72 6f 77 20  der (db:get-row 
33a0: 72 75 6e 2d 69 6e 66 6f 29 0a 09 09 09 09 09 20  run-info)...... 
33b0: 20 20 28 64 62 3a 67 65 74 2d 68 65 61 64 65 72    (db:get-header
33c0: 20 72 75 6e 2d 69 6e 66 6f 29 0a 09 09 09 09 09   run-info)......
33d0: 20 20 20 22 72 75 6e 6e 61 6d 65 22 29 29 0a 09     "runname"))..
33e0: 20 28 6b 65 79 2d 76 61 6c 73 20 28 67 65 74 2d   (key-vals (get-
33f0: 6b 65 79 2d 76 61 6c 73 20 64 62 20 72 75 6e 2d  key-vals db run-
3400: 69 64 29 29 0a 09 20 28 6b 65 79 2d 73 74 72 20  id)).. (key-str 
3410: 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70   (string-intersp
3420: 65 72 73 65 20 6b 65 79 2d 76 61 6c 73 20 22 2f  erse key-vals "/
3430: 22 29 29 0a 09 20 28 64 66 75 6c 6c 70 20 20 20  ")).. (dfullp   
3440: 28 63 6f 6e 63 20 64 69 73 6b 2d 70 61 74 68 20  (conc disk-path 
3450: 22 2f 22 20 6b 65 79 2d 73 74 72 20 22 2f 22 20  "/" key-str "/" 
3460: 72 75 6e 6e 61 6d 65 20 22 2f 22 20 74 65 73 74  runname "/" test
3470: 6e 61 6d 65 0a 09 09 09 20 69 74 65 6d 2d 70 61  name.... item-pa
3480: 74 68 29 29 0a 09 20 28 74 6f 70 74 65 73 74 2d  th)).. (toptest-
3490: 70 61 74 68 20 28 63 6f 6e 63 20 64 69 73 6b 2d  path (conc disk-
34a0: 70 61 74 68 20 22 2f 22 20 6b 65 79 2d 73 74 72  path "/" key-str
34b0: 20 22 2f 22 20 72 75 6e 6e 61 6d 65 20 22 2f 22   "/" runname "/"
34c0: 20 74 65 73 74 6e 61 6d 65 29 29 0a 09 20 28 72   testname)).. (r
34d0: 75 6e 73 64 69 72 20 20 28 63 6f 6e 66 69 67 2d  unsdir  (config-
34e0: 6c 6f 6f 6b 75 70 20 2a 63 6f 6e 66 69 67 64 61  lookup *configda
34f0: 74 2a 20 22 73 65 74 75 70 22 20 22 72 75 6e 73  t* "setup" "runs
3500: 64 69 72 22 29 29 0a 09 20 28 6c 6e 6b 70 61 74  dir")).. (lnkpat
3510: 68 20 20 28 63 6f 6e 63 20 28 69 66 20 72 75 6e  h  (conc (if run
3520: 73 64 69 72 20 72 75 6e 73 64 69 72 20 28 63 6f  sdir runsdir (co
3530: 6e 63 20 2a 74 6f 70 70 61 74 68 2a 20 22 2f 72  nc *toppath* "/r
3540: 75 6e 73 22 29 29 0a 09 09 09 20 22 2f 22 20 6b  uns")).... "/" k
3550: 65 79 2d 73 74 72 20 22 2f 22 20 72 75 6e 6e 61  ey-str "/" runna
3560: 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 29 0a  me item-path))).
3570: 20 20 20 20 3b 3b 20 73 69 6e 63 65 20 74 68 69      ;; since thi
3580: 73 20 69 73 20 61 6e 20 69 74 65 72 61 74 65 64  s is an iterated
3590: 20 74 65 73 74 20 74 68 69 73 20 69 73 20 61 73   test this is as
35a0: 20 67 6f 6f 64 20 61 20 70 6c 61 63 65 20 61 73   good a place as
35b0: 20 61 6e 79 20 74 6f 0a 20 20 20 20 3b 3b 20 75   any to.    ;; u
35c0: 70 64 61 74 65 20 74 68 65 20 74 6f 70 74 65 73  pdate the toptes
35d0: 74 20 72 65 63 6f 72 64 20 77 69 74 68 20 69 74  t record with it
35e0: 73 20 6c 6f 63 61 74 69 6f 6e 20 72 75 6e 64 69  s location rundi
35f0: 72 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28  r.    (if (not (
3600: 65 71 75 61 6c 3f 20 69 74 65 6d 2d 70 61 74 68  equal? item-path
3610: 20 22 22 29 29 0a 09 28 64 62 3a 74 65 73 74 2d   ""))..(db:test-
3620: 73 65 74 2d 72 75 6e 64 69 72 21 20 64 62 20 72  set-rundir! db r
3630: 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 22  un-id testname "
3640: 22 20 74 6f 70 74 65 73 74 2d 70 61 74 68 29 29  " toptest-path))
3650: 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e  .    (debug:prin
3660: 74 20 32 20 22 53 65 74 74 69 6e 67 20 75 70 20  t 2 "Setting up 
3670: 74 65 73 74 20 72 75 6e 20 61 72 65 61 22 29 0a  test run area").
3680: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74      (debug:print
3690: 20 32 20 22 20 2d 20 63 72 65 61 74 69 6e 67 20   2 " - creating 
36a0: 72 75 6e 20 61 72 65 61 20 69 6e 20 22 20 64 66  run area in " df
36b0: 75 6c 6c 70 29 0a 20 20 20 20 28 73 79 73 74 65  ullp).    (syste
36c0: 6d 20 20 28 63 6f 6e 63 20 22 6d 6b 64 69 72 20  m  (conc "mkdir 
36d0: 2d 70 20 22 20 64 66 75 6c 6c 70 29 29 0a 20 20  -p " dfullp)).  
36e0: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32    (debug:print 2
36f0: 20 22 20 2d 20 63 72 65 61 74 69 6e 67 20 6c 69   " - creating li
3700: 6e 6b 20 66 72 6f 6d 20 22 20 64 66 75 6c 6c 70  nk from " dfullp
3710: 20 22 2f 22 20 74 65 73 74 6e 61 6d 65 20 22 20   "/" testname " 
3720: 74 6f 20 22 20 6c 6e 6b 70 61 74 68 29 0a 20 20  to " lnkpath).  
3730: 20 20 28 73 79 73 74 65 6d 20 20 28 63 6f 6e 63    (system  (conc
3740: 20 22 6d 6b 64 69 72 20 2d 70 20 22 20 6c 6e 6b   "mkdir -p " lnk
3750: 70 61 74 68 29 29 0a 0a 3b 3b 20 49 20 73 75 73  path))..;; I sus
3760: 70 65 63 74 20 74 68 69 73 20 73 65 63 74 69 6f  pect this sectio
3770: 6e 20 77 61 73 20 64 65 6c 65 74 69 6e 67 20 74  n was deleting t
3780: 65 73 74 20 64 69 72 65 63 74 6f 72 69 65 73 20  est directories 
3790: 75 6e 64 65 72 20 73 6f 6d 65 20 0a 3b 3b 20 77  under some .;; w
37a0: 69 65 72 64 20 73 69 74 61 74 69 6f 6e 73 0a 0a  ierd sitations..
37b0: 3b 3b 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d  ;;    (if (file-
37c0: 65 78 69 73 74 73 3f 20 28 63 6f 6e 63 20 6c 6e  exists? (conc ln
37d0: 6b 70 61 74 68 20 22 2f 22 20 74 65 73 74 6e 61  kpath "/" testna
37e0: 6d 65 29 29 0a 3b 3b 09 28 73 79 73 74 65 6d 20  me)).;;.(system 
37f0: 28 63 6f 6e 63 20 22 72 6d 20 2d 66 20 22 20 6c  (conc "rm -f " l
3800: 6e 6b 70 61 74 68 20 22 2f 22 20 74 65 73 74 6e  nkpath "/" testn
3810: 61 6d 65 29 29 29 0a 20 20 20 20 28 73 79 73 74  ame))).    (syst
3820: 65 6d 20 20 28 63 6f 6e 63 20 22 6c 6e 20 2d 73  em  (conc "ln -s
3830: 66 20 22 20 64 66 75 6c 6c 70 20 22 20 22 20 6c  f " dfullp " " l
3840: 6e 6b 70 61 74 68 20 22 2f 22 20 74 65 73 74 6e  nkpath "/" testn
3850: 61 6d 65 29 29 0a 20 20 20 20 28 69 66 20 28 64  ame)).    (if (d
3860: 69 72 65 63 74 6f 72 79 3f 20 64 66 75 6c 6c 70  irectory? dfullp
3870: 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 6c 65  )..(begin..  (le
3880: 74 2a 20 28 28 63 6d 64 20 20 20 20 28 63 6f 6e  t* ((cmd    (con
3890: 63 20 22 72 73 79 6e 63 20 2d 61 76 22 20 28 69  c "rsync -av" (i
38a0: 66 20 28 3e 20 2a 76 65 72 62 6f 73 69 74 79 2a  f (> *verbosity*
38b0: 20 31 29 20 22 22 20 22 71 22 29 20 22 20 22 20   1) "" "q") " " 
38c0: 74 65 73 74 2d 70 61 74 68 20 22 2f 20 22 20 64  test-path "/ " d
38d0: 66 75 6c 6c 70 20 22 2f 22 29 29 0a 09 09 20 28  fullp "/"))... (
38e0: 73 74 61 74 75 73 20 28 73 79 73 74 65 6d 20 63  status (system c
38f0: 6d 64 29 29 29 0a 09 20 20 20 20 28 69 66 20 28  md)))..    (if (
3900: 6e 6f 74 20 28 65 71 3f 20 73 74 61 74 75 73 20  not (eq? status 
3910: 30 29 29 0a 09 09 28 64 65 62 75 67 3a 70 72 69  0))...(debug:pri
3920: 6e 74 20 32 20 22 45 52 52 4f 52 3a 20 70 72 6f  nt 2 "ERROR: pro
3930: 62 6c 65 6d 20 77 69 74 68 20 72 75 6e 6e 69 6e  blem with runnin
3940: 67 20 5c 22 22 20 63 6d 64 20 22 5c 22 22 29 29  g \"" cmd "\""))
3950: 29 0a 09 20 20 28 6c 69 73 74 20 64 66 75 6c 6c  )..  (list dfull
3960: 70 20 74 6f 70 74 65 73 74 2d 70 61 74 68 29 29  p toptest-path))
3970: 0a 09 28 6c 69 73 74 20 23 66 20 23 66 29 29 29  ..(list #f #f)))
3980: 29 0a 0a 3b 3b 20 31 2e 20 6c 6f 6f 6b 20 74 68  )..;; 1. look th
3990: 6f 75 67 68 20 64 69 73 6b 73 20 6c 69 73 74 20  ough disks list 
39a0: 66 6f 72 20 64 69 73 6b 20 77 69 74 68 20 6d 6f  for disk with mo
39b0: 73 74 20 73 70 61 63 65 0a 3b 3b 20 32 2e 20 63  st space.;; 2. c
39c0: 72 65 61 74 65 20 72 75 6e 20 64 69 72 20 6f 6e  reate run dir on
39d0: 20 64 69 73 6b 2c 20 70 61 74 68 20 6e 61 6d 65   disk, path name
39e0: 20 69 73 20 6d 65 61 6e 69 6e 67 66 75 6c 0a 3b   is meaningful.;
39f0: 3b 20 33 2e 20 63 72 65 61 74 65 20 6c 69 6e 6b  ; 3. create link
3a00: 20 66 72 6f 6d 20 72 75 6e 20 64 69 72 20 74 6f   from run dir to
3a10: 20 6d 65 67 61 74 65 73 74 20 72 75 6e 73 20 61   megatest runs a
3a20: 72 65 61 20 0a 3b 3b 20 34 2e 20 72 65 6d 6f 74  rea .;; 4. remot
3a30: 65 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73 74  ely run the test
3a40: 20 6f 6e 20 61 6c 6c 6f 63 61 74 65 64 20 68 6f   on allocated ho
3a50: 73 74 0a 3b 3b 20 20 20 20 2d 20 63 6f 75 6c 64  st.;;    - could
3a60: 20 62 65 20 73 73 68 20 74 6f 20 68 6f 73 74 20   be ssh to host 
3a70: 66 72 6f 6d 20 68 6f 73 74 73 20 74 61 62 6c 65  from hosts table
3a80: 20 28 75 70 64 61 74 65 20 72 65 67 75 6c 61 72   (update regular
3a90: 6c 79 20 77 69 74 68 20 6c 6f 61 64 29 0a 3b 3b  ly with load).;;
3aa0: 20 20 20 20 2d 20 63 6f 75 6c 64 20 62 65 20 6e      - could be n
3ab0: 65 74 62 61 74 63 68 0a 3b 3b 20 20 20 20 20 20  etbatch.;;      
3ac0: 28 6c 61 75 6e 63 68 2d 74 65 73 74 20 64 62 20  (launch-test db 
3ad0: 28 63 61 64 72 20 73 74 61 74 75 73 29 20 74 65  (cadr status) te
3ae0: 73 74 2d 63 6f 6e 66 29 29 0a 28 64 65 66 69 6e  st-conf)).(defin
3af0: 65 20 28 6c 61 75 6e 63 68 2d 74 65 73 74 20 64  e (launch-test d
3b00: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 63 6f  b run-id test-co
3b10: 6e 66 20 6b 65 79 76 61 6c 6c 73 74 20 74 65 73  nf keyvallst tes
3b20: 74 2d 6e 61 6d 65 20 74 65 73 74 2d 70 61 74 68  t-name test-path
3b30: 20 69 74 65 6d 64 61 74 29 0a 20 20 28 63 68 61   itemdat).  (cha
3b40: 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20 2a 74  nge-directory *t
3b50: 6f 70 70 61 74 68 2a 29 0a 20 20 28 6c 65 74 20  oppath*).  (let 
3b60: 28 28 75 73 65 73 68 65 6c 6c 20 20 20 28 63 6f  ((useshell   (co
3b70: 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 2a 63 6f 6e  nfig-lookup *con
3b80: 66 69 67 64 61 74 2a 20 22 6a 6f 62 74 6f 6f 6c  figdat* "jobtool
3b90: 73 22 20 20 20 20 20 22 75 73 65 73 68 65 6c 6c  s"     "useshell
3ba0: 22 29 29 0a 09 28 6c 61 75 6e 63 68 65 72 20 20  "))..(launcher  
3bb0: 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20   (config-lookup 
3bc0: 2a 63 6f 6e 66 69 67 64 61 74 2a 20 22 6a 6f 62  *configdat* "job
3bd0: 74 6f 6f 6c 73 22 20 20 20 20 20 22 6c 61 75 6e  tools"     "laun
3be0: 63 68 65 72 22 29 29 0a 09 28 72 75 6e 73 63 72  cher"))..(runscr
3bf0: 69 70 74 20 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f  ipt  (config-loo
3c00: 6b 75 70 20 74 65 73 74 2d 63 6f 6e 66 20 20 20  kup test-conf   
3c10: 22 73 65 74 75 70 22 20 20 20 20 20 20 20 20 22  "setup"        "
3c20: 72 75 6e 73 63 72 69 70 74 22 29 29 0a 09 28 65  runscript"))..(e
3c30: 7a 73 74 65 70 73 20 20 20 20 28 3e 20 28 6c 65  zsteps    (> (le
3c40: 6e 67 74 68 20 28 68 61 73 68 2d 74 61 62 6c 65  ngth (hash-table
3c50: 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 74 65 73  -ref/default tes
3c60: 74 2d 63 6f 6e 66 20 22 65 7a 73 74 65 70 73 22  t-conf "ezsteps"
3c70: 20 27 28 29 29 29 20 30 29 29 20 3b 3b 20 64 6f   '())) 0)) ;; do
3c80: 6e 27 74 20 73 65 6e 64 20 61 6c 6c 20 74 68 65  n't send all the
3c90: 20 73 74 65 70 73 2c 20 63 6f 75 6c 64 20 62 65   steps, could be
3ca0: 20 62 69 67 0a 09 28 64 69 73 6b 73 70 61 63 65   big..(diskspace
3cb0: 20 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70    (config-lookup
3cc0: 20 74 65 73 74 2d 63 6f 6e 66 20 20 20 22 72 65   test-conf   "re
3cd0: 71 75 69 72 65 6d 65 6e 74 73 22 20 22 64 69 73  quirements" "dis
3ce0: 6b 73 70 61 63 65 22 29 29 0a 09 28 6d 65 6d 6f  kspace"))..(memo
3cf0: 72 79 20 20 20 20 20 28 63 6f 6e 66 69 67 2d 6c  ry     (config-l
3d00: 6f 6f 6b 75 70 20 74 65 73 74 2d 63 6f 6e 66 20  ookup test-conf 
3d10: 20 20 22 72 65 71 75 69 72 65 6d 65 6e 74 73 22    "requirements"
3d20: 20 22 6d 65 6d 6f 72 79 22 29 29 0a 09 28 68 6f   "memory"))..(ho
3d30: 73 74 73 20 20 20 20 20 20 28 63 6f 6e 66 69 67  sts      (config
3d40: 2d 6c 6f 6f 6b 75 70 20 2a 63 6f 6e 66 69 67 64  -lookup *configd
3d50: 61 74 2a 20 22 6a 6f 62 74 6f 6f 6c 73 22 20 20  at* "jobtools"  
3d60: 20 20 20 22 77 6f 72 6b 68 6f 73 74 73 22 29 29     "workhosts"))
3d70: 0a 09 28 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65  ..(remote-megate
3d80: 73 74 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f 6b 75  st (config-looku
3d90: 70 20 2a 63 6f 6e 66 69 67 64 61 74 2a 20 22 73  p *configdat* "s
3da0: 65 74 75 70 22 20 22 65 78 65 63 75 74 61 62 6c  etup" "executabl
3db0: 65 22 29 29 0a 09 28 6c 6f 63 61 6c 2d 6d 65 67  e"))..(local-meg
3dc0: 61 74 65 73 74 20 20 28 63 61 72 20 28 61 72 67  atest  (car (arg
3dd0: 76 29 29 29 0a 09 28 74 65 73 74 2d 73 69 67 20  v)))..(test-sig 
3de0: 20 20 28 63 6f 6e 63 20 22 3d 22 20 74 65 73 74    (conc "=" test
3df0: 2d 6e 61 6d 65 20 22 3a 22 20 28 69 74 65 6d 2d  -name ":" (item-
3e00: 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65 6d 64  list->path itemd
3e10: 61 74 29 20 22 3d 22 29 29 20 3b 3b 20 74 65 73  at) "=")) ;; tes
3e20: 74 2d 70 61 74 68 20 69 73 20 74 68 65 20 66 75  t-path is the fu
3e30: 6c 6c 20 70 61 74 68 20 69 6e 63 6c 75 64 69 6e  ll path includin
3e40: 67 20 74 68 65 20 69 74 65 6d 2d 70 61 74 68 0a  g the item-path.
3e50: 09 28 77 6f 72 6b 2d 61 72 65 61 20 20 23 66 29  .(work-area  #f)
3e60: 0a 09 28 74 6f 70 74 65 73 74 2d 77 6f 72 6b 2d  ..(toptest-work-
3e70: 61 72 65 61 20 23 66 29 20 3b 3b 20 66 6f 72 20  area #f) ;; for 
3e80: 69 74 65 72 61 74 65 64 20 74 65 73 74 73 20 74  iterated tests t
3e90: 68 65 20 74 6f 70 20 74 65 73 74 20 63 6f 6e 74  he top test cont
3ea0: 61 69 6e 73 20 64 61 74 61 20 72 65 6c 65 76 61  ains data releva
3eb0: 6e 74 20 66 6f 72 20 61 6c 6c 0a 09 28 64 69 73  nt for all..(dis
3ec0: 6b 70 61 74 68 20 20 20 23 66 29 0a 09 28 63 6d  kpath   #f)..(cm
3ed0: 64 70 61 72 6d 73 20 20 20 23 66 29 0a 09 28 66  dparms   #f)..(f
3ee0: 75 6c 6c 63 6d 64 20 20 20 20 23 66 29 20 3b 3b  ullcmd    #f) ;;
3ef0: 20 28 64 65 66 69 6e 65 20 61 20 28 77 69 74 68   (define a (with
3f00: 2d 6f 75 74 70 75 74 2d 74 6f 2d 73 74 72 69 6e  -output-to-strin
3f10: 67 20 28 6c 61 6d 62 64 61 20 28 29 28 77 72 69  g (lambda ()(wri
3f20: 74 65 20 78 29 29 29 29 0a 09 28 6d 74 2d 62 69  te x))))..(mt-bi
3f30: 6e 64 69 72 2d 70 61 74 68 20 23 66 29 29 0a 20  ndir-path #f)). 
3f40: 20 20 20 28 69 66 20 68 6f 73 74 73 20 28 73 65     (if hosts (se
3f50: 74 21 20 68 6f 73 74 73 20 28 73 74 72 69 6e 67  t! hosts (string
3f60: 2d 73 70 6c 69 74 20 68 6f 73 74 73 29 29 29 0a  -split hosts))).
3f70: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 72 65 6d      (if (not rem
3f80: 6f 74 65 2d 6d 65 67 61 74 65 73 74 29 28 73 65  ote-megatest)(se
3f90: 74 21 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65  t! remote-megate
3fa0: 73 74 20 6c 6f 63 61 6c 2d 6d 65 67 61 74 65 73  st local-megates
3fb0: 74 29 29 20 3b 3b 20 22 6d 65 67 61 74 65 73 74  t)) ;; "megatest
3fc0: 22 29 29 0a 20 20 20 20 28 73 65 74 21 20 6d 74  ")).    (set! mt
3fd0: 2d 62 69 6e 64 69 72 2d 70 61 74 68 20 28 70 61  -bindir-path (pa
3fe0: 74 68 6e 61 6d 65 2d 64 69 72 65 63 74 6f 72 79  thname-directory
3ff0: 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65 73 74   remote-megatest
4000: 29 29 0a 20 20 20 20 28 69 66 20 6c 61 75 6e 63  )).    (if launc
4010: 68 65 72 20 28 73 65 74 21 20 6c 61 75 6e 63 68  her (set! launch
4020: 65 72 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74  er (string-split
4030: 20 6c 61 75 6e 63 68 65 72 29 29 29 0a 20 20 20   launcher))).   
4040: 20 3b 3b 20 73 65 74 20 75 70 20 74 68 65 20 72   ;; set up the r
4050: 75 6e 20 77 6f 72 6b 20 61 72 65 61 20 66 6f 72  un work area for
4060: 20 74 68 69 73 20 74 65 73 74 0a 20 20 20 20 28   this test.    (
4070: 73 65 74 21 20 64 69 73 6b 70 61 74 68 20 28 67  set! diskpath (g
4080: 65 74 2d 62 65 73 74 2d 64 69 73 6b 20 2a 63 6f  et-best-disk *co
4090: 6e 66 69 67 64 61 74 2a 29 29 0a 20 20 20 20 28  nfigdat*)).    (
40a0: 69 66 20 64 69 73 6b 70 61 74 68 0a 09 28 6c 65  if diskpath..(le
40b0: 74 20 28 28 64 61 74 20 20 28 63 72 65 61 74 65  t ((dat  (create
40c0: 2d 77 6f 72 6b 2d 61 72 65 61 20 64 62 20 72 75  -work-area db ru
40d0: 6e 2d 69 64 20 74 65 73 74 2d 70 61 74 68 20 64  n-id test-path d
40e0: 69 73 6b 70 61 74 68 20 74 65 73 74 2d 6e 61 6d  iskpath test-nam
40f0: 65 20 69 74 65 6d 64 61 74 29 29 29 0a 09 20 20  e itemdat)))..  
4100: 28 73 65 74 21 20 77 6f 72 6b 2d 61 72 65 61 20  (set! work-area 
4110: 28 63 61 72 20 64 61 74 29 29 0a 09 20 20 28 73  (car dat))..  (s
4120: 65 74 21 20 74 6f 70 74 65 73 74 2d 77 6f 72 6b  et! toptest-work
4130: 2d 61 72 65 61 20 28 63 61 64 72 20 64 61 74 29  -area (cadr dat)
4140: 29 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 73  ))..(begin..  (s
4150: 65 74 21 20 77 6f 72 6b 2d 61 72 65 61 20 74 65  et! work-area te
4160: 73 74 2d 70 61 74 68 29 0a 09 20 20 28 64 65 62  st-path)..  (deb
4170: 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e  ug:print 0 "WARN
4180: 49 4e 47 3a 20 4e 6f 20 64 69 73 6b 20 77 6f 72  ING: No disk wor
4190: 6b 20 61 72 65 61 20 73 70 65 63 69 66 69 65 64  k area specified
41a0: 20 2d 20 72 75 6e 6e 69 6e 67 20 69 6e 20 74 68   - running in th
41b0: 65 20 74 65 73 74 20 64 69 72 65 63 74 6f 72 79  e test directory
41c0: 22 29 29 29 0a 20 20 20 20 28 73 65 74 21 20 63  "))).    (set! c
41d0: 6d 64 70 61 72 6d 73 20 28 62 61 73 65 36 34 3a  mdparms (base64:
41e0: 62 61 73 65 36 34 2d 65 6e 63 6f 64 65 20 28 77  base64-encode (w
41f0: 69 74 68 2d 6f 75 74 70 75 74 2d 74 6f 2d 73 74  ith-output-to-st
4200: 72 69 6e 67 0a 09 09 09 09 20 20 20 20 28 6c 61  ring.....    (la
4210: 6d 62 64 61 20 28 29 20 3b 3b 20 28 6c 69 73 74  mbda () ;; (list
4220: 20 27 68 6f 73 74 73 20 20 20 20 20 68 6f 73 74   'hosts     host
4230: 73 29 0a 09 09 09 09 20 20 20 20 20 20 28 77 72  s).....      (wr
4240: 69 74 65 20 28 6c 69 73 74 20 28 6c 69 73 74 20  ite (list (list 
4250: 27 74 65 73 74 70 61 74 68 20 20 74 65 73 74 2d  'testpath  test-
4260: 70 61 74 68 29 0a 09 09 09 09 09 09 20 20 20 28  path).......   (
4270: 6c 69 73 74 20 27 77 6f 72 6b 2d 61 72 65 61 20  list 'work-area 
4280: 77 6f 72 6b 2d 61 72 65 61 29 0a 09 09 09 09 09  work-area)......
4290: 09 20 20 20 28 6c 69 73 74 20 27 74 65 73 74 2d  .   (list 'test-
42a0: 6e 61 6d 65 20 74 65 73 74 2d 6e 61 6d 65 29 20  name test-name) 
42b0: 0a 09 09 09 09 09 09 20 20 20 28 6c 69 73 74 20  .......   (list 
42c0: 27 72 75 6e 73 63 72 69 70 74 20 72 75 6e 73 63  'runscript runsc
42d0: 72 69 70 74 29 20 0a 09 09 09 09 09 09 20 20 20  ript) .......   
42e0: 28 6c 69 73 74 20 27 72 75 6e 2d 69 64 20 20 20  (list 'run-id   
42f0: 20 72 75 6e 2d 69 64 20 20 20 29 0a 09 09 09 09   run-id   ).....
4300: 09 09 20 20 20 28 6c 69 73 74 20 27 69 74 65 6d  ..   (list 'item
4310: 64 61 74 20 20 20 69 74 65 6d 64 61 74 20 20 29  dat   itemdat  )
4320: 0a 09 09 09 09 09 09 20 20 20 28 6c 69 73 74 20  .......   (list 
4330: 27 6d 65 67 61 74 65 73 74 20 20 72 65 6d 6f 74  'megatest  remot
4340: 65 2d 6d 65 67 61 74 65 73 74 29 0a 09 09 09 09  e-megatest).....
4350: 09 09 20 20 20 28 6c 69 73 74 20 27 65 7a 73 74  ..   (list 'ezst
4360: 65 70 73 20 20 20 65 7a 73 74 65 70 73 29 0a 09  eps   ezsteps)..
4370: 09 09 09 09 09 20 20 20 28 6c 69 73 74 20 27 65  .....   (list 'e
4380: 6e 76 2d 6f 76 72 64 20 20 28 68 61 73 68 2d 74  nv-ovrd  (hash-t
4390: 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74  able-ref/default
43a0: 20 2a 63 6f 6e 66 69 67 64 61 74 2a 20 22 65 6e   *configdat* "en
43b0: 76 2d 6f 76 65 72 72 69 64 65 22 20 27 28 29 29  v-override" '())
43c0: 29 0a 09 09 09 09 09 09 20 20 20 28 6c 69 73 74  ).......   (list
43d0: 20 27 72 75 6e 6e 61 6d 65 20 20 20 28 61 72 67   'runname   (arg
43e0: 73 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 6e 6e  s:get-arg ":runn
43f0: 61 6d 65 22 29 29 0a 09 09 09 09 09 09 20 20 20  ame")).......   
4400: 28 6c 69 73 74 20 27 6d 74 2d 62 69 6e 64 69 72  (list 'mt-bindir
4410: 2d 70 61 74 68 20 6d 74 2d 62 69 6e 64 69 72 2d  -path mt-bindir-
4420: 70 61 74 68 29 29 29 29 29 29 29 20 3b 3b 20 28  path))))))) ;; (
4430: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72  string-intersper
4440: 73 65 20 6b 65 79 76 61 6c 6c 73 74 20 22 20 22  se keyvallst " "
4450: 29 29 29 29 0a 20 20 20 20 3b 3b 20 63 6c 65 61  )))).    ;; clea
4460: 6e 20 6f 75 74 20 73 74 65 70 20 72 65 63 6f 72  n out step recor
4470: 64 73 20 66 72 6f 6d 20 70 72 65 76 69 6f 75 73  ds from previous
4480: 20 72 75 6e 20 69 66 20 74 68 65 79 20 65 78 69   run if they exi
4490: 73 74 0a 20 20 20 20 28 64 62 3a 64 65 6c 65 74  st.    (db:delet
44a0: 65 2d 74 65 73 74 2d 73 74 65 70 2d 72 65 63 6f  e-test-step-reco
44b0: 72 64 73 20 64 62 20 72 75 6e 2d 69 64 20 74 65  rds db run-id te
44c0: 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61 74 29  st-name itemdat)
44d0: 0a 20 20 20 20 28 63 68 61 6e 67 65 2d 64 69 72  .    (change-dir
44e0: 65 63 74 6f 72 79 20 77 6f 72 6b 2d 61 72 65 61  ectory work-area
44f0: 29 20 3b 3b 20 73 6f 20 74 68 61 74 20 6c 6f 67  ) ;; so that log
4500: 20 66 69 6c 65 73 20 66 72 6f 6d 20 74 68 65 20   files from the 
4510: 6c 61 75 6e 63 68 20 70 72 6f 63 65 73 73 20 64  launch process d
4520: 6f 6e 27 74 20 63 6c 75 74 74 65 72 20 74 68 65  on't clutter the
4530: 20 74 65 73 74 20 64 69 72 0a 20 20 20 20 28 63   test dir.    (c
4540: 6f 6e 64 0a 20 20 20 20 20 28 28 61 6e 64 20 6c  ond.     ((and l
4550: 61 75 6e 63 68 65 72 20 68 6f 73 74 73 29 20 3b  auncher hosts) ;
4560: 3b 20 6d 75 73 74 20 62 65 20 75 73 69 6e 67 20  ; must be using 
4570: 73 73 68 20 68 6f 73 74 6e 61 6d 65 0a 20 20 20  ssh hostname.   
4580: 20 20 20 28 73 65 74 21 20 66 75 6c 6c 63 6d 64     (set! fullcmd
4590: 20 28 61 70 70 65 6e 64 20 6c 61 75 6e 63 68 65   (append launche
45a0: 72 20 28 63 61 72 20 68 6f 73 74 73 29 28 6c 69  r (car hosts)(li
45b0: 73 74 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65  st remote-megate
45c0: 73 74 20 74 65 73 74 2d 73 69 67 20 22 2d 65 78  st test-sig "-ex
45d0: 65 63 75 74 65 22 20 63 6d 64 70 61 72 6d 73 29  ecute" cmdparms)
45e0: 29 29 29 0a 20 20 20 20 20 28 6c 61 75 6e 63 68  ))).     (launch
45f0: 65 72 0a 20 20 20 20 20 20 28 73 65 74 21 20 66  er.      (set! f
4600: 75 6c 6c 63 6d 64 20 28 61 70 70 65 6e 64 20 6c  ullcmd (append l
4610: 61 75 6e 63 68 65 72 20 28 6c 69 73 74 20 72 65  auncher (list re
4620: 6d 6f 74 65 2d 6d 65 67 61 74 65 73 74 20 74 65  mote-megatest te
4630: 73 74 2d 73 69 67 20 22 2d 65 78 65 63 75 74 65  st-sig "-execute
4640: 22 20 63 6d 64 70 61 72 6d 73 29 29 29 29 0a 20  " cmdparms)))). 
4650: 20 20 20 20 28 65 6c 73 65 0a 20 20 20 20 20 20      (else.      
4660: 28 69 66 20 28 6e 6f 74 20 75 73 65 73 68 65 6c  (if (not useshel
4670: 6c 29 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30  l)(debug:print 0
4680: 20 22 57 41 52 4e 49 4e 47 3a 20 69 6e 74 65 72   "WARNING: inter
4690: 6e 61 6c 20 6c 61 75 6e 63 68 69 6e 67 20 77 69  nal launching wi
46a0: 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 77 65 6c 6c  ll not work well
46b0: 20 77 69 74 68 6f 75 74 20 5c 22 75 73 65 73 68   without \"usesh
46c0: 65 6c 6c 20 79 65 73 5c 22 20 69 6e 20 79 6f 75  ell yes\" in you
46d0: 72 20 5b 6a 6f 62 74 6f 6f 6c 73 5d 20 73 65 63  r [jobtools] sec
46e0: 74 69 6f 6e 22 29 29 0a 20 20 20 20 20 20 28 73  tion")).      (s
46f0: 65 74 21 20 66 75 6c 6c 63 6d 64 20 28 6c 69 73  et! fullcmd (lis
4700: 74 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65 73  t remote-megates
4710: 74 20 74 65 73 74 2d 73 69 67 20 22 2d 65 78 65  t test-sig "-exe
4720: 63 75 74 65 22 20 63 6d 64 70 61 72 6d 73 20 28  cute" cmdparms (
4730: 69 66 20 75 73 65 73 68 65 6c 6c 20 22 26 22 20  if useshell "&" 
4740: 22 22 29 29 29 29 29 0a 20 20 20 20 28 69 66 20  ""))))).    (if 
4750: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d  (args:get-arg "-
4760: 78 74 65 72 6d 22 29 28 73 65 74 21 20 66 75 6c  xterm")(set! ful
4770: 6c 63 6d 64 20 28 61 70 70 65 6e 64 20 66 75 6c  lcmd (append ful
4780: 6c 63 6d 64 20 28 6c 69 73 74 20 22 2d 78 74 65  lcmd (list "-xte
4790: 72 6d 22 29 29 29 29 0a 20 20 20 20 28 64 65 62  rm")))).    (deb
47a0: 75 67 3a 70 72 69 6e 74 20 31 20 22 4c 61 75 6e  ug:print 1 "Laun
47b0: 63 68 69 6e 67 20 6d 65 67 61 74 65 73 74 20 66  ching megatest f
47c0: 6f 72 20 74 65 73 74 20 22 20 74 65 73 74 2d 6e  or test " test-n
47d0: 61 6d 65 20 22 20 69 6e 20 22 20 77 6f 72 6b 2d  ame " in " work-
47e0: 61 72 65 61 22 20 2e 2e 2e 22 29 0a 20 20 20 20  area" ...").    
47f0: 28 74 65 73 74 2d 73 65 74 2d 73 74 61 74 75 73  (test-set-status
4800: 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74  ! db run-id test
4810: 2d 6e 61 6d 65 20 22 4c 41 55 4e 43 48 45 44 22  -name "LAUNCHED"
4820: 20 22 6e 2f 61 22 20 69 74 65 6d 64 61 74 20 23   "n/a" itemdat #
4830: 66 20 23 66 29 20 3b 3b 20 28 69 66 20 6c 61 75  f #f) ;; (if lau
4840: 6e 63 68 2d 72 65 73 75 6c 74 73 20 6c 61 75 6e  nch-results laun
4850: 63 68 2d 72 65 73 75 6c 74 73 20 22 46 41 49 4c  ch-results "FAIL
4860: 45 44 22 29 29 0a 20 20 20 20 3b 3b 20 73 65 74  ED")).    ;; set
4870: 20 0a 20 20 20 20 3b 3b 20 73 65 74 20 70 72 65   .    ;; set pre
4880: 2d 6c 61 75 6e 63 68 2d 65 6e 76 2d 76 61 72 73  -launch-env-vars
4890: 20 62 65 66 6f 72 65 20 6c 61 75 6e 63 68 69 6e   before launchin
48a0: 67 2c 20 6b 65 65 70 20 74 68 65 20 76 61 72 73  g, keep the vars
48b0: 20 69 6e 20 70 72 65 76 76 61 6c 73 20 61 6e 64   in prevvals and
48c0: 20 70 75 74 20 74 68 65 20 65 6e 76 69 6f 6e 6d   put the envionm
48d0: 65 6e 74 20 62 61 63 6b 20 77 68 65 6e 20 64 6f  ent back when do
48e0: 6e 65 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72  ne.    (debug:pr
48f0: 69 6e 74 20 34 20 22 66 75 6c 6c 63 6d 64 3a 20  int 4 "fullcmd: 
4900: 22 20 66 75 6c 6c 63 6d 64 29 0a 20 20 20 20 28  " fullcmd).    (
4910: 6c 65 74 2a 20 28 28 63 6f 6d 6d 6f 6e 70 72 65  let* ((commonpre
4920: 76 76 61 6c 73 20 28 61 6c 69 73 74 2d 3e 65 6e  vvals (alist->en
4930: 76 2d 76 61 72 73 0a 09 09 09 20 20 20 20 28 68  v-vars....    (h
4940: 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65  ash-table-ref/de
4950: 66 61 75 6c 74 20 2a 63 6f 6e 66 69 67 64 61 74  fault *configdat
4960: 2a 20 22 65 6e 76 2d 6f 76 65 72 72 69 64 65 22  * "env-override"
4970: 20 27 28 29 29 29 29 0a 09 20 20 20 28 74 65 73   '())))..   (tes
4980: 74 70 72 65 76 76 61 6c 73 20 20 20 28 61 6c 69  tprevvals   (ali
4990: 73 74 2d 3e 65 6e 76 2d 76 61 72 73 0a 09 09 09  st->env-vars....
49a0: 20 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d      (hash-table-
49b0: 72 65 66 2f 64 65 66 61 75 6c 74 20 74 65 73 74  ref/default test
49c0: 2d 63 6f 6e 66 20 22 70 72 65 2d 6c 61 75 6e 63  -conf "pre-launc
49d0: 68 2d 65 6e 76 2d 6f 76 65 72 72 69 64 65 73 22  h-env-overrides"
49e0: 20 27 28 29 29 29 29 0a 09 20 20 20 28 6d 69 73   '())))..   (mis
49f0: 63 70 72 65 76 76 61 6c 73 20 20 20 28 61 6c 69  cprevvals   (ali
4a00: 73 74 2d 3e 65 6e 76 2d 76 61 72 73 20 3b 3b 20  st->env-vars ;; 
4a10: 63 6f 6e 73 6f 6c 69 64 61 74 65 20 74 68 69 73  consolidate this
4a20: 20 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 63   code with the c
4a30: 6f 64 65 20 69 6e 20 6d 65 67 61 74 65 73 74 2e  ode in megatest.
4a40: 73 63 6d 20 66 6f 72 20 22 2d 65 78 65 63 75 74  scm for "-execut
4a50: 65 22 0a 09 09 09 20 20 20 20 28 61 70 70 65 6e  e"....    (appen
4a60: 64 20 28 6c 69 73 74 20 28 6c 69 73 74 20 22 4d  d (list (list "M
4a70: 54 5f 54 45 53 54 5f 4e 41 4d 45 22 20 74 65 73  T_TEST_NAME" tes
4a80: 74 2d 6e 61 6d 65 29 0a 09 09 09 09 09 20 20 28  t-name)......  (
4a90: 6c 69 73 74 20 22 4d 54 5f 49 54 45 4d 5f 49 4e  list "MT_ITEM_IN
4aa0: 46 4f 22 20 28 63 6f 6e 63 20 69 74 65 6d 64 61  FO" (conc itemda
4ab0: 74 29 29 20 0a 09 09 09 09 09 20 20 28 6c 69 73  t)) ......  (lis
4ac0: 74 20 22 4d 54 5f 52 55 4e 4e 41 4d 45 22 20 20  t "MT_RUNNAME"  
4ad0: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22   (args:get-arg "
4ae0: 3a 72 75 6e 6e 61 6d 65 22 29 29 29 0a 09 09 09  :runname")))....
4af0: 09 20 20 20 20 69 74 65 6d 64 61 74 29 29 29 0a  .    itemdat))).
4b00: 09 20 20 20 28 6c 61 75 6e 63 68 2d 72 65 73 75  .   (launch-resu
4b10: 6c 74 73 20 28 61 70 70 6c 79 20 63 6d 64 2d 72  lts (apply cmd-r
4b20: 75 6e 2d 70 72 6f 63 2d 65 61 63 68 2d 6c 69 6e  un-proc-each-lin
4b30: 65 0a 09 09 09 09 20 20 28 69 66 20 75 73 65 73  e.....  (if uses
4b40: 68 65 6c 6c 0a 09 09 09 09 20 20 20 20 20 20 28  hell.....      (
4b50: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72  string-intersper
4b60: 73 65 20 66 75 6c 6c 63 6d 64 20 22 20 22 29 0a  se fullcmd " ").
4b70: 09 09 09 09 20 20 20 20 20 20 28 63 61 72 20 66  ....      (car f
4b80: 75 6c 6c 63 6d 64 29 29 0a 09 09 09 09 20 20 70  ullcmd)).....  p
4b90: 72 69 6e 74 0a 09 09 09 09 20 20 28 69 66 20 75  rint.....  (if u
4ba0: 73 65 73 68 65 6c 6c 0a 09 09 09 09 20 20 20 20  seshell.....    
4bb0: 20 20 27 28 29 0a 09 09 09 09 20 20 20 20 20 20    '().....      
4bc0: 28 63 64 72 20 66 75 6c 6c 63 6d 64 29 29 29 29  (cdr fullcmd))))
4bd0: 29 20 3b 3b 20 20 6c 61 75 6e 63 68 65 72 20 66  ) ;;  launcher f
4be0: 75 6c 6c 63 6d 64 29 29 29 3b 3b 20 28 61 70 70  ullcmd)));; (app
4bf0: 6c 79 20 63 6d 64 2d 72 75 6e 2d 70 72 6f 63 2d  ly cmd-run-proc-
4c00: 65 61 63 68 2d 6c 69 6e 65 20 6c 61 75 6e 63 68  each-line launch
4c10: 65 72 20 70 72 69 6e 74 20 66 75 6c 6c 63 6d 64  er print fullcmd
4c20: 29 29 29 20 3b 3b 20 28 63 6d 64 2d 72 75 6e 2d  ))) ;; (cmd-run-
4c30: 3e 6c 69 73 74 20 66 75 6c 6c 63 6d 64 29 29 0a  >list fullcmd)).
4c40: 20 20 20 20 20 20 28 64 65 62 75 67 3a 70 72 69        (debug:pri
4c50: 6e 74 20 32 20 22 4c 61 75 6e 63 68 69 6e 67 20  nt 2 "Launching 
4c60: 63 6f 6d 70 6c 65 74 65 64 2c 20 75 70 64 61 74  completed, updat
4c70: 69 6e 67 20 64 62 22 29 0a 20 20 20 20 20 20 28  ing db").      (
4c80: 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 4c  debug:print 4 "L
4c90: 61 75 6e 63 68 20 72 65 73 75 6c 74 73 3a 20 22  aunch results: "
4ca0: 20 6c 61 75 6e 63 68 2d 72 65 73 75 6c 74 73 29   launch-results)
4cb0: 0a 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20  .      (if (not 
4cc0: 6c 61 75 6e 63 68 2d 72 65 73 75 6c 74 73 29 0a  launch-results).
4cd0: 09 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20 28  .  (begin..    (
4ce0: 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 46 61  print "ERROR: Fa
4cf0: 69 6c 65 64 20 74 6f 20 72 75 6e 20 22 20 28 73  iled to run " (s
4d00: 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73  tring-interspers
4d10: 65 20 66 75 6c 6c 63 6d 64 20 22 20 22 29 20 22  e fullcmd " ") "
4d20: 2c 20 65 78 69 74 69 6e 67 20 6e 6f 77 22 29 0a  , exiting now").
4d30: 09 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 69  .    (sqlite3:fi
4d40: 6e 61 6c 69 7a 65 21 20 64 62 29 0a 09 20 20 20  nalize! db)..   
4d50: 20 3b 3b 20 67 6f 6f 64 20 6f 6c 65 20 22 65 78   ;; good ole "ex
4d60: 69 74 22 20 73 65 65 6d 73 20 6e 6f 74 20 74 6f  it" seems not to
4d70: 20 77 6f 72 6b 0a 09 20 20 20 20 3b 3b 20 28 5f   work..    ;; (_
4d80: 65 78 69 74 20 39 29 0a 09 20 20 20 20 3b 3b 20  exit 9)..    ;; 
4d90: 62 75 74 20 74 68 69 73 20 68 61 63 6b 20 77 69  but this hack wi
4da0: 6c 6c 20 77 6f 72 6b 21 20 54 68 61 6e 6b 73 20  ll work! Thanks 
4db0: 67 6f 20 74 6f 20 41 6c 61 6e 20 50 6f 73 74 20  go to Alan Post 
4dc0: 6f 66 20 74 68 65 20 43 68 69 63 6b 65 6e 20 65  of the Chicken e
4dd0: 6d 61 69 6c 20 6c 69 73 74 0a 09 20 20 20 20 3b  mail list..    ;
4de0: 3b 20 4e 42 2f 2f 20 49 73 20 74 68 69 73 20 73  ; NB// Is this s
4df0: 74 69 6c 6c 20 6e 65 65 64 65 64 3f 20 53 68 6f  till needed? Sho
4e00: 75 6c 64 20 62 65 20 73 61 66 65 20 74 6f 20 67  uld be safe to g
4e10: 6f 20 62 61 63 6b 20 74 6f 20 22 65 78 69 74 22  o back to "exit"
4e20: 20 6e 6f 77 3f 0a 09 20 20 20 20 28 70 72 6f 63   now?..    (proc
4e30: 65 73 73 2d 73 69 67 6e 61 6c 20 28 63 75 72 72  ess-signal (curr
4e40: 65 6e 74 2d 70 72 6f 63 65 73 73 2d 69 64 29 20  ent-process-id) 
4e50: 73 69 67 6e 61 6c 2f 6b 69 6c 6c 29 0a 09 20 20  signal/kill)..  
4e60: 20 20 29 29 0a 20 20 20 20 20 20 28 61 6c 69 73    )).      (alis
4e70: 74 2d 3e 65 6e 76 2d 76 61 72 73 20 6d 69 73 63  t->env-vars misc
4e80: 70 72 65 76 76 61 6c 73 29 0a 20 20 20 20 20 20  prevvals).      
4e90: 28 61 6c 69 73 74 2d 3e 65 6e 76 2d 76 61 72 73  (alist->env-vars
4ea0: 20 74 65 73 74 70 72 65 76 76 61 6c 73 29 0a 20   testprevvals). 
4eb0: 20 20 20 20 20 28 61 6c 69 73 74 2d 3e 65 6e 76       (alist->env
4ec0: 2d 76 61 72 73 20 63 6f 6d 6d 6f 6e 70 72 65 76  -vars commonprev
4ed0: 76 61 6c 73 29 0a 20 20 20 20 20 20 6c 61 75 6e  vals).      laun
4ee0: 63 68 2d 72 65 73 75 6c 74 73 29 29 29 0a 0a     ch-results)))..