Megatest

Hex Artifact Content
Login

Artifact 1850c2555e594724e4dc3af48ffe72583262f917:


0000: 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 32 30 30  ;; Copyright 200
0010: 36 2d 32 30 31 31 2c 20 4d 61 74 74 68 65 77 20  6-2011, Matthew 
0020: 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 20 0a 3b 3b 20  Welland..;; .;; 
0030: 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73   This program is
0040: 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 20   made available 
0050: 75 6e 64 65 72 20 74 68 65 20 47 4e 55 20 47 50  under the GNU GP
0060: 4c 20 76 65 72 73 69 6f 6e 20 32 2e 30 20 6f 72  L version 2.0 or
0070: 0a 3b 3b 20 20 67 72 65 61 74 65 72 2e 20 53 65  .;;  greater. Se
0080: 65 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69  e the accompanyi
0090: 6e 67 20 66 69 6c 65 20 43 4f 50 59 49 4e 47 20  ng file COPYING 
00a0: 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 3b 3b 20  for details..;; 
00b0: 0a 3b 3b 20 20 54 68 69 73 20 70 72 6f 67 72 61  .;;  This progra
00c0: 6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64  m is distributed
00d0: 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52   WITHOUT ANY WAR
00e0: 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 65  RANTY; without e
00f0: 76 65 6e 20 74 68 65 0a 3b 3b 20 20 69 6d 70 6c  ven the.;;  impl
0100: 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 20  ied warranty of 
0110: 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20  MERCHANTABILITY 
0120: 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41  or FITNESS FOR A
0130: 20 50 41 52 54 49 43 55 4c 41 52 0a 3b 3b 20 20   PARTICULAR.;;  
0140: 50 55 52 50 4f 53 45 2e 0a 0a 28 69 6e 63 6c 75  PURPOSE...(inclu
0150: 64 65 20 22 63 6f 6d 6d 6f 6e 2e 73 63 6d 22 29  de "common.scm")
0160: 0a 28 64 65 66 69 6e 65 20 6d 65 67 61 74 65 73  .(define megates
0170: 74 2d 76 65 72 73 69 6f 6e 20 31 2e 30 34 29 0a  t-version 1.04).
0180: 0a 28 64 65 66 69 6e 65 20 68 65 6c 70 20 28 63  .(define help (c
0190: 6f 6e 63 20 22 0a 4d 65 67 61 74 65 73 74 2c 20  onc ".Megatest, 
01a0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74  documentation at
01b0: 20 68 74 74 70 3a 2f 2f 77 77 77 2e 6b 69 61 74   http://www.kiat
01c0: 6f 61 2e 63 6f 6d 2f 66 6f 73 73 69 6c 73 2f 6d  oa.com/fossils/m
01d0: 65 67 61 74 65 73 74 0a 20 20 76 65 72 73 69 6f  egatest.  versio
01e0: 6e 20 22 20 6d 65 67 61 74 65 73 74 2d 76 65 72  n " megatest-ver
01f0: 73 69 6f 6e 20 22 0a 20 20 6c 69 63 65 6e 73 65  sion ".  license
0200: 20 47 50 4c 2c 20 43 6f 70 79 72 69 67 68 74 20   GPL, Copyright 
0210: 4d 61 74 74 20 57 65 6c 6c 61 6e 64 20 32 30 30  Matt Welland 200
0220: 36 2d 32 30 31 31 0a 0a 55 73 61 67 65 3a 20 6d  6-2011..Usage: m
0230: 65 67 61 74 65 73 74 20 5b 6f 70 74 69 6f 6e 73  egatest [options
0240: 5d 0a 20 20 2d 68 20 20 20 20 20 20 20 20 20 20  ].  -h          
0250: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
0260: 69 73 20 68 65 6c 70 0a 0a 50 72 6f 63 65 73 73  is help..Process
0270: 20 61 6e 64 20 74 65 73 74 20 72 75 6e 6e 69 6e   and test runnin
0280: 67 0a 20 20 2d 72 75 6e 61 6c 6c 20 20 20 20 20  g.  -runall     
0290: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 72 75              : ru
02a0: 6e 20 61 6c 6c 20 74 65 73 74 73 20 74 68 61 74  n all tests that
02b0: 20 61 72 65 20 6e 6f 74 20 73 74 61 74 65 20 43   are not state C
02c0: 4f 4d 50 4c 45 54 45 44 20 61 6e 64 20 73 74 61  OMPLETED and sta
02d0: 74 75 73 20 50 41 53 53 2c 20 0a 20 20 20 20 20  tus PASS, .     
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 20 20 43 48 45 43 4b 20 6f 72 20         CHECK or 
0300: 4b 49 4c 4c 45 44 0a 20 20 2d 72 75 6e 74 65 73  KILLED.  -runtes
0310: 74 73 20 74 73 74 31 2c 74 73 74 32 20 2e 2e 2e  ts tst1,tst2 ...
0320: 20 3a 20 72 75 6e 20 74 65 73 74 73 0a 0a 52 75   : run tests..Ru
0330: 6e 20 73 74 61 74 75 73 20 75 70 64 61 74 65 73  n status updates
0340: 20 28 74 68 65 73 65 20 72 65 71 75 69 72 65 20   (these require 
0350: 74 68 61 74 20 79 6f 75 20 61 72 65 20 69 6e 20  that you are in 
0360: 61 20 74 65 73 74 20 64 69 72 65 63 74 6f 72 79  a test directory
0370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0380: 20 20 20 20 20 61 6e 64 20 79 6f 75 20 68 61 76       and you hav
0390: 65 20 73 6f 75 72 63 65 64 20 74 68 65 20 5c 22  e sourced the \"
03a0: 6d 65 67 61 74 65 73 74 2e 63 73 68 5c 22 20 6f  megatest.csh\" o
03b0: 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
03c0: 20 20 20 20 20 20 5c 22 6d 65 67 61 74 65 73 74        \"megatest
03d0: 2e 73 68 5c 22 20 66 69 6c 65 2e 29 0a 20 20 2d  .sh\" file.).  -
03e0: 73 74 65 70 20 73 74 65 70 6e 61 6d 65 0a 20 20  step stepname.  
03f0: 2d 74 65 73 74 2d 73 74 61 74 75 73 20 20 20 20  -test-status    
0400: 20 20 20 20 20 20 20 20 3a 20 73 65 74 20 74 68          : set th
0410: 65 20 73 74 61 74 65 20 61 6e 64 20 73 74 61 74  e state and stat
0420: 75 73 20 6f 66 20 61 20 74 65 73 74 20 28 75 73  us of a test (us
0430: 65 20 3a 73 74 61 74 65 20 61 6e 64 20 3a 73 74  e :state and :st
0440: 61 74 75 73 29 0a 20 20 2d 73 65 74 6c 6f 67 20  atus).  -setlog 
0450: 6c 6f 67 66 6e 61 6d 65 20 20 20 20 20 20 20 20  logfname        
0460: 3a 20 73 65 74 20 74 68 65 20 70 61 74 68 2f 66  : set the path/f
0470: 69 6c 65 6e 61 6d 65 20 74 6f 20 74 68 65 20 66  ilename to the f
0480: 69 6e 61 6c 20 6c 6f 67 20 72 65 6c 61 74 69 76  inal log relativ
0490: 65 20 74 6f 20 74 68 65 20 74 65 73 74 0a 20 20  e to the test.  
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74            direct
04c0: 6f 72 79 2e 20 6d 61 79 20 62 65 20 75 73 65 64  ory. may be used
04d0: 20 77 69 74 68 20 2d 74 65 73 74 2d 73 74 61 74   with -test-stat
04e0: 75 73 0a 20 20 2d 6d 20 63 6f 6d 6d 65 6e 74 20  us.  -m comment 
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 69               : i
0500: 6e 73 65 72 74 20 61 20 63 6f 6d 6d 65 6e 74 20  nsert a comment 
0510: 66 6f 72 20 74 68 69 73 20 74 65 73 74 0a 0a 52  for this test..R
0520: 75 6e 20 64 61 74 61 0a 20 20 3a 72 75 6e 6e 61  un data.  :runna
0530: 6d 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  me              
0540: 20 20 3a 20 72 65 71 75 69 72 65 64 2c 20 6e 61    : required, na
0550: 6d 65 20 66 6f 72 20 74 68 69 73 20 70 61 72 74  me for this part
0560: 69 63 75 6c 61 72 20 74 65 73 74 20 72 75 6e 0a  icular test run.
0570: 20 20 3a 73 74 61 74 65 20 20 20 20 20 20 20 20    :state        
0580: 20 20 20 20 20 20 20 20 20 20 3a 20 72 65 71 75            : requ
0590: 69 72 65 64 20 69 66 20 75 70 64 61 74 69 6e 67  ired if updating
05a0: 20 73 74 65 70 20 73 74 61 74 65 3b 20 65 2e 67   step state; e.g
05b0: 2e 20 73 74 61 72 74 2c 20 65 6e 64 2c 20 63 6f  . start, end, co
05c0: 6d 70 6c 65 74 65 64 0a 20 20 3a 73 74 61 74 75  mpleted.  :statu
05d0: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s               
05e0: 20 20 3a 20 72 65 71 75 69 72 65 64 20 69 66 20    : required if 
05f0: 75 70 64 61 74 69 6e 67 20 73 74 65 70 20 73 74  updating step st
0600: 61 74 75 73 3b 20 65 2e 67 2e 20 70 61 73 73 2c  atus; e.g. pass,
0610: 20 66 61 69 6c 2c 20 6e 2f 61 0a 0a 51 75 65 72   fail, n/a..Quer
0620: 69 65 73 0a 20 20 2d 6c 69 73 74 2d 72 75 6e 73  ies.  -list-runs
0630: 20 70 61 74 74 20 20 20 20 20 20 20 20 20 3a 20   patt         : 
0640: 6c 69 73 74 20 72 75 6e 73 20 6d 61 74 63 68 69  list runs matchi
0650: 6e 67 20 70 61 74 74 65 72 6e 20 5c 22 70 61 74  ng pattern \"pat
0660: 74 5c 22 2c 20 25 20 69 73 20 74 68 65 20 77 69  t\", % is the wi
0670: 6c 64 63 61 72 64 0a 20 20 2d 74 65 73 74 70 61  ldcard.  -testpa
0680: 74 74 20 70 61 74 74 20 20 20 20 20 20 20 20 20  tt patt         
0690: 20 3a 20 69 6e 20 6c 69 73 74 2d 72 75 6e 73 20   : in list-runs 
06a0: 73 68 6f 77 20 6f 6e 6c 79 20 74 68 65 73 65 20  show only these 
06b0: 74 65 73 74 73 2c 20 25 20 69 73 20 74 68 65 20  tests, % is the 
06c0: 77 69 6c 64 63 61 72 64 0a 20 20 2d 69 74 65 6d  wildcard.  -item
06d0: 70 61 74 74 20 70 61 74 74 20 20 20 20 20 20 20  patt patt       
06e0: 20 20 20 3a 20 69 6e 20 6c 69 73 74 2d 72 75 6e     : in list-run
06f0: 73 20 73 68 6f 77 20 6f 6e 6c 79 20 74 65 73 74  s show only test
0700: 73 20 77 69 74 68 20 69 74 65 6d 73 20 74 68 61  s with items tha
0710: 74 20 6d 61 74 63 68 20 70 61 74 74 0a 20 20 2d  t match patt.  -
0720: 73 68 6f 77 6b 65 79 73 20 20 20 20 20 20 20 20  showkeys        
0730: 20 20 20 20 20 20 20 3a 20 73 68 6f 77 20 74 68         : show th
0740: 65 20 6b 65 79 73 20 75 73 65 64 20 69 6e 20 74  e keys used in t
0750: 68 69 73 20 6d 65 67 61 74 65 73 74 20 73 65 74  his megatest set
0760: 75 70 0a 0a 4d 69 73 63 20 0a 20 20 2d 66 6f 72  up..Misc .  -for
0770: 63 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ce              
0780: 20 20 20 20 3a 20 6f 76 65 72 72 69 64 65 20 73      : override s
0790: 6f 6d 65 20 63 68 65 63 6b 73 0a 20 20 2d 78 74  ome checks.  -xt
07a0: 65 72 6d 20 20 20 20 20 20 20 20 20 20 20 20 20  erm             
07b0: 20 20 20 20 20 3a 20 73 74 61 72 74 20 61 6e 20       : start an 
07c0: 78 74 65 72 6d 20 69 6e 73 74 65 61 64 20 6f 66  xterm instead of
07d0: 20 6c 61 75 6e 63 68 69 6e 67 20 74 68 65 20 74   launching the t
07e0: 65 73 74 0a 20 20 2d 72 65 6d 6f 76 65 2d 72 75  est.  -remove-ru
07f0: 6e 73 20 20 20 20 20 20 20 20 20 20 20 20 3a 20  ns            : 
0800: 72 65 6d 6f 76 65 20 74 68 65 20 64 61 74 61 20  remove the data 
0810: 66 6f 72 20 61 20 72 75 6e 2c 20 72 65 71 75 69  for a run, requi
0820: 72 65 73 20 66 69 65 6c 64 73 2c 20 3a 72 75 6e  res fields, :run
0830: 6e 61 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20  name .          
0840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0850: 20 20 61 6e 64 20 2d 74 65 73 74 70 61 74 74 0a    and -testpatt.
0860: 20 20 2d 74 65 73 74 70 61 74 74 20 70 61 74 74    -testpatt patt
0870: 20 20 20 20 20 20 20 20 20 20 3a 20 72 65 6d 6f            : remo
0880: 76 65 20 74 65 73 74 73 20 6d 61 74 63 68 69 6e  ve tests matchin
0890: 67 20 70 61 74 74 20 28 72 65 71 75 69 72 65 73  g patt (requires
08a0: 20 2d 72 65 6d 6f 76 65 2d 72 75 6e 73 29 0a 0a   -remove-runs)..
08b0: 48 65 6c 70 65 72 73 0a 20 20 2d 72 75 6e 73 74  Helpers.  -runst
08c0: 65 70 20 73 74 65 70 6e 61 6d 65 20 20 2e 2e 2e  ep stepname  ...
08d0: 20 20 3a 20 74 61 6b 65 20 72 65 6d 61 69 6e 69    : take remaini
08e0: 6e 67 20 70 61 72 61 6d 73 20 61 73 20 63 6f 6d  ng params as com
08f0: 61 6e 64 20 61 6e 64 20 65 78 65 63 75 74 65 20  and and execute 
0900: 61 73 20 73 74 65 70 6e 61 6d 65 0a 20 20 20 20  as stepname.    
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0920: 20 20 20 20 20 20 20 20 6c 6f 67 20 77 69 6c 6c          log will
0930: 20 62 65 20 69 6e 20 73 74 65 70 6e 61 6d 65 2e   be in stepname.
0940: 6c 6f 67 2e 20 42 65 73 74 20 74 6f 20 70 75 74  log. Best to put
0950: 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 71 75 6f 74   command in quot
0960: 65 73 0a 20 20 2d 6c 6f 67 70 72 6f 20 66 69 6c  es.  -logpro fil
0970: 65 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 77  e            : w
0980: 69 74 68 20 2d 65 78 65 63 20 61 70 70 6c 79 20  ith -exec apply 
0990: 6c 6f 67 70 72 6f 20 66 69 6c 65 20 74 6f 20 73  logpro file to s
09a0: 74 65 70 6e 61 6d 65 2e 6c 6f 67 2c 20 63 72 65  tepname.log, cre
09b0: 61 74 65 73 0a 20 20 20 20 20 20 20 20 20 20 20  ates.           
09c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09d0: 20 73 74 65 70 6e 61 6d 65 2e 68 74 6d 6c 20 61   stepname.html a
09e0: 6e 64 20 73 65 74 73 20 6c 6f 67 20 74 6f 20 73  nd sets log to s
09f0: 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  ame.            
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 49 66 20 75 73 69 6e 67 20 6d 61 6b 65 20 75 73  If using make us
0a20: 65 20 73 74 65 70 6e 61 6d 65 5f 6c 6f 67 70 72  e stepname_logpr
0a30: 6f 2e 6c 6f 67 20 61 73 20 79 6f 75 72 20 74 61  o.log as your ta
0a40: 72 67 65 74 0a 0a 43 61 6c 6c 65 64 20 61 73 20  rget..Called as 
0a50: 22 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73  " (string-inters
0a60: 70 65 72 73 65 20 28 61 72 67 76 29 20 22 20 22  perse (argv) " "
0a70: 29 29 29 0a 0a 3b 3b 20 20 2d 67 75 69 20 20 20  )))..;;  -gui   
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a90: 20 3a 20 73 74 61 72 74 20 61 20 67 75 69 20 69   : start a gui i
0aa0: 6e 74 65 72 66 61 63 65 0a 3b 3b 20 20 2d 63 6f  nterface.;;  -co
0ab0: 6e 66 69 67 20 66 6e 61 6d 65 20 20 20 20 20 20  nfig fname      
0ac0: 20 20 20 20 20 3a 20 6f 76 65 72 72 69 64 65 20       : override 
0ad0: 74 68 65 20 72 75 6e 63 6f 6e 66 69 67 20 66 69  the runconfig fi
0ae0: 6c 65 20 77 69 74 68 20 66 6e 61 6d 65 0a 0a 3b  le with fname..;
0af0: 3b 20 70 72 6f 63 65 73 73 20 61 72 67 73 0a 28  ; process args.(
0b00: 64 65 66 69 6e 65 20 72 65 6d 61 72 67 73 20 28  define remargs (
0b10: 61 72 67 73 3a 67 65 74 2d 61 72 67 73 20 0a 09  args:get-args ..
0b20: 09 20 28 61 72 67 76 29 0a 09 09 20 28 6c 69 73  . (argv)... (lis
0b30: 74 20 20 22 2d 72 75 6e 74 65 73 74 73 22 20 20  t  "-runtests"  
0b40: 3b 3b 20 72 75 6e 20 61 20 73 70 65 63 69 66 69  ;; run a specifi
0b50: 63 20 74 65 73 74 0a 09 09 09 22 2d 63 6f 6e 66  c test...."-conf
0b60: 69 67 22 20 20 20 20 3b 3b 20 6f 76 65 72 72 69  ig"    ;; overri
0b70: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 20 66 69  de the config fi
0b80: 6c 65 20 6e 61 6d 65 0a 09 09 09 22 2d 65 78 65  le name...."-exe
0b90: 63 75 74 65 22 20 20 20 3b 3b 20 72 75 6e 20 74  cute"   ;; run t
0ba0: 68 65 20 63 6f 6d 6d 61 6e 64 20 65 6e 63 6f 64  he command encod
0bb0: 65 64 20 69 6e 20 74 68 65 20 62 61 73 65 36 34  ed in the base64
0bc0: 20 70 61 72 61 6d 65 74 65 72 0a 09 09 09 22 2d   parameter...."-
0bd0: 73 74 65 70 22 0a 09 09 09 22 3a 72 75 6e 6e 61  step"....":runna
0be0: 6d 65 22 20 20 20 0a 09 09 09 22 3a 69 74 65 6d  me"   ....":item
0bf0: 22 0a 09 09 09 22 3a 72 75 6e 6e 61 6d 65 22 20  "....":runname" 
0c00: 20 20 0a 09 09 09 22 3a 73 74 61 74 65 22 20 20    ....":state"  
0c10: 0a 09 09 09 22 3a 73 74 61 74 75 73 22 0a 09 09  ....":status"...
0c20: 09 22 2d 6c 69 73 74 2d 72 75 6e 73 22 0a 09 09  ."-list-runs"...
0c30: 09 22 2d 74 65 73 74 70 61 74 74 22 20 0a 09 09  ."-testpatt" ...
0c40: 09 22 2d 69 74 65 6d 70 61 74 74 22 0a 09 09 09  ."-itempatt"....
0c50: 22 2d 73 65 74 6c 6f 67 22 0a 09 09 09 22 2d 72  "-setlog"...."-r
0c60: 75 6e 73 74 65 70 22 0a 09 09 09 22 2d 6c 6f 67  unstep"...."-log
0c70: 70 72 6f 22 0a 09 09 09 22 2d 6d 22 0a 09 09 09  pro"...."-m"....
0c80: 29 20 0a 09 09 20 28 6c 69 73 74 20 20 22 2d 68  ) ... (list  "-h
0c90: 22 0a 09 09 20 20 20 20 20 20 20 20 22 2d 66 6f  "...        "-fo
0ca0: 72 63 65 22 0a 09 09 20 20 20 20 20 20 20 20 22  rce"...        "
0cb0: 2d 78 74 65 72 6d 22 0a 09 09 20 20 20 20 20 20  -xterm"...      
0cc0: 20 20 22 2d 73 68 6f 77 6b 65 79 73 22 0a 09 09    "-showkeys"...
0cd0: 20 20 20 20 20 20 20 20 22 2d 74 65 73 74 2d 73          "-test-s
0ce0: 74 61 74 75 73 22 0a 09 09 20 20 20 20 20 20 20  tatus"...       
0cf0: 20 22 2d 67 75 69 22 0a 09 09 09 22 2d 72 75 6e   "-gui"...."-run
0d00: 61 6c 6c 22 20 20 20 20 3b 3b 20 72 75 6e 20 61  all"    ;; run a
0d10: 6c 6c 20 74 65 73 74 73 0a 09 09 09 22 2d 72 65  ll tests...."-re
0d20: 6d 6f 76 65 2d 72 75 6e 73 22 0a 09 09 20 20 20  move-runs"...   
0d30: 20 20 20 20 29 0a 09 09 20 61 72 67 73 3a 61 72      )... args:ar
0d40: 67 2d 68 61 73 68 0a 09 09 20 30 29 29 0a 0a 28  g-hash... 0))..(
0d50: 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67  if (args:get-arg
0d60: 20 22 2d 68 22 29 0a 20 20 20 20 28 62 65 67 69   "-h").    (begi
0d70: 6e 0a 20 20 20 20 20 20 28 70 72 69 6e 74 20 68  n.      (print h
0d80: 65 6c 70 29 0a 20 20 20 20 20 20 28 65 78 69 74  elp).      (exit
0d90: 29 29 29 0a 0a 28 69 6e 63 6c 75 64 65 20 22 6b  )))..(include "k
0da0: 65 79 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75  eys.scm").(inclu
0db0: 64 65 20 22 69 74 65 6d 73 2e 73 63 6d 22 29 0a  de "items.scm").
0dc0: 28 69 6e 63 6c 75 64 65 20 22 64 62 2e 73 63 6d  (include "db.scm
0dd0: 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 63 6f 6e  ").(include "con
0de0: 66 69 67 66 2e 73 63 6d 22 29 0a 28 69 6e 63 6c  figf.scm").(incl
0df0: 75 64 65 20 22 70 72 6f 63 65 73 73 2e 73 63 6d  ude "process.scm
0e00: 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 6c 61 75  ").(include "lau
0e10: 6e 63 68 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75  nch.scm").(inclu
0e20: 64 65 20 22 72 75 6e 73 2e 73 63 6d 22 29 0a 3b  de "runs.scm").;
0e30: 3b 20 28 69 6e 63 6c 75 64 65 20 22 67 75 69 2e  ; (include "gui.
0e40: 73 63 6d 22 29 0a 0a 28 64 65 66 69 6e 65 20 2a  scm")..(define *
0e50: 64 69 64 73 6f 6d 65 74 68 69 6e 67 2a 20 23 66  didsomething* #f
0e60: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  )..;;===========
0e70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0e80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0e90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0ea0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 52  ===========.;; R
0eb0: 65 6d 6f 76 65 20 6f 6c 64 20 72 75 6e 28 73 29  emove old run(s)
0ec0: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .;;=============
0ed0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0ee0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0ef0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0f00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69  =========..(defi
0f10: 6e 65 20 28 72 65 6d 6f 76 65 2d 72 75 6e 73 29  ne (remove-runs)
0f20: 0a 20 20 28 63 6f 6e 64 0a 20 20 20 28 28 6e 6f  .  (cond.   ((no
0f30: 74 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20  t (args:get-arg 
0f40: 22 3a 72 75 6e 6e 61 6d 65 22 29 29 0a 20 20 20  ":runname")).   
0f50: 20 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20   (print "ERROR: 
0f60: 4d 69 73 73 69 6e 67 20 72 65 71 75 69 72 65 64  Missing required
0f70: 20 70 61 72 61 6d 65 74 65 72 20 66 6f 72 20 2d   parameter for -
0f80: 72 65 6d 6f 76 65 2d 72 75 6e 73 2c 20 79 6f 75  remove-runs, you
0f90: 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 74 68   must specify th
0fa0: 65 20 72 75 6e 20 6e 61 6d 65 20 70 61 74 74 65  e run name patte
0fb0: 72 6e 20 77 69 74 68 20 3a 72 75 6e 6e 61 6d 65  rn with :runname
0fc0: 20 70 61 74 74 22 29 0a 20 20 20 20 28 65 78 69   patt").    (exi
0fd0: 74 20 32 29 29 0a 20 20 20 28 28 6e 6f 74 20 28  t 2)).   ((not (
0fe0: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 74  args:get-arg "-t
0ff0: 65 73 74 70 61 74 74 22 29 29 0a 20 20 20 20 28  estpatt")).    (
1000: 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 4d 69  print "ERROR: Mi
1010: 73 73 69 6e 67 20 72 65 71 75 69 72 65 64 20 70  ssing required p
1020: 61 72 61 6d 65 74 65 72 20 66 6f 72 20 2d 72 65  arameter for -re
1030: 6d 6f 76 65 2d 72 75 6e 73 2c 20 79 6f 75 20 6d  move-runs, you m
1040: 75 73 74 20 73 70 65 63 69 66 79 20 74 68 65 20  ust specify the 
1050: 74 65 73 74 20 70 61 74 74 65 72 6e 20 77 69 74  test pattern wit
1060: 68 20 2d 74 65 73 74 70 61 74 74 22 29 0a 20 20  h -testpatt").  
1070: 20 20 28 65 78 69 74 20 33 29 29 0a 20 20 20 28    (exit 3)).   (
1080: 28 6e 6f 74 20 28 61 72 67 73 3a 67 65 74 2d 61  (not (args:get-a
1090: 72 67 20 22 2d 69 74 65 6d 70 61 74 74 22 29 29  rg "-itempatt"))
10a0: 0a 20 20 20 20 28 70 72 69 6e 74 20 22 45 52 52  .    (print "ERR
10b0: 4f 52 3a 20 4d 69 73 73 69 6e 67 20 72 65 71 75  OR: Missing requ
10c0: 69 72 65 64 20 70 61 72 61 6d 65 74 65 72 20 66  ired parameter f
10d0: 6f 72 20 2d 72 65 6d 6f 76 65 2d 72 75 6e 73 2c  or -remove-runs,
10e0: 20 79 6f 75 20 6d 75 73 74 20 73 70 65 63 69 66   you must specif
10f0: 79 20 74 68 65 20 69 74 65 6d 73 20 77 69 74 68  y the items with
1100: 20 2d 69 74 65 6d 70 61 74 74 22 29 0a 20 20 20   -itempatt").   
1110: 20 28 65 78 69 74 20 34 29 29 0a 20 20 20 28 28   (exit 4)).   ((
1120: 6c 65 74 20 28 28 64 62 20 23 66 29 29 0a 20 20  let ((db #f)).  
1130: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 73 65      (if (not (se
1140: 74 75 70 2d 66 6f 72 2d 72 75 6e 29 29 0a 09 20  tup-for-run)).. 
1150: 20 28 62 65 67 69 6e 20 0a 09 20 20 20 20 28 70   (begin ..    (p
1160: 72 69 6e 74 20 22 46 61 69 6c 65 64 20 74 6f 20  rint "Failed to 
1170: 73 65 74 75 70 2c 20 65 78 69 74 69 6e 67 22 29  setup, exiting")
1180: 0a 09 20 20 20 20 28 65 78 69 74 20 31 29 29 29  ..    (exit 1)))
1190: 0a 20 20 20 20 20 20 28 73 65 74 21 20 64 62 20  .      (set! db 
11a0: 28 6f 70 65 6e 2d 64 62 29 29 0a 20 20 20 20 20  (open-db)).     
11b0: 20 28 69 66 20 28 6e 6f 74 20 28 63 61 72 20 2a   (if (not (car *
11c0: 63 6f 6e 66 69 67 69 6e 66 6f 2a 29 29 0a 09 20  configinfo*)).. 
11d0: 20 28 62 65 67 69 6e 0a 09 20 20 20 20 28 70 72   (begin..    (pr
11e0: 69 6e 74 20 22 45 52 52 4f 52 3a 20 41 74 74 65  int "ERROR: Atte
11f0: 6d 70 74 65 64 20 74 6f 20 72 65 6d 6f 76 65 20  mpted to remove 
1200: 74 65 73 74 28 73 29 20 62 75 74 20 72 75 6e 20  test(s) but run 
1210: 61 72 65 61 20 63 6f 6e 66 69 67 20 66 69 6c 65  area config file
1220: 20 6e 6f 74 20 66 6f 75 6e 64 22 29 0a 09 20 20   not found")..  
1230: 20 20 28 65 78 69 74 20 31 29 29 0a 09 20 20 3b    (exit 1))..  ;
1240: 3b 20 70 75 74 20 74 65 73 74 20 70 61 72 61 6d  ; put test param
1250: 65 74 65 72 73 20 69 6e 74 6f 20 63 6f 6e 76 65  eters into conve
1260: 6e 69 65 6e 74 20 76 61 72 69 61 62 6c 65 73 0a  nient variables.
1270: 09 20 20 28 72 75 6e 73 3a 72 65 6d 6f 76 65 2d  .  (runs:remove-
1280: 72 75 6e 73 20 64 62 0a 09 09 09 20 20 20 20 28  runs db....    (
1290: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 72  args:get-arg ":r
12a0: 75 6e 6e 61 6d 65 22 29 0a 09 09 09 20 20 20 20  unname")....    
12b0: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d  (args:get-arg "-
12c0: 74 65 73 74 70 61 74 74 22 29 0a 09 09 09 20 20  testpatt")....  
12d0: 20 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20    (args:get-arg 
12e0: 22 2d 69 74 65 6d 70 61 74 74 22 29 29 29 0a 20  "-itempatt"))). 
12f0: 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 69       (sqlite3:fi
1300: 6e 61 6c 69 7a 65 21 20 64 62 29 0a 20 20 20 20  nalize! db).    
1310: 20 20 28 73 65 74 21 20 2a 64 69 64 73 6f 6d 65    (set! *didsome
1320: 74 68 69 6e 67 2a 20 23 74 29 29 29 29 29 0a 09  thing* #t)))))..
1330: 20 20 0a 28 69 66 20 28 61 72 67 73 3a 67 65 74    .(if (args:get
1340: 2d 61 72 67 20 22 2d 72 65 6d 6f 76 65 2d 72 75  -arg "-remove-ru
1350: 6e 73 22 29 0a 20 20 20 20 28 72 65 6d 6f 76 65  ns").    (remove
1360: 2d 72 75 6e 73 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d  -runs))..;;=====
1370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1390: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
13a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
13b0: 3d 0a 3b 3b 20 51 75 65 72 79 20 72 75 6e 73 0a  =.;; Query runs.
13c0: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;;==============
13d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
13e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
13f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1400: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 69 66 20 28 61  ========..(if (a
1410: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 6c 69  rgs:get-arg "-li
1420: 73 74 2d 72 75 6e 73 22 29 0a 20 20 20 20 28 6c  st-runs").    (l
1430: 65 74 2a 20 28 28 64 62 20 20 20 20 20 20 20 28  et* ((db       (
1440: 62 65 67 69 6e 0a 09 09 20 20 20 20 20 20 20 28  begin...       (
1450: 73 65 74 75 70 2d 66 6f 72 2d 72 75 6e 29 0a 09  setup-for-run)..
1460: 09 20 20 20 20 20 20 20 28 6f 70 65 6e 2d 64 62  .       (open-db
1470: 29 29 29 0a 09 20 20 20 28 72 75 6e 70 61 74 74  )))..   (runpatt
1480: 20 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20    (args:get-arg 
1490: 22 2d 6c 69 73 74 2d 72 75 6e 73 22 29 29 0a 09  "-list-runs"))..
14a0: 20 20 20 28 74 65 73 74 70 61 74 74 20 28 61 72     (testpatt (ar
14b0: 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 74 65 73  gs:get-arg "-tes
14c0: 74 70 61 74 74 22 29 29 0a 09 20 20 20 28 69 74  tpatt"))..   (it
14d0: 65 6d 70 61 74 74 20 28 61 72 67 73 3a 67 65 74  empatt (args:get
14e0: 2d 61 72 67 20 22 2d 69 74 65 6d 70 61 74 74 22  -arg "-itempatt"
14f0: 29 29 0a 09 20 20 20 28 72 75 6e 73 64 61 74 20  ))..   (runsdat 
1500: 20 28 64 62 2d 67 65 74 2d 72 75 6e 73 20 64 62   (db-get-runs db
1510: 20 72 75 6e 70 61 74 74 29 29 0a 09 20 20 20 28   runpatt))..   (
1520: 72 75 6e 73 20 20 20 20 20 28 64 62 3a 67 65 74  runs     (db:get
1530: 2d 72 6f 77 73 20 72 75 6e 73 64 61 74 29 29 0a  -rows runsdat)).
1540: 09 20 20 20 28 68 65 61 64 65 72 20 20 20 28 64  .   (header   (d
1550: 62 3a 67 65 74 2d 68 65 61 64 65 72 20 72 75 6e  b:get-header run
1560: 73 64 61 74 29 29 0a 09 20 20 20 28 6b 65 79 73  sdat))..   (keys
1570: 20 20 20 20 20 28 64 62 2d 67 65 74 2d 6b 65 79       (db-get-key
1580: 73 20 64 62 29 29 0a 09 20 20 20 28 6b 65 79 6e  s db))..   (keyn
1590: 61 6d 65 73 20 28 6d 61 70 20 6b 65 79 3a 67 65  ames (map key:ge
15a0: 74 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 79 73  t-fieldname keys
15b0: 29 29 29 0a 20 20 20 20 20 20 3b 3b 20 45 61 63  ))).      ;; Eac
15c0: 68 20 72 75 6e 0a 20 20 20 20 20 20 28 66 6f 72  h run.      (for
15d0: 2d 65 61 63 68 20 0a 20 20 20 20 20 20 20 28 6c  -each .       (l
15e0: 61 6d 62 64 61 20 28 72 75 6e 29 0a 09 20 28 70  ambda (run).. (p
15f0: 72 69 6e 74 20 22 52 75 6e 3a 20 22 0a 09 09 28  rint "Run: "...(
1600: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72  string-intersper
1610: 73 65 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20  se (map (lambda 
1620: 28 78 29 0a 09 09 09 09 09 20 20 20 28 64 62 2d  (x)......   (db-
1630: 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68 65 61  get-value-by-hea
1640: 64 65 72 20 72 75 6e 20 68 65 61 64 65 72 20 78  der run header x
1650: 29 29 0a 09 09 09 09 09 20 6b 65 79 6e 61 6d 65  ))...... keyname
1660: 73 29 20 22 2f 22 29 0a 09 09 22 2f 22 0a 09 09  s) "/")..."/"...
1670: 28 64 62 2d 67 65 74 2d 76 61 6c 75 65 2d 62 79  (db-get-value-by
1680: 2d 68 65 61 64 65 72 20 72 75 6e 20 68 65 61 64  -header run head
1690: 65 72 20 22 72 75 6e 6e 61 6d 65 22 29 29 0a 09  er "runname"))..
16a0: 20 28 6c 65 74 20 28 28 72 75 6e 2d 69 64 20 28   (let ((run-id (
16b0: 64 62 2d 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d  db-get-value-by-
16c0: 68 65 61 64 65 72 20 72 75 6e 20 68 65 61 64 65  header run heade
16d0: 72 20 22 69 64 22 29 29 29 0a 09 20 20 20 28 6c  r "id")))..   (l
16e0: 65 74 20 28 28 74 65 73 74 73 20 28 64 62 2d 67  et ((tests (db-g
16f0: 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e  et-tests-for-run
1700: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 70   db run-id testp
1710: 61 74 74 20 69 74 65 6d 70 61 74 74 29 29 29 0a  att itempatt))).
1720: 09 20 20 20 20 20 3b 3b 20 45 61 63 68 20 74 65  .     ;; Each te
1730: 73 74 0a 09 20 20 20 20 20 28 66 6f 72 2d 65 61  st..     (for-ea
1740: 63 68 20 0a 09 20 20 20 20 20 20 28 6c 61 6d 62  ch ..      (lamb
1750: 64 61 20 28 74 65 73 74 29 0a 09 09 28 66 6f 72  da (test)...(for
1760: 6d 61 74 20 23 74 0a 09 09 09 22 20 20 54 65 73  mat #t...."  Tes
1770: 74 3a 20 7e 32 35 61 20 53 74 61 74 65 3a 20 7e  t: ~25a State: ~
1780: 31 35 61 20 53 74 61 74 75 73 3a 20 7e 31 35 61  15a Status: ~15a
1790: 20 52 75 6e 74 69 6d 65 3a 20 7e 35 40 61 73 20   Runtime: ~5@as 
17a0: 54 69 6d 65 3a 20 7e 32 32 61 20 48 6f 73 74 3a  Time: ~22a Host:
17b0: 20 7e 31 30 61 5c 6e 22 0a 09 09 09 28 63 6f 6e   ~10a\n"....(con
17c0: 63 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 74  c (db:test-get-t
17d0: 65 73 74 6e 61 6d 65 20 74 65 73 74 29 0a 09 09  estname test)...
17e0: 09 20 20 20 20 20 20 28 69 66 20 28 65 71 75 61  .      (if (equa
17f0: 6c 3f 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d  l? (db:test-get-
1800: 69 74 65 6d 2d 70 61 74 68 20 74 65 73 74 29 20  item-path test) 
1810: 22 22 29 0a 09 09 09 09 20 20 22 22 20 0a 09 09  "").....  "" ...
1820: 09 09 20 20 28 63 6f 6e 63 20 22 28 22 20 28 64  ..  (conc "(" (d
1830: 62 3a 74 65 73 74 2d 67 65 74 2d 69 74 65 6d 2d  b:test-get-item-
1840: 70 61 74 68 20 74 65 73 74 29 20 22 29 22 29 29  path test) ")"))
1850: 29 0a 09 09 09 28 64 62 3a 74 65 73 74 2d 67 65  )....(db:test-ge
1860: 74 2d 73 74 61 74 65 20 74 65 73 74 29 0a 09 09  t-state test)...
1870: 09 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73 74  .(db:test-get-st
1880: 61 74 75 73 20 74 65 73 74 29 0a 09 09 09 28 64  atus test)....(d
1890: 62 3a 74 65 73 74 2d 67 65 74 2d 72 75 6e 5f 64  b:test-get-run_d
18a0: 75 72 61 74 69 6f 6e 20 74 65 73 74 29 0a 09 09  uration test)...
18b0: 09 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 65 76  .(db:test-get-ev
18c0: 65 6e 74 5f 74 69 6d 65 20 74 65 73 74 29 0a 09  ent_time test)..
18d0: 09 09 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 68  ..(db:test-get-h
18e0: 6f 73 74 20 74 65 73 74 29 29 0a 20 09 09 28 69  ost test)). ..(i
18f0: 66 20 28 6e 6f 74 20 28 6f 72 20 28 65 71 75 61  f (not (or (equa
1900: 6c 3f 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d  l? (db:test-get-
1910: 73 74 61 74 75 73 20 74 65 73 74 29 20 22 50 41  status test) "PA
1920: 53 53 22 29 0a 09 09 09 20 20 20 20 20 28 65 71  SS")....     (eq
1930: 75 61 6c 3f 20 28 64 62 3a 74 65 73 74 2d 67 65  ual? (db:test-ge
1940: 74 2d 73 74 61 74 65 20 74 65 73 74 29 20 22 4e  t-state test) "N
1950: 4f 54 5f 53 54 41 52 54 45 44 22 29 29 29 0a 09  OT_STARTED")))..
1960: 09 20 20 20 20 28 62 65 67 69 6e 0a 09 09 20 20  .    (begin...  
1970: 20 20 20 20 28 70 72 69 6e 74 20 22 20 20 20 20      (print "    
1980: 20 20 20 20 20 63 70 75 6c 6f 61 64 3a 20 20 22       cpuload:  "
1990: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 63 70   (db:test-get-cp
19a0: 75 6c 6f 61 64 20 74 65 73 74 29 0a 09 09 09 20  uload test).... 
19b0: 20 20 20 20 22 5c 6e 20 20 20 20 20 20 20 20 20      "\n         
19c0: 64 69 73 6b 66 72 65 65 3a 20 22 20 28 64 62 3a  diskfree: " (db:
19d0: 74 65 73 74 2d 67 65 74 2d 64 69 73 6b 66 72 65  test-get-diskfre
19e0: 65 20 74 65 73 74 29 0a 09 09 09 20 20 20 20 20  e test)....     
19f0: 22 5c 6e 20 20 20 20 20 20 20 20 20 75 6e 61 6d  "\n         unam
1a00: 65 3a 20 20 20 20 22 20 28 64 62 3a 74 65 73 74  e:    " (db:test
1a10: 2d 67 65 74 2d 75 6e 61 6d 65 20 74 65 73 74 29  -get-uname test)
1a20: 0a 09 09 09 20 20 20 20 20 22 5c 6e 20 20 20 20  ....     "\n    
1a30: 20 20 20 20 20 72 75 6e 64 69 72 3a 20 20 20 22       rundir:   "
1a40: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 72 75   (db:test-get-ru
1a50: 6e 64 69 72 20 74 65 73 74 29 0a 09 09 09 20 20  ndir test)....  
1a60: 20 20 20 29 0a 09 09 20 20 20 20 20 20 3b 3b 20     )...      ;; 
1a70: 45 61 63 68 20 74 65 73 74 0a 09 09 20 20 20 20  Each test...    
1a80: 20 20 28 6c 65 74 20 28 28 73 74 65 70 73 20 28    (let ((steps (
1a90: 64 62 2d 67 65 74 2d 74 65 73 74 2d 73 74 65 70  db-get-test-step
1aa0: 73 2d 66 6f 72 2d 72 75 6e 20 64 62 20 28 64 62  s-for-run db (db
1ab0: 3a 74 65 73 74 2d 67 65 74 2d 69 64 20 74 65 73  :test-get-id tes
1ac0: 74 29 29 29 29 0a 09 09 09 28 66 6f 72 2d 65 61  t))))....(for-ea
1ad0: 63 68 20 0a 09 09 09 20 28 6c 61 6d 62 64 61 20  ch .... (lambda 
1ae0: 28 73 74 65 70 29 0a 09 09 09 20 20 20 28 66 6f  (step)....   (fo
1af0: 72 6d 61 74 20 23 74 20 0a 09 09 09 09 20 20 20  rmat #t .....   
1b00: 22 20 20 20 20 53 74 65 70 3a 20 7e 32 30 61 20  "    Step: ~20a 
1b10: 53 74 61 74 65 3a 20 7e 31 30 61 20 53 74 61 74  State: ~10a Stat
1b20: 75 73 3a 20 7e 31 30 61 20 54 69 6d 65 20 7e 32  us: ~10a Time ~2
1b30: 32 61 5c 6e 22 0a 09 09 09 09 20 20 20 28 64 62  2a\n".....   (db
1b40: 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 70 6e 61  :step-get-stepna
1b50: 6d 65 20 73 74 65 70 29 0a 09 09 09 09 20 20 20  me step).....   
1b60: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61  (db:step-get-sta
1b70: 74 65 20 73 74 65 70 29 0a 09 09 09 09 20 20 20  te step).....   
1b80: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61  (db:step-get-sta
1b90: 74 75 73 20 73 74 65 70 29 0a 09 09 09 09 20 20  tus step).....  
1ba0: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76   (db:step-get-ev
1bb0: 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 29 29  ent_time step)))
1bc0: 0a 09 09 09 3b 3b 20 20 20 20 28 70 72 69 6e 74  ....;;    (print
1bd0: 20 22 20 20 20 20 53 74 65 70 3a 20 22 20 28 64   "    Step: " (d
1be0: 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 70 6e  b:step-get-stepn
1bf0: 61 6d 65 20 73 74 65 70 29 0a 09 09 09 3b 3b 20  ame step)....;; 
1c00: 09 20 20 22 20 22 20 28 64 62 3a 73 74 65 70 2d  .  " " (db:step-
1c10: 67 65 74 2d 73 74 61 74 65 20 73 74 65 70 29 0a  get-state step).
1c20: 09 09 09 3b 3b 20 09 20 20 22 20 22 20 28 64 62  ...;; .  " " (db
1c30: 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73  :step-get-status
1c40: 20 73 74 65 70 29 0a 09 09 09 3b 3b 20 09 20 20   step)....;; .  
1c50: 22 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74  " " (db:step-get
1c60: 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70  -event_time step
1c70: 29 29 29 0a 09 09 09 20 73 74 65 70 73 29 29 29  ))).... steps)))
1c80: 29 29 0a 09 09 74 65 73 74 73 29 29 29 29 0a 20  ))...tests)))). 
1c90: 20 20 20 20 20 20 72 75 6e 73 29 0a 20 20 20 20        runs).    
1ca0: 20 20 28 73 65 74 21 20 2a 64 69 64 73 6f 6d 65    (set! *didsome
1cb0: 74 68 69 6e 67 2a 20 23 74 29 0a 20 20 20 20 20  thing* #t).     
1cc0: 20 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d   ))..;;=========
1cd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1ce0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1cf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1d00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b  =============.;;
1d10: 20 66 75 6c 6c 20 72 75 6e 0a 3b 3b 3d 3d 3d 3d   full run.;;====
1d20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1d30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1d40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1d50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1d60: 3d 3d 0a 0a 3b 3b 20 67 65 74 20 6c 6f 63 6b 20  ==..;; get lock 
1d70: 69 6e 20 64 62 20 66 6f 72 20 66 75 6c 6c 20 72  in db for full r
1d80: 75 6e 20 66 6f 72 20 74 68 69 73 20 64 69 72 65  un for this dire
1d90: 63 74 6f 72 79 0a 3b 3b 20 66 6f 72 20 61 6c 6c  ctory.;; for all
1da0: 20 74 65 73 74 73 20 77 69 74 68 20 64 65 70 73   tests with deps
1db0: 0a 3b 3b 20 20 20 77 61 6c 6b 20 74 72 65 65 20  .;;   walk tree 
1dc0: 6f 66 20 74 65 73 74 73 20 74 6f 20 66 69 6e 64  of tests to find
1dd0: 20 68 65 61 64 20 74 61 73 6b 73 0a 3b 3b 20 20   head tasks.;;  
1de0: 20 61 64 64 20 68 65 61 64 20 74 61 73 6b 73 20   add head tasks 
1df0: 74 6f 20 74 61 73 6b 20 71 75 65 75 65 0a 3b 3b  to task queue.;;
1e00: 20 20 20 61 64 64 20 64 65 70 65 6e 64 61 6e 74     add dependant
1e10: 20 74 61 73 6b 73 20 74 6f 20 74 61 73 6b 20 71   tasks to task q
1e20: 75 65 75 65 20 0a 3b 3b 20 20 20 61 64 64 20 72  ueue .;;   add r
1e30: 65 6d 61 69 6e 69 6e 67 20 74 61 73 6b 73 20 74  emaining tasks t
1e40: 6f 20 74 61 73 6b 20 71 75 65 75 65 0a 3b 3b 20  o task queue.;; 
1e50: 66 6f 72 20 65 61 63 68 20 74 61 73 6b 20 69 6e  for each task in
1e60: 20 74 61 73 6b 20 71 75 65 75 65 0a 3b 3b 20 20   task queue.;;  
1e70: 20 69 66 20 68 61 76 65 20 61 64 65 71 75 61 74   if have adequat
1e80: 65 20 72 65 73 6f 75 72 63 65 73 0a 3b 3b 20 20  e resources.;;  
1e90: 20 20 20 6c 61 75 6e 63 68 20 74 61 73 6b 0a 3b     launch task.;
1ea0: 3b 20 20 20 65 6c 73 65 0a 3b 3b 20 20 20 20 20  ;   else.;;     
1eb0: 70 75 74 20 74 61 73 6b 20 69 6e 20 64 65 66 65  put task in defe
1ec0: 72 72 65 64 20 71 75 65 75 65 0a 3b 3b 20 69 66  rred queue.;; if
1ed0: 20 73 74 69 6c 6c 20 6f 6b 20 74 6f 20 72 75 6e   still ok to run
1ee0: 20 74 61 73 6b 73 0a 3b 3b 20 20 20 70 72 6f 63   tasks.;;   proc
1ef0: 65 73 73 20 64 65 66 65 72 72 65 64 20 74 61 73  ess deferred tas
1f00: 6b 73 20 70 65 72 20 61 62 6f 76 65 20 73 74 65  ks per above ste
1f10: 70 73 0a 0a 3b 3b 20 72 75 6e 20 61 6c 6c 20 74  ps..;; run all t
1f20: 65 73 74 73 20 61 72 65 20 61 72 65 20 4e 6f 74  ests are are Not
1f30: 20 43 4f 4d 50 4c 45 54 45 44 20 61 6e 64 20 50   COMPLETED and P
1f40: 41 53 53 20 6f 72 20 43 48 45 43 4b 0a 28 69 66  ASS or CHECK.(if
1f50: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22   (args:get-arg "
1f60: 2d 72 75 6e 61 6c 6c 22 29 0a 20 20 20 20 28 69  -runall").    (i
1f70: 66 20 28 6e 6f 74 20 28 61 72 67 73 3a 67 65 74  f (not (args:get
1f80: 2d 61 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 29  -arg ":runname")
1f90: 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 70 72  )..(begin..  (pr
1fa0: 69 6e 74 20 22 45 52 52 4f 52 3a 20 4d 69 73 73  int "ERROR: Miss
1fb0: 69 6e 67 20 72 65 71 75 69 72 65 64 20 70 61 72  ing required par
1fc0: 61 6d 65 74 65 72 20 66 6f 72 20 2d 72 75 6e 74  ameter for -runt
1fd0: 65 73 74 73 2c 20 79 6f 75 20 6d 75 73 74 20 73  ests, you must s
1fe0: 70 65 63 69 66 79 20 74 68 65 20 72 75 6e 20 6e  pecify the run n
1ff0: 61 6d 65 20 77 69 74 68 20 3a 72 75 6e 6e 61 6d  ame with :runnam
2000: 65 20 72 75 6e 6e 61 6d 65 22 29 0a 09 20 20 28  e runname")..  (
2010: 65 78 69 74 20 32 29 29 0a 09 28 6c 65 74 2a 20  exit 2))..(let* 
2020: 28 28 64 62 20 20 20 20 20 20 28 69 66 20 28 73  ((db      (if (s
2030: 65 74 75 70 2d 66 6f 72 2d 72 75 6e 29 0a 09 09  etup-for-run)...
2040: 09 20 20 20 20 28 6f 70 65 6e 2d 64 62 29 0a 09  .    (open-db)..
2050: 09 09 20 20 20 20 28 62 65 67 69 6e 0a 09 09 09  ..    (begin....
2060: 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 46 61        (print "Fa
2070: 69 6c 65 64 20 74 6f 20 73 65 74 75 70 2c 20 65  iled to setup, e
2080: 78 69 74 69 6e 67 22 29 0a 09 09 09 20 20 20 20  xiting")....    
2090: 20 20 28 65 78 69 74 20 31 29 29 29 29 29 0a 09    (exit 1)))))..
20a0: 20 20 28 69 66 20 28 6e 6f 74 20 28 63 61 72 20    (if (not (car 
20b0: 2a 63 6f 6e 66 69 67 69 6e 66 6f 2a 29 29 0a 09  *configinfo*))..
20c0: 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 09 28        (begin...(
20d0: 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 41 74  print "ERROR: At
20e0: 74 65 6d 70 74 65 64 20 74 6f 20 72 75 6e 20 61  tempted to run a
20f0: 20 74 65 73 74 20 62 75 74 20 72 75 6e 20 61 72   test but run ar
2100: 65 61 20 63 6f 6e 66 69 67 20 66 69 6c 65 20 6e  ea config file n
2110: 6f 74 20 66 6f 75 6e 64 22 29 0a 09 09 28 65 78  ot found")...(ex
2120: 69 74 20 31 29 29 0a 09 20 20 20 20 20 20 3b 3b  it 1))..      ;;
2130: 20 70 75 74 20 74 65 73 74 20 70 61 72 61 6d 65   put test parame
2140: 74 65 72 73 20 69 6e 74 6f 20 63 6f 6e 76 65 6e  ters into conven
2150: 69 65 6e 74 20 76 61 72 69 61 62 6c 65 73 0a 09  ient variables..
2160: 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 74 65        (let* ((te
2170: 73 74 2d 6e 61 6d 65 73 20 28 67 65 74 2d 61 6c  st-names (get-al
2180: 6c 2d 6c 65 67 61 6c 2d 74 65 73 74 73 29 29 29  l-legal-tests)))
2190: 20 3b 3b 20 22 50 52 4f 44 22 20 69 73 20 69 67   ;; "PROD" is ig
21a0: 6e 6f 72 65 64 20 66 6f 72 20 6e 6f 77 0a 09 09  nored for now...
21b0: 28 70 72 69 6e 74 20 22 49 4e 46 4f 3a 20 41 74  (print "INFO: At
21c0: 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74 61 72  tempting to star
21d0: 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  t the following 
21e0: 74 65 73 74 73 2e 2e 2e 22 29 0a 09 09 28 70 72  tests...")...(pr
21f0: 69 6e 74 20 22 20 20 20 20 20 22 20 28 73 74 72  int "     " (str
2200: 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20  ing-intersperse 
2210: 74 65 73 74 2d 6e 61 6d 65 73 20 22 2c 22 29 29  test-names ","))
2220: 0a 09 09 28 72 75 6e 2d 74 65 73 74 73 20 64 62  ...(run-tests db
2230: 20 74 65 73 74 2d 6e 61 6d 65 73 29 29 29 0a 09   test-names)))..
2240: 20 20 28 72 75 6e 2d 77 61 69 74 69 6e 67 2d 74    (run-waiting-t
2250: 65 73 74 73 20 64 62 29 0a 09 20 20 28 73 71 6c  ests db)..  (sql
2260: 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64  ite3:finalize! d
2270: 62 29 0a 09 20 20 28 73 65 74 21 20 2a 64 69 64  b)..  (set! *did
2280: 73 6f 6d 65 74 68 69 6e 67 2a 20 23 74 29 29 29  something* #t)))
2290: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  )..;;===========
22a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
22b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
22c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
22d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 72  ===========.;; r
22e0: 75 6e 20 6f 6e 65 20 74 65 73 74 0a 3b 3b 3d 3d  un one test.;;==
22f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2300: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2310: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2320: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2330: 3d 3d 3d 3d 0a 0a 3b 3b 20 31 2e 20 66 69 6e 64  ====..;; 1. find
2340: 20 74 68 65 20 63 6f 6e 66 69 67 20 66 69 6c 65   the config file
2350: 0a 3b 3b 20 32 2e 20 63 68 61 6e 67 65 20 74 6f  .;; 2. change to
2360: 20 74 68 65 20 74 65 73 74 20 64 69 72 65 63 74   the test direct
2370: 6f 72 79 0a 3b 3b 20 33 2e 20 75 70 64 61 74 65  ory.;; 3. update
2380: 20 74 68 65 20 64 62 20 77 69 74 68 20 22 74 65   the db with "te
2390: 73 74 20 73 74 61 72 74 65 64 22 20 73 74 61 74  st started" stat
23a0: 75 73 2c 20 73 65 74 20 72 75 6e 6e 69 6e 67 20  us, set running 
23b0: 68 6f 73 74 0a 3b 3b 20 34 2e 20 70 72 6f 63 65  host.;; 4. proce
23c0: 73 73 20 6c 61 75 6e 63 68 20 74 68 65 20 74 65  ss launch the te
23d0: 73 74 0a 3b 3b 20 20 20 20 2d 20 6d 6f 6e 69 74  st.;;    - monit
23e0: 6f 72 20 74 68 65 20 70 72 6f 63 65 73 73 2c 20  or the process, 
23f0: 75 70 64 61 74 65 20 73 74 61 74 73 20 69 6e 20  update stats in 
2400: 74 68 65 20 64 62 20 65 76 65 72 79 20 32 5e 6e  the db every 2^n
2410: 20 6d 69 6e 75 74 65 73 0a 3b 3b 20 35 2e 20 61   minutes.;; 5. a
2420: 73 20 74 68 65 20 74 65 73 74 20 70 72 6f 63 65  s the test proce
2430: 65 64 73 20 69 6e 74 65 72 6e 61 6c 6c 79 20 69  eds internally i
2440: 74 20 63 61 6c 6c 73 20 6d 65 67 61 74 65 73 74  t calls megatest
2450: 20 61 73 20 65 61 63 68 20 73 74 65 70 20 69 73   as each step is
2460: 0a 3b 3b 20 20 20 20 73 74 61 72 74 65 64 20 61  .;;    started a
2470: 6e 64 20 63 6f 6d 70 6c 65 74 65 64 0a 3b 3b 20  nd completed.;; 
2480: 20 20 20 2d 20 73 74 65 70 20 73 74 61 72 74 65     - step starte
2490: 64 2c 20 74 69 6d 65 73 74 61 6d 70 0a 3b 3b 20  d, timestamp.;; 
24a0: 20 20 20 2d 20 73 74 65 70 20 63 6f 6d 70 6c 65     - step comple
24b0: 74 65 64 2c 20 65 78 69 74 20 73 74 61 74 75 73  ted, exit status
24c0: 2c 20 74 69 6d 65 73 74 61 6d 70 0a 3b 3b 20 36  , timestamp.;; 6
24d0: 2e 20 74 65 73 74 20 70 68 6f 6e 65 20 68 6f 6d  . test phone hom
24e0: 65 0a 3b 3b 20 20 20 20 2d 20 69 66 20 74 65 73  e.;;    - if tes
24f0: 74 20 72 75 6e 20 74 69 6d 65 20 3e 20 61 6c 6c  t run time > all
2500: 6f 77 65 64 20 72 75 6e 20 74 69 6d 65 20 74 68  owed run time th
2510: 65 6e 20 6b 69 6c 6c 20 6a 6f 62 0a 3b 3b 20 20  en kill job.;;  
2520: 20 20 2d 20 69 66 20 63 61 6e 6e 6f 74 20 61 63    - if cannot ac
2530: 63 65 73 73 20 64 62 20 3e 20 61 6c 6c 6f 77 65  cess db > allowe
2540: 64 20 64 69 73 63 6f 6e 6e 65 63 74 20 74 69 6d  d disconnect tim
2550: 65 20 74 68 65 6e 20 6b 69 6c 6c 20 6a 6f 62 0a  e then kill job.
2560: 0a 28 64 65 66 69 6e 65 20 28 72 75 6e 74 65 73  .(define (runtes
2570: 74 73 29 0a 20 20 28 69 66 20 28 6e 6f 74 20 28  ts).  (if (not (
2580: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 72  args:get-arg ":r
2590: 75 6e 6e 61 6d 65 22 29 29 0a 20 20 20 20 20 20  unname")).      
25a0: 28 62 65 67 69 6e 0a 09 28 70 72 69 6e 74 20 22  (begin..(print "
25b0: 45 52 52 4f 52 3a 20 4d 69 73 73 69 6e 67 20 72  ERROR: Missing r
25c0: 65 71 75 69 72 65 64 20 70 61 72 61 6d 65 74 65  equired paramete
25d0: 72 20 66 6f 72 20 2d 72 75 6e 74 65 73 74 73 2c  r for -runtests,
25e0: 20 79 6f 75 20 6d 75 73 74 20 73 70 65 63 69 66   you must specif
25f0: 79 20 74 68 65 20 72 75 6e 20 6e 61 6d 65 20 77  y the run name w
2600: 69 74 68 20 3a 72 75 6e 6e 61 6d 65 20 72 75 6e  ith :runname run
2610: 6e 61 6d 65 22 29 0a 09 28 65 78 69 74 20 32 29  name")..(exit 2)
2620: 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 64  ).      (let ((d
2630: 62 20 23 66 29 29 0a 09 28 69 66 20 28 6e 6f 74  b #f))..(if (not
2640: 20 28 73 65 74 75 70 2d 66 6f 72 2d 72 75 6e 29   (setup-for-run)
2650: 29 0a 09 20 20 20 20 28 62 65 67 69 6e 20 0a 09  )..    (begin ..
2660: 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 46 61        (print "Fa
2670: 69 6c 65 64 20 74 6f 20 73 65 74 75 70 2c 20 65  iled to setup, e
2680: 78 69 74 69 6e 67 22 29 0a 09 20 20 20 20 20 20  xiting")..      
2690: 28 65 78 69 74 20 31 29 29 29 0a 09 28 73 65 74  (exit 1)))..(set
26a0: 21 20 64 62 20 28 6f 70 65 6e 2d 64 62 29 29 0a  ! db (open-db)).
26b0: 09 28 69 66 20 28 6e 6f 74 20 28 63 61 72 20 2a  .(if (not (car *
26c0: 63 6f 6e 66 69 67 69 6e 66 6f 2a 29 29 0a 09 20  configinfo*)).. 
26d0: 20 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20 20     (begin..     
26e0: 20 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20   (print "ERROR: 
26f0: 41 74 74 65 6d 70 74 65 64 20 74 6f 20 72 75 6e  Attempted to run
2700: 20 61 20 74 65 73 74 20 62 75 74 20 72 75 6e 20   a test but run 
2710: 61 72 65 61 20 63 6f 6e 66 69 67 20 66 69 6c 65  area config file
2720: 20 6e 6f 74 20 66 6f 75 6e 64 22 29 0a 09 20 20   not found")..  
2730: 20 20 20 20 28 65 78 69 74 20 31 29 29 0a 09 20      (exit 1)).. 
2740: 20 20 20 3b 3b 20 70 75 74 20 74 65 73 74 20 70     ;; put test p
2750: 61 72 61 6d 65 74 65 72 73 20 69 6e 74 6f 20 63  arameters into c
2760: 6f 6e 76 65 6e 69 65 6e 74 20 76 61 72 69 61 62  onvenient variab
2770: 6c 65 73 0a 09 20 20 20 20 28 6c 65 74 2a 20 28  les..    (let* (
2780: 28 74 65 73 74 2d 6e 61 6d 65 73 20 20 20 28 73  (test-names   (s
2790: 74 72 69 6e 67 2d 73 70 6c 69 74 20 28 61 72 67  tring-split (arg
27a0: 73 3a 67 65 74 2d 61 72 67 20 22 2d 72 75 6e 74  s:get-arg "-runt
27b0: 65 73 74 73 22 29 20 22 2c 22 29 29 29 0a 09 20  ests") ","))).. 
27c0: 20 20 20 20 20 28 72 75 6e 2d 74 65 73 74 73 20       (run-tests 
27d0: 64 62 20 74 65 73 74 2d 6e 61 6d 65 73 29 29 29  db test-names)))
27e0: 0a 09 3b 3b 20 72 75 6e 2d 77 61 69 74 69 6e 67  ..;; run-waiting
27f0: 2d 74 65 73 74 73 20 64 62 29 0a 09 28 73 71 6c  -tests db)..(sql
2800: 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64  ite3:finalize! d
2810: 62 29 0a 09 28 72 75 6e 2d 77 61 69 74 69 6e 67  b)..(run-waiting
2820: 2d 74 65 73 74 73 20 23 66 29 0a 09 28 73 65 74  -tests #f)..(set
2830: 21 20 2a 64 69 64 73 6f 6d 65 74 68 69 6e 67 2a  ! *didsomething*
2840: 20 23 74 29 29 29 29 0a 09 20 20 0a 28 69 66 20   #t))))..  .(if 
2850: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d  (args:get-arg "-
2860: 72 75 6e 74 65 73 74 73 22 29 0a 20 20 20 20 28  runtests").    (
2870: 72 75 6e 74 65 73 74 73 29 29 0a 0a 3b 3b 3d 3d  runtests))..;;==
2880: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2890: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
28a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
28b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
28c0: 3d 3d 3d 3d 0a 3b 3b 20 65 78 65 63 75 74 65 20  ====.;; execute 
28d0: 74 68 65 20 74 65 73 74 0a 3b 3b 20 20 20 20 2d  the test.;;    -
28e0: 20 67 65 74 73 20 63 61 6c 6c 65 64 20 6f 6e 20   gets called on 
28f0: 72 65 6d 6f 74 65 20 68 6f 73 74 0a 3b 3b 20 20  remote host.;;  
2900: 20 20 2d 20 72 65 63 65 69 76 65 73 20 69 6e 66    - receives inf
2910: 6f 20 66 72 6f 6d 20 74 68 65 20 2d 65 78 65 63  o from the -exec
2920: 75 74 65 20 70 61 72 61 6d 0a 3b 3b 20 20 20 20  ute param.;;    
2930: 2d 20 70 61 73 73 65 73 20 69 6e 66 6f 20 74 6f  - passes info to
2940: 20 73 74 65 70 73 20 76 69 61 20 4d 54 5f 43 4d   steps via MT_CM
2950: 44 49 4e 46 4f 20 65 6e 76 20 76 61 72 20 28 66  DINFO env var (f
2960: 75 74 75 72 65 20 69 73 20 74 6f 20 75 73 65 20  uture is to use 
2970: 61 20 64 6f 74 20 66 69 6c 65 29 0a 3b 3b 20 20  a dot file).;;  
2980: 20 20 2d 20 67 61 74 68 65 72 73 20 68 6f 73 74    - gathers host
2990: 20 69 6e 66 6f 20 61 6e 64 20 0a 3b 3b 3d 3d 3d   info and .;;===
29a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
29b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
29c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
29d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
29e0: 3d 3d 3d 0a 0a 28 69 66 20 28 61 72 67 73 3a 67  ===..(if (args:g
29f0: 65 74 2d 61 72 67 20 22 2d 65 78 65 63 75 74 65  et-arg "-execute
2a00: 22 29 0a 20 20 20 20 28 6c 65 74 2a 20 28 28 63  ").    (let* ((c
2a10: 6d 64 69 6e 66 6f 20 20 20 28 72 65 61 64 20 28  mdinfo   (read (
2a20: 6f 70 65 6e 2d 69 6e 70 75 74 2d 73 74 72 69 6e  open-input-strin
2a30: 67 20 28 62 61 73 65 36 34 3a 62 61 73 65 36 34  g (base64:base64
2a40: 2d 64 65 63 6f 64 65 20 28 61 72 67 73 3a 67 65  -decode (args:ge
2a50: 74 2d 61 72 67 20 22 2d 65 78 65 63 75 74 65 22  t-arg "-execute"
2a60: 29 29 29 29 29 29 0a 20 20 20 20 20 20 28 73 65  )))))).      (se
2a70: 74 65 6e 76 20 22 4d 54 5f 43 4d 44 49 4e 46 4f  tenv "MT_CMDINFO
2a80: 22 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20  " (args:get-arg 
2a90: 22 2d 65 78 65 63 75 74 65 22 29 29 0a 20 20 20  "-execute")).   
2aa0: 20 20 20 28 69 66 20 28 6c 69 73 74 3f 20 63 6d     (if (list? cm
2ab0: 64 69 6e 66 6f 29 20 3b 3b 20 28 28 74 65 73 74  dinfo) ;; ((test
2ac0: 70 61 74 68 20 2f 74 6d 70 2f 6d 72 77 65 6c 6c  path /tmp/mrwell
2ad0: 61 6e 2f 6a 61 7a 7a 6d 69 6e 64 2f 73 72 63 2f  an/jazzmind/src/
2ae0: 65 78 61 6d 70 6c 65 5f 72 75 6e 2f 74 65 73 74  example_run/test
2af0: 73 2f 73 71 6c 69 74 65 73 70 65 65 64 29 20 28  s/sqlitespeed) (
2b00: 74 65 73 74 2d 6e 61 6d 65 20 73 71 6c 69 74 65  test-name sqlite
2b10: 73 70 65 65 64 29 20 28 72 75 6e 73 63 72 69 70  speed) (runscrip
2b20: 74 20 72 75 6e 73 63 72 69 70 74 2e 72 62 29 20  t runscript.rb) 
2b30: 28 64 62 2d 68 6f 73 74 20 6c 6f 63 61 6c 68 6f  (db-host localho
2b40: 73 74 29 20 28 72 75 6e 2d 69 64 20 31 29 29 0a  st) (run-id 1)).
2b50: 09 20 20 28 6c 65 74 2a 20 28 28 74 65 73 74 70  .  (let* ((testp
2b60: 61 74 68 20 20 28 61 73 73 6f 63 2f 64 65 66 61  ath  (assoc/defa
2b70: 75 6c 74 20 27 74 65 73 74 70 61 74 68 20 20 63  ult 'testpath  c
2b80: 6d 64 69 6e 66 6f 29 29 0a 09 09 20 28 77 6f 72  mdinfo))... (wor
2b90: 6b 2d 61 72 65 61 20 28 61 73 73 6f 63 2f 64 65  k-area (assoc/de
2ba0: 66 61 75 6c 74 20 27 77 6f 72 6b 2d 61 72 65 61  fault 'work-area
2bb0: 20 63 6d 64 69 6e 66 6f 29 29 0a 09 09 20 28 74   cmdinfo))... (t
2bc0: 65 73 74 2d 6e 61 6d 65 20 28 61 73 73 6f 63 2f  est-name (assoc/
2bd0: 64 65 66 61 75 6c 74 20 27 74 65 73 74 2d 6e 61  default 'test-na
2be0: 6d 65 20 63 6d 64 69 6e 66 6f 29 29 0a 09 09 20  me cmdinfo))... 
2bf0: 28 72 75 6e 73 63 72 69 70 74 20 28 61 73 73 6f  (runscript (asso
2c00: 63 2f 64 65 66 61 75 6c 74 20 27 72 75 6e 73 63  c/default 'runsc
2c10: 72 69 70 74 20 63 6d 64 69 6e 66 6f 29 29 0a 09  ript cmdinfo))..
2c20: 09 20 28 64 62 2d 68 6f 73 74 20 20 20 28 61 73  . (db-host   (as
2c30: 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 64 62 2d  soc/default 'db-
2c40: 68 6f 73 74 20 20 20 63 6d 64 69 6e 66 6f 29 29  host   cmdinfo))
2c50: 0a 09 09 20 28 72 75 6e 2d 69 64 20 20 20 20 28  ... (run-id    (
2c60: 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 72  assoc/default 'r
2c70: 75 6e 2d 69 64 20 20 20 20 63 6d 64 69 6e 66 6f  un-id    cmdinfo
2c80: 29 29 0a 09 09 20 28 69 74 65 6d 64 61 74 20 20  ))... (itemdat  
2c90: 20 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20   (assoc/default 
2ca0: 27 69 74 65 6d 64 61 74 20 20 20 63 6d 64 69 6e  'itemdat   cmdin
2cb0: 66 6f 29 29 0a 09 09 20 28 72 75 6e 6e 61 6d 65  fo))... (runname
2cc0: 20 20 20 28 61 73 73 6f 63 2f 64 65 66 61 75 6c     (assoc/defaul
2cd0: 74 20 27 72 75 6e 6e 61 6d 65 20 20 20 63 6d 64  t 'runname   cmd
2ce0: 69 6e 66 6f 29 29 0a 09 09 20 28 6d 74 2d 62 69  info))... (mt-bi
2cf0: 6e 64 69 72 2d 70 61 74 68 20 28 61 73 73 6f 63  ndir-path (assoc
2d00: 2f 64 65 66 61 75 6c 74 20 27 6d 74 2d 62 69 6e  /default 'mt-bin
2d10: 64 69 72 2d 70 61 74 68 20 63 6d 64 69 6e 66 6f  dir-path cmdinfo
2d20: 29 29 0a 09 09 20 28 66 75 6c 6c 72 75 6e 73 63  ))... (fullrunsc
2d30: 72 69 70 74 20 28 63 6f 6e 63 20 74 65 73 74 70  ript (conc testp
2d40: 61 74 68 20 22 2f 22 20 72 75 6e 73 63 72 69 70  ath "/" runscrip
2d50: 74 29 29 0a 09 09 20 28 64 62 20 20 20 20 20 20  t))... (db      
2d60: 20 20 23 66 29 29 0a 09 20 20 20 20 28 70 72 69    #f))..    (pri
2d70: 6e 74 20 22 45 78 65 63 74 75 69 6e 67 20 22 20  nt "Exectuing " 
2d80: 74 65 73 74 2d 6e 61 6d 65 20 22 20 6f 6e 20 22  test-name " on "
2d90: 20 28 67 65 74 2d 68 6f 73 74 2d 6e 61 6d 65 29   (get-host-name)
2da0: 29 0a 09 20 20 20 20 28 63 68 61 6e 67 65 2d 64  )..    (change-d
2db0: 69 72 65 63 74 6f 72 79 20 74 65 73 74 70 61 74  irectory testpat
2dc0: 68 29 0a 09 20 20 20 20 28 73 65 74 65 6e 76 20  h)..    (setenv 
2dd0: 22 4d 54 5f 54 45 53 54 5f 52 55 4e 5f 44 49 52  "MT_TEST_RUN_DIR
2de0: 22 20 77 6f 72 6b 2d 61 72 65 61 29 0a 09 20 20  " work-area)..  
2df0: 20 20 28 73 65 74 65 6e 76 20 22 4d 54 5f 54 45    (setenv "MT_TE
2e00: 53 54 5f 4e 41 4d 45 22 20 74 65 73 74 2d 6e 61  ST_NAME" test-na
2e10: 6d 65 29 0a 09 20 20 20 20 28 73 65 74 65 6e 76  me)..    (setenv
2e20: 20 22 4d 54 5f 49 54 45 4d 5f 49 4e 46 4f 22 20   "MT_ITEM_INFO" 
2e30: 28 63 6f 6e 63 20 69 74 65 6d 64 61 74 29 29 0a  (conc itemdat)).
2e40: 09 20 20 20 20 28 73 65 74 65 6e 76 20 22 4d 54  .    (setenv "MT
2e50: 5f 52 55 4e 4e 41 4d 45 22 20 20 20 72 75 6e 6e  _RUNNAME"   runn
2e60: 61 6d 65 29 0a 09 20 20 20 20 28 73 65 74 65 6e  ame)..    (seten
2e70: 76 20 22 50 41 54 48 22 20 28 63 6f 6e 63 20 28  v "PATH" (conc (
2e80: 67 65 74 65 6e 76 20 22 50 41 54 48 22 29 20 22  getenv "PATH") "
2e90: 3a 22 20 6d 74 2d 62 69 6e 64 69 72 2d 70 61 74  :" mt-bindir-pat
2ea0: 68 29 29 0a 09 20 20 20 20 28 69 66 20 28 6e 6f  h))..    (if (no
2eb0: 74 20 28 73 65 74 75 70 2d 66 6f 72 2d 72 75 6e  t (setup-for-run
2ec0: 29 29 0a 09 09 28 62 65 67 69 6e 0a 09 09 20 20  ))...(begin...  
2ed0: 28 70 72 69 6e 74 20 22 46 61 69 6c 65 64 20 74  (print "Failed t
2ee0: 6f 20 73 65 74 75 70 2c 20 65 78 69 74 69 6e 67  o setup, exiting
2ef0: 22 29 20 0a 09 09 20 20 28 65 78 69 74 20 31 29  ") ...  (exit 1)
2f00: 29 29 0a 09 20 20 20 20 3b 3b 20 6e 6f 77 20 63  ))..    ;; now c
2f10: 61 6e 20 66 69 6e 64 20 6f 75 72 20 64 62 0a 09  an find our db..
2f20: 20 20 20 20 28 73 65 74 21 20 64 62 20 28 6f 70      (set! db (op
2f30: 65 6e 2d 64 62 29 29 0a 09 20 20 20 20 28 63 68  en-db))..    (ch
2f40: 61 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20 77  ange-directory w
2f50: 6f 72 6b 2d 61 72 65 61 29 20 0a 09 20 20 20 20  ork-area) ..    
2f60: 28 6c 65 74 20 28 28 72 75 6e 63 6f 6e 66 69 67  (let ((runconfig
2f70: 66 20 28 63 6f 6e 63 20 20 2a 74 6f 70 70 61 74  f (conc  *toppat
2f80: 68 2a 20 22 2f 72 75 6e 63 6f 6e 66 69 67 73 2e  h* "/runconfigs.
2f90: 63 6f 6e 66 69 67 22 29 29 29 0a 09 20 20 20 20  config")))..    
2fa0: 20 20 28 69 66 20 28 66 69 6c 65 2d 65 78 69 73    (if (file-exis
2fb0: 74 73 3f 20 72 75 6e 63 6f 6e 66 69 67 66 29 0a  ts? runconfigf).
2fc0: 09 09 20 20 28 73 65 74 75 70 2d 65 6e 76 2d 64  ..  (setup-env-d
2fd0: 65 66 61 75 6c 74 73 20 64 62 20 72 75 6e 63 6f  efaults db runco
2fe0: 6e 66 69 67 66 20 72 75 6e 2d 69 64 29 0a 09 09  nfigf run-id)...
2ff0: 20 20 28 70 72 69 6e 74 20 22 57 41 52 4e 49 4e    (print "WARNIN
3000: 47 3a 20 59 6f 75 20 64 6f 20 6e 6f 74 20 68 61  G: You do not ha
3010: 76 65 20 61 20 72 75 6e 20 63 6f 6e 66 69 67 20  ve a run config 
3020: 66 69 6c 65 3a 20 22 20 72 75 6e 63 6f 6e 66 69  file: " runconfi
3030: 67 66 29 29 29 0a 09 20 20 20 20 28 73 65 74 2d  gf)))..    (set-
3040: 6d 65 67 61 74 65 73 74 2d 65 6e 76 2d 76 61 72  megatest-env-var
3050: 73 20 64 62 20 72 75 6e 2d 69 64 29 0a 09 20 20  s db run-id)..  
3060: 20 20 28 73 65 74 2d 69 74 65 6d 2d 65 6e 76 2d    (set-item-env-
3070: 76 61 72 73 20 69 74 65 6d 64 61 74 29 0a 20 20  vars itemdat).  
3080: 20 20 20 20 20 20 20 20 20 20 28 73 61 76 65 2d            (save-
3090: 65 6e 76 69 72 6f 6e 6d 65 6e 74 2d 61 73 2d 66  environment-as-f
30a0: 69 6c 65 73 20 22 6d 65 67 61 74 65 73 74 22 29  iles "megatest")
30b0: 0a 09 20 20 20 20 28 74 65 73 74 2d 73 65 74 2d  ..    (test-set-
30c0: 6d 65 74 61 2d 69 6e 66 6f 20 64 62 20 72 75 6e  meta-info db run
30d0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74  -id test-name it
30e0: 65 6d 64 61 74 29 0a 09 20 20 20 20 28 74 65 73  emdat)..    (tes
30f0: 74 2d 73 65 74 2d 73 74 61 74 75 73 21 20 64 62  t-set-status! db
3100: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d   run-id test-nam
3110: 65 20 22 52 45 4d 4f 54 45 48 4f 53 54 53 54 41  e "REMOTEHOSTSTA
3120: 52 54 22 20 22 6e 2f 61 22 20 69 74 65 6d 64 61  RT" "n/a" itemda
3130: 74 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20  t (args:get-arg 
3140: 22 2d 6d 22 29 29 0a 09 20 20 20 20 28 69 66 20  "-m"))..    (if 
3150: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d  (args:get-arg "-
3160: 78 74 65 72 6d 22 29 0a 09 09 28 73 65 74 21 20  xterm")...(set! 
3170: 66 75 6c 6c 72 75 6e 73 63 72 69 70 74 20 22 78  fullrunscript "x
3180: 74 65 72 6d 22 29 0a 20 20 20 20 20 20 20 20 20  term").         
3190: 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20         (if (not 
31a0: 28 66 69 6c 65 2d 65 78 65 63 75 74 65 2d 61 63  (file-execute-ac
31b0: 63 65 73 73 3f 20 66 75 6c 6c 72 75 6e 73 63 72  cess? fullrunscr
31c0: 69 70 74 29 29 0a 20 20 20 20 20 20 20 20 20 20  ipt)).          
31d0: 20 20 20 20 20 20 20 20 20 20 28 73 79 73 74 65            (syste
31e0: 6d 20 28 63 6f 6e 63 20 22 63 68 6d 6f 64 20 75  m (conc "chmod u
31f0: 67 2b 78 20 22 20 66 75 6c 6c 72 75 6e 73 63 72  g+x " fullrunscr
3200: 69 70 74 29 29 29 29 0a 09 20 20 20 20 3b 3b 20  ipt))))..    ;; 
3210: 57 65 20 61 72 65 20 61 62 6f 75 74 20 74 6f 20  We are about to 
3220: 61 63 74 75 61 6c 6c 79 20 6b 69 63 6b 20 6f 66  actually kick of
3230: 66 20 74 68 65 20 74 65 73 74 0a 09 20 20 20 20  f the test..    
3240: 3b 3b 20 73 6f 20 74 68 69 73 20 69 73 20 61 20  ;; so this is a 
3250: 67 6f 6f 64 20 70 6c 61 63 65 20 74 6f 20 72 65  good place to re
3260: 6d 6f 76 65 20 74 68 65 20 72 65 63 6f 72 64 73  move the records
3270: 20 66 6f 72 20 0a 09 20 20 20 20 3b 3b 20 61 6e   for ..    ;; an
3280: 79 20 70 72 65 76 69 6f 75 73 20 72 75 6e 73 0a  y previous runs.
3290: 09 20 20 20 20 3b 3b 20 28 64 62 3a 74 65 73 74  .    ;; (db:test
32a0: 2d 72 65 6d 6f 76 65 2d 73 74 65 70 73 20 64 62  -remove-steps db
32b0: 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65   run-id testname
32c0: 20 69 74 65 6d 64 61 74 29 0a 09 20 20 20 20 0a   itemdat)..    .
32d0: 09 20 20 20 20 3b 3b 20 66 72 6f 6d 20 68 65 72  .    ;; from her
32e0: 65 20 6f 6e 20 6f 75 74 20 77 65 20 77 69 6c 6c  e on out we will
32f0: 20 6f 70 65 6e 20 61 6e 64 20 63 6c 6f 73 65 20   open and close 
3300: 74 68 65 20 64 62 0a 09 20 20 20 20 3b 3b 20 6f  the db..    ;; o
3310: 6e 20 65 76 65 72 79 20 61 63 63 65 73 73 20 74  n every access t
3320: 6f 20 72 65 64 75 63 65 20 74 68 65 20 70 72 6f  o reduce the pro
3330: 62 61 62 6c 69 74 69 79 20 6f 66 20 0a 09 20 20  bablitiy of ..  
3340: 20 20 3b 3b 20 63 6f 6e 74 65 6e 74 69 6f 6e 20    ;; contention 
3350: 6f 72 20 73 74 75 63 6b 20 61 63 63 65 73 73 20  or stuck access 
3360: 6f 6e 20 6e 66 73 2e 0a 09 20 20 20 20 28 73 71  on nfs...    (sq
3370: 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20  lite3:finalize! 
3380: 64 62 29 0a 0a 09 20 20 20 20 28 6c 65 74 2a 20  db)...    (let* 
3390: 28 28 6d 20 20 20 20 20 20 20 20 20 20 20 20 28  ((m            (
33a0: 6d 61 6b 65 2d 6d 75 74 65 78 29 29 0a 09 09 20  make-mutex))... 
33b0: 20 20 28 6b 69 6c 6c 2d 6a 6f 62 3f 20 20 20 20    (kill-job?    
33c0: 23 66 29 0a 09 09 20 20 20 28 65 78 69 74 2d 69  #f)...   (exit-i
33d0: 6e 66 6f 20 20 20 20 28 6d 61 6b 65 2d 76 65 63  nfo    (make-vec
33e0: 74 6f 72 20 33 29 29 0a 09 09 20 20 20 28 72 75  tor 3))...   (ru
33f0: 6e 69 74 20 20 20 20 20 20 20 20 28 6c 61 6d 62  nit        (lamb
3400: 64 61 20 28 29 0a 09 09 09 09 20 20 20 28 6c 65  da ().....   (le
3410: 74 2d 76 61 6c 75 65 73 0a 09 09 09 09 20 20 20  t-values.....   
3420: 20 28 28 28 70 69 64 20 65 78 69 74 2d 73 74 61   (((pid exit-sta
3430: 74 75 73 20 65 78 69 74 2d 63 6f 64 65 29 0a 09  tus exit-code)..
3440: 09 09 09 20 20 20 20 20 20 28 72 75 6e 2d 6e 2d  ...      (run-n-
3450: 77 61 69 74 20 66 75 6c 6c 72 75 6e 73 63 72 69  wait fullrunscri
3460: 70 74 29 29 29 0a 09 09 09 09 20 20 20 20 28 6d  pt))).....    (m
3470: 75 74 65 78 2d 6c 6f 63 6b 21 20 6d 29 0a 09 09  utex-lock! m)...
3480: 09 09 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65  ..    (vector-se
3490: 74 21 20 65 78 69 74 2d 69 6e 66 6f 20 30 20 70  t! exit-info 0 p
34a0: 69 64 29 0a 09 09 09 09 20 20 20 20 28 76 65 63  id).....    (vec
34b0: 74 6f 72 2d 73 65 74 21 20 65 78 69 74 2d 69 6e  tor-set! exit-in
34c0: 66 6f 20 31 20 65 78 69 74 2d 73 74 61 74 75 73  fo 1 exit-status
34d0: 29 0a 09 09 09 09 20 20 20 20 28 76 65 63 74 6f  ).....    (vecto
34e0: 72 2d 73 65 74 21 20 65 78 69 74 2d 69 6e 66 6f  r-set! exit-info
34f0: 20 32 20 65 78 69 74 2d 63 6f 64 65 29 0a 09 09   2 exit-code)...
3500: 09 09 20 20 20 20 28 6d 75 74 65 78 2d 75 6e 6c  ..    (mutex-unl
3510: 6f 63 6b 21 20 6d 29 29 29 29 0a 09 09 20 20 20  ock! m))))...   
3520: 28 6d 6f 6e 69 74 6f 72 6a 6f 62 20 20 20 28 6c  (monitorjob   (l
3530: 61 6d 62 64 61 20 28 29 0a 09 09 09 09 20 20 20  ambda ().....   
3540: 28 6c 65 74 2a 20 28 28 73 74 61 72 74 2d 73 65  (let* ((start-se
3550: 63 6f 6e 64 73 20 28 63 75 72 72 65 6e 74 2d 73  conds (current-s
3560: 65 63 6f 6e 64 73 29 29 0a 09 09 09 09 09 20 20  econds))......  
3570: 28 63 61 6c 63 2d 6d 69 6e 75 74 65 73 20 20 28  (calc-minutes  (
3580: 6c 61 6d 62 64 61 20 28 29 0a 09 09 09 09 09 09  lambda ().......
3590: 09 20 20 20 28 69 6e 65 78 61 63 74 2d 3e 65 78  .   (inexact->ex
35a0: 61 63 74 20 0a 09 09 09 09 09 09 09 20 20 20 20  act ........    
35b0: 28 72 6f 75 6e 64 20 0a 09 09 09 09 09 09 09 20  (round ........ 
35c0: 20 20 20 20 28 2d 20 0a 09 09 09 09 09 09 09 20      (- ........ 
35d0: 20 20 20 20 20 28 63 75 72 72 65 6e 74 2d 73 65       (current-se
35e0: 63 6f 6e 64 73 29 20 0a 09 09 09 09 09 09 09 20  conds) ........ 
35f0: 20 20 20 20 20 73 74 61 72 74 2d 73 65 63 6f 6e       start-secon
3600: 64 73 29 29 29 29 29 29 0a 09 09 09 09 20 20 20  ds)))))).....   
3610: 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 6d 69    (let loop ((mi
3620: 6e 75 74 65 73 20 20 20 28 63 61 6c 63 2d 6d 69  nutes   (calc-mi
3630: 6e 75 74 65 73 29 29 29 0a 09 09 09 09 20 20 20  nutes))).....   
3640: 20 20 20 20 28 6c 65 74 20 28 28 64 62 20 20 20      (let ((db   
3650: 20 28 6f 70 65 6e 2d 64 62 29 29 29 0a 09 09 09   (open-db)))....
3660: 09 09 20 28 73 65 74 21 20 6b 69 6c 6c 2d 6a 6f  .. (set! kill-jo
3670: 62 3f 20 28 74 65 73 74 2d 67 65 74 2d 6b 69 6c  b? (test-get-kil
3680: 6c 2d 72 65 71 75 65 73 74 20 64 62 20 72 75 6e  l-request db run
3690: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74  -id test-name it
36a0: 65 6d 64 61 74 29 29 0a 09 09 09 09 09 20 28 74  emdat))...... (t
36b0: 65 73 74 2d 75 70 64 61 74 65 2d 6d 65 74 61 2d  est-update-meta-
36c0: 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 74  info db run-id t
36d0: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61 74  est-name itemdat
36e0: 20 6d 69 6e 75 74 65 73 29 0a 09 09 09 09 09 20   minutes)...... 
36f0: 28 69 66 20 6b 69 6c 6c 2d 6a 6f 62 3f 20 28 70  (if kill-job? (p
3700: 72 6f 63 65 73 73 2d 73 69 67 6e 61 6c 20 28 76  rocess-signal (v
3710: 65 63 74 6f 72 2d 72 65 66 20 65 78 69 74 2d 69  ector-ref exit-i
3720: 6e 66 6f 20 30 29 20 73 69 67 6e 61 6c 2f 74 65  nfo 0) signal/te
3730: 72 6d 29 29 0a 09 09 09 09 09 20 28 73 71 6c 69  rm))...... (sqli
3740: 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64 62  te3:finalize! db
3750: 29 0a 09 09 09 09 09 20 28 74 68 72 65 61 64 2d  )...... (thread-
3760: 73 6c 65 65 70 21 20 28 2b 20 38 20 28 72 61 6e  sleep! (+ 8 (ran
3770: 64 6f 6d 20 34 29 29 29 20 3b 3b 20 61 64 64 20  dom 4))) ;; add 
3780: 73 6f 6d 65 20 6a 69 74 74 65 72 20 74 6f 20 74  some jitter to t
3790: 68 65 20 63 61 6c 6c 20 68 6f 6d 65 20 74 69 6d  he call home tim
37a0: 65 20 74 6f 20 73 70 72 65 61 64 20 6f 75 74 20  e to spread out 
37b0: 74 68 65 20 64 62 20 61 63 63 65 73 73 65 73 0a  the db accesses.
37c0: 09 09 09 09 09 20 28 6c 6f 6f 70 20 28 63 61 6c  ..... (loop (cal
37d0: 63 2d 6d 69 6e 75 74 65 73 29 29 29 29 29 29 29  c-minutes)))))))
37e0: 0a 09 09 20 20 20 28 74 68 31 20 20 20 20 20 20  ...   (th1      
37f0: 20 20 20 20 28 6d 61 6b 65 2d 74 68 72 65 61 64      (make-thread
3800: 20 6d 6f 6e 69 74 6f 72 6a 6f 62 29 29 0a 09 09   monitorjob))...
3810: 20 20 20 28 74 68 32 20 20 20 20 20 20 20 20 20     (th2         
3820: 20 28 6d 61 6b 65 2d 74 68 72 65 61 64 20 72 75   (make-thread ru
3830: 6e 69 74 29 29 29 0a 09 20 20 20 20 20 20 28 74  nit)))..      (t
3840: 68 72 65 61 64 2d 73 74 61 72 74 21 20 74 68 31  hread-start! th1
3850: 29 0a 09 20 20 20 20 20 20 28 74 68 72 65 61 64  )..      (thread
3860: 2d 73 74 61 72 74 21 20 74 68 32 29 0a 09 20 20  -start! th2)..  
3870: 20 20 20 20 28 74 68 72 65 61 64 2d 6a 6f 69 6e      (thread-join
3880: 21 20 74 68 32 29 0a 09 20 20 20 20 20 20 28 6d  ! th2)..      (m
3890: 75 74 65 78 2d 6c 6f 63 6b 21 20 6d 29 0a 09 20  utex-lock! m).. 
38a0: 20 20 20 20 20 28 73 65 74 21 20 64 62 20 28 6f       (set! db (o
38b0: 70 65 6e 2d 64 62 29 29 0a 09 20 20 20 20 20 20  pen-db))..      
38c0: 28 6c 65 74 2a 20 28 28 74 65 73 74 69 6e 66 6f  (let* ((testinfo
38d0: 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e   (db:get-test-in
38e0: 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73  fo db run-id tes
38f0: 74 2d 6e 61 6d 65 20 28 69 74 65 6d 2d 6c 69 73  t-name (item-lis
3900: 74 2d 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29  t->path itemdat)
3910: 29 29 29 0a 09 09 28 69 66 20 28 6e 6f 74 20 28  )))...(if (not (
3920: 65 71 75 61 6c 3f 20 28 64 62 3a 74 65 73 74 2d  equal? (db:test-
3930: 67 65 74 2d 73 74 61 74 65 20 74 65 73 74 69 6e  get-state testin
3940: 66 6f 29 20 22 43 4f 4d 50 4c 45 54 45 44 22 29  fo) "COMPLETED")
3950: 29 0a 09 09 20 20 20 20 28 62 65 67 69 6e 0a 09  )...    (begin..
3960: 09 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 54  .      (print "T
3970: 65 73 74 20 4e 4f 54 20 6c 6f 67 67 65 64 20 61  est NOT logged a
3980: 73 20 43 4f 4d 50 4c 45 54 45 44 2c 20 28 73 74  s COMPLETED, (st
3990: 61 74 65 3d 22 20 28 64 62 3a 74 65 73 74 2d 67  ate=" (db:test-g
39a0: 65 74 2d 73 74 61 74 65 20 74 65 73 74 69 6e 66  et-state testinf
39b0: 6f 29 20 22 29 2c 20 75 70 64 61 74 69 6e 67 20  o) "), updating 
39c0: 72 65 73 75 6c 74 22 29 0a 09 09 20 20 20 20 20  result")...     
39d0: 20 28 74 65 73 74 2d 73 65 74 2d 73 74 61 74 75   (test-set-statu
39e0: 73 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73  s! db run-id tes
39f0: 74 2d 6e 61 6d 65 0a 09 09 09 09 09 28 69 66 20  t-name......(if 
3a00: 6b 69 6c 6c 2d 6a 6f 62 3f 20 22 4b 49 4c 4c 45  kill-job? "KILLE
3a10: 44 22 20 22 43 4f 4d 50 4c 45 54 45 44 22 29 0a  D" "COMPLETED").
3a20: 09 09 09 09 09 28 69 66 20 28 76 65 63 74 6f 72  .....(if (vector
3a30: 2d 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 31  -ref exit-info 1
3a40: 29 20 3b 3b 20 6c 6f 6f 6b 20 61 74 20 74 68 65  ) ;; look at the
3a50: 20 65 78 69 74 2d 73 74 61 74 75 73 0a 09 09 09   exit-status....
3a60: 09 09 20 20 20 20 28 69 66 20 28 65 71 3f 20 28  ..    (if (eq? (
3a70: 76 65 63 74 6f 72 2d 72 65 66 20 65 78 69 74 2d  vector-ref exit-
3a80: 69 6e 66 6f 20 32 29 20 30 29 0a 09 09 09 09 09  info 2) 0)......
3a90: 09 22 50 41 53 53 22 0a 09 09 09 09 09 09 22 46  ."PASS"......."F
3aa0: 41 49 4c 22 29 0a 09 09 09 09 09 20 20 20 20 22  AIL")......    "
3ab0: 46 41 49 4c 22 29 20 69 74 65 6d 64 61 74 20 28  FAIL") itemdat (
3ac0: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 6d  args:get-arg "-m
3ad0: 22 29 29 29 29 29 0a 09 20 20 20 20 20 20 28 6d  ")))))..      (m
3ae0: 75 74 65 78 2d 75 6e 6c 6f 63 6b 21 20 6d 29 0a  utex-unlock! m).
3af0: 09 20 20 20 20 20 20 3b 3b 20 28 65 78 65 63 2d  .      ;; (exec-
3b00: 72 65 73 75 6c 74 73 20 28 63 6d 64 2d 72 75 6e  results (cmd-run
3b10: 2d 3e 6c 69 73 74 20 66 75 6c 6c 72 75 6e 73 63  ->list fullrunsc
3b20: 72 69 70 74 29 29 20 3b 3b 20 20 28 6c 69 73 74  ript)) ;;  (list
3b30: 20 22 3e 22 20 28 63 6f 6e 63 20 74 65 73 74 2d   ">" (conc test-
3b40: 6e 61 6d 65 20 22 2d 72 75 6e 2e 6c 6f 67 22 29  name "-run.log")
3b50: 29 29 29 0a 09 20 20 20 20 20 20 3b 3b 20 28 73  )))..      ;; (s
3b60: 75 63 63 65 73 73 20 20 20 20 20 20 65 78 65 63  uccess      exec
3b70: 2d 72 65 73 75 6c 74 73 29 29 20 3b 3b 20 28 65  -results)) ;; (e
3b80: 71 3f 20 28 63 61 64 72 20 65 78 65 63 2d 72 65  q? (cadr exec-re
3b90: 73 75 6c 74 73 29 20 30 29 29 29 0a 09 20 20 20  sults) 0)))..   
3ba0: 20 20 20 28 70 72 69 6e 74 20 22 4f 75 74 70 75     (print "Outpu
3bb0: 74 20 66 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 22  t from running "
3bc0: 20 66 75 6c 6c 72 75 6e 73 63 72 69 70 74 20 22   fullrunscript "
3bd0: 2c 20 70 69 64 20 22 20 28 76 65 63 74 6f 72 2d  , pid " (vector-
3be0: 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 30 29  ref exit-info 0)
3bf0: 20 22 20 69 6e 20 77 6f 72 6b 20 61 72 65 61 20   " in work area 
3c00: 22 20 0a 09 09 20 20 20 20 20 77 6f 72 6b 2d 61  " ...     work-a
3c10: 72 65 61 20 22 3a 5c 6e 3d 3d 3d 3d 5c 6e 20 65  rea ":\n====\n e
3c20: 78 69 74 20 63 6f 64 65 20 22 20 28 76 65 63 74  xit code " (vect
3c30: 6f 72 2d 72 65 66 20 65 78 69 74 2d 69 6e 66 6f  or-ref exit-info
3c40: 20 32 29 20 22 5c 6e 22 20 22 3d 3d 3d 3d 5c 6e   2) "\n" "====\n
3c50: 22 29 0a 09 20 20 20 20 20 20 28 73 71 6c 69 74  ")..      (sqlit
3c60: 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64 62 29  e3:finalize! db)
3c70: 0a 09 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74  ..      (if (not
3c80: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 65 78 69   (vector-ref exi
3c90: 74 2d 69 6e 66 6f 20 31 29 29 0a 09 09 20 20 28  t-info 1))...  (
3ca0: 65 78 69 74 20 34 29 29 29 29 29 0a 20 20 20 20  exit 4))))).    
3cb0: 20 20 28 73 65 74 21 20 2a 64 69 64 73 6f 6d 65    (set! *didsome
3cc0: 74 68 69 6e 67 2a 20 23 74 29 29 29 0a 0a 28 69  thing* #t)))..(i
3cd0: 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20  f (args:get-arg 
3ce0: 22 2d 73 74 65 70 22 29 0a 20 20 20 20 28 69 66  "-step").    (if
3cf0: 20 28 6e 6f 74 20 28 67 65 74 65 6e 76 20 22 4d   (not (getenv "M
3d00: 54 5f 43 4d 44 49 4e 46 4f 22 29 29 0a 09 28 62  T_CMDINFO"))..(b
3d10: 65 67 69 6e 0a 09 20 20 28 70 72 69 6e 74 20 22  egin..  (print "
3d20: 45 52 52 4f 52 3a 20 4d 54 5f 43 4d 44 49 4e 46  ERROR: MT_CMDINF
3d30: 4f 20 65 6e 76 20 76 61 72 20 6e 6f 74 20 73 65  O env var not se
3d40: 74 2c 20 2d 73 74 65 70 20 6d 75 73 74 20 62 65  t, -step must be
3d50: 20 63 61 6c 6c 65 64 20 2a 69 6e 73 69 64 65 2a   called *inside*
3d60: 20 61 20 6d 65 67 61 74 65 73 74 20 69 6e 76 6f   a megatest invo
3d70: 6b 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 21  ked environment!
3d80: 22 29 0a 09 20 20 28 65 78 69 74 20 35 29 29 0a  ")..  (exit 5)).
3d90: 09 28 6c 65 74 2a 20 28 28 73 74 65 70 20 20 20  .(let* ((step   
3da0: 20 20 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67     (args:get-arg
3db0: 20 22 2d 73 74 65 70 22 29 29 0a 09 20 20 20 20   "-step"))..    
3dc0: 20 20 20 28 63 6d 64 69 6e 66 6f 20 20 20 28 72     (cmdinfo   (r
3dd0: 65 61 64 20 28 6f 70 65 6e 2d 69 6e 70 75 74 2d  ead (open-input-
3de0: 73 74 72 69 6e 67 20 28 62 61 73 65 36 34 3a 62  string (base64:b
3df0: 61 73 65 36 34 2d 64 65 63 6f 64 65 20 28 67 65  ase64-decode (ge
3e00: 74 65 6e 76 20 22 4d 54 5f 43 4d 44 49 4e 46 4f  tenv "MT_CMDINFO
3e10: 22 29 29 29 29 29 0a 09 20 20 20 20 20 20 20 28  ")))))..       (
3e20: 74 65 73 74 70 61 74 68 20 20 28 61 73 73 6f 63  testpath  (assoc
3e30: 2f 64 65 66 61 75 6c 74 20 27 74 65 73 74 70 61  /default 'testpa
3e40: 74 68 20 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20  th  cmdinfo)).. 
3e50: 20 20 20 20 20 20 28 74 65 73 74 2d 6e 61 6d 65        (test-name
3e60: 20 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20   (assoc/default 
3e70: 27 74 65 73 74 2d 6e 61 6d 65 20 63 6d 64 69 6e  'test-name cmdin
3e80: 66 6f 29 29 0a 09 20 20 20 20 20 20 20 28 72 75  fo))..       (ru
3e90: 6e 73 63 72 69 70 74 20 28 61 73 73 6f 63 2f 64  nscript (assoc/d
3ea0: 65 66 61 75 6c 74 20 27 72 75 6e 73 63 72 69 70  efault 'runscrip
3eb0: 74 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20 20  t cmdinfo))..   
3ec0: 20 20 20 20 28 64 62 2d 68 6f 73 74 20 20 20 28      (db-host   (
3ed0: 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 64  assoc/default 'd
3ee0: 62 2d 68 6f 73 74 20 20 20 63 6d 64 69 6e 66 6f  b-host   cmdinfo
3ef0: 29 29 0a 09 20 20 20 20 20 20 20 28 72 75 6e 2d  ))..       (run-
3f00: 69 64 20 20 20 20 28 61 73 73 6f 63 2f 64 65 66  id    (assoc/def
3f10: 61 75 6c 74 20 27 72 75 6e 2d 69 64 20 20 20 20  ault 'run-id    
3f20: 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20 20 20 20  cmdinfo))..     
3f30: 20 20 28 69 74 65 6d 64 61 74 20 20 20 28 61 73    (itemdat   (as
3f40: 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 69 74 65  soc/default 'ite
3f50: 6d 64 61 74 20 20 20 63 6d 64 69 6e 66 6f 29 29  mdat   cmdinfo))
3f60: 0a 09 20 20 20 20 20 20 20 28 64 62 20 20 20 20  ..       (db    
3f70: 20 20 20 20 23 66 29 0a 09 20 20 20 20 20 20 20      #f)..       
3f80: 28 73 74 61 74 65 20 20 20 20 28 61 72 67 73 3a  (state    (args:
3f90: 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 65 22  get-arg ":state"
3fa0: 29 29 0a 09 20 20 20 20 20 20 20 28 73 74 61 74  ))..       (stat
3fb0: 75 73 20 20 20 28 61 72 67 73 3a 67 65 74 2d 61  us   (args:get-a
3fc0: 72 67 20 22 3a 73 74 61 74 75 73 22 29 29 29 0a  rg ":status"))).
3fd0: 09 20 20 28 63 68 61 6e 67 65 2d 64 69 72 65 63  .  (change-direc
3fe0: 74 6f 72 79 20 74 65 73 74 70 61 74 68 29 0a 09  tory testpath)..
3ff0: 20 20 28 69 66 20 28 6e 6f 74 20 28 73 65 74 75    (if (not (setu
4000: 70 2d 66 6f 72 2d 72 75 6e 29 29 0a 09 20 20 20  p-for-run))..   
4010: 20 20 20 28 62 65 67 69 6e 0a 09 09 28 70 72 69     (begin...(pri
4020: 6e 74 20 22 46 61 69 6c 65 64 20 74 6f 20 73 65  nt "Failed to se
4030: 74 75 70 2c 20 65 78 69 74 69 6e 67 22 29 0a 09  tup, exiting")..
4040: 09 28 65 78 69 74 20 31 29 29 29 0a 09 20 20 28  .(exit 1)))..  (
4050: 73 65 74 21 20 64 62 20 28 6f 70 65 6e 2d 64 62  set! db (open-db
4060: 29 29 0a 09 20 20 28 69 66 20 28 61 6e 64 20 73  ))..  (if (and s
4070: 74 61 74 65 20 73 74 61 74 75 73 29 0a 09 20 20  tate status)..  
4080: 20 20 20 20 28 74 65 73 74 73 74 65 70 2d 73 65      (teststep-se
4090: 74 2d 73 74 61 74 75 73 21 20 64 62 20 72 75 6e  t-status! db run
40a0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 73 74  -id test-name st
40b0: 65 70 20 73 74 61 74 65 20 73 74 61 74 75 73 20  ep state status 
40c0: 69 74 65 6d 64 61 74 20 28 61 72 67 73 3a 67 65  itemdat (args:ge
40d0: 74 2d 61 72 67 20 22 2d 6d 22 29 29 0a 09 20 20  t-arg "-m"))..  
40e0: 20 20 20 20 28 62 65 67 69 6e 0a 09 09 28 70 72      (begin...(pr
40f0: 69 6e 74 20 22 45 52 52 4f 52 3a 20 59 6f 75 20  int "ERROR: You 
4100: 6d 75 73 74 20 73 70 65 63 69 66 79 20 3a 73 74  must specify :st
4110: 61 74 65 20 61 6e 64 20 3a 73 74 61 74 75 73 20  ate and :status 
4120: 77 69 74 68 20 65 76 65 72 79 20 63 61 6c 6c 20  with every call 
4130: 74 6f 20 2d 73 74 65 70 22 29 0a 09 09 28 65 78  to -step")...(ex
4140: 69 74 20 36 29 29 29 0a 09 20 20 28 73 71 6c 69  it 6)))..  (sqli
4150: 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64 62  te3:finalize! db
4160: 29 0a 09 20 20 28 73 65 74 21 20 2a 64 69 64 73  )..  (set! *dids
4170: 6f 6d 65 74 68 69 6e 67 2a 20 23 74 29 29 29 29  omething* #t))))
4180: 0a 0a 28 69 66 20 28 6f 72 20 28 61 72 67 73 3a  ..(if (or (args:
4190: 67 65 74 2d 61 72 67 20 22 2d 73 65 74 6c 6f 67  get-arg "-setlog
41a0: 22 29 20 20 20 20 20 20 20 3b 3b 20 73 69 6e 63  ")       ;; sinc
41b0: 65 20 73 65 74 74 69 6e 67 20 75 70 20 69 73 20  e setting up is 
41c0: 73 6f 20 63 6f 73 74 6c 79 20 6c 65 74 73 20 70  so costly lets p
41d0: 69 67 67 79 62 61 63 6b 20 6f 6e 20 2d 74 65 73  iggyback on -tes
41e0: 74 2d 73 74 61 74 75 73 0a 09 28 61 72 67 73 3a  t-status..(args:
41f0: 67 65 74 2d 61 72 67 20 22 2d 74 65 73 74 2d 73  get-arg "-test-s
4200: 74 61 74 75 73 22 29 0a 09 28 61 72 67 73 3a 67  tatus")..(args:g
4210: 65 74 2d 61 72 67 20 22 2d 72 75 6e 73 74 65 70  et-arg "-runstep
4220: 22 29 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74  ")).    (if (not
4230: 20 28 67 65 74 65 6e 76 20 22 4d 54 5f 43 4d 44   (getenv "MT_CMD
4240: 49 4e 46 4f 22 29 29 0a 09 28 62 65 67 69 6e 0a  INFO"))..(begin.
4250: 09 20 20 28 70 72 69 6e 74 20 22 45 52 52 4f 52  .  (print "ERROR
4260: 3a 20 4d 54 5f 43 4d 44 49 4e 46 4f 20 65 6e 76  : MT_CMDINFO env
4270: 20 76 61 72 20 6e 6f 74 20 73 65 74 2c 20 63 6f   var not set, co
4280: 6d 6d 61 6e 64 73 20 2d 74 65 73 74 2d 73 74 61  mmands -test-sta
4290: 74 75 73 2c 20 2d 72 75 6e 73 74 65 70 20 61 6e  tus, -runstep an
42a0: 64 20 2d 73 65 74 6c 6f 67 20 6d 75 73 74 20 62  d -setlog must b
42b0: 65 20 63 61 6c 6c 65 64 20 2a 69 6e 73 69 64 65  e called *inside
42c0: 2a 20 61 20 6d 65 67 61 74 65 73 74 20 65 6e 76  * a megatest env
42d0: 69 72 6f 6e 6d 65 6e 74 21 22 29 0a 09 20 20 28  ironment!")..  (
42e0: 65 78 69 74 20 35 29 29 0a 09 28 6c 65 74 2a 20  exit 5))..(let* 
42f0: 28 28 73 74 61 72 74 69 6e 67 64 69 72 20 28 63  ((startingdir (c
4300: 75 72 72 65 6e 74 2d 64 69 72 65 63 74 6f 72 79  urrent-directory
4310: 29 29 0a 09 20 20 20 20 20 20 20 28 63 6d 64 69  ))..       (cmdi
4320: 6e 66 6f 20 20 20 28 72 65 61 64 20 28 6f 70 65  nfo   (read (ope
4330: 6e 2d 69 6e 70 75 74 2d 73 74 72 69 6e 67 20 28  n-input-string (
4340: 62 61 73 65 36 34 3a 62 61 73 65 36 34 2d 64 65  base64:base64-de
4350: 63 6f 64 65 20 28 67 65 74 65 6e 76 20 22 4d 54  code (getenv "MT
4360: 5f 43 4d 44 49 4e 46 4f 22 29 29 29 29 29 0a 09  _CMDINFO")))))..
4370: 20 20 20 20 20 20 20 28 74 65 73 74 70 61 74 68         (testpath
4380: 20 20 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74    (assoc/default
4390: 20 27 74 65 73 74 70 61 74 68 20 20 63 6d 64 69   'testpath  cmdi
43a0: 6e 66 6f 29 29 0a 09 20 20 20 20 20 20 20 28 74  nfo))..       (t
43b0: 65 73 74 2d 6e 61 6d 65 20 28 61 73 73 6f 63 2f  est-name (assoc/
43c0: 64 65 66 61 75 6c 74 20 27 74 65 73 74 2d 6e 61  default 'test-na
43d0: 6d 65 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20  me cmdinfo))..  
43e0: 20 20 20 20 20 28 72 75 6e 73 63 72 69 70 74 20       (runscript 
43f0: 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27  (assoc/default '
4400: 72 75 6e 73 63 72 69 70 74 20 63 6d 64 69 6e 66  runscript cmdinf
4410: 6f 29 29 0a 09 20 20 20 20 20 20 20 28 64 62 2d  o))..       (db-
4420: 68 6f 73 74 20 20 20 28 61 73 73 6f 63 2f 64 65  host   (assoc/de
4430: 66 61 75 6c 74 20 27 64 62 2d 68 6f 73 74 20 20  fault 'db-host  
4440: 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20 20 20   cmdinfo))..    
4450: 20 20 20 28 72 75 6e 2d 69 64 20 20 20 20 28 61     (run-id    (a
4460: 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 72 75  ssoc/default 'ru
4470: 6e 2d 69 64 20 20 20 20 63 6d 64 69 6e 66 6f 29  n-id    cmdinfo)
4480: 29 0a 09 20 20 20 20 20 20 20 28 69 74 65 6d 64  )..       (itemd
4490: 61 74 20 20 20 28 61 73 73 6f 63 2f 64 65 66 61  at   (assoc/defa
44a0: 75 6c 74 20 27 69 74 65 6d 64 61 74 20 20 20 63  ult 'itemdat   c
44b0: 6d 64 69 6e 66 6f 29 29 0a 09 20 20 20 20 20 20  mdinfo))..      
44c0: 20 28 64 62 20 20 20 20 20 20 20 20 23 66 29 0a   (db        #f).
44d0: 09 20 20 20 20 20 20 20 28 73 74 61 74 65 20 20  .       (state  
44e0: 20 20 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67     (args:get-arg
44f0: 20 22 3a 73 74 61 74 65 22 29 29 0a 09 20 20 20   ":state"))..   
4500: 20 20 20 20 28 73 74 61 74 75 73 20 20 20 20 28      (status    (
4510: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73  args:get-arg ":s
4520: 74 61 74 75 73 22 29 29 29 0a 09 20 20 28 63 68  tatus")))..  (ch
4530: 61 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20 74  ange-directory t
4540: 65 73 74 70 61 74 68 29 0a 09 20 20 28 69 66 20  estpath)..  (if 
4550: 28 6e 6f 74 20 28 73 65 74 75 70 2d 66 6f 72 2d  (not (setup-for-
4560: 72 75 6e 29 29 0a 09 20 20 20 20 20 20 28 62 65  run))..      (be
4570: 67 69 6e 0a 09 09 28 70 72 69 6e 74 20 22 46 61  gin...(print "Fa
4580: 69 6c 65 64 20 74 6f 20 73 65 74 75 70 2c 20 65  iled to setup, e
4590: 78 69 74 69 6e 67 22 29 0a 09 09 28 65 78 69 74  xiting")...(exit
45a0: 20 31 29 29 29 0a 09 20 20 28 73 65 74 21 20 64   1)))..  (set! d
45b0: 62 20 28 6f 70 65 6e 2d 64 62 29 29 0a 09 20 20  b (open-db))..  
45c0: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72  (if (args:get-ar
45d0: 67 20 22 2d 73 65 74 6c 6f 67 22 29 0a 09 20 20  g "-setlog")..  
45e0: 20 20 20 20 28 74 65 73 74 2d 73 65 74 2d 6c 6f      (test-set-lo
45f0: 67 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73  g! db run-id tes
4600: 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61 74 20 28  t-name itemdat (
4610: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 73  args:get-arg "-s
4620: 65 74 6c 6f 67 22 29 29 29 0a 09 20 20 28 69 66  etlog")))..  (if
4630: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22   (args:get-arg "
4640: 2d 74 65 73 74 2d 73 74 61 74 75 73 22 29 0a 09  -test-status")..
4650: 20 20 20 20 20 20 28 74 65 73 74 2d 73 65 74 2d        (test-set-
4660: 73 74 61 74 75 73 21 20 64 62 20 72 75 6e 2d 69  status! db run-i
4670: 64 20 74 65 73 74 2d 6e 61 6d 65 20 73 74 61 74  d test-name stat
4680: 65 20 73 74 61 74 75 73 20 69 74 65 6d 64 61 74  e status itemdat
4690: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22   (args:get-arg "
46a0: 2d 6d 22 29 29 0a 09 20 20 20 20 20 20 28 69 66  -m"))..      (if
46b0: 20 28 61 6e 64 20 73 74 61 74 65 20 73 74 61 74   (and state stat
46c0: 75 73 29 0a 09 09 20 20 28 69 66 20 28 6e 6f 74  us)...  (if (not
46d0: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22   (args:get-arg "
46e0: 2d 73 65 74 6c 6f 67 22 29 29 0a 09 09 20 20 20  -setlog"))...   
46f0: 20 20 20 28 62 65 67 69 6e 0a 09 09 09 28 70 72     (begin....(pr
4700: 69 6e 74 20 22 45 52 52 4f 52 3a 20 59 6f 75 20  int "ERROR: You 
4710: 6d 75 73 74 20 73 70 65 63 69 66 79 20 3a 73 74  must specify :st
4720: 61 74 65 20 61 6e 64 20 3a 73 74 61 74 75 73 20  ate and :status 
4730: 77 69 74 68 20 65 76 65 72 79 20 63 61 6c 6c 20  with every call 
4740: 74 6f 20 2d 74 65 73 74 2d 73 74 61 74 75 73 5c  to -test-status\
4750: 6e 22 20 68 65 6c 70 29 0a 09 09 09 28 73 71 6c  n" help)....(sql
4760: 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64  ite3:finalize! d
4770: 62 29 0a 09 09 09 28 65 78 69 74 20 36 29 29 29  b)....(exit 6)))
4780: 29 29 0a 09 20 20 28 69 66 20 28 61 72 67 73 3a  ))..  (if (args:
4790: 67 65 74 2d 61 72 67 20 22 2d 72 75 6e 73 74 65  get-arg "-runste
47a0: 70 22 29 0a 09 20 20 20 20 20 20 28 69 66 20 28  p")..      (if (
47b0: 6e 75 6c 6c 3f 20 72 65 6d 61 72 67 73 29 0a 09  null? remargs)..
47c0: 09 20 20 28 62 65 67 69 6e 0a 09 09 20 20 20 20  .  (begin...    
47d0: 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 6e  (print "ERROR: n
47e0: 6f 74 68 69 6e 67 20 73 70 65 63 69 66 69 65 64  othing specified
47f0: 20 74 6f 20 72 75 6e 21 22 29 0a 09 09 20 20 20   to run!")...   
4800: 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69   (sqlite3:finali
4810: 7a 65 21 20 64 62 29 0a 09 09 20 20 20 20 28 65  ze! db)...    (e
4820: 78 69 74 20 36 29 29 0a 09 09 20 20 28 6c 65 74  xit 6))...  (let
4830: 2a 20 28 28 73 74 65 70 6e 61 6d 65 20 20 20 28  * ((stepname   (
4840: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 72  args:get-arg "-r
4850: 75 6e 73 74 65 70 22 29 29 0a 09 09 09 20 28 6c  unstep")).... (l
4860: 6f 67 70 72 6f 66 69 6c 65 20 28 61 72 67 73 3a  ogprofile (args:
4870: 67 65 74 2d 61 72 67 20 22 2d 6c 6f 67 70 72 6f  get-arg "-logpro
4880: 22 29 29 0a 09 09 09 20 28 6c 6f 67 66 69 6c 65  ")).... (logfile
4890: 20 20 20 20 28 63 6f 6e 63 20 73 74 65 70 6e 61      (conc stepna
48a0: 6d 65 20 22 2e 6c 6f 67 22 29 29 0a 09 09 09 20  me ".log")).... 
48b0: 28 63 6d 64 20 20 20 20 20 20 20 20 28 69 66 20  (cmd        (if 
48c0: 28 6e 75 6c 6c 3f 20 72 65 6d 61 72 67 73 29 20  (null? remargs) 
48d0: 23 66 20 28 63 61 72 20 72 65 6d 61 72 67 73 29  #f (car remargs)
48e0: 29 29 0a 09 09 09 20 28 70 61 72 61 6d 73 20 20  )).... (params  
48f0: 20 20 20 28 69 66 20 63 6d 64 20 28 63 64 72 20     (if cmd (cdr 
4900: 72 65 6d 61 72 67 73 29 20 27 28 29 29 29 0a 09  remargs) '()))..
4910: 09 09 20 28 65 78 69 74 73 74 61 74 20 20 20 23  .. (exitstat   #
4920: 66 29 0a 09 09 09 20 28 73 68 65 6c 6c 20 20 20  f).... (shell   
4930: 20 20 20 28 6c 61 73 74 20 28 73 74 72 69 6e 67     (last (string
4940: 2d 73 70 6c 69 74 20 28 67 65 74 2d 65 6e 76 69  -split (get-envi
4950: 72 6f 6e 6d 65 6e 74 2d 76 61 72 69 61 62 6c 65  ronment-variable
4960: 20 22 53 48 45 4c 4c 22 29 20 22 2f 22 29 29 29   "SHELL") "/")))
4970: 0a 09 09 09 20 28 72 65 64 69 72 20 20 20 20 20  .... (redir     
4980: 20 28 63 61 73 65 20 28 73 74 72 69 6e 67 2d 3e   (case (string->
4990: 73 79 6d 62 6f 6c 20 73 68 65 6c 6c 29 0a 09 09  symbol shell)...
49a0: 09 09 20 20 20 20 20 20 20 28 28 74 63 73 68 20  ..       ((tcsh 
49b0: 63 73 68 20 6b 73 68 29 20 20 20 20 22 3e 26 22  csh ksh)    ">&"
49c0: 29 0a 09 09 09 09 20 20 20 20 20 20 20 28 28 7a  ).....       ((z
49d0: 73 68 20 62 61 73 68 20 73 68 20 61 73 68 29 20  sh bash sh ash) 
49e0: 22 32 3e 26 31 20 3e 22 29 29 29 0a 09 09 09 20  "2>&1 >"))).... 
49f0: 28 66 75 6c 6c 63 6d 64 20 20 20 20 28 63 6f 6e  (fullcmd    (con
4a00: 63 20 22 28 22 20 28 73 74 72 69 6e 67 2d 69 6e  c "(" (string-in
4a10: 74 65 72 73 70 65 72 73 65 20 0a 09 09 09 09 09  tersperse ......
4a20: 09 28 63 6f 6e 73 20 63 6d 64 20 70 61 72 61 6d  .(cons cmd param
4a30: 73 29 20 22 20 22 29 0a 09 09 09 09 09 20 20 20  s) " ")......   
4a40: 22 29 20 22 20 72 65 64 69 72 20 22 20 22 20 6c  ") " redir " " l
4a50: 6f 67 66 69 6c 65 29 29 29 0a 09 09 20 20 20 20  ogfile)))...    
4a60: 3b 3b 20 6d 61 72 6b 20 74 68 65 20 73 74 61 72  ;; mark the star
4a70: 74 20 6f 66 20 74 68 65 20 74 65 73 74 0a 09 09  t of the test...
4a80: 20 20 20 20 28 74 65 73 74 2d 73 65 74 2d 73 74      (test-set-st
4a90: 61 74 75 73 21 20 64 62 20 72 75 6e 2d 69 64 20  atus! db run-id 
4aa0: 74 65 73 74 2d 6e 61 6d 65 20 22 73 74 61 72 74  test-name "start
4ab0: 22 20 22 6e 2f 61 22 20 69 74 65 6d 64 61 74 20  " "n/a" itemdat 
4ac0: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d  (args:get-arg "-
4ad0: 6d 22 29 29 0a 09 09 20 20 20 20 3b 3b 20 63 6c  m"))...    ;; cl
4ae0: 6f 73 65 20 74 68 65 20 64 62 0a 09 09 20 20 20  ose the db...   
4af0: 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69   (sqlite3:finali
4b00: 7a 65 21 20 64 62 29 0a 09 09 20 20 20 20 3b 3b  ze! db)...    ;;
4b10: 20 72 75 6e 20 74 68 65 20 74 65 73 74 20 73 74   run the test st
4b20: 65 70 0a 09 09 20 20 20 20 28 70 72 69 6e 74 20  ep...    (print 
4b30: 22 49 4e 46 4f 3a 20 52 75 6e 6e 69 6e 67 20 5c  "INFO: Running \
4b40: 22 22 20 66 75 6c 6c 63 6d 64 20 22 5c 22 22 29  "" fullcmd "\"")
4b50: 0a 09 09 20 20 20 20 28 63 68 61 6e 67 65 2d 64  ...    (change-d
4b60: 69 72 65 63 74 6f 72 79 20 73 74 61 72 74 69 6e  irectory startin
4b70: 67 64 69 72 29 0a 09 09 20 20 20 20 28 73 65 74  gdir)...    (set
4b80: 21 20 65 78 69 74 73 74 61 74 20 28 73 79 73 74  ! exitstat (syst
4b90: 65 6d 20 66 75 6c 6c 63 6d 64 29 29 20 3b 3b 20  em fullcmd)) ;; 
4ba0: 63 6d 64 20 70 61 72 61 6d 73 29 29 0a 09 09 20  cmd params))... 
4bb0: 20 20 20 28 73 65 74 21 20 2a 67 6c 6f 62 61 6c     (set! *global
4bc0: 65 78 69 74 73 74 61 74 75 73 2a 20 65 78 69 74  exitstatus* exit
4bd0: 73 74 61 74 29 0a 09 09 20 20 20 20 28 63 68 61  stat)...    (cha
4be0: 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20 74 65  nge-directory te
4bf0: 73 74 70 61 74 68 29 0a 09 09 20 20 20 20 3b 3b  stpath)...    ;;
4c00: 20 72 65 2d 6f 70 65 6e 20 74 68 65 20 64 62 0a   re-open the db.
4c10: 09 09 20 20 20 20 28 73 65 74 21 20 64 62 20 28  ..    (set! db (
4c20: 6f 70 65 6e 2d 64 62 29 29 20 0a 09 09 20 20 20  open-db)) ...   
4c30: 20 3b 3b 20 72 75 6e 20 6c 6f 67 70 72 6f 20 69   ;; run logpro i
4c40: 66 20 61 70 70 6c 69 63 61 62 6c 65 20 3b 3b 20  f applicable ;; 
4c50: 28 70 72 6f 63 65 73 73 2d 72 75 6e 20 22 6c 73  (process-run "ls
4c60: 22 20 28 6c 69 73 74 20 22 2f 66 6f 6f 22 20 22  " (list "/foo" "
4c70: 32 3e 26 31 22 20 22 62 6c 61 68 2e 6c 6f 67 22  2>&1" "blah.log"
4c80: 29 29 0a 09 09 20 20 20 20 28 69 66 20 6c 6f 67  ))...    (if log
4c90: 70 72 6f 66 69 6c 65 0a 09 09 09 28 6c 65 74 2a  profile....(let*
4ca0: 20 28 28 68 74 6d 6c 6c 6f 67 66 69 6c 65 20 28   ((htmllogfile (
4cb0: 63 6f 6e 63 20 73 74 65 70 6e 61 6d 65 20 22 2e  conc stepname ".
4cc0: 68 74 6d 6c 22 29 29 0a 09 09 09 20 20 20 20 20  html"))....     
4cd0: 20 20 28 6f 6c 64 65 78 69 74 73 74 61 74 20 65    (oldexitstat e
4ce0: 78 69 74 73 74 61 74 29 0a 09 09 09 20 20 20 20  xitstat)....    
4cf0: 20 20 20 28 63 6d 64 20 20 20 20 20 20 20 20 20     (cmd         
4d00: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65  (string-interspe
4d10: 72 73 65 20 28 6c 69 73 74 20 22 6c 6f 67 70 72  rse (list "logpr
4d20: 6f 22 20 6c 6f 67 70 72 6f 66 69 6c 65 20 68 74  o" logprofile ht
4d30: 6d 6c 6c 6f 67 66 69 6c 65 20 22 3c 22 20 6c 6f  mllogfile "<" lo
4d40: 67 66 69 6c 65 20 22 3e 22 20 28 63 6f 6e 63 20  gfile ">" (conc 
4d50: 73 74 65 70 6e 61 6d 65 20 22 5f 6c 6f 67 70 72  stepname "_logpr
4d60: 6f 2e 6c 6f 67 22 29 29 20 22 20 22 29 29 29 0a  o.log")) " "))).
4d70: 09 09 09 20 20 28 70 72 69 6e 74 20 22 49 4e 46  ...  (print "INF
4d80: 4f 3a 20 72 75 6e 6e 69 6e 67 20 5c 22 22 20 63  O: running \"" c
4d90: 6d 64 20 22 5c 22 22 29 0a 09 09 09 20 20 28 63  md "\"")....  (c
4da0: 68 61 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20  hange-directory 
4db0: 73 74 61 72 74 69 6e 67 64 69 72 29 0a 09 09 09  startingdir)....
4dc0: 20 20 28 73 65 74 21 20 65 78 69 74 73 74 61 74    (set! exitstat
4dd0: 20 28 73 79 73 74 65 6d 20 63 6d 64 29 29 0a 09   (system cmd))..
4de0: 09 09 20 20 28 73 65 74 21 20 2a 67 6c 6f 62 61  ..  (set! *globa
4df0: 6c 65 78 69 74 73 74 61 74 75 73 2a 20 65 78 69  lexitstatus* exi
4e00: 74 73 74 61 74 29 20 3b 3b 20 6e 6f 20 6e 65 63  tstat) ;; no nec
4e10: 65 73 73 61 72 79 0a 09 09 09 20 20 28 63 68 61  essary....  (cha
4e20: 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20 74 65  nge-directory te
4e30: 73 74 70 61 74 68 29 0a 09 09 09 20 20 28 74 65  stpath)....  (te
4e40: 73 74 2d 73 65 74 2d 6c 6f 67 21 20 64 62 20 72  st-set-log! db r
4e50: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20  un-id test-name 
4e60: 69 74 65 6d 64 61 74 20 68 74 6d 6c 6c 6f 67 66  itemdat htmllogf
4e70: 69 6c 65 29 29 29 0a 09 09 20 20 20 20 28 74 65  ile)))...    (te
4e80: 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 75  ststep-set-statu
4e90: 73 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73  s! db run-id tes
4ea0: 74 2d 6e 61 6d 65 20 73 74 65 70 6e 61 6d 65 20  t-name stepname 
4eb0: 22 65 6e 64 22 20 65 78 69 74 73 74 61 74 20 69  "end" exitstat i
4ec0: 74 65 6d 64 61 74 20 28 61 72 67 73 3a 67 65 74  temdat (args:get
4ed0: 2d 61 72 67 20 22 2d 6d 22 29 29 0a 09 09 20 20  -arg "-m"))...  
4ee0: 20 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c    (sqlite3:final
4ef0: 69 7a 65 21 20 64 62 29 0a 09 09 20 20 20 20 28  ize! db)...    (
4f00: 69 66 20 28 6e 6f 74 20 28 65 71 3f 20 65 78 69  if (not (eq? exi
4f10: 74 73 74 61 74 20 30 29 29 0a 09 09 09 28 65 78  tstat 0))....(ex
4f20: 69 74 20 32 35 34 29 29 20 3b 3b 20 28 65 78 69  it 254)) ;; (exi
4f30: 74 20 65 78 69 74 73 74 61 74 29 20 64 6f 65 73  t exitstat) does
4f40: 6e 27 74 20 77 6f 72 6b 3f 21 3f 0a 09 09 20 20  n't work?!?...  
4f50: 3b 3b 20 6f 70 65 6e 20 74 68 65 20 64 62 0a 09  ;; open the db..
4f60: 09 20 20 3b 3b 20 6d 61 72 6b 20 74 68 65 20 65  .  ;; mark the e
4f70: 6e 64 20 6f 66 20 74 68 65 20 74 65 73 74 0a 09  nd of the test..
4f80: 09 20 20 29 29 29 0a 09 20 20 28 73 71 6c 69 74  .  )))..  (sqlit
4f90: 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64 62 29  e3:finalize! db)
4fa0: 0a 09 20 20 28 73 65 74 21 20 2a 64 69 64 73 6f  ..  (set! *didso
4fb0: 6d 65 74 68 69 6e 67 2a 20 23 74 29 29 29 29 0a  mething* #t)))).
4fc0: 0a 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61  .(if (args:get-a
4fd0: 72 67 20 22 2d 73 68 6f 77 6b 65 79 73 22 29 0a  rg "-showkeys").
4fe0: 20 20 20 20 28 6c 65 74 20 28 28 64 62 20 23 66      (let ((db #f
4ff0: 29 0a 09 20 20 28 6b 65 79 73 20 23 66 29 29 0a  )..  (keys #f)).
5000: 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28        (if (not (
5010: 73 65 74 75 70 2d 66 6f 72 2d 72 75 6e 29 29 0a  setup-for-run)).
5020: 09 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20 28  .  (begin..    (
5030: 70 72 69 6e 74 20 22 46 61 69 6c 65 64 20 74 6f  print "Failed to
5040: 20 73 65 74 75 70 2c 20 65 78 69 74 69 6e 67 22   setup, exiting"
5050: 29 0a 09 20 20 20 20 28 65 78 69 74 20 31 29 29  )..    (exit 1))
5060: 29 0a 20 20 20 20 20 20 28 73 65 74 21 20 64 62  ).      (set! db
5070: 20 28 6f 70 65 6e 2d 64 62 29 29 0a 20 20 20 20   (open-db)).    
5080: 20 20 28 73 65 74 21 20 6b 65 79 73 20 28 64 62    (set! keys (db
5090: 2d 67 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 20  -get-keys db)). 
50a0: 20 20 20 20 20 28 70 72 69 6e 74 20 22 4b 65 79       (print "Key
50b0: 73 3a 20 22 20 28 73 74 72 69 6e 67 2d 69 6e 74  s: " (string-int
50c0: 65 72 73 70 65 72 73 65 20 28 6d 61 70 20 6b 65  ersperse (map ke
50d0: 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20  y:get-fieldname 
50e0: 6b 65 79 73 29 20 22 2c 20 22 29 29 0a 20 20 20  keys) ", ")).   
50f0: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61     (sqlite3:fina
5100: 6c 69 7a 65 21 20 64 62 29 0a 20 20 20 20 20 20  lize! db).      
5110: 28 73 65 74 21 20 2a 64 69 64 73 6f 6d 65 74 68  (set! *didsometh
5120: 69 6e 67 2a 20 23 74 29 29 29 0a 0a 28 69 66 20  ing* #t)))..(if 
5130: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d  (args:get-arg "-
5140: 67 75 69 22 29 0a 20 20 20 20 28 62 65 67 69 6e  gui").    (begin
5150: 0a 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 4c  .      (print "L
5160: 6f 6f 6b 20 61 74 20 74 68 65 20 64 61 73 68 62  ook at the dashb
5170: 6f 61 72 64 20 66 6f 72 20 6e 6f 77 22 29 0a 20  oard for now"). 
5180: 20 20 20 20 20 3b 3b 20 28 6d 65 67 61 74 65 73       ;; (megates
5190: 74 2d 67 75 69 29 0a 20 20 20 20 20 20 28 73 65  t-gui).      (se
51a0: 74 21 20 2a 64 69 64 73 6f 6d 65 74 68 69 6e 67  t! *didsomething
51b0: 2a 20 23 74 29 29 29 0a 0a 28 69 66 20 28 6e 6f  * #t)))..(if (no
51c0: 74 20 2a 64 69 64 73 6f 6d 65 74 68 69 6e 67 2a  t *didsomething*
51d0: 29 0a 20 20 20 20 28 70 72 69 6e 74 20 68 65 6c  ).    (print hel
51e0: 70 29 29 0a 0a 28 69 66 20 28 6e 6f 74 20 28 65  p))..(if (not (e
51f0: 71 3f 20 2a 67 6c 6f 62 61 6c 65 78 69 74 73 74  q? *globalexitst
5200: 61 74 75 73 2a 20 30 29 29 0a 20 20 20 20 28 65  atus* 0)).    (e
5210: 78 69 74 20 2a 67 6c 6f 62 61 6c 65 78 69 74 73  xit *globalexits
5220: 74 61 74 75 73 2a 29 29 0a                       tatus*)).