Megatest

Hex Artifact Content
Login

Artifact 463a2ba5e3a8be7bf057c9fb49db59fb22ec2d91:


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 32 2c 20 4d 61 74 74 68 65 77  06-2012, Matthew
0020: 20 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 20 0a 3b 3b   Welland..;; .;;
0030: 20 54 68 69 73 20 66 69 6c 65 20 69 73 20 70 61   This file is pa
0040: 72 74 20 6f 66 20 4d 65 67 61 74 65 73 74 2e 0a  rt of Megatest..
0050: 3b 3b 20 0a 3b 3b 20 20 20 20 20 4d 65 67 61 74  ;; .;;     Megat
0060: 65 73 74 20 69 73 20 66 72 65 65 20 73 6f 66 74  est is free soft
0070: 77 61 72 65 3a 20 79 6f 75 20 63 61 6e 20 72 65  ware: you can re
0080: 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61 6e  distribute it an
0090: 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b 20 20  d/or modify.;;  
00a0: 20 20 20 69 74 20 75 6e 64 65 72 20 74 68 65 20     it under the 
00b0: 74 65 72 6d 73 20 6f 66 20 74 68 65 20 47 4e 55  terms of the GNU
00c0: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20   General Public 
00d0: 4c 69 63 65 6e 73 65 20 61 73 20 70 75 62 6c 69  License as publi
00e0: 73 68 65 64 20 62 79 0a 3b 3b 20 20 20 20 20 74  shed by.;;     t
00f0: 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65  he Free Software
0100: 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74   Foundation, eit
0110: 68 65 72 20 76 65 72 73 69 6f 6e 20 33 20 6f 66  her version 3 of
0120: 20 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72   the License, or
0130: 0a 3b 3b 20 20 20 20 20 28 61 74 20 79 6f 75 72  .;;     (at your
0140: 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c 61 74   option) any lat
0150: 65 72 20 76 65 72 73 69 6f 6e 2e 0a 3b 3b 20 0a  er version..;; .
0160: 3b 3b 20 20 20 20 20 4d 65 67 61 74 65 73 74 20  ;;     Megatest 
0170: 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20 69  is distributed i
0180: 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74 20  n the hope that 
0190: 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66 75  it will be usefu
01a0: 6c 2c 0a 3b 3b 20 20 20 20 20 62 75 74 20 57 49  l,.;;     but WI
01b0: 54 48 4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e  THOUT ANY WARRAN
01c0: 54 59 3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e  TY; without even
01d0: 20 74 68 65 20 69 6d 70 6c 69 65 64 20 77 61 72   the implied war
01e0: 72 61 6e 74 79 20 6f 66 0a 3b 3b 20 20 20 20 20  ranty of.;;     
01f0: 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20  MERCHANTABILITY 
0200: 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41  or FITNESS FOR A
0210: 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50   PARTICULAR PURP
0220: 4f 53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b 3b  OSE.  See the.;;
0230: 20 20 20 20 20 47 4e 55 20 47 65 6e 65 72 61 6c       GNU General
0240: 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20   Public License 
0250: 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73  for more details
0260: 2e 0a 3b 3b 20 0a 3b 3b 20 20 20 20 20 59 6f 75  ..;; .;;     You
0270: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63   should have rec
0280: 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 20  eived a copy of 
0290: 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20  the GNU General 
02a0: 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b  Public License.;
02b0: 3b 20 20 20 20 20 61 6c 6f 6e 67 20 77 69 74 68  ;     along with
02c0: 20 4d 65 67 61 74 65 73 74 2e 20 20 49 66 20 6e   Megatest.  If n
02d0: 6f 74 2c 20 73 65 65 20 3c 68 74 74 70 3a 2f 2f  ot, see <http://
02e0: 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65  www.gnu.org/lice
02f0: 6e 73 65 73 2f 3e 2e 0a 3b 3b 0a 0a 3b 3b 20 20  nses/>..;;..;;  
0300: 73 74 72 66 74 69 6d 65 28 27 25 6d 2f 25 64 2f  strftime('%m/%d/
0310: 25 59 20 25 48 3a 25 4d 3a 25 53 27 2c 27 6e 6f  %Y %H:%M:%S','no
0320: 77 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 0a  w','localtime').
0330: 0a 28 75 73 65 20 73 72 66 69 2d 31 20 70 6f 73  .(use srfi-1 pos
0340: 69 78 20 72 65 67 65 78 20 73 72 66 69 2d 36 39  ix regex srfi-69
0350: 20 64 69 72 65 63 74 6f 72 79 2d 75 74 69 6c 73   directory-utils
0360: 29 0a 0a 28 64 65 63 6c 61 72 65 20 28 75 6e 69  )..(declare (uni
0370: 74 20 65 7a 73 74 65 70 73 29 29 0a 28 64 65 63  t ezsteps)).(dec
0380: 6c 61 72 65 20 28 75 73 65 73 20 64 62 29 29 0a  lare (uses db)).
0390: 28 64 65 63 6c 61 72 65 20 28 75 73 65 73 20 63  (declare (uses c
03a0: 6f 6d 6d 6f 6e 29 29 0a 28 64 65 63 6c 61 72 65  ommon)).(declare
03b0: 20 28 75 73 65 73 20 69 74 65 6d 73 29 29 0a 28   (uses items)).(
03c0: 64 65 63 6c 61 72 65 20 28 75 73 65 73 20 72 75  declare (uses ru
03d0: 6e 63 6f 6e 66 69 67 29 29 0a 3b 3b 20 28 64 65  nconfig)).;; (de
03e0: 63 6c 61 72 65 20 28 75 73 65 73 20 73 64 62 29  clare (uses sdb)
03f0: 29 0a 3b 3b 20 28 64 65 63 6c 61 72 65 20 28 75  ).;; (declare (u
0400: 73 65 73 20 66 69 6c 65 64 62 29 29 0a 0a 28 69  ses filedb))..(i
0410: 6e 63 6c 75 64 65 20 22 63 6f 6d 6d 6f 6e 5f 72  nclude "common_r
0420: 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a 28 69 6e  ecords.scm").(in
0430: 63 6c 75 64 65 20 22 6b 65 79 5f 72 65 63 6f 72  clude "key_recor
0440: 64 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75 64  ds.scm").(includ
0450: 65 20 22 64 62 5f 72 65 63 6f 72 64 73 2e 73 63  e "db_records.sc
0460: 6d 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 72 75  m").(include "ru
0470: 6e 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a  n_records.scm").
0480: 0a 0a 3b 3b 28 72 6d 74 3a 67 65 74 2d 74 65 73  ..;;(rmt:get-tes
0490: 74 2d 69 6e 66 6f 2d 62 79 2d 69 64 20 72 75 6e  t-info-by-id run
04a0: 2d 69 64 20 74 65 73 74 2d 69 64 29 20 2d 3e 20  -id test-id) -> 
04b0: 74 65 73 74 64 61 74 0a 0a 0a 0a 28 64 65 66 69  testdat....(defi
04c0: 6e 65 20 28 65 7a 73 74 65 70 73 3a 72 75 6e 2d  ne (ezsteps:run-
04d0: 66 72 6f 6d 20 74 65 73 74 64 61 74 20 73 74 61  from testdat sta
04e0: 72 74 2d 73 74 65 70 2d 6e 61 6d 65 20 72 75 6e  rt-step-name run
04f0: 2d 6f 6e 65 29 0a 20 20 3b 3b 23 20 54 4f 44 4f  -one).  ;;# TODO
0500: 20 2d 20 72 65 63 61 70 74 75 72 65 20 69 74 65   - recapture ite
0510: 6d 20 76 61 72 69 61 62 6c 65 73 2c 20 64 65 62  m variables, deb
0520: 75 67 20 72 65 70 65 61 74 65 64 20 73 74 65 70  ug repeated step
0530: 20 65 76 61 6c 3b 20 72 65 67 65 6e 20 6c 6f 67   eval; regen log
0540: 70 72 6f 20 66 72 6f 6d 20 74 65 73 74 0a 20 20  pro from test.  
0550: 28 6c 65 74 2a 20 28 28 74 65 73 74 2d 72 75 6e  (let* ((test-run
0560: 2d 64 69 72 20 20 3b 3b 20 28 66 69 6c 65 64 62  -dir  ;; (filedb
0570: 3a 67 65 74 2d 70 61 74 68 20 2a 66 64 62 2a 20  :get-path *fdb* 
0580: 0a 09 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74  ..  (db:test-get
0590: 2d 72 75 6e 64 69 72 20 74 65 73 74 64 61 74 29  -rundir testdat)
05a0: 29 20 3b 3b 20 29 0a 09 20 28 74 65 73 74 63 6f  ) ;; ).. (testco
05b0: 6e 66 69 67 20 20 20 20 28 72 65 61 64 2d 63 6f  nfig    (read-co
05c0: 6e 66 69 67 20 28 63 6f 6e 63 20 74 65 73 74 2d  nfig (conc test-
05d0: 72 75 6e 2d 64 69 72 20 22 2f 74 65 73 74 63 6f  run-dir "/testco
05e0: 6e 66 69 67 22 29 20 23 66 20 23 74 20 65 6e 76  nfig") #f #t env
05f0: 69 72 6f 6e 2d 70 61 74 74 3a 20 22 70 72 65 2d  iron-patt: "pre-
0600: 6c 61 75 6e 63 68 2d 65 6e 76 2d 76 61 72 73 22  launch-env-vars"
0610: 29 29 0a 09 20 28 65 7a 73 74 65 70 73 6c 73 74  )).. (ezstepslst
0620: 20 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d      (hash-table-
0630: 72 65 66 2f 64 65 66 61 75 6c 74 20 74 65 73 74  ref/default test
0640: 63 6f 6e 66 69 67 20 22 65 7a 73 74 65 70 73 22  config "ezsteps"
0650: 20 27 28 29 29 29 0a 09 20 28 72 75 6e 2d 6d 75   '())).. (run-mu
0660: 74 65 78 20 20 20 20 20 28 6d 61 6b 65 2d 6d 75  tex     (make-mu
0670: 74 65 78 29 29 0a 09 20 28 72 6f 6c 6c 75 70 2d  tex)).. (rollup-
0680: 73 74 61 74 75 73 20 30 29 0a 20 20 20 20 20 20  status 0).      
0690: 20 20 20 28 72 6f 6c 6c 75 70 2d 73 74 61 74 75     (rollup-statu
06a0: 73 2d 73 74 72 69 6e 67 20 23 66 29 0a 20 20 20  s-string #f).   
06b0: 20 20 20 20 20 20 28 72 6f 6c 6c 75 70 2d 73 74        (rollup-st
06c0: 61 74 75 73 2d 73 79 6d 20 23 66 29 0a 09 20 28  atus-sym #f).. (
06d0: 65 78 69 74 2d 69 6e 66 6f 20 20 20 20 20 28 76  exit-info     (v
06e0: 65 63 74 6f 72 20 23 74 20 23 74 20 23 74 29 29  ector #t #t #t))
06f0: 0a 09 20 28 74 65 73 74 2d 69 64 20 20 20 20 20  .. (test-id     
0700: 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69    (db:test-get-i
0710: 64 20 74 65 73 74 64 61 74 29 29 0a 09 20 28 72  d testdat)).. (r
0720: 75 6e 2d 69 64 20 20 20 20 20 20 20 20 28 64 62  un-id        (db
0730: 3a 74 65 73 74 2d 67 65 74 2d 72 75 6e 5f 69 64  :test-get-run_id
0740: 20 74 65 73 74 64 61 74 29 29 0a 09 20 28 74 65   testdat)).. (te
0750: 73 74 2d 6e 61 6d 65 20 20 20 20 20 28 64 62 3a  st-name     (db:
0760: 74 65 73 74 2d 67 65 74 2d 74 65 73 74 6e 61 6d  test-get-testnam
0770: 65 20 74 65 73 74 64 61 74 29 29 0a 09 20 28 6b  e testdat)).. (k
0780: 69 6c 6c 2d 6a 6f 62 20 20 20 20 20 20 23 66 29  ill-job      #f)
0790: 29 20 3b 3b 20 66 6f 72 20 66 75 74 75 72 65 20  ) ;; for future 
07a0: 75 73 65 20 28 6f 6e 20 72 65 2d 66 61 63 74 6f  use (on re-facto
07b0: 72 69 6e 67 20 77 69 74 68 20 6c 61 75 6e 63 68  ring with launch
07c0: 2e 73 63 6d 20 63 6f 64 65 0a 0a 20 20 20 20 3b  .scm code..    ;
07d0: 3b 20 6b 65 65 70 20 74 72 79 69 6e 67 20 74 69  ; keep trying ti
07e0: 6c 6c 20 4e 46 53 20 64 65 69 67 6e 73 20 74 6f  ll NFS deigns to
07f0: 20 70 6f 70 75 6c 61 74 65 20 74 65 73 74 20 72   populate test r
0800: 75 6e 20 64 69 72 20 6f 6e 20 74 68 69 73 20 68  un dir on this h
0810: 6f 73 74 0a 20 20 20 20 28 6c 65 74 20 6c 6f 6f  ost.    (let loo
0820: 70 20 28 28 63 6f 75 6e 74 20 35 29 29 0a 20 20  p ((count 5)).  
0830: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 63 6f      (if (not (co
0840: 6d 6d 6f 6e 3a 66 69 6c 65 2d 65 78 69 73 74 73  mmon:file-exists
0850: 3f 20 74 65 73 74 2d 72 75 6e 2d 64 69 72 29 29  ? test-run-dir))
0860: 0a 09 20 20 3b 3b 28 70 75 73 68 2d 64 69 72 65  ..  ;;(push-dire
0870: 63 74 6f 72 79 20 74 65 73 74 2d 72 75 6e 2d 64  ctory test-run-d
0880: 69 72 29 0a 09 20 20 28 69 66 20 28 3e 20 63 6f  ir)..  (if (> co
0890: 75 6e 74 20 30 29 0a 09 20 20 20 20 20 20 28 62  unt 0)..      (b
08a0: 65 67 69 6e 0a 09 09 28 64 65 62 75 67 3a 70 72  egin...(debug:pr
08b0: 69 6e 74 20 30 20 2a 64 65 66 61 75 6c 74 2d 6c  int 0 *default-l
08c0: 6f 67 2d 70 6f 72 74 2a 20 22 57 41 52 4e 49 4e  og-port* "WARNIN
08d0: 47 3a 20 65 7a 73 74 65 70 73 20 61 74 74 65 6d  G: ezsteps attem
08e0: 70 74 69 6e 67 20 74 6f 20 72 75 6e 20 62 75 74  pting to run but
08f0: 20 74 65 73 74 20 72 75 6e 20 64 69 72 65 63 74   test run direct
0900: 6f 72 79 20 22 20 74 65 73 74 2d 72 75 6e 2d 64  ory " test-run-d
0910: 69 72 20 22 20 69 73 20 6e 6f 74 20 74 68 65 72  ir " is not ther
0920: 65 2e 20 57 61 69 74 69 6e 67 20 61 6e 64 20 74  e. Waiting and t
0930: 72 79 69 6e 67 20 61 67 61 69 6e 20 22 20 63 6f  rying again " co
0940: 75 6e 74 20 22 20 6d 6f 72 65 20 74 69 6d 65 73  unt " more times
0950: 22 29 0a 09 09 28 73 6c 65 65 70 20 33 29 0a 09  ")...(sleep 3)..
0960: 09 28 6c 6f 6f 70 20 28 2d 20 63 6f 75 6e 74 20  .(loop (- count 
0970: 31 29 29 29 29 29 29 0a 20 20 20 20 0a 20 20 20  1)))))).    .   
0980: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e   (debug:print-in
0990: 66 6f 20 30 20 2a 64 65 66 61 75 6c 74 2d 6c 6f  fo 0 *default-lo
09a0: 67 2d 70 6f 72 74 2a 20 22 52 75 6e 6e 69 6e 67  g-port* "Running
09b0: 20 69 6e 20 64 69 72 65 63 74 6f 72 79 20 22 20   in directory " 
09c0: 74 65 73 74 2d 72 75 6e 2d 64 69 72 29 0a 20 20  test-run-dir).  
09d0: 20 20 28 69 66 20 28 6e 6f 74 20 28 63 6f 6d 6d    (if (not (comm
09e0: 6f 6e 3a 66 69 6c 65 2d 65 78 69 73 74 73 3f 20  on:file-exists? 
09f0: 22 2e 65 7a 73 74 65 70 73 22 29 29 28 63 72 65  ".ezsteps"))(cre
0a00: 61 74 65 2d 64 69 72 65 63 74 6f 72 79 20 22 2e  ate-directory ".
0a10: 65 7a 73 74 65 70 73 22 29 29 0a 20 20 20 20 3b  ezsteps")).    ;
0a20: 3b 20 69 66 20 65 7a 73 74 65 70 73 20 77 61 73  ; if ezsteps was
0a30: 20 64 65 66 69 6e 65 64 20 74 68 65 6e 20 77 65   defined then we
0a40: 20 61 72 65 20 73 75 72 65 20 74 6f 20 68 61 76   are sure to hav
0a50: 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 73  e at least one s
0a60: 74 65 70 20 62 75 74 20 63 68 65 63 6b 20 61 6e  tep but check an
0a70: 79 77 61 79 0a 20 20 20 20 0a 20 20 20 20 28 69  yway.    .    (i
0a80: 66 20 28 6e 6f 74 20 28 3e 20 28 6c 65 6e 67 74  f (not (> (lengt
0a90: 68 20 65 7a 73 74 65 70 73 6c 73 74 29 20 30 29  h ezstepslst) 0)
0aa0: 29 0a 09 28 6d 65 73 73 61 67 65 2d 77 69 6e 64  )..(message-wind
0ab0: 6f 77 20 22 45 52 52 4f 52 3a 20 59 6f 75 20 63  ow "ERROR: You c
0ac0: 61 6e 20 6f 6e 6c 79 20 72 65 2d 72 75 6e 20 73  an only re-run s
0ad0: 74 65 70 73 20 64 65 66 69 6e 65 64 20 76 69 61  teps defined via
0ae0: 20 65 7a 73 74 65 70 73 22 29 0a 09 28 62 65 67   ezsteps")..(beg
0af0: 69 6e 0a 09 20 20 28 6c 65 74 20 6c 6f 6f 70 20  in..  (let loop 
0b00: 28 28 65 7a 73 74 65 70 20 20 20 28 63 61 72 20  ((ezstep   (car 
0b10: 65 7a 73 74 65 70 73 6c 73 74 29 29 0a 09 09 20  ezstepslst))... 
0b20: 20 20 20 20 28 74 61 6c 20 20 20 20 20 20 28 63      (tal      (c
0b30: 64 72 20 65 7a 73 74 65 70 73 6c 73 74 29 29 0a  dr ezstepslst)).
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b50: 20 20 20 20 20 28 73 74 61 74 75 73 2d 73 79 6d       (status-sym
0b60: 2d 73 6f 2d 66 61 72 20 27 70 61 73 73 29 0a 09  -so-far 'pass)..
0b70: 09 20 20 20 20 20 3b 3b 28 72 75 6e 66 6c 61 67  .     ;;(runflag
0b80: 20 20 23 66 29 0a 20 20 20 20 20 20 20 20 20 20    #f).          
0b90: 20 20 20 20 20 20 20 20 20 20 20 28 73 61 77 2d             (saw-
0ba0: 73 74 61 72 74 2d 73 74 65 70 2d 6e 61 6d 65 20  start-step-name 
0bb0: 23 66 29 29 20 3b 3b 20 66 6c 61 67 20 75 73 65  #f)) ;; flag use
0bc0: 64 20 74 6f 20 73 6b 69 70 20 73 74 65 70 73 20  d to skip steps 
0bd0: 77 68 65 6e 20 6e 6f 74 20 73 74 61 72 74 69 6e  when not startin
0be0: 67 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  g at the beginni
0bf0: 6e 67 0a 09 20 20 20 20 28 69 66 20 28 76 65 63  ng..    (if (vec
0c00: 74 6f 72 2d 72 65 66 20 65 78 69 74 2d 69 6e 66  tor-ref exit-inf
0c10: 6f 20 31 29 0a 09 09 28 6c 65 74 2a 20 28 28 73  o 1)...(let* ((s
0c20: 74 65 70 6e 61 6d 65 20 20 20 20 28 63 61 72 20  tepname    (car 
0c30: 65 7a 73 74 65 70 29 29 20 20 3b 3b 20 64 6f 20  ezstep))  ;; do 
0c40: 73 74 75 66 66 20 74 6f 20 72 75 6e 20 74 68 65  stuff to run the
0c50: 20 73 74 65 70 0a 20 20 20 20 20 20 20 20 20 20   step.          
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f               (lo
0c70: 67 70 72 6f 2d 75 73 65 64 20 28 63 6f 6d 6d 6f  gpro-used (commo
0c80: 6e 3a 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 28  n:file-exists? (
0c90: 63 6f 6e 63 20 74 65 73 74 2d 72 75 6e 2d 64 69  conc test-run-di
0ca0: 72 20 22 2f 22 20 73 74 65 70 6e 61 6d 65 20 22  r "/" stepname "
0cb0: 2e 6c 6f 67 70 72 6f 22 29 29 29 0a 09 09 20 20  .logpro")))...  
0cc0: 20 20 20 20 20 28 73 74 65 70 69 6e 66 6f 20 20       (stepinfo  
0cd0: 20 20 28 63 61 64 72 20 65 7a 73 74 65 70 29 29    (cadr ezstep))
0ce0: 0a 09 09 20 20 20 20 20 20 20 28 73 74 65 70 70  ...       (stepp
0cf0: 61 72 74 73 20 20 20 28 73 74 72 69 6e 67 2d 6d  arts   (string-m
0d00: 61 74 63 68 20 28 72 65 67 65 78 70 20 22 5e 28  atch (regexp "^(
0d10: 5c 5c 7b 28 5b 5e 5c 5c 7d 5d 2a 29 5c 5c 7d 5c  \\{([^\\}]*)\\}\
0d20: 5c 73 2a 7c 29 28 2e 2a 29 24 22 29 20 73 74 65  \s*|)(.*)$") ste
0d30: 70 69 6e 66 6f 29 29 0a 09 09 20 20 20 20 20 20  pinfo))...      
0d40: 20 28 73 74 65 70 70 61 72 6d 73 20 20 20 28 6c   (stepparms   (l
0d50: 69 73 74 2d 72 65 66 20 73 74 65 70 70 61 72 74  ist-ref steppart
0d60: 73 20 32 29 29 20 3b 3b 20 66 6f 72 20 66 75 74  s 2)) ;; for fut
0d70: 75 72 65 20 75 73 65 2c 20 7b 56 41 52 3d 31 2c  ure use, {VAR=1,
0d80: 32 2c 33 7d 2c 20 72 75 6e 20 73 74 65 70 20 66  2,3}, run step f
0d90: 6f 72 20 65 61 63 68 20 0a 09 09 20 20 20 20 20  or each ...     
0da0: 20 20 28 73 74 65 70 63 6d 64 20 20 20 20 20 28    (stepcmd     (
0db0: 6c 69 73 74 2d 72 65 66 20 73 74 65 70 70 61 72  list-ref steppar
0dc0: 74 73 20 33 29 29 0a 09 09 20 20 20 20 20 20 20  ts 3))...       
0dd0: 28 73 63 72 69 70 74 20 20 20 20 20 20 28 63 6f  (script      (co
0de0: 6e 63 20 22 6d 74 5f 65 7a 73 74 65 70 20 27 22  nc "mt_ezstep '"
0df0: 74 65 73 74 2d 72 75 6e 2d 64 69 72 22 27 20 27  test-run-dir"' '
0e00: 22 73 74 65 70 6e 61 6d 65 22 27 20 27 22 73 74  "stepname"' '"st
0e10: 65 70 63 6d 64 22 27 22 29 29 20 3b 3b 20 63 61  epcmd"'")) ;; ca
0e20: 6c 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 75  ll the command u
0e30: 73 69 6e 67 20 6d 74 5f 65 7a 73 74 65 70 0a 20  sing mt_ezstep. 
0e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e50: 20 20 20 20 20 20 28 73 61 77 2d 73 74 61 72 74        (saw-start
0e60: 2d 73 74 65 70 2d 6e 61 6d 65 2d 6e 65 78 74 20  -step-name-next 
0e70: 28 6f 72 20 73 61 77 2d 73 74 61 72 74 2d 73 74  (or saw-start-st
0e80: 65 70 2d 6e 61 6d 65 20 28 65 71 75 61 6c 3f 20  ep-name (equal? 
0e90: 73 74 65 70 6e 61 6d 65 20 73 74 61 72 74 2d 73  stepname start-s
0ea0: 74 65 70 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20  tep-name))).    
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 20 20 28 70 72 6f 63 65 65 64 2d 77 69 74 68     (proceed-with
0ed0: 2d 74 68 69 73 2d 73 74 65 70 0a 20 20 20 20 20  -this-step.     
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ef0: 20 20 20 28 6f 72 20 28 6e 6f 74 20 73 74 61 72     (or (not star
0f00: 74 2d 73 74 65 70 2d 6e 61 6d 65 29 0a 20 20 20  t-step-name).   
0f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f20: 20 20 20 20 20 20 20 20 20 28 65 71 75 61 6c 3f           (equal?
0f30: 20 73 74 65 70 6e 61 6d 65 20 73 74 61 72 74 2d   stepname start-
0f40: 73 74 65 70 2d 6e 61 6d 65 29 0a 20 20 20 20 20  step-name).     
0f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f60: 20 20 20 20 20 20 20 28 61 6e 64 20 73 61 77 2d         (and saw-
0f70: 73 74 61 72 74 2d 73 74 65 70 2d 6e 61 6d 65 20  start-step-name 
0f80: 28 6e 6f 74 20 72 75 6e 2d 6f 6e 65 29 29 0a 20  (not run-one)). 
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fa0: 20 20 20 20 20 20 20 20 20 20 20 73 61 77 2d 73             saw-s
0fb0: 74 61 72 74 2d 73 74 65 70 2d 6e 61 6d 65 2d 6e  tart-step-name-n
0fc0: 65 78 74 0a 20 20 20 20 20 20 20 20 20 20 20 20  ext.            
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 28 61 6e 64 20 73 74 61 72 74 2d 73 74 65 70 2d  (and start-step-
0ff0: 6e 61 6d 65 20 28 65 71 75 61 6c 3f 20 73 74 65  name (equal? ste
1000: 70 6e 61 6d 65 20 73 74 61 72 74 2d 73 74 65 70  pname start-step
1010: 2d 6e 61 6d 65 29 29 29 29 29 0a 20 20 20 20 20  -name))))).     
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f               (co
1030: 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd.             
1040: 20 20 20 20 20 20 28 28 61 6e 64 20 28 6e 6f 74        ((and (not
1050: 20 70 72 6f 63 65 65 64 2d 77 69 74 68 2d 74 68   proceed-with-th
1060: 69 73 2d 73 74 65 70 29 20 28 6e 75 6c 6c 3f 20  is-step) (null? 
1070: 74 61 6c 29 29 0a 20 20 20 20 20 20 20 20 20 20  tal)).          
1080: 20 20 20 20 20 20 20 20 20 20 27 64 6f 6e 65 29            'done)
1090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10a0: 20 20 20 20 28 28 6e 6f 74 20 70 72 6f 63 65 65      ((not procee
10b0: 64 2d 77 69 74 68 2d 74 68 69 73 2d 73 74 65 70  d-with-this-step
10c0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
10d0: 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 63          (loop (c
10e0: 61 72 20 74 61 6c 29 0a 20 20 20 20 20 20 20 20  ar tal).        
10f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1100: 20 20 20 20 28 63 64 72 20 74 61 6c 29 0a 20 20      (cdr tal).  
1110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1120: 20 20 20 20 20 20 20 20 20 20 73 74 61 74 75 73            status
1130: 2d 73 79 6d 2d 73 6f 2d 66 61 72 0a 20 20 20 20  -sym-so-far.    
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1150: 20 20 20 20 20 20 20 20 73 61 77 2d 73 74 61 72          saw-star
1160: 74 2d 73 74 65 70 2d 6e 61 6d 65 2d 6e 65 78 74  t-step-name-next
1170: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
1180: 20 20 20 20 20 20 28 65 6c 73 65 0a 09 09 20 20        (else...  
1190: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34    (debug:print 4
11a0: 20 2a 64 65 66 61 75 6c 74 2d 6c 6f 67 2d 70 6f   *default-log-po
11b0: 72 74 2a 20 22 65 7a 73 74 65 70 73 3a 5c 6e 20  rt* "ezsteps:\n 
11c0: 73 74 65 70 6e 61 6d 65 3a 20 22 20 73 74 65 70  stepname: " step
11d0: 6e 61 6d 65 20 22 20 73 74 65 70 69 6e 66 6f 3a  name " stepinfo:
11e0: 20 22 20 73 74 65 70 69 6e 66 6f 20 22 20 73 74   " stepinfo " st
11f0: 65 70 70 61 72 74 73 3a 20 22 20 73 74 65 70 70  epparts: " stepp
1200: 61 72 74 73 0a 09 09 09 20 20 20 20 20 20 20 20  arts....        
1210: 20 22 20 73 74 65 70 70 61 72 6d 73 3a 20 22 20   " stepparms: " 
1220: 73 74 65 70 70 61 72 6d 73 20 22 20 73 74 65 70  stepparms " step
1230: 63 6d 64 3a 20 22 20 73 74 65 70 63 6d 64 29 0a  cmd: " stepcmd).
1240: 09 09 20 20 20 20 28 64 65 62 75 67 3a 70 72 69  ..    (debug:pri
1250: 6e 74 20 34 20 2a 64 65 66 61 75 6c 74 2d 6c 6f  nt 4 *default-lo
1260: 67 2d 70 6f 72 74 2a 20 22 73 63 72 69 70 74 3a  g-port* "script:
1270: 20 22 20 73 63 72 69 70 74 29 0a 09 09 20 20 20   " script)...   
1280: 20 28 72 6d 74 3a 74 65 73 74 73 74 65 70 2d 73   (rmt:teststep-s
1290: 65 74 2d 73 74 61 74 75 73 21 20 72 75 6e 2d 69  et-status! run-i
12a0: 64 20 74 65 73 74 2d 69 64 20 73 74 65 70 6e 61  d test-id stepna
12b0: 6d 65 20 22 73 74 61 72 74 22 20 22 2d 22 20 23  me "start" "-" #
12c0: 66 20 23 66 29 0a 0a 09 09 20 20 20 20 3b 3b 20  f #f)....    ;; 
12d0: 6e 6f 77 20 6c 61 75 6e 63 68 20 74 68 65 20 73  now launch the s
12e0: 63 72 69 70 74 0a 09 09 20 20 20 20 28 6c 65 74  cript...    (let
12f0: 20 28 28 70 69 64 20 28 70 72 6f 63 65 73 73 2d   ((pid (process-
1300: 72 75 6e 20 73 63 72 69 70 74 29 29 29 0a 09 09  run script)))...
1310: 20 20 20 20 20 20 28 6c 65 74 20 70 72 6f 63 65        (let proce
1320: 73 73 6c 6f 6f 70 20 28 28 69 20 30 29 29 0a 09  ssloop ((i 0))..
1330: 09 20 20 20 20 20 20 20 20 28 6c 65 74 2d 76 61  .        (let-va
1340: 6c 75 65 73 20 28 28 28 70 69 64 2d 76 61 6c 20  lues (((pid-val 
1350: 65 78 69 74 2d 73 74 61 74 75 73 20 65 78 69 74  exit-status exit
1360: 2d 63 6f 64 65 29 28 70 72 6f 63 65 73 73 2d 77  -code)(process-w
1370: 61 69 74 20 70 69 64 20 23 74 29 29 29 0a 09 09  ait pid #t)))...
1380: 09 20 20 28 6d 75 74 65 78 2d 6c 6f 63 6b 21 20  .  (mutex-lock! 
1390: 72 75 6e 2d 6d 75 74 65 78 29 0a 09 09 09 20 20  run-mutex)....  
13a0: 28 76 65 63 74 6f 72 2d 73 65 74 21 20 65 78 69  (vector-set! exi
13b0: 74 2d 69 6e 66 6f 20 30 20 70 69 64 29 0a 09 09  t-info 0 pid)...
13c0: 09 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20  .  (vector-set! 
13d0: 65 78 69 74 2d 69 6e 66 6f 20 31 20 65 78 69 74  exit-info 1 exit
13e0: 2d 73 74 61 74 75 73 29 0a 09 09 09 20 20 28 76  -status)....  (v
13f0: 65 63 74 6f 72 2d 73 65 74 21 20 65 78 69 74 2d  ector-set! exit-
1400: 69 6e 66 6f 20 32 20 65 78 69 74 2d 63 6f 64 65  info 2 exit-code
1410: 29 0a 09 09 09 20 20 28 6d 75 74 65 78 2d 75 6e  )....  (mutex-un
1420: 6c 6f 63 6b 21 20 72 75 6e 2d 6d 75 74 65 78 29  lock! run-mutex)
1430: 0a 09 09 09 20 20 28 69 66 20 28 65 71 3f 20 70  ....  (if (eq? p
1440: 69 64 2d 76 61 6c 20 30 29 0a 09 09 09 20 20 20  id-val 0)....   
1450: 20 20 20 28 62 65 67 69 6e 0a 09 09 09 20 20 20     (begin....   
1460: 20 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65       (thread-sle
1470: 65 70 21 20 31 29 0a 09 09 09 20 20 20 20 20 20  ep! 1)....      
1480: 20 20 28 70 72 6f 63 65 73 73 6c 6f 6f 70 20 28    (processloop (
1490: 2b 20 69 20 31 29 29 29 29 0a 09 09 09 20 20 29  + i 1))))....  )
14a0: 29 0a 09 09 20 20 20 20 20 20 28 6c 65 74 20 28  )...      (let (
14b0: 28 65 78 69 6e 66 6f 20 28 76 65 63 74 6f 72 2d  (exinfo (vector-
14c0: 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 32 29  ref exit-info 2)
14d0: 29 0a 09 09 09 20 20 20 20 28 6c 6f 67 66 6e 61  )....    (logfna
14e0: 20 28 69 66 20 6c 6f 67 70 72 6f 2d 75 73 65 64   (if logpro-used
14f0: 20 28 63 6f 6e 63 20 73 74 65 70 6e 61 6d 65 20   (conc stepname 
1500: 22 2e 68 74 6d 6c 22 29 20 22 22 29 29 29 0a 09  ".html") "")))..
1510: 09 20 20 20 20 20 20 20 20 28 72 6d 74 3a 74 65  .        (rmt:te
1520: 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 75  ststep-set-statu
1530: 73 21 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 69  s! run-id test-i
1540: 64 20 73 74 65 70 6e 61 6d 65 20 22 65 6e 64 22  d stepname "end"
1550: 20 65 78 69 6e 66 6f 20 23 66 20 6c 6f 67 66 6e   exinfo #f logfn
1560: 61 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  a)).            
1570: 20 20 20 20 20 20 20 20 20 20 0a 09 09 20 20 20            ...   
1580: 20 20 20 28 69 66 20 6c 6f 67 70 72 6f 2d 75 73     (if logpro-us
1590: 65 64 0a 09 09 09 20 20 28 72 6d 74 3a 74 65 73  ed....  (rmt:tes
15a0: 74 2d 73 65 74 2d 6c 6f 67 21 20 72 75 6e 2d 69  t-set-log! run-i
15b0: 64 20 74 65 73 74 2d 69 64 20 28 63 6f 6e 63 20  d test-id (conc 
15c0: 73 74 65 70 6e 61 6d 65 20 22 2e 68 74 6d 6c 22  stepname ".html"
15d0: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))).            
15e0: 20 20 20 20 20 20 20 20 20 20 0a 09 09 20 20 20            ...   
15f0: 20 20 20 3b 3b 20 73 65 74 20 74 68 65 20 74 65     ;; set the te
1600: 73 74 20 66 69 6e 61 6c 20 73 74 61 74 75 73 0a  st final status.
1610: 09 09 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28  ..      (let* ((
1620: 74 68 69 73 2d 73 74 65 70 2d 73 74 61 74 75 73  this-step-status
1630: 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20        (cond.    
1640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1670: 20 28 6c 6f 67 70 72 6f 2d 75 73 65 64 0a 20 20   (logpro-used.  
1680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b0: 20 20 20 20 28 63 6f 6d 6d 6f 6e 3a 6c 6f 67 70      (common:logp
16c0: 72 6f 2d 65 78 69 74 2d 63 6f 64 65 2d 3e 73 74  ro-exit-code->st
16d0: 61 74 75 73 2d 73 79 6d 20 28 76 65 63 74 6f 72  atus-sym (vector
16e0: 2d 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 32  -ref exit-info 2
16f0: 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20  )))......       
1700: 20 20 20 20 20 20 28 28 65 71 3f 20 28 76 65 63        ((eq? (vec
1710: 74 6f 72 2d 72 65 66 20 65 78 69 74 2d 69 6e 66  tor-ref exit-inf
1720: 6f 20 32 29 20 30 29 0a 20 20 20 20 20 20 20 20  o 2) 0).        
1730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 70                'p
1760: 61 73 73 29 0a 09 09 09 09 09 20 20 20 20 20 20  ass)......      
1770: 20 20 20 20 20 20 20 28 65 6c 73 65 0a 20 20 20         (else.   
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b0: 20 20 20 27 66 61 69 6c 29 29 29 0a 09 09 09 20     'fail))).... 
17c0: 20 20 20 20 28 6f 76 65 72 61 6c 6c 2d 73 74 61      (overall-sta
17d0: 74 75 73 2d 73 79 6d 20 20 20 20 28 63 6f 6d 6d  tus-sym    (comm
17e0: 6f 6e 3a 77 6f 72 73 65 2d 73 74 61 74 75 73 2d  on:worse-status-
17f0: 73 79 6d 20 74 68 69 73 2d 73 74 65 70 2d 73 74  sym this-step-st
1800: 61 74 75 73 20 73 74 61 74 75 73 2d 73 79 6d 2d  atus status-sym-
1810: 73 6f 2d 66 61 72 29 29 0a 20 20 20 20 20 20 20  so-far)).       
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 20 20 20 20 20 28 6f 76 65 72 61 6c 6c 2d 73        (overall-s
1840: 74 61 74 75 73 2d 73 74 72 69 6e 67 20 28 73 74  tatus-string (st
1850: 61 74 75 73 2d 73 79 6d 2d 3e 73 74 72 69 6e 67  atus-sym->string
1860: 20 6f 76 65 72 61 6c 6c 2d 73 74 61 74 75 73 2d   overall-status-
1870: 73 79 6d 29 29 29 0a 09 09 20 20 20 20 20 20 20  sym)))...       
1880: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20   (debug:print 4 
1890: 2a 64 65 66 61 75 6c 74 2d 6c 6f 67 2d 70 6f 72  *default-log-por
18a0: 74 2a 20 22 45 78 69 74 20 76 61 6c 75 65 20 72  t* "Exit value r
18b0: 65 63 65 69 76 65 64 3a 20 22 20 28 76 65 63 74  eceived: " (vect
18c0: 6f 72 2d 72 65 66 20 65 78 69 74 2d 69 6e 66 6f  or-ref exit-info
18d0: 20 32 29 20 22 20 6c 6f 67 70 72 6f 2d 75 73 65   2) " logpro-use
18e0: 64 3a 20 22 20 6c 6f 67 70 72 6f 2d 75 73 65 64  d: " logpro-used
18f0: 20 0a 09 09 09 09 20 20 20 20 20 22 20 74 68 69   .....     " thi
1900: 73 2d 73 74 65 70 2d 73 74 61 74 75 73 3a 20 22  s-step-status: "
1910: 20 74 68 69 73 2d 73 74 65 70 2d 73 74 61 74 75   this-step-statu
1920: 73 20 22 20 6f 76 65 72 61 6c 6c 2d 73 74 61 74  s " overall-stat
1930: 75 73 3a 20 22 20 6f 76 65 72 61 6c 6c 2d 73 74  us: " overall-st
1940: 61 74 75 73 2d 73 79 6d 29 20 0a 09 09 20 20 20  atus-sym) ...   
1950: 20 20 20 20 20 3b 3b 22 20 6e 65 78 74 2d 73 74       ;;" next-st
1960: 61 74 75 73 3a 20 22 20 6e 65 78 74 2d 73 74 61  atus: " next-sta
1970: 74 75 73 20 22 20 72 6f 6c 6c 75 70 2d 73 74 61  tus " rollup-sta
1980: 74 75 73 3a 20 22 20 72 6f 6c 6c 75 70 2d 73 74  tus: " rollup-st
1990: 61 74 75 73 29 0a 20 20 20 20 20 20 20 20 20 20  atus).          
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
19b0: 65 74 21 20 72 6f 6c 6c 75 70 2d 73 74 61 74 75  et! rollup-statu
19c0: 73 2d 73 74 72 69 6e 67 20 6f 76 65 72 61 6c 6c  s-string overall
19d0: 2d 73 74 61 74 75 73 2d 73 74 72 69 6e 67 29 0a  -status-string).
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f0: 20 20 20 20 20 20 20 20 28 73 65 74 21 20 72 6f          (set! ro
1a00: 6c 6c 75 70 2d 73 74 61 74 75 73 2d 73 79 6d 20  llup-status-sym 
1a10: 6f 76 65 72 61 6c 6c 2d 73 74 61 74 75 73 2d 73  overall-status-s
1a20: 79 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ym).            
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 65 73              (tes
1a40: 74 73 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74  ts:test-set-stat
1a50: 75 73 21 20 72 75 6e 2d 69 64 20 74 65 73 74 2d  us! run-id test-
1a60: 69 64 20 22 52 55 4e 4e 49 4e 47 22 20 6f 76 65  id "RUNNING" ove
1a70: 72 61 6c 6c 2d 73 74 61 74 75 73 2d 73 74 72 69  rall-status-stri
1a80: 6e 67 20 23 66 20 23 66 29 29 29 0a 0a 20 20 20  ng #f #f)))..   
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa0: 20 28 69 66 20 28 61 6e 64 0a 20 20 20 20 20 20   (if (and.      
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac0: 20 20 20 28 6e 6f 74 20 72 75 6e 2d 6f 6e 65 29     (not run-one)
1ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ae0: 20 20 20 20 20 20 20 20 20 20 28 63 6f 6d 6d 6f            (commo
1af0: 6e 3a 73 74 65 70 73 2d 63 61 6e 2d 70 72 6f 63  n:steps-can-proc
1b00: 65 65 64 2d 67 69 76 65 6e 2d 73 74 61 74 75 73  eed-given-status
1b10: 2d 73 79 6d 20 72 6f 6c 6c 75 70 2d 73 74 61 74  -sym rollup-stat
1b20: 75 73 2d 73 79 6d 29 0a 20 20 20 20 20 20 20 20  us-sym).        
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b40: 20 28 6e 6f 74 20 28 6e 75 6c 6c 3f 20 74 61 6c   (not (null? tal
1b50: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))).            
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f              (loo
1b70: 70 20 28 63 61 72 20 74 61 6c 29 0a 20 20 20 20  p (car tal).    
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b90: 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 74            (cdr t
1ba0: 61 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  al).            
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc0: 20 20 72 6f 6c 6c 75 70 2d 73 74 61 74 75 73 2d    rollup-status-
1bd0: 73 79 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20  sym.            
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 20 20 73 61 77 2d 73 74 61 72 74 2d 73 74 65 70    saw-start-step
1c00: 2d 6e 61 6d 65 2d 6e 65 78 74 29 29 29 29 29 0a  -name-next))))).
1c10: 09 09 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34  ..(debug:print 4
1c20: 20 2a 64 65 66 61 75 6c 74 2d 6c 6f 67 2d 70 6f   *default-log-po
1c30: 72 74 2a 20 22 57 41 52 4e 49 4e 47 3a 20 61 20  rt* "WARNING: a 
1c40: 70 72 69 6f 72 20 73 74 65 70 20 66 61 69 6c 65  prior step faile
1c50: 64 2c 20 73 74 6f 70 70 69 6e 67 20 61 74 20 22  d, stopping at "
1c60: 20 65 7a 73 74 65 70 29 29 29 0a 09 20 20 0a 09   ezstep)))..  ..
1c70: 20 20 3b 3b 20 4f 6e 63 65 20 64 6f 6e 65 20 77    ;; Once done w
1c80: 69 74 68 20 73 74 65 70 2f 73 74 65 70 73 20 75  ith step/steps u
1c90: 70 64 61 74 65 20 74 68 65 20 74 65 73 74 20 72  pdate the test r
1ca0: 65 63 6f 72 64 0a 09 20 20 3b 3b 0a 09 20 20 28  ecord..  ;;..  (
1cb0: 6c 65 74 2a 20 28 28 69 74 65 6d 2d 70 61 74 68  let* ((item-path
1cc0: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 74   (db:test-get-it
1cd0: 65 6d 2d 70 61 74 68 20 74 65 73 74 64 61 74 29  em-path testdat)
1ce0: 29 20 3b 3b 20 28 69 74 65 6d 2d 6c 69 73 74 2d  ) ;; (item-list-
1cf0: 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29 29 0a  >path itemdat)).
1d00: 09 09 20 28 74 65 73 74 69 6e 66 6f 20 20 28 72  .. (testinfo  (r
1d10: 6d 74 3a 67 65 74 2d 74 65 73 74 69 6e 66 6f 2d  mt:get-testinfo-
1d20: 73 74 61 74 65 2d 73 74 61 74 75 73 20 72 75 6e  state-status run
1d30: 2d 69 64 20 74 65 73 74 2d 69 64 29 29 29 20 3b  -id test-id))) ;
1d40: 3b 20 72 65 66 72 65 73 68 20 74 68 65 20 74 65  ; refresh the te
1d50: 73 74 64 61 74 2c 20 63 61 6c 6c 20 69 74 20 69  stdat, call it i
1d60: 74 65 6d 69 6e 66 6f 20 69 6e 20 63 61 73 65 20  teminfo in case 
1d70: 6e 65 65 64 20 70 72 65 76 2f 63 75 72 72 0a 09  need prev/curr..
1d80: 20 20 20 20 3b 3b 20 41 6d 20 49 20 63 6f 6d 70      ;; Am I comp
1d90: 6c 65 74 65 64 3f 0a 09 20 20 20 20 28 69 66 20  leted?..    (if 
1da0: 28 65 71 75 61 6c 3f 20 28 64 62 3a 74 65 73 74  (equal? (db:test
1db0: 2d 67 65 74 2d 73 74 61 74 65 20 74 65 73 74 69  -get-state testi
1dc0: 6e 66 6f 29 20 22 52 55 4e 4e 49 4e 47 22 29 20  nfo) "RUNNING") 
1dd0: 3b 3b 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20  ;; (not (equal? 
1de0: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73 74 61  (db:test-get-sta
1df0: 74 65 20 74 65 73 74 69 6e 66 6f 29 20 22 43 4f  te testinfo) "CO
1e00: 4d 50 4c 45 54 45 44 22 29 29 0a 09 09 28 6c 65  MPLETED"))...(le
1e10: 74 20 28 28 6e 65 77 2d 73 74 61 74 65 20 20 28  t ((new-state  (
1e20: 69 66 20 6b 69 6c 6c 2d 6a 6f 62 20 22 4b 49 4c  if kill-job "KIL
1e30: 4c 45 44 22 20 22 43 4f 4d 50 4c 45 54 45 44 22  LED" "COMPLETED"
1e40: 29 20 3b 3b 20 28 69 66 20 28 65 71 3f 20 28 76  ) ;; (if (eq? (v
1e50: 65 63 74 6f 72 2d 72 65 66 20 65 78 69 74 2d 69  ector-ref exit-i
1e60: 6e 66 6f 20 32 29 20 30 29 20 3b 3b 20 65 78 69  nfo 2) 0) ;; exi
1e70: 74 65 64 20 77 69 74 68 20 22 67 6f 6f 64 22 20  ted with "good" 
1e80: 73 74 61 74 75 73 0a 09 09 09 09 20 20 3b 3b 20  status.....  ;; 
1e90: 22 43 4f 4d 50 4c 45 54 45 44 22 0a 09 09 09 09  "COMPLETED".....
1ea0: 20 20 3b 3b 20 28 64 62 3a 74 65 73 74 2d 67 65    ;; (db:test-ge
1eb0: 74 2d 73 74 61 74 65 20 74 65 73 74 69 6e 66 6f  t-state testinfo
1ec0: 29 29 29 20 20 20 3b 3b 20 65 6c 73 65 20 70 72  )))   ;; else pr
1ed0: 65 73 65 76 65 20 74 68 65 20 73 74 61 74 65 20  eseve the state 
1ee0: 61 73 20 73 65 74 20 77 69 74 68 69 6e 20 74 68  as set within th
1ef0: 65 20 74 65 73 74 0a 09 09 09 09 20 20 29 0a 20  e test.....  ). 
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f10: 20 20 20 20 20 28 6e 65 77 2d 73 74 61 74 75 73       (new-status
1f20: 20 72 6f 6c 6c 75 70 2d 73 74 61 74 75 73 2d 73   rollup-status-s
1f30: 74 72 69 6e 67 29 0a 20 20 20 20 20 20 20 20 20  tring).         
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 3b               ) ;
1f50: 3b 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73  ; (db:test-get-s
1f60: 74 61 74 75 73 20 74 65 73 74 69 6e 66 6f 29 29  tatus testinfo))
1f70: 29 0a 09 09 20 20 28 64 65 62 75 67 3a 70 72 69  )...  (debug:pri
1f80: 6e 74 2d 69 6e 66 6f 20 32 20 2a 64 65 66 61 75  nt-info 2 *defau
1f90: 6c 74 2d 6c 6f 67 2d 70 6f 72 74 2a 20 22 54 65  lt-log-port* "Te
1fa0: 73 74 20 4e 4f 54 20 6c 6f 67 67 65 64 20 61 73  st NOT logged as
1fb0: 20 43 4f 4d 50 4c 45 54 45 44 2c 20 28 73 74 61   COMPLETED, (sta
1fc0: 74 65 3d 22 20 28 64 62 3a 74 65 73 74 2d 67 65  te=" (db:test-ge
1fd0: 74 2d 73 74 61 74 65 20 74 65 73 74 69 6e 66 6f  t-state testinfo
1fe0: 29 20 22 29 2c 20 75 70 64 61 74 69 6e 67 20 72  ) "), updating r
1ff0: 65 73 75 6c 74 2c 20 72 6f 6c 6c 75 70 2d 73 74  esult, rollup-st
2000: 61 74 75 73 20 69 73 20 22 20 72 6f 6c 6c 75 70  atus is " rollup
2010: 2d 73 74 61 74 75 73 29 0a 09 09 20 20 28 74 65  -status)...  (te
2020: 73 74 73 3a 74 65 73 74 2d 73 65 74 2d 73 74 61  sts:test-set-sta
2030: 74 75 73 21 20 72 75 6e 2d 69 64 20 74 65 73 74  tus! run-id test
2040: 2d 69 64 20 0a 09 09 09 09 09 20 20 6e 65 77 2d  -id ......  new-
2050: 73 74 61 74 65 0a 09 09 09 09 09 20 20 6e 65 77  state......  new
2060: 2d 73 74 61 74 75 73 0a 09 09 09 09 09 20 20 28  -status......  (
2070: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 6d  args:get-arg "-m
2080: 22 29 20 23 66 29 0a 09 09 20 20 3b 3b 20 6e 65  ") #f)...  ;; ne
2090: 65 64 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ed to update the
20a0: 20 74 6f 70 20 74 65 73 74 20 72 65 63 6f 72 64   top test record
20b0: 20 69 66 20 50 41 53 53 20 6f 72 20 46 41 49 4c   if PASS or FAIL
20c0: 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 73   and this is a s
20d0: 75 62 74 65 73 74 0a 09 09 20 20 28 69 66 20 28  ubtest...  (if (
20e0: 6e 6f 74 20 28 65 71 75 61 6c 3f 20 69 74 65 6d  not (equal? item
20f0: 2d 70 61 74 68 20 22 22 29 29 0a 20 20 20 20 20  -path "")).     
2100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2110: 20 28 72 6d 74 3a 73 65 74 2d 73 74 61 74 65 2d   (rmt:set-state-
2120: 73 74 61 74 75 73 2d 61 6e 64 2d 72 6f 6c 6c 2d  status-and-roll-
2130: 75 70 2d 69 74 65 6d 73 20 72 75 6e 2d 69 64 20  up-items run-id 
2140: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70  test-name item-p
2150: 61 74 68 20 6e 65 77 2d 73 74 61 74 65 20 6e 65  ath new-state ne
2160: 77 2d 73 74 61 74 75 73 20 23 66 29 29 29 29 0a  w-status #f)))).
2170: 09 20 20 20 20 3b 3b 20 66 6f 72 20 61 75 74 6f  .    ;; for auto
2180: 6d 61 74 65 64 20 63 72 65 61 74 69 6f 6e 20 6f  mated creation o
2190: 66 20 74 68 65 20 72 6f 6c 6c 75 70 20 68 74 6d  f the rollup htm
21a0: 6c 20 66 69 6c 65 20 74 68 69 73 20 69 73 20 61  l file this is a
21b0: 20 67 6f 6f 64 20 70 6c 61 63 65 2e 2e 2e 0a 09   good place.....
21c0: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 65 71      (if (not (eq
21d0: 75 61 6c 3f 20 69 74 65 6d 2d 70 61 74 68 20 22  ual? item-path "
21e0: 22 29 29 0a 09 20 20 20 20 20 20 28 74 65 73 74  "))..      (test
21f0: 73 3a 73 75 6d 6d 61 72 69 7a 65 2d 69 74 65 6d  s:summarize-item
2200: 73 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 69 64  s run-id test-id
2210: 20 74 65 73 74 2d 6e 61 6d 65 20 23 66 29 29 20   test-name #f)) 
2220: 3b 3b 20 64 6f 6e 27 74 20 66 6f 72 63 65 20 2d  ;; don't force -
2230: 20 6a 75 73 74 20 75 70 64 61 74 65 20 69 66 20   just update if 
2240: 6e 6f 0a 09 20 20 20 20 29 29 29 0a 20 20 20 20  no..    ))).    
2250: 3b 3b 28 70 6f 70 2d 64 69 72 65 63 74 6f 72 79  ;;(pop-directory
2260: 29 0a 20 20 20 20 72 6f 6c 6c 75 70 2d 73 74 61  ).    rollup-sta
2270: 74 75 73 2d 73 74 72 69 6e 67 29 29 0a 0a 28 64  tus-string))..(d
2280: 65 66 69 6e 65 20 28 65 7a 73 74 65 70 73 3a 73  efine (ezsteps:s
2290: 70 61 77 6e 2d 72 75 6e 2d 66 72 6f 6d 20 74 65  pawn-run-from te
22a0: 73 74 64 61 74 20 73 74 61 72 74 2d 73 74 65 70  stdat start-step
22b0: 2d 6e 61 6d 65 20 72 75 6e 2d 6f 6e 65 29 0a 20  -name run-one). 
22c0: 20 28 74 68 72 65 61 64 2d 73 74 61 72 74 21 20   (thread-start! 
22d0: 0a 20 20 20 28 6d 61 6b 65 2d 74 68 72 65 61 64  .   (make-thread
22e0: 0a 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a  .    (lambda ().
22f0: 20 20 20 20 20 20 28 65 7a 73 74 65 70 73 3a 72        (ezsteps:r
2300: 75 6e 2d 66 72 6f 6d 20 74 65 73 74 64 61 74 20  un-from testdat 
2310: 73 74 61 72 74 2d 73 74 65 70 2d 6e 61 6d 65 20  start-step-name 
2320: 72 75 6e 2d 6f 6e 65 29 29 0a 20 20 20 20 28 63  run-one)).    (c
2330: 6f 6e 63 20 22 65 7a 73 74 65 70 20 72 75 6e 20  onc "ezstep run 
2340: 73 69 6e 67 6c 65 20 73 74 65 70 20 22 20 73 74  single step " st
2350: 61 72 74 2d 73 74 65 70 2d 6e 61 6d 65 20 22 20  art-step-name " 
2360: 72 75 6e 2d 6f 6e 65 3d 22 72 75 6e 2d 6f 6e 65  run-one="run-one
2370: 29 29 29 0a 20 20 29 0a 0a                       ))).  )..